Linux中Oracle的安装

周末在家闲着无事就决定安装Oracle玩玩。这次用的是 RedhatEnterprise 4 + Oracle11gR2,在这次安装过程中遇到了些问题,特总结下来以备后用。

在开始安装之前先是安装Linux,由于在前几次的安装中跟/只挂载了10G左右的容量,没想到/u01也是用的/的容量,因此在安装完Linux系统后/只有大概4G左右的容量了是不够安装Oracle的。而且安我的习惯是将安装包解压到/tmp目录下,而/tmp目录也是用的/的容量。因此在这次安装中,在装Linux时,我就单独将/u01挂载了一些容量,只是这次挂载的容量还是小了点,只挂载了5G左右的容量,下次安装要挂载8-10G左右的容量才行。我看了下Oracle完全安装完大概要5.3G的容量。好了废话不多说,下面开始安装之前需要注意的东西。

检查硬件

内存

#grepMemTotal/proc/meminfo

交换空间

#grepSwapTotal/proc/meminfo

磁盘空间

#df-ah

首先是要检查需要支持的软件包:

就我的RedHatEnterprise4为例:

binutils-2.15.92.0.2-18

compat-libstdc++-33.2.3-47.3

elfutils-libelf-0.97-5

elfutils-libelf-devel-0.97.5

elfutils-libelf-devel-static-0.97.5

glibc-2.3.9.4-2.19

glibc-common-2.3.9.4-2.19

glibc-devel-2.3.9.4-2.19

glibc-headers-2.3.9.4-2.19

gcc-3.4.5-2

gcc-c++-3.4.5-2

kernel-headers-2.6.18

ksh-20060214

libaio-devel-0.3.105-2

libaio-0.3.105-2

libgcc-3.4.5

libstdc++-3.4.5-2

libstdc++-devel-3.4.5-2

make-3.80-5

sysstat-5.0.5

unixODBC-2.2.11

unixODBC-devel-2.2.11

使用的命令是rpm-qa|grep"部分包名"

如果没有的话可以在安装盘中找到相应的包,然后用rpm-ivh*.rpm安装。

检查完安装包后就是创建相应的Oracle用户了,涉及到oinstall(TheOracleInventorygroup)用户组、dba(TheOSDBAgroup)用户组和oracle(TheOraclesoftwareowner)用户。

用root用户执行:

groupaddoinstall

groupadddba

useradd-goinstall-Gdbaoracle

passwdoracle

添加好用户和用户组后,就是修改内核参数,修改/etc/sysctl.conf文件,加上如下参数:

fs.aio-max-nr=1048576

fs.file-max=6815744

kernel.shmall=2097152

kernel.shmmax=536870912

kernel.shmmni=4096

kernel.sem=25032000100128

net.ipv4.ip_local_port_range=900065500

net.core.rmem_default=262144

net.core.rmem_max=4194304

net.core.wmem_default=262144

net.core.wmem_max=1048586

配置完后用sysctl-p应用配置。

修改用户限制,修改/etc/security/limits.conf文件,加上下面的参数:

oraclesoftnproc2047

oraclehardnproc16384

oraclesoftnofile1024

oraclehardnofile65536

修改用户验证选项,修改/etc/pam.d/login文件,加上如下参数:

sessionrequiredpam_limits.so

修改用户配置文件,修改/etc/profile文件,加上如下参数:

if[$USER="oracle"];then

if[$SHELL="/bin/ksh"];then

ulimit-p16384

ulimit-n65536

else

ulimit-u16384-n65536

fi

fi

然后再设置目录的权限和拥有者:

mkdir-p/u01/(当然这步可以免了,因为我在最开始装Linux系统中就创建了这个目录并挂载了容量,只是容量要挂载大点)

chown-Roracle:oinstall/u01/

chmod-R775/u01/

最后就是修改oracle用户的.bash_profile文件了,增加一些环境变量:

增加

(注意在设置环境变量值时,等号左右两边是没有空格的)

exportORACLE_BASE=/u01/app

exportORACLE_HOME=$ORACLE_BASE/oracle

exportORACLE_SID=zero(用来设置全局数据库名的,在安装过程中会用到这里设置的值)

exportPATH=$ORACLE_HOME/bin:$PATH

其实我认为在设置环境变量这一步应该是安装完oracle后再设置的,因为在安装的过程中目录可能会有变化,这会导致执行oracle下的命令时提示命令找不到的错误。比如我安装后又修改了环境变量参数如下:

exportORACLE_BASE=/u01/app/oracle

exportORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1

其他的不用作任何改动。

还有一点要说明下,就是oracle是不允许动态IP安装的。像我是在安装Linux系统时选择DHCP动态分配IP,然后在安装oracle之前调用netconfig命令将动态分配IP禁掉,然后在静态IP中填写之前动态分配的IP地址就OK了。当然还要修改/etc/hosts文件,加上静态IP地址、主机域名和主机名。

以上准备工作全部结束后,就是安装oracle的时候了。

切换成oracle用户su-oracle

执行安装./runInstaller

然后就照着提示一路next就OK了。

安装完成后就是配置监听器了,执行netca命令,而我在这一步遇到了错误,大概如下:

#

#AnunexpectederrorhasbeendetectedbyHotSpotVirtualMachine:

#

#SIGSEGV(0xb)atpc=0xa44b13a8,pid=2973,tid=3086891216

#

#JavaVM:JavaHotSpot(TM)ClientVM(1.5.0_17-b02mixedmode)

#Problematicframe:

#C[libnnz11.so+0x3c3a8]

#

#Anerrorreportfilewithmoreinformationissavedashs_err_pid2973.log

#

#Ifyouwouldliketosubmitabugreport,pleasevisit:

#http://java.sun.com/webapps/bugreport/crash.jsp

#

/u01/app/oracle/product/11.2.0/dbhome_1/bin/netca:line178:2973

Aborted$JRE$JRE_OPTIONS-classpath$CLASSPATHoracle.net.ca.NetCA$*

解决办法:

据说是因为Host是64-Bit的系统,装32位的软件环境下,会产生这个错误bug,主要装个补丁(patchname:p8670579_112010_LINUX.zip)就可以解决问题。

文件名:p8670579_112010_LINUX.zip

文件描述:parcheoracle11gr2

文件大小:1.13MB

首先从网上下载这个补丁包,然后用unzipp8670579_112010_LINUX.zip解压这个补丁包,会生成8670579命名的文件夹,

cd8670579进去后会发现etc目录和file目录和一个readme文件。

执行OPatch目录下opatch命令:

$ORACLE_HOME/OPatch/opatchapply-invPtrLoc$ORACLE_HOME/oraInst.loc

(补充一点查看oracle数据库中已经安装的补丁列表用opatchlsinventory命令)

在执行这个步骤时可能会报错:

Javacouldnotbelocated.OPatchcannotproceed!

OPatchfailedwitherrorcode=1

这是由于环境变量参数路径设置不正确产生的问题,我最开始就碰到了这个问题。

比如说我这个最开始把$ORACLE_HOME设成的路径是/u01/app/oracle,而jdk目录在/u01/app/oracle/product/11.2.0/dbhome_1/下,它当然报错提示找不到jdk了。修改成正确的$ORACLE_HOME路径后这个错误就解决了。

以上就是我安装oracle的全过程和安装过程中可能碰到的问题。