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的全过程和安装过程中可能碰到的问题。