分享
 
 
 

在RedHat7.1上安装Oracle8.1.7的经验谈

王朝oracle·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

在RedHat7.1上安装Oracle8.1.7的经验谈

我在RedHat7.1上第一次安装Oracle8.1.7就成功了,呵呵,很幸运!后来有不少朋友请教我安装方法,我才知道原来有这么多问题,按照我的方法应该可以安装成功,我自己安装了不下10遍都是很顺利就成功了。总结一下自己的安装经验,也总结一下别人遇到的问题,希望能对其他人有一点点帮助。

安装假设oracle系统文件放在/u01下,数据库文件放在/u02下,不安装OPS,不安装JServer,单数据库单实例。

ORACLE_BASE=/u01/app/oracle

ORACLE_HOME=/u01/app/oracle/product/8.1.7

ORACLE_SID=orcl

一、安装前的配置

1、替换glibc

Oracle8.1.7使用的是glibc2.1.3,而RedHat7.1是用的glibc2.2.2,不兼容,所以要替换glibc才能成功安装。

首先要安装RedHat7.1安装光盘上的几个以compat开头的rpm包,它们是:

compat-glibc-6.2-2.1.3.2.i386.rpm

compat-egcs-objc-6.2-1.1.2.14.i386.rpm

compat-egcs-6.2-1.1.2.14.i386.rpm

compat-libs-6.2-3.i386.rpm

可以把:

compat-libstdc++-6.2-2.9.0.14.i386.rpm

compat-egcs-c++-6.2-1.1.2.14.i386.rpm

也安装上。

因为这几个软件包之间有依赖关系,如果安装顺序不对,会报错的,无法安装。一般来说应该先安装第一张上的两个,再安装第二张上面的四个。

如果这样做也报错,安装不上,可以先把这6个软件包拷贝到一个目录下,然后再一起安装,这样就不用怕它们之间的依赖关系,一定可以安装成功了。例如:

rpm -ivh compat-glibc-6.2-2.1.3.2.i386.rpm

compat-egcs-6.2-1.1.2.14.i386.rpm compat-libs-6.2-3.i386.rpm

compat-egcs-c++-6.2-1.1.2.14.i386.rpm

compat-egcs-objc-6.2-1.1.2.14.i386.rpm

compat-libstdc++-6.2-2.9.0.14.i386.rpm

2、创建用户和组

groupadd dba

useradd oracle -g dba

passwd oracle

Oracle安装文档上说,要创建两个组,oinstall和dba,oracle用户主属组是oinstall,从属组是dba,其实只用dba就好了,不要那么麻烦。

chown -R oracle.dba /u01

chown -R oracle.dba /u02

3、设环境变量

可以将要设的环境变量放在oracle用户主目录下的.bash_profile中,也可以放在/etc/profile中,对所有的用户可见,我建议放在/etc/profile中,因为凡是在本机运行的程序读写本机的Oracle数据库,一般都需要设Oracle的环境变量,否则无法连接数据库。

我可以举一个例子:

如果你的WEB Server,例如Apache,需要读写数据库,提供网页的动态内容,假设用PHP或者JSP,又或者Perl等等来写ServerAPI或者CGI,因为Apache是以root启动一个进程,这个进程再fork若干子进程以nobody用户运行,响应80端口的http请求,所以如果在root读不到Oracle环境变量,Web程序根本无法读写数据库。只要root读到oracle环境变量,fork子进程的时候,复制了父进程的数据空间,也继承了父进程的环境变量,所以可以读到oracle变量,就可以读写oracle数据库了。

所以我这样设置,在/etc/profile中添加如下行:

ORACLE_BASE=/u01/app/oracle

ORACLE_HOME=/u01/app/oracle/product/8.1.7

ORACLE_SID=orcl

ORA_NLS=/u01/app/oracle/product/8.1.7/ocommon/nls/admin/data

NLS_LANG="SIMPLIFIED CHINESE"

CLASSPATH=.:/u01/app/oracle/product/8.1.7/jdbc/lib/classes111.zip

LD_LIBRARY_PATH=/u01/app/oracle/product/8.1.7/lib

PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/dbs:/etc

export ORACLE_BASE ORACLE_HOME ORACLE_SID ORA_NLS NLS_LANG LD_LIBRARY_PATH

PATH

其中$ORACLE_BASE,$ORACLE_HOME指定安装目录,$ORACLE_SID是oracle数据库的SID,$ORA_NLS是字符集目录,$NLS_LANG是字符集,$CLASSPATH是Java程序读写数据库需要的JDBC的class,前面加个点号是先搜当前目录的意思。$LD_LIBRARY_PATH是Oracle的C库函数和头文件的位置,对于OCI8,PROC和JDBC的OCI连接是必须的。

注销再登录,或者不用注销,执行下一行的命令,直接读一下/etc/profile

. /etc/profile

env|grep oracle

看看oracle的变量是否都设置正确。

4、临时更改glibc

. /usr/i386-glibc21-linux/bin/i386-glibc21-linux-env.sh

export LD_ASSUME_KERNEL=2.2.5

加入oracle主目录(/home/oracle)下的.bash_profile,注销再以oracle登录,或者不用注销,执行下一行的命令,直接读一下.bash_profile

. /home/oracle/.bash_profile

再看看是否已替换

gcc -v

替换之前是:

Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/2.96/specs

gcc version 2.96 20000731 (Red Hat Linux 7.1 2.96-81)

替换之后是:

Reading specs from

/usr/i386-glibc21-linux/lib/gcc-lib/i386-redhat-linux/2.96/specs

gcc driver version 2.96 20000731 (Red Hat Linux 7.1 2.96-81)

executing gcc version egcs-2.91.66

5、修改内核参数

Oracle数据库运行的时候,用共享内存来实现Oracle的SGA,所以要调整一下Linux的内核参数来适应Oracle的SGA的要求,这个方面到底要调整到多少才适合,可以参考Oracle官方的安装文档。一般而言,主要就是共享内存段最大尺寸要调整,Linux内核默认共享内存段最大尺寸是32M,如果Oracle SGA开的大于32M(一般商业运行,肯定大于32M),SGA就会分段,占据几个不连续的共享内存段,造成Oracle的性能下降。

命令ipcs -al可以查看共享内存参数,命令ipcs查看共享内存使用情况。

修改内核参数可以修改内核源码再重新编译内核,这个方法有点麻烦,关于共享内存的参数在源码目录下的include/linux/下的shm.h和sem.h文件中。

另一个简单的办法是直接修改内核参数,即修改/proc下的文件,立即生效。

可以修改/proc/sys/kernel下的shmmax和sem

shmmax是以字节记的共享内存段的最大尺寸,

shmmni是共享内存段的最大数量

shmmax是共享内存总共最大容量(shmmax*shmmni)

sem是信号量参数,msgmax,msgmnb,msgmni是消息队列的参数。

我改动如下:

echo 134217728 > /proc/sys/kernel/shmmax (SGA最大为128M)

echo -e "250 32000 100 128" > /proc/sys/kernel/sem

(其实也不用改这项,只是将max ops per semop call改大了,这是Oracle的安装文档上写的,我就这么做了,不过我试过,不改也没事,其他都保持原来的,没有改)

总结如下:改一项必须的shmmax,其他的我在使用过程中,参数都够大了,不需要再调整。

二、安装过程

1、runInstaller启动安装界面

有的时候runInstaller,安装界面不出来,这主要还是因为Oracle的字符集设为了简体中文,但OS是英文的,所以有时候出不来,用Java写的程序经常出现字符集的问题。此时临时销毁$NLS_LANG变量,Java会用默认的字符集,就好了。所以:

unset $NLS_LANG

也可以试试

unset $LANG

其实dbassist也是有时候出不来的,这样做就可以出来了,但是netasst始终出不了,不清楚为什么,不过可以自己修改lisener.ora和tnsnames.ora,所以netasst也不是必须的。

