linux环境下oracle 11g 静默安装
编写人:黄宝康

1、编写目的

运维人士经常需要干一些环境搭建的事,对于linux下安装oracle,虽然说可以使用带图形界面的安装,只需要设置oracle的安装目录,设置sid名称,db_name实例名称,下一步下一步式的安装,涉及到的磁盘空间检查及相关依赖,如果不符合条件,图形界面都会给予相应提示,好处莫过于方便简单。但是运维的人碰到远程机器没有图形界面的linux系统,很有必要学会oracle的静默安装方式,掌握了此方法,不管是否有图形界面都可以安装成功,以达到一石二鸟的效果。

2、安装环境

Linux服务器:oracle linux 6.6 64位
Oracle服务器:Oracle11gR2 64位

3、系统要求

内存:必须高于1G的物理内存
交换空间:一般为内存的2倍,例如:1G的内存可以设置swap 分区为3G大小
硬盘:5G以上

4、正式安装

1)修改用户的SHELL的限制,修改/etc/security/limits.conf文件,将以下内容加入追加到文件末尾。

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

2)修改/etc/pam.d/login 文件,将以下内容加入该文件。
注意,如果是linux64位,应该将lib改成lib64,否则重启linux系统的时候会报module is unknown错误,导致系统都登录不了

session   required    /lib/security/pam_limits.so 
session   required    pam_limits.so

3)修改linux内核/etc/sysctl.conf文件,将以下内容加入该文件。

fs.file-max = 6815744 
fs.aio-max-nr = 1048576 
kernel.shmall = 2097152 
kernel.shmmax = 2147483648 
kernel.shmmni = 4096 
kernel.sem = 250 32000 100 128 
net.ipv4.ip_local_port_range = 9000 65500 
net.core.rmem_default = 4194304 
net.core.rmem_max = 4194304 
net.core.wmem_default = 262144 
net.core.wmem_max = 1048576

要使该文件修改立即生效,要执行sysctl -p命令
4)修改/etc/profile文件,设置oracle用户的的最大进程数

if [ $USER = "oracle" ]; then 
if [ $SHELL = "/bin/ksh" ]; then 
  ulimit -p 16384 
  ulimit -n 65536 
else 
  ulimit -u 16384 -n 65536 
fi
fi

5)建立oracle用户及用户组,oracle产品规定,必须以oracle用户的身份进行安装。
创建用户,输入命令:

groupadd  oinstall 
groupadd  dba

创建Oracle用户和密码,输入命令:

useradd -g oinstall -g dba -m oracle
passwd  oracle

然后会让你输入密码,密码任意输入2次,但必须保持一致,回车确认
5)创建oracle安装目录,及数据文件存放目录位置,这里可自定义。在这里举例安装放在/u01/app/oracle目录

mkdir -p /u01/app/oracle
mkdir -p /u01/app/oraInventory

6)设置目录所属主为oracle所有。

chown -R oracle:oinstall  /u01/app/oracle
chown -R oracle:oinstall  /u01/app/oraInventory

7)安装依赖检查

rpm -q binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel expat gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers libaio libaio-devel libgcc libstdc++ libstdc++-devel make pdksh sysstat unixODBC unixODBC-devel | grep "not installed"

把上面提示的所有not installed的软件包,使用yum 安装,根据不同系统环境,每个人的可能不一样。不过直接执行下面语句,不管有没有安装,全部一并执行也可以(对照下就会发现只是把rpm -q改成了yum install,后面完全一样)。

yum install binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel expat gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers libaio libaio-devel libgcc libstdc++ libstdc++-devel make pdksh sysstat unixODBC unixODBC-devel

