CentOS6.3中安装Oracle 11g数据库

作者: loaf 分类: 虚拟化 发布时间: 2013-06-18 15:14

因为我的vCenter server用的是Appliance版本,原来用的是内置数据库,由于些内置数据库只能支持小于5台Host的小清单数据中心,我想升级VC,有两种选择,一个是重新安装基于Windows的VC,一个是保留现的的Appliance虚机,然后将内置数据库修改成Oracle。
考虑到安装Windows版的VC的复杂性,我还是决定安装Oracle。
1)先安装CentOS6.3,安装时选择Database模式。
2)然后到Oracle上下载Database安装文件。下载的是linux.x64_11gR2_database_1of2.zip和linux.x64_11gR2_database_2of2.zip两个ZIP文件,这里有点奇怪的是,我在同一个地方下载,第一次用的是迅雷下载,文件名相同,但是ZIP包中的文件却不同,没有runInstaller,但是有一个Setup.exe文件,我将此ZIP解压到CentOS上,在命令行下运行setup,居然可以打开一个配置的界面。下载到本地后,用WinSCP将两个文件上传到CentOS的Tmp目录中。
3)按要求检查系统中Package的情况
先是根据网上的资料,检查如下列表中的包

Binutils 已安装 binutils-2.20.51.0.2-5.34.el6.x86_64
Compat-libstdc++ 未安装
elfutils-libelf 已安装 elfutils-libelf-0.152-1.el6.x86_64
Elfutils-libelf-devel 未安装 elfutils-libelf-devel-0.152-1.el6.x86_64
glibc 已安装 glibc-2.12-1.80.el6.x86_64
Glibc-devel 未安装 glibc-devel-2.12-1.107.el6.x86_64
Glibc-headers 安装 glibc-headers-2.12-1.107.el6.x86_64
gcc 未安装 gcc-4.4.7-3.el6.x86_64
Gcc-c++ 未安装 gcc-c++-4.4.7-3.el6.x86_64
Libaio 安装 libaio-0.3.107-10.el6.x86_64
Libaio-devel 未安装 libaio-devel-0.3.107-10.el6.x86_64
libgcc 安装 libgcc-4.4.7-3.el6.x86_64
Libstdc++ 未安装 libstdc++-4.4.7-3.el6.x86_64
Libstdc++-devel 安装 libstdc++-devel-4.4.7-3.el6.x86_64
make 安装 make-3.81-20.el6.x86_64
sysstat 未安装 sysstat-9.0.4-20.el6.x86_64
unixODBC 未安装 unixODBC-2.2.14-11.el6.x86_64
unixODBC-devel 未安装 unixODBC-devel-2.2.14-12.el6_3.x86_64

其中未安装的,用yum install ..安装都成功了,只有compat-libstdc++,安装不成功。完成后,又去Oracle上下载了手册,看到手册中的必须列表却又不同
手册上的必须包列表如下:

binutils-2.20.51.0.2-5.11.el6 (x86_64)
compat-libcap1-1.10-1 (x86_64)
compat-libstdc++-33-3.2.3-69.el6 (x86_64)
compat-libstdc++-33-3.2.3-69.el6.i686
gcc-4.4.4-13.el6 (x86_64)
gcc-c++-4.4.4-13.el6 (x86_64)
glibc-2.12-1.7.el6 (i686)
glibc-2.12-1.7.el6 (x86_64)
glibc-devel-2.12-1.7.el6 (x86_64)
glibc-devel-2.12-1.7.el6.i686
ksh
libgcc-4.4.4-13.el6 (i686)
libgcc-4.4.4-13.el6 (x86_64)
libstdc++-4.4.4-13.el6 (x86_64)
libstdc++-4.4.4-13.el6.i686
libstdc++-devel-4.4.4-13.el6 (x86_64)
libstdc++-devel-4.4.4-13.el6.i686
libaio-0.3.107-10.el6 (x86_64)
libaio-0.3.107-10.el6.i686
libaio-devel-0.3.107-10.el6 (x86_64)
libaio-devel-0.3.107-10.el6.i686
make-3.81-19.el6
sysstat-9.0.4-11.el6 (x86_64)

再检查一遍,用yum install安装不包括的包。最后括号内为(i686)的包都没有安装,另外,compat-libstdc++的两个版本包也未安装成功。
后来在网上找到资料,用yum install compat-libstdc++-33安装就行了,我原来一直是用yum install compat=libstdc++来安装的。
对于i686版本的,就用yum install compat-libstdc++-33*.i686
可用一个命令全部安装

