Linux下Oracle 8.1.7的安装方式

关于本文
1、本文参考了网上各位的心得,在此表示感谢;
2、本人在RH7英文版+CII400+512M RAM、RH7.3英文版+P4 2.4G+1G RAM、RH9中文版+P4 2.4G+1G RAM下安装成功;
3、本文中提到的各位软件请各位自行下载。


一、安装glibc 2.1包
        RedHat7.0(以上)安装的是glibc2.2。Oracle 8I不能使用glibc 2.2进行编译,而需要glibc2.1的SDK。
1、以root帐号登录
2、隐藏/usr/bin 目录下的gcc,cc,ld,避免被Oracle installer使用
3、隐藏/usr/lib目录下的libc.so,libdl.so,libm.so和libpthread.so文件,避免被Oracle installer使用
命令见下
cd /
tar zxvf /install/glibc/i386-glibc-2.1-linux.tar.gz
cd /usr/bin
mkdir savedbyjohnny
cd /usr/bin
mv gcc cc ld savedbyjohnny
cd /usr/bin
ln -s /usr/i386-glibc-2.1-linux/bin/i386-glibc21-linux-gcc gcc
cd /usr/bin
ln -s gcc cc
cd /usr/bin
ln -s /usr/i386-glibc-2.1-linux/bin/i386-glibc21-linux-ld ld
cd /usr/lib
mkdir savedbyjohnny
cd /usr/lib
mv libc.so libdl.so libm.so libpthread.so savedbyjohnny
cd /usr/lib
mv libc.a libdl.a libm.a libpthread.a savedbyjohnny

二、创建dba组,oracle帐号
以root帐号登录,开启一个terminal窗口
1、创建dba组
groupadd -g 600 dba
2、创建oracle帐号
useradd -g dba -u 60001 oracle
passwd oracle (设置oralce帐号的密码)

三、设置oracle用户环境
用root身份修改/etc/profile最后加入如下环境变量的设置行:
(使用oracle帐号登录,则编辑/home/oracle/.bash_profile)

ORACLE_BASE=/oracle; export ORACLE_BASE   #根据oracle要安装到的相应目录有所不同
ORACLE_HOME=$ORACLE_BASE/product/8.1.7; export ORACLE_HOME  #根据oracle的版本有所不同
LD_LIBRARY_PATH=$ORACLE_HOME/lib; export LD_LIBRARY_PATH
ORACLE_SID=orasid; export ORACLE_SID
ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data;export ORA_NLS33
NLS_LANG=american_america.zhs16gbk;export NLS_LANG
NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS";export NLS_DATE_FORMAT #统一oracle的日期格式,可不写
CLASSPATH=.ORACLE_HOME/jdbc/lib/classes111.zip;export CLASSPATH

JAVA_HOME=/usr;export JAVA_HOME
JRE=$JAVA_HOME/jdk1.3.1/jre;export JRE
LD_ASSUME_KERNEL=2.2.5; export LD_ASSUME_KERNEL #如果在P4机器上无法启动 java  installer ,请加入这一项

PATH=$JAVA_HOME/jdk1.3.1/binORACLE_HOME/binPATH;export PATH

#Oracle 8i和9i使用光盘mount点/runInstaller进行安装,它是用Java编写的图形界面,对中文处理有问题,
#所以应在进入X-Window前确保语言(LANG)和地域(LC_ALL,LC_TYPE,…)环境变量不是中文。
LANG=C;export LANG
LC_ALL=C;export LC_ALL

ORACLE_TERM=ansi;export ORACLE_TERM  #仅用于oracle 8

其中,zhs16gbk是简体中文的代码。也是数据库的字符集。oracle for linux/unix默认的中文字符集是zhs16cgb231280,而zhs16gbk则兼容它。
american_america是区域代码,关系不大。
Log out,重新以oracle帐号登录,键入env指令查看刚才设置的环境变量。