由于pdksh软件包貌似在yum源里没有了,在我安装的时候独立在网上下载了pdksh的rpm包,然后使用rpm -ivh 包名安装,下载地址:http://vault.centos.org/5.11/os/x86_64/CentOS/pdksh-5.2.14-37.el5_8.1.x86_64.rpm。如果没有出现我这个问题,可以略过这个独立安装。
8)配置oracle的环境变量,先切换oracle用户
输入:su - oracle
然后输入vi .bash_profile追加以下内容

umask 022
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_SID=orcl
export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib

解释:ORACLE_BASE环境变量为安装根目录,安装完之后会在ORACLE_HOME目录生成好多文件,ORACLE_SID为实例sid,可自定义。

9)开始安装
官网上下载linux版本的oracle11gR2,一共两个包linux.x64_11gR2_database_1of2.zip,linux.x64_11gR2_database_2of2.zip,使用ftp等方式上传到/home/oracle目录,并使用unzip命令进行解压。
解压完之后会生成database目录。(检查下database的所属用户信息 ll /home/oracle,一定要是oracle:oinstall,不是的话,使用如下命令修改chown -R oracle:oinstall /home/oracle/database)

构建静默安装的rsp响应文件,

[oracle@localhost ~]$ cd /home/oracle/database/response/
[oracle@localhost response]$ ls
dbca.rsp  dbca.rsp.bak  db_install.rsp  db_install.rsp.bak  netca.rsp  netca.rsp.bak

我上面把之前的响应文件做了备份。
db_install.rsp文件内容如下:为节省篇幅,我把所有的注释删除了。
注意的地方:INVENTORY_LOCATION为你要安装的目录(前提条件要创建好,之前步骤已创建好该目录),并设置好ORACLE_HOME和ORACLE_BASE,及oracle.install.db.config.starterdb.SID,主要是这几个配置是自定义的。

oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v11_2_0
oracle.install.option=INSTALL_DB_SWONLY
ORACLE_HOSTNAME=localhost
UNIX_GROUP_NAME=dba
INVENTORY_LOCATION=/u01/app/oraInventory
SELECTED_LANGUAGES=en,zh_CN
ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
ORACLE_BASE=/u01/app/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.isCustomInstall=false
oracle.install.db.customComponents=oracle.server:11.2.0.1.0,oracle.sysman.ccr:10.2.7.0.0,oracle.xdk:11.2.0.1.0,oracle.rdbms.oci:11.2.0.1.0,oracle.network:11.2.0.1.0,oracle.network.listener:11.2.0.1.0,oracle.rdbms:11.2.0.1.0,oracle.options:11.2.0.1.0,oracle.rdbms.partitioning:11.2.0.1.0,oracle.oraolap:11.2.0.1.0,oracle.rdbms.dm:11.2.0.1.0,oracle.rdbms.dv:11.2.0.1.0,orcle.rdbms.lbac:11.2.0.1.0,oracle.rdbms.rat:11.2.0.1.0
oracle.install.db.DBA_GROUP=dba
oracle.install.db.OPER_GROUP=dba
oracle.install.db.CLUSTER_NODES=
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE
oracle.install.db.config.starterdb.globalDBName=
oracle.install.db.config.starterdb.SID=orcl
oracle.install.db.config.starterdb.characterSet=AL32UTF8
oracle.install.db.config.starterdb.memoryOption=true
oracle.install.db.config.starterdb.memoryLimit=
oracle.install.db.config.starterdb.installExampleSchemas=false
oracle.install.db.config.starterdb.enableSecuritySettings=true
oracle.install.db.config.starterdb.password.ALL=
oracle.install.db.config.starterdb.password.SYS=
oracle.install.db.config.starterdb.password.SYSTEM=
oracle.install.db.config.starterdb.password.SYSMAN=
oracle.install.db.config.starterdb.password.DBSNMP=
oracle.install.db.config.starterdb.control=DB_CONTROL
oracle.install.db.config.starterdb.gridcontrol.gridControlServiceURL=
oracle.install.db.config.starterdb.dbcontrol.enableEmailNotification=false
oracle.install.db.config.starterdb.dbcontrol.emailAddress=
oracle.install.db.config.starterdb.dbcontrol.SMTPServer=
oracle.install.db.config.starterdb.automatedBackup.enable=false
oracle.install.db.config.starterdb.automatedBackup.osuid=
oracle.install.db.config.starterdb.automatedBackup.ospwd=
oracle.install.db.config.starterdb.storageType=
oracle.install.db.config.starterdb.fileSystemStorage.dataLocation=
oracle.install.db.config.starterdb.fileSystemStorage.recoveryLocation=
oracle.install.db.config.asm.diskGroup=
oracle.install.db.config.asm.ASMSNMPPassword=
MYORACLESUPPORT_USERNAME=
MYORACLESUPPORT_PASSWORD=
SECURITY_UPDATES_VIA_MYORACLESUPPORT=
DECLINE_SECURITY_UPDATES=true
PROXY_HOST=
PROXY_PORT=
PROXY_USER=
PROXY_PWD=