yum install
binutils
compat-libcap1  
compat-libstdc++-33
compat-libstdc++-33*.i686
elfutils-libelf-devel #这个官方文档是没有的
gcc
gcc-c++
glibc*.i686
glibc
glibc-devel
glibc-devel*.i686
ksh
libgcc*.i686
libgcc
libstdc++
libstdc++*.i686
libstdc++-devel
libstdc++-devel*.i686
libaio
libaio*.i686
libaio-devel
libaio-devel*.i686
make
sysstat
unixODBC
unixODBC*.i686
unixODBC-devel
unixODBC-devel*.i686
包的问题应该已经解决。
4)加用户和用户组,并设置权限
按官方文档的要求,增加两个组,增加Oracle用户,
/usr/sbin/groupadd oinstall
/usr/sbin/groupadd dba
/usr/sbin/useradd -g oinstall -G dba oracle
passwd oracle
5)配置内核参数
按官方文档要求
/sbin/sysctl -a | grep sem 查看Sem的参数
默认是
SEMMSL   SEMMNS    SEMOPM    SEMMNI

250          3200         32              128
其中
SEMMSL:每个信号量集中的最大信号量数,手册建议最小值250
SEMMNS:系统中信号量集的最大数,建议最小值32000
SEMOPM:每个semop调用所包含的最大操作数,建议100
SEMMNI:系统中信号量集的最小数,建议128
修改参数
vi /etc/sysctl.conf
在最后增加

kernel.sem = 250 32000 100 128

运行

/sbin/sysctl -p

后再看相关参数,已经发生了变化。分别用
/sbin/sysctl -a |grep shmall
/sbin/sysctl -a |grep shmmax
/sbin/sysctl -a |grep shmmni
查看参数,都符合推荐值。
其中,shmall是全部允许使用的共享共存大小,shmmax是单个段允许的使用的大小,shmni是允许的共享内存段总数。
/sbin/sysctl -a |grep file-max
得到fs.file-max=385021,推荐值为6815744
file-max表示文件句柄的最大数量。也就是在系统中可打开文件数量的最大值。
/sbin/sysctl -a |grep ip_local_port_range
得到
net.ipv4.ip_local_port_range = 32768 61000
推荐为9000 65500
主要是为了增加可用的端口数量。
/sbin/sysctl -a |grep rmem_default
得到net.core.rmem_default = 229376
推荐为262144
/sbin/sysctl -a |grep rmem_max
得到net.core.rmem_max = 131071
推荐4194304
/sbin/sysctl -a |grep wmem_default
得到net.core.wmem_default = 229376
推荐262144
/sbin/sysctl -a |grep wmem_max
得到net.core.wmem_max = 131071
推荐1048576
rmem_default表示套接字接收缓冲区大小的缺省值。
rmem_max表示套接字接收缓冲区大小的最大值。
wmem_default表示套接字发送缓冲区大小的缺省值。
wmen_max表示套接字发送缓冲区大小的最大值。
/sbin/sysctl -a |grep aio-max-nr
得到fs.aio-max-nr = 65536
推荐1048576
此参数限制并发未完成的请求,应该设置避免I/O子系统故障。
再打开sysctl.conf增加

fs.aio-max-nr = 1048576
fs.file-max = 6815744
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576

保存退出后,/sbin/sysctl -p,应用修改。
6)下面需要修改资源限制,根据官方文档,这个限制是指用来安装的账号的限制。
这里涉及3个参数,
一个是nofile指打开文件数,Soft Limit是至少1024,Hard Limit是至少65536
一个是nproc指单用户可用进程数,Soft Limit是至少2047,Hard Limit是至少16384
一个是stack指进程的堆栈段大小,Soft Limit是至少10240KB,Hard Limit是至少10240KB,至少32768KB
可以在以相关用户登录后,用

ulimit -Sn
ulimit -Hn
ulimit -Su
ulimit -Hu
ulimit -Ss
ulimit -Hs

来查看。
现在用vi /etc/security/limits.conf,增加

oracle              soft    nproc   2047
oracle              hard    nproc   16384
oracle              soft    nofile  1024
oracle              hard    nofile  65536
oracle              soft    stack   10240

7)创建目录
# mkdir -p /u01/app/
# chown -R oracle:oinstall /u01/app/
# chmod -R 775 /u01/app/
8)官方文档在下一步要求的是创建Oracle用户环境。
看起来是需要安装桌面的,因为我安装CentOS时,选择是服务器模式,本身是不带桌面的。于是在网上找到一篇文章。决定暂时按这篇文章的要求来创建Oracle用户环境。但是安装一直不成功,通过提示,应该与目录相关,决定重新对目录整理一下。
结果是安装是提示预置条件不成功,需要重新定义相关配置,我从安装失败的日志里也得不到什么有用的信息,说是libaio-0.3.105-10.el6 (i386)找不到,但是我已经安装了libaio-0.3.107-10了。
现在陷入了死局。
决定恢复到刚刚安装好CentOS时的快照,重新再来。
这时发现vSphere的快照恢复后,时间也回到了以前,而设置好NTP服务器后,用hwclock -w也不能更新时间。
恢复后,想安装X Windows,但是用yum groupinstall ‘X Window System’  -y 安装后,用StartX又不能成功打开桌面。
又一次地陷入了死局。