另一个可能的原因就是glibc没有替换好,我发现直到JDK1.3.1_01,才支持glibc2.2,之前的版本,包括JDK1.3.0都不支持glibc2.2,只要在glibc2.2下运行,就会出现没有任何反应,进程好像死亡了一样的毛病,Oracle安装程序用的还是JRE1.1.8,所以只要glibc用的还是2.2版的,安装窗口总不会出来的。

2、下面一路点击下一步,到填写安装oracle软件的属组的时候,填写dba就好了,然后提示用root运行$ORACLE_HOME/root.sh,以root登录运行。在/etc/下生成一个文件oraInst.loc

3、到选择安装“服务器”,“网络管理工作站”,“客户端”的时候,选择“服务器”

安装好以后,可以再回到这个画面来选择别的没有安装的组件,也随时可以启动runInstaller来安装别的组件。

另外有人提到没有安装PORC的选项,其实PROC是在“客户端”的选项里安装的。

4、然后选择“定制安装”,不要选择典型安装,因为典型安装会安装Oracle Jserver,实际上不太用到Jserver,而且安装Jserver是在SGA里要启动一个Java虚拟机,非常消耗资源(Java的东西总是很吃资源的),而且安装的时候创建Jserver的过程非常的漫长,一度令我怀疑死机了。

5、出现选择安装组件的列表,可以自己增删一些组件,我不需要oracle的Apache Server,准备自己从源码安装,所以就勾掉了。如果要安装Apache Server的选项话,要预先安装Java,并设置$JAVA_HOME变量,虽然要求的是jdk1.1.8,不过用jdk1.3也完全可以安装成功,运行Apache也没有什么问题,至于会不会因为jdk的版本不同导致一些程序运行结果的差异,我就没有测试过了。

6、还是选择安装组件的列表这个界面,有个选择语言的按钮,增加“简体中文”

7、询问是否创建数据库,“是”,添上安装数据库的SID,我的是“orcl”,数据库数据文件的存放目录,我的是“/u02“。

8、开始安装Oracle,安装程序拷贝文件。

有很多人说,拷贝文件完后,联接系统库函数的时候,出现make错误,我想这多半还是替换glibc不成功导致的吧,我安装的时候确实没有出现过这样的问题。我想按照我写的步骤来,应该不会出现这样的问题的。

9、完成后,提示以root运行root.sh。

Oracle8.1.7有两个版本,一个是Oracle8.1.7.0.0,另一个是Oracle8.1.7.0.1,这个版本带OPS,而且Oracle提供了一个glibc2.2的patch,不过在Redhat7.1上,按照上面方法做了以后,实际上不需要打补丁的。这个Oracle8.1.7.0.1的版本此时的root.sh有个bug,应该在第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}'`

运行它,生成/etc/oratab。

10、自动启动netasst,配置监听器,一般如果为了省事,选典型配置就可以了,只不过典型配置打开了一个2481端口,是JServer用的,如果不用JServer的话,也可以不要它,现在可以不用管它,回头再改listener.ora好了。

11、自动启动dbassist,安装数据库,按照提示做就是了,根据自己的情况可以适当的调整安装数据库时的参数,最后开始创建数据库,此时也可以选择先保存创建的脚本,再退出dbassist,单独运行创建脚本,这样更灵活一些,可以自己改创建脚本,也可以自己研究一下脚本,会有收获的。

三、安装后配置

1、以root登录,修改/etc/oratab,将最后的:

orcl:/u01/app/oracle/product/8.1.7:N

改为:

orcl:/u01/app/oracle/product/8.1.7:Y

这样就可以用dbstart和dbshut来启动和关闭数据库了,不用自己写脚本调svrmgrl。

2、将数据库启动命令和修改内核命令放在系统启动脚本中

修改/etc/rc.d/rc.local,加入:

#modify kernel parameter

echo 134217728 > /proc/sys/kernel/shmmax

echo -e "250 32000 100 128" > /proc/sys/kernel/sem

#start Oracle8.1.7

su - oracle -c 'lsnrctl start'

su - oracle -c 'dbstart'

我比较懒,没有另外写脚本联接进rc3.d,rc0.d.rc5.d,rc6.d了,而是直接放在rc.local中了,呵呵