然后执行静默安装的如下命令

./runInstaller -silent -force -noconfig -ignorePrereq  -responseFile /home/oracle/database/response/db_install.rsp

以上命令会自动检查系统是否满足oracle11gR2的安装要求,如交换空间是否够,硬盘,内存等等。执行的时间会比较久,可以先去喝杯咖啡再听首音乐,如不出意外的情况下,会输出如下信息。

Execute Root Scripts in progress.
As a root user, execute the following script(s):
    1. /u01/app/oracle/oraInventory/orainstRoot.sh
    2. /u01/app/oracle/product/11.2.0.1/db_1/root.sh

根据要求,新开一个窗口,以root身份分别执行这两个脚本即可。

关于dbca.rsp文件,一种方式是修改好配置文件,然后使用命令短一点的方式执行,不过dbca命令也可以通过参数同样实现动态配置。所以一般使用第二种方式,加参数的方式。

dbca -silent -createDatabase -templateName $ORACLE_HOME/assistants/dbca/templates/General_Purpose.dbc -gdbName orcl -sid orcl   -sysPassword huangbaokang -systemPassword huangbaokang -datafileDestination /u01/app/oraData -characterSet UTF8 -automaticMemoryManagement true

一大推的百分号进度条之后,以上命令会创建一个sid:orcl,sys用户的密码为huangbaokang,数据文件存放/u01/app/oraData目录,数据库编码UTF8,关于更多的配置,查看更多的dbca资料。
如掌握删除数据库实例orcl方法:

dbca -silent -deleteDatabase -sourcedb orcl

最后一步配置监听listener
使用ntca命令进行

netca -silent -responsefile /home/oracle/database/response/netca.rsp

编辑生成的listenter.ora文件,追加

SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = orcl) (SID_NAME = orcl) ))

5、数据库验证

su - oracle 切换oracle用户
sqlplus / as sysdba 登录sqlplus
startup 启动oracle
建用户和表空间命令

/*临时表空间*/

create temporary tablespace hbk_temp
tempfile '/u01/app/oraData/orcl/hbk_temp.dbf'
size 50m
autoextend on
next 50m maxsize 20480m
extent management local;

/*创建数据表空间 */

create tablespace hbk_data
logging
datafile '/u01/app/oraData/orcl/hbk_data.dbf'
size 50m
autoextend on
next 50m maxsize 20480m
extent management local;



/*创建用户*/

create user hbk
  identified by "hbk"
  default tablespace hbk_data
  temporary tablespace hbk_temp
  profile DEFAULT;
grant connect to hbk;
grant dba to hbk;
grant exp_full_database to hbk;
grant imp_full_database to hbk;
grant resource to hbk;
grant unlimited tablespace to hbk;

exit 退出sqlplus
lsnrctl start命令启动监听

查看系统ip,使用ifconfig命令,用oracle sql developer等客户端进行连接验证,并注意防火墙问题。