因为刚才的时间问题,我干脆安装了VMTools,将光盘中的VMwaretools压缩包用 cp 命令拷贝到tmp 目录下,压缩后运行其中的Pl文件。安装后重启,时间总算和本地一致了。
重新按网页上的内容操作一遍。
1)安装依赖
yum -y install binutils compat-libstdc++-33 compat-libstdc++-33.i686 elfutils-libelf elfutils-libelf-devel gcc gcc-c++ glibc glibc.i686 glibc-common glibc-devel glibc-devel.i686 glibc-headers ksh libaio libaio.i686 libaio-devel libaio-devel.i686 libgcc libgcc.i686 libstdc++ libstdc++.i686 libstdc++-devel make sysstat
2)添加用户
/usr/sbin/groupadd oinstall
/usr/sbin/groupadd dba
/usr/sbin/useradd -g oinstall -G dba oracle
passwd oracle
3)修改内核参数 vi /etc/sysctl.conf
#######
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax =  536870912
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
#######
保存后,/sbin/sysctl -p
4)修改用户资源限制 vi /etc/security/limits.conf
#####
oracle              soft    nproc   2047
oracle              hard    nproc   16384
oracle              soft    nofile  1024
oracle              hard    nofile  65536
oracle              soft    stack   10240
#####
5)创建目录
mkdir -p /usr/local/oracle /usr/local/oraInventory /usr/local/oradata/
chown -R oracle:oinstall /usr/local/oracle /usr/local/oraInventory /usr/local/oradata/
chmod -R 775 /usr/local/oracle /usr/local/oraInventory /usr/local/oradata/
6)设置用户环境
su – oracle
vi .bash_profile
打开后填入:
#####
export ORACLE_BASE=/usr/local/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_SID=sales
export ORACLE_OWNER=oracle
export PATH=$PATH:$ORACLE_HOME/bin:$HOME/bin
####
保存修改后执行
source .bash_profile
7)将下载的Oracle文件用WinScp拷贝到Home目录下,先切换到root用户,su –
并解压。然后修改目录权限:
chmod 777 /home/database
chown -R oracle.oinstall /home/database
8)创建oraInst.loc文件: vi /etc/oraInst.loc
#####
inventory_loc=/usr/local/oraInventory
inst_group=oinstall
#####
保存修改后再赋权
chown oracle:oinstall /etc/oraInst.loc
chmod 664 /etc/oraInst.loc
9)创建Response文件:vi /home/database/response/db_install.rsp
###
oracle.install.option=INSTALL_DB_AND_CONFIG
ORACLE_HOSTNAME=oracledb
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/usr/local/oraInventory
SELECTED_LANGUAGES=en,zh_CN
ORACLE_HOME=/usr/local/oracle/product/11.2.0/db_1
ORACLE_BASE=/usr/local/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.DBA_GROUP=oinstall
oracle.install.db.OPER_GROUP=oinstall
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE
oracle.install.db.config.starterdb.globalDBName=oracle
oracle.install.db.config.starterdb.SID=sales
oracle.install.db.config.starterdb.memoryLimit=512
oracle.install.db.config.starterdb.password.ALL=Oracle123
oracle.install.db.config.starterdb.storageType=FILE_SYSTEM_STORAGE
oracle.install.db.config.starterdb.fileSystemStorage.dataLocation=/usr/local/oradata/ora11g/ORA11G
DECLINE_SECURITY_UPDATES=true
###
我是把原来的内容都注释掉再将此文件复制进去,按说只要复制到文件的最后就可以了。
10)开始安装
su – oracle
/home/database/runInstaller -silent -responseFile /home/database/response/db_install.rsp
安装很快,然后出现一些错误提示
切换到Root
su –
再运行一下
/usr/local/oracle/product/11.2.0/db_1/root.sh
仍有错误提示。
结果和第一次安装是一样的,但是我突然想到,尽管有上述的提示,但是这些都是[警告],也许已经安装成功了。
用oracle用户登录后,运行
sqlplus / as sysdba
显示
SQL*Plus: Release 11.2.0.1.0 Production on Tue Jun 18 15:03:48 2013
Copyright (c) 1982, 2009, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
进入后输入SQL命令看版本
select * from v$version;
得到

SQL> select * from v$version;

BANNER
——————————————————————————–
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – 64bit Production
PL/SQL Release 11.2.0.1.0 – Production
CORE    11.2.0.1.0      Production
TNS for Linux: Version 11.2.0.1.0 – Production
NLSRTL Version 11.2.0.1.0 – Production

看来是已经安装成功了。