数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
在RedHat7.1上安装Oracle8.1.7的经验谈

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

在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: [email protected]

  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

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




相关文章

相关软件