注意的是修改内核参数必须在启动数据库实例之前,启动数据库后,用ipcs 命令看看共享内存的使用情况,如果没有分段就行了。

另外一个特别要说明的事情是一定要注意,凡是读写数据库的进程,必须取得oracle的环境变量,否则无法联接数据库。

上面的脚本中su - 中的这个"-"非常讲究,它的意思是切换到oracle用户,并取得oracle的环境变量。

再例如,如果还要启动apache来读写数据库的话,rc.local加入的命令就一定要这样写:

#start apache httpd server

. /etc/profile

/usr/local/apache/bin/apachectl start

因为我把oracle的环境变量放在/etc/profile里了,在启动apache之前要先强制它读/etc/profile,取得oracle的环境变量,这样apache的ServerAPI程序就可以读写数据库了。

3、修改Net8配置,可以用netca,或者自己修改$ORACLE_HOME/network/admin下的listener.ora和tnsnames.ora,netasst好像出不来。

4、如果创建第二个实例,用dbassist就好了,如果dbassist出不来的话,临时销毁$LANG,$NLS_LANG

unset $NLS_LANG

unset $LANG

就可以出来了。

四、废话

我没有足够的硬件条件来安装OPS,所以安装Oracle8.1.7的时候不选OPS的;也没有硬件条件安装Oracle9i,所以不知道RedHat7.1来安装Oracle9i如何。不过用过一下SuSE7.1,印象很好,既然Oracle官方推荐是SuSE的话,还是用SuSE来安装Oracle9i吧,这样兼容性比较好,也省事。

如果我写的安装方法有什么谬误的地方,请大家指点一下,谢谢!

我的联系方法:

E-mail: fankai@adbobo.com

QQ: 14477412'

补充说明:2001年9月16日

本质来说,RedHat7.1的glibc2.2库和其他相关工具对于Oracle8i来说,是有一点高了。所以一般都要用RedHat7.1自带的兼容RedHat6.2的库替换一下,也就是glibc2.1.3。

我自己的经验是只要正确替换了glibc,就一定可以安装成功,不用做别的工作。一定要把那几个compat的rpm软件包安装好,正确替换,再用gcc -v试试,确定是在用compat glibc2.1.3,再开始安装。

我在这个帖子里没有提设DISPLAY变量的问题,其实如果在本机的X下安装oracle,会有默认设置的,根本不需要自己再设了。

如果runInstaller报DISPLAY出错的话,就自己设一下好了,无非就是

export DISPLAY=192.168.0.1:0.0 (假设IP是192.168.0.1)

如果这样做了,联接系统库的时候还报make错误的话(我是从来没有遇到这样的make error问题,所以没有办法测试),可能就不是glibc的问题,而是ld这些命令的版本问题了。我建议如果出现这种错误的话,试试这个方法,就是再降级binutil。

先下载binutils-2.10.0.18-1.i386.rpm(下载网址:http://rpmfind.net/linux/RPM/redhat/7.0/i386/binutils-2.10.0.18-1.i386.html,或者在google上搜索一下)

rpm -Uvh binutils-2.10.0.18-1.i386.rpm --force --nodeps

然后再

runInstaller。

又或者虽然出现make error,但是毕竟可以拷贝文件安装过去的话,也可以试试这个方法:

在安装文件完成以后,会先后出现配置Net8和出现数据库助手创建数据库的过程。

如果配置Net8出错的话,可以就这样退出,自己手工修改$ORACLE_HOME/network/admin下的listener.ora和tnsnames.ora。)

在出现数据库助手创建数据库的时候,不要创建数据库,退出。因为此时联接的可执行程序有问题,不能正确创建数据库。

到Oracle网站,在下载Oracle8.1.7的地方,可以找到一个glibc的patch:

http://download.oracle.com/otn/linux/oracle8i/glibc-2.1.3-stubs.tar.gz

把它下载,放到$ORACLE_HOME下,解压缩,

cd $ORACLE_HOME

tar xvfz glibc-2.1.3-stubs.tar.gz

./setup_stubs.sh

然后在

dbassist

启动数据库创建助手,创建数据库。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有