在 linux 上安装 oracle 8i
(注:引用http://vip.6to23.com/hanson/htdocs/oracle.htm,在安装过程中作一些更正)
关于 oracle 安装的讨论已经有很多了,可是在实践中你还是总会遇到某些麻烦,因此我就留下我的两分钱吧。本文讨论的环境基于 redhat linux 9.0.93,
oracle 的版本号为 8.1.7.0.1。
下载软件
假设你已经有了一台跑着 redhat 的机器,并且它满足 oracle 8i 对硬件的相关要求,并且具有网络连接,下面就下载其他所需的软件。首先在 otn 下载 linux
81701.tar 和 glibc-2.1.3-stubs.tar.gz,另外还需要:
i386-glibc-2.1-linux.tar.gz(下载位置:http://ftp.valinux.com/pub/suppo … c-2.1-linux.tar.gz)
binutils-2.10.91.0.2-3.i386.rpm(下载位置:http://mirrors.usc.edu/pub/linux … s/i386/redhat/rpms/
binutils-2.10.91.0.2-3.i386.rpm)
(redhat 自带的是 binutils-2.13.90.0.18-9.i386.rpm,用于恢复,下载位置:http://mirrors.usc.edu/pub/linux … t/redhat/linux/9/en
/os/i386/redhat/rpms/compat-gcc-7.3-2.96.118.i386.rpm)
jdk118_v3-glibc-2.1.3.tar.bz2(下载位置:http://ftp.dk.xemacs.org/pub/lan … libc-2.1.3.tar.bz2)
因为 oracle 自带了 jre 1.1.8,所以不用单独安装,假设以上所述软件都放在 /tmp 目录。
(注:还需要从java官方网站下载jdk 1.4.2用以恢复,我安装的redhat9没有发现jdk 1.4.2,下载位置:http://java.sun
.com/j2se/1.4.2/download.html)
安装glibc、jdk、和 binutils
su
cd /
tar zxvf /tmp/i386-glibc-2.1-linux.tar.gz
cd /usr/bin
mkdir saved
mv gcc cc ld saved
ln -s /usr/i386-glibc-2.1-linux/bin/i386-glibc21-linux-gcc gcc
ln -s gcc cc
ln -s /usr/i386-glibc-2.1-linux/bin/i386-glibc21-linux-ld ld
(注:安装oracle过程中发现/usr/bin/ld变为非链接,需要重新设置,否则会出现连接出错!)
cd /usr/lib
mkdir saved
mv libc.so libdl.so libm.so libpthread.so saved
mv libc.a libdl.a libm.a libpthread.a saved
(注:没有安装过java的话就没有这个目录,需要先mkdir /usr/java)
cd /usr/java
tar jxvf /tmp/jdk118_v3-glibc-2.1.3.tar.bz2
ln -s /usr/java/jdk118_v3 /usr/local/java
(注:原来是ln -s jdk118_v3 /usr/local/java,后来发现链接不正确)
(注:安装前先转到软件放置目录cd /tmp)
rpm -uvh –force –nodeps binutils-2.10.91.0.2-3.i386.rpm
(注:执行这一命令后/usr/bin/ld变为非链接,需要重新设置,否则会出现连接出错!)
创建用户和组
groupadd oinstall
groupadd dba
groupadd oper(注:此组还象没有用到,可以去掉,下面的useradd也要相应的去掉)
useradd -d /oracle -g oinstall -g dba,oper oracle(注:此处为给oracle用户设定/oracle目录,默认是/home/oracle)
passwd oracle
chown -r oracle.dba /oracle
chmod 750 /oracle
准备安装
vi /oracle/.bash_profile(注:由于前面给oracle设置/oracle目录,默认是/home/oracle/.bash_profile)
修改为如下内容:
(注:内容开始,可以在非linux环境修改这个文件,不过该文件中换行只能是0a,要去掉所有的0d)
# .bash_profile
# get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# user specific environment and startup programs
unset username
umask 022
export editor=vi
export term=xterm
export tmpdir=/tmp
# setup installation environment
export oracle_sid=orcl
export oracle_base=/oracle
export oracle_home=$oracle_base/product/8.1.7
export ld_library_path=$oracle_home/lib:/usr/i386-glibc-2.1-linux/i386-glibc-linux/lib:/lib:/usr/lib:/lib:/usr/local/lib(注:恢复时这一行要删i
386-glibc-2.1的路径)
export shlib_path=$oracle_home/lib:/usr/lib:/lib:/usr/local/lib
export libpath=$oracle_home/lib:/usr/lib:/lib:/usr/local/lib
export tns_admin=$oracle_home/network/admin
export nls_lang=american_america.we8iso8859p1
export ora_nls33=$oracle_home/ocommon/nls/admin/data
export oracle_owner=oracle
export oracle_term=xterm
export gcc_exec_prefix=/usr/i386-glibc21-linux/lib/gcc-lib/
export ld_assume_kernel=2.4
export java_home=/usr/local/java
export classpath=$oracle_home/jdbc/lib/classes111.zip:$oracle_home/jre:$oracle_home/jlib:$oracle_home/rdbms/jlib:$oracle_home/network/jlib:.
(注:内容结束,注意export的内容在同一行上,classpath后面的classesxxx.zip建议自己去查一下,我这里xxx是111,路径用冒号分隔而不是分号)
su oracle
. .bash_profile
export lang=en
cd /tmp
tar xvf linux81701.tar
其中 export lang=en 是为了防止界面黑做一团。
(注:此时最好去检查一下/usr/bin/ld的链接是否正确:ls -l /usr/bin/ld,应该链接到/usr/i386-glibc-2.1-linux/bin/i386-glibc21-linux-ld才对,否则重
复前面的做法,先rm /usr/bin/ld,再ln。另外建议对前面设定的各个链接都检查一下:/usr/bin/gcc,/usr/bin/cc,/usr/local/java,深红色的表示链接不正确)
开始安装
./disk1/runinstaller
点击 next;在 unix group name 里输入 oinstall;出现一个提示框要求执行 orainstroot.sh,这时另外打开一个终端:
su
cd $oracle_home
./orainstroot.sh
回到 gui,按 retry;选择安装 enterprise edition;选择典型安装;选择使用一个已经存在的 repository;选择 jdk 的位置(注:应是/usr/local/java);问
是否要新建一个数据库,不用;继续,等待一段时间;出现一个提示框要求执行 root.sh;回到终端:
(注:建议选择自定义安装,这样可以添加支持的语言,比如简体中文等,连接过程如果出错的话请按后面的“处理错误”执行,我没有碰到错误)
vi root.sh
按下列要求修改:第98行,把 sed=/usr/local/bin/sed 改为 sed=/bin/sed;第102行,把 rmf=/bin/rm –f 改为 rmf=”/bin/rm -f”;第156行,把 ruid=`/usr
/bin/id|$awk -f\( {print $2}|$awk -f\) {print $1}` 改为 ruid=`/usr/bin/id|$awk -f\( {print $2}|$awk -f\) {print $1}`。
./root.sh
回一次车;回到 gui,按 ok。
处理错误
(注:出错的可能性是/usr/bin/ld的链接被更改,记住在安装binutils-2.10.91.0.2-3.i386.rpm之后要去更改)
出现一个提示框,说 error in invoking target relink of makefile /oracle/product/8.1.7/precomp/lib/ins_precomp.mk 或者 error in invoking target
relink of makefile /oracle/product/8.1.7/rdbms/lib/ins_rdbms.mk,回到终端:
exit
cd $oracle_home
tar zxvf /tmp/glibc-2.1.3-stubs.tar.gz
./setup_stubs.sh
链接工作完成后,回到 gui,按 retry;等待,直到安装完成;完成后自动启动的 net8 配置向导没有反应,kill 之。
恢复其他软件
su
rpm -e –nodeps bintutils-2.10.91.0.2-3
rpm -ivh /mnt/cdrom/redhat/rpms/binutils-2.13.90.0.18-9.i386.rpm(注:如果是下载的,位置可能不一样)
cd /usr/local
rm java
(注:补充开始)
安装java
1、#cp j2sdk-1_4_2_05-linux-i586-rpm.bin 到/usr/local
2、#chmod 755 j2sdk-1_4_2_05-linux-i586-rpm.bin
3、#./j2sdk-1_4_2_05-linux-i586-rpm.bin (解出j2sdk-1_4_2_05-linux-i586.rpm)
4、#rpm -ivh j2sdk-1_4_2_05-linux-i586.rpm
rpm安装很方便,不用保佑了。
(注:补充结束)
ln -s /usr/java/j2sdk1.4.2_05 java
(注:原来是j2sdk1.4.2_01,我现在从网下载到的是j2sdk1.4.2_05,建议安装完后自己去检查一下。我用的是“ln -s /usr/java/j2sdk1.4.2_05 /usr/local/
java”,担心又出来链接不对的情况)
cd /usr/bin
rm gcc cc ld
mv ./saved/* .
rmdir saved
cd /usr/lib
mv ./saved/* .
rmdir saved
然后把 oracle 用户环境变量 ld_library_path 中的 glibc 的部分删去。
创建数据库
exit
cd $oracle_home/bin
unset lang
unset nls_lang
./dbassist
选择创建数据库;定制;多用途;下一步;共享服务器模式;去掉所有选项(创建 jserver 的时间巨长);设置全局数据库名和 sid,假设全局数据库名为 testdb
,sid 为 orcl;更改字符集:字符集为 utf8、国家字符集为 zhs16gbk;六次下一步;完成。
配置 net8
./netca
使用 netca 是因为 netasst 总是没有反应,让我们鄙视它吧。选择监听程序配置;添加;监听程序名使用默认的 listener;三次下一步。
上面步骤即是对 $oracle_home/network/admin/listener.ora 的编辑:
# copyright (c) 1997 by the oracle corporation
#
listener =
(address_list=
(address=(protocol=tcp)(host=localhost)(port=1521))
(address=(protocol=ipc)(key=extproc)))
sid_list_listener=
(sid_list=
(sid_desc=
(global_dbname=testdb)
(sid_name=orcl)
(oracle_home=/oracle/product/8.1.7)
)
)
其中 global_dbname、sid_name、和 oracle_home 随实际情况不同而不同。
手工启动数据库和监听
vi /etc/oratab
把最后的 n 改成 y。
./dbstart
./lsnrctl start
设置服务
su
cd /etc/init.d
vi oracle
(注:内容开始,可以在非linux环境下生成然后复制过去,注意要去掉0d字符)
#!/bin/bash
#
# startup script for oracle and listener
#
# chkconfig: 35 99 1
# description: oracle 8.1.7.0.1
# setup environment for script execution.
. /oracle/.bash_profile(注:给oracle用户设置的目录有变时需要更改此处)
case “$1” in
start)
echo “starting oracle database(s) listed in /etc/oratab …”
sleep 2
su – oracle -c “$oracle_home/bin/dbstart”
echo “starting tns listener…”
sleep 2
su – oracle -c “$oracle_home/bin/lsnrctl start”
touch /var/lock/subsys/oracle
;;
stop)
echo “stopping tns listener…”
sleep 2
su – oracle -c “$oracle_home/bin/lsnrctl stop”
echo “stopping oracle databases(s) listed in /etc/oratab …”
sleep 2
su – oracle -c “$oracle_home/bin/dbshut”
rm -f /var/lock/subsys/oracle
;;
status)
ps -ax | grep -e ora_ -e tnslsnr
;;
*)
echo “usage: oracle {start|stop|status}”
exit 1
esac
exit 0
(注:内容结束)
chmod 700 /etc/init.d/oracle
/sbin/chkconfig –add oracle
使用启动脚本启动和关闭
/etc/init.d/oracle start
/etc/init.d/oracle stop
(注:到此安装配置完成,以后每次启动/关闭系统时oracle服务都会自动启动/停止)
(注:有些情况会提示权限不够,就改用root操作,至于哪一步该用oracle哪一步该用root,操作过程中看情况而定,建议优先使用oracle)
参考工具:winscp366setup.exe – setup for winscp 3.6.6 (scp/sftp client for windows),用于在windows下连接到linux并操作文件