四、安装Oracle 8i 数据库软件
        1、用oracle帐号登录,进入Xwindows,开启terminal窗口
        2、进入oracle安装程序存放的目录
        3、./runInstaller
        此时若有出错,显示信息为
        Xlib: connection to “:0.0” refused by server
        Xlib: Client is not authorized to connect to server
        说明xhost没有配置
                设置xhost
                开启一个新的terminal窗口
                su - (输入root密码)
                xhost +
                保留此窗口
        4、在oracle用户窗口下继续安装
                在出现的基于JAVA的Oracle installer界面上,点击Next。
        5、在File Locations界面上,检查Destination Path为$ORACLE_HOME ,点击Next
        6、在Unix Group Name窗口中,键入"oracle",点击Next;
        7、一个窗口会弹出,要求以root身份运行$ORACLE_HOME/orainstRoot.sh
        8、切换到第3步保留的root用户窗口(若没有则新开一个,su - )
                cd $ORACLE_HOME
                ./orainstRoot.sh
        9、返回刚才弹出的窗口,点击Retry。
        10、在出现的"Available products"窗口上选择"Oracle8I enterprise edition8.1.7.0.1",点击Next。
                按照提示信息往下走,直到最后的Summary窗口上,点击Install,正式开始安装。
        11、在文件被拷贝和联接后,弹出一个要求运行root.sh的窗口
        切换到root用户窗口,
                注意,Root.sh里有两处错误:
                RMF=/bin/rm - f
                修改为
                RMF="/bin/rm -f"
                RUID=`/usr/bin/id|$AWK -F( '{print $2}'|$AWK -F) '{print $1}`
                修改为
                RUID=`/usr/bin/id|$AWK -F( '{print $2}'|$AWK -F) '{print $1}'`
        12、./root.sh
                在询问local bin directory时按下Enter键
        13、返回要求运行root.sh的窗口上,点击OK
        14、Oracle Net8 Configuration和Oracle Database Configuration Assistants启动, 安装Net8和创建数据库。
                这时,请停止这两项并退出安装。
        15、安装oracle glibc补丁
                        以oracle用户开启一个新的terminal窗口
                        cd $ORACLE_HOME
                        tar xfz /opt/oracle/glibc-2.1.3-stubs.tar.gz
                        ./setup_stubs.sh
                        cd /bin
                        relink all
        16、修改 /bin/df (可省略,若17、18无法进行则做此修改,否则可省略)
                        Oracle 8.1.7 无法处理品 LVM 长分区名。
                        当我们创建一个新的DB的时候,程序dbassist会使用/bin/df命令检查是否有足够的空间。
                        如果有长分区名,实际的空间会列在下一行,而这将会导致dbassist崩溃。
                        做如下修改:
                        mv /bin/df /bin/df.orig
                        cat << EOF > /bin/df
                        #!/bin/sh
                        /bin/df.orig -P \$@
                        EOF
                        chmod +x /bin/df
                       
                        数据库创建完成的,可以用以下命令恢复df命令:
                        mv /bin/df.orig  /bin/df
        17、运行Net8 Configuration Assistant
                netca
                按提示做。
        18、运行Database Configuration Assistant(创建数据库)
                dbassit
                按提示创建。
        19、实现机器启动/关闭/重启后ORACLE数据库和Listener的自启动/关闭/重启
                创建文件/etc/rc.d/init.d/oracle
               
                        # /etc/rc.d/init.d/oracle
       
                        #!/bin/sh
                        #
                        # Startup script for Oracle
                        #
                        # chkconfig: 345 79 11
                        # description: Oracle.
                        # processname: oracle
                        # pidfile: /var/run/oracle.pid
                        #
                        # Source function library.
                        . /etc/rc.d/init.d/functions
                        ORA_HOME=/oracle/product/8.1.7
                        ORA_USER=oracle
                        # See how we were called.
                        case "$1" in
                          start)
                            echo -n "Starting Oracle Database Server: "
                            daemon --user=$ORA_USER $ORA_HOME/bin/dbstart
                            success "Starting Oracle Database Server: "
                            echo
                            echo -n "Starting Oracle TNS Listener: "
                            daemon --user=$ORA_USER $ORA_HOME/bin/lsnrctl start >> /dev/null
                            success "Starting Oracle TNS Listener: "
                            echo
                            touch /var/lock/subsys/oracle
                            ;;
                          stop)
                            echo -n "Stopping Oracle Database Server: "
                            daemon --user=$ORA_USER $ORA_HOME/bin/dbshut
                            success "Stopping Oracle Database Server: "
                            echo
                            echo -n "Stopping Oracle TNS Listener: "
                            daemon --user=$ORA_USER $ORA_HOME/bin/lsnrctl stop >> /dev/null
                            success "Stopping Oracle TNS Listener: "
                            echo
                            rm -f /var/lock/subsys/oracle
                            rm -f /var/run/oracle.pid
                            ;;
                          restart)
                            $0 stop
                            sleep 2
                            $0 start
                            ;;
                          *)
                            echo "Usage: $0 {start|stop|restart}"
                            exit 1
                        esac
                        exit 0

                加入可执行权限
                chown root.root /etc/rc.d/init.d/oracle
                chmod +x /etc/rc.d/init.d/oracle
        20、启动加入如下连接
                ln -s /etc/rc.d/init.d/oracle /etc/rc.d/rc2.d/S99oracle
                ln -s /etc/rc.d/init.d/oracle /etc/rc.d/rc3.d/S99oracle
                ln -s /etc/rc.d/init.d/oracle /etc/rc.d/rc4.d/S99oracle
        21、关闭加入如下连接
                ln -s /etc/rc.d/init.d/oracle /etc/rc.d/rc0.d/K01oracle
        22、重启加入如下连接
                ln -s /etc/rc.d/init.d/oracle /etc/rc.d/rc6.d/K01oracle
        23、恢复以前的glibc
                命令如下
                cd /usr/bin
                rm ?f gcc cc ld
                cd /usr/bin
                mv ./savedbyjohnny/* .
                cd /usr/bin
                rmdir savedbyjohnny
                cd /usr/lib
                mv ./savedbyjohnny/* .
                cd /usr/bin
                rmdir savedbyjohnny
               
备注:步骤21和步骤22最好不要用,根据我的观察,此程序调用的是 shutdown normal ,
        而此命令需要等待所有与数据库的连接断开后才会关闭数据库,否则一直等待下去。
        如果加入21/22的连接,在你关闭/重启系统的时候,如果有一个数据库连接没断开,
        则可能等上1个小时也不会关闭数据库,更可能导致系统死机!