静默安装Oracle11g
系统配置
# OS版本
[root@ljforacle03 ~]# cat /proc/version
Linux version 3.10.0-514.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) ) #1 SMP Tue Nov 22 16:42:41 UTC 2016
[root@ljforacle03 ~]# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
## 内核信息
[root@ljforacle03 ~]# uname -r
3.10.0-514.el7.x86_64
# 系统内存
[root@ljforacle03 ~]# cat /proc/meminfo |grep MemTotal
MemTotal: 16267760 kB
# swap内存和交换空间容量
[root@ljforacle03 ~]# free -t
total used free shared buff/cache available
Mem: 16267760 599752 660004 619444 15008004 14633956
Swap: 8388604 6632 8381972
Total: 24656364 606384 9041976
# /tmp目录中的空间
[root@ljforacle03 ~]# df -h /tmp
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 192G 134G 59G 70% /
# 磁盘空间
[root@ljforacle03 ~]# df -lh
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 192G 134G 59G 70% /
devtmpfs 7.8G 0 7.8G 0% /dev
tmpfs 7.8G 0 7.8G 0% /dev/shm
tmpfs 7.8G 8.6M 7.8G 1% /run
tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup
/dev/sda1 197M 114M 83M 58% /boot
tmpfs 1.6G 0 1.6G 0% /run/user/0
1、安装oracle依赖包关系
yum install -y binutils compat-libcap1 compat-libstdc++-33 compat-libstdc++-33.i686 glibc glibc.i686 glibc-devel glibc-devel.i686 ksh libaio libaio.i686 libaio-devel libaio-devel.i686 libX11 libX11.i686 libXau libXau.i686 libXi libXi.i686 libXtst libXtst.i686 libgcc libgcc.i686 libstdc++ libstdc++.i686 libstdc++-devel libstdc++-devel.i686 libxcb libxcb.i686 make nfs-utils net-tools smartmontools sysstat unixODBC unixODBC-devel gcc gcc-c++ libXext libXext.i686 zlib-devel zlib-devel.i686
2、修改内核参数
主要包括对内存调度、端口范围、打开文件数、I/O请求等相关的一些设置,相关数值不可低于安装要求
vim /etc/sysctl.conf
fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.shmall = 1073741824
kernel.shmmax = 4398046511104
kernel.panic_on_oops = 1
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500
刷新内核参数表
/sbin/sysctl -p
kernel.shmall:
- 该参数控制可以使用的共享内存的总页数。
- Linux共享内存页大小为4KB,共享内存段的大小都是共享内存页大小的整数倍。
- 一个共享内存段的最大大小是16G,那么需要共享内存页数是16GB/4KB=16777216KB /4KB=4194304(页)
- 也就是64Bit系统下16GB物理内存,设置kernel.shmall = 4194304才符合要求.
kernel.shmmax:
- 是核心参数中最重要的参数之一,用于定义单个共享内存段的最大值。
- 设置应该足够大,设置的过低可能会导致需要创建多个共享内存段,这样可能导致系统性能的下降。
- 至于导致系统下降的主要原因为在实例启动以及ServerProcess创建的时候,多个小的共享内存段可能会导致当时轻微的系统性能的降低,但是其他时候都不会有影响
- (在启动的时候需要去创建多个虚拟地址段,在进程创建的时候要让进程对多个段进行“识别”,会有一些影响)
- 官方建议值:
- 32位linux系统:可取最大值为4GB(4294967296bytes)-1byte,
- 即4294967295。建议值为多于内存的一半,所以如果是32为系统,一般可取值为4294967295。
- 64位linux系统:可取的最大值为物理内存值-1byte,建议值为多于物理内存的一半
- 例如,如果为12GB物理内存,可取1210241024*1024-1=12884901887。
kernel.shmmni:
该参数是共享内存段的最大数量。shmmni缺省值4096,一般肯定是够用了。
kernel.sem:
- 以kernel.sem = 250 32000 100 128为例:
- 250是参数semmsl的值,表示一个信号量集合中能够包含的信号量最大数目。
- 32000是参数semmns的值,表示系统内可允许的信号量最大数目。
- 100是参数semopm的值,表示单个semopm()调用在一个信号量集合上可以执行的操作数量。
- 128是参数semmni的值,表示系统信号量集合总数。
net.ipv4.ip_local_port_range:
- 表示应用程序可使用的IPv4端口范围。
net.core.rmem_default:
- 表示套接字接收缓冲区大小的缺省值。
net.core.rmem_max:
表示套接字接收缓冲区大小的最大值。
net.core.wmem_default:
- 表示套接字发送缓冲区大小的缺省值。
net.core.wmem_max:
- 表示套接字发送缓冲区大小的最大值。
3、修改内核限制参数
vim /etc/security/limits.d/20-nproc.conf
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.
* soft nproc 4096
root soft nproc unlimited
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384
oracle soft stack 10240
oracle hard stack 32768
oracle hard memlock 134217728
oracle soft memlock 134217728
4、创建oracle帐号和组
- oninstall -- 安装和升级Oracle程序
- dba --数据库中的一切操作:
- 启动、关闭、修改数据库、创建和删除数据库、切换日志归档模式、备份与恢复数据库
- oper -- 启动、关闭和修改数据库,切换日志归档模式、备份与恢复数据库
- asmdba -- 管理Oracle自动存储管理(ASM)实例
- asmoper -- 启动和停止Oracle ASM实例
- asmadmin -- 挂载和卸载磁盘组与管理其他存储设备
- backupdba -- 12c新功能:启动、关闭和执行所有备份与恢复
- dgdba -- 12c新功能:管理Data Guard环境的相关操作
- kmdba -- 12c新功能:加密管理的相关操作
groupadd -g 500 oinstall
groupadd -g 501 dba
useradd -u 500 -g oinstall -G dba oracle
passwd oracle
5、创建相关数据库目录
orapath=/oracle
mkdir ${orapath}
mkdir ${orapath}/app
mkdir -p ${orapath}/app/oracle/oradata
chmod -R 775 ${orapath}/app
chown -R oracle:oinstall ${orapath}
6、修改oracle环境变量
vi /home/oracle/.bash_profile
......
# Oracle Settings
export ORACLE_HOME=/oracle/app/oracle/product/11/db_1
export ORACLE_SID=liangdb
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
7、解压oracle二进制包
(解压的目录默认名为database)
wget http://192.168.10.77/oracle/linux.x64_11gR2_database_1of2.zip
wget http://192.168.10.77/oracle/linux.x64_11gR2_database_2of2.zip
unzip linux.x64_11gR2_database_1of2.zip
unzip linux.x64_11gR2_database_2of2.zip
mv database /oracle
chown -R oracle:oinstall /oracle
8、修改配置文件
vi /oracle/database/response/db_install.rsp
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v11_2_0
oracle.install.option=INSTALL_DB_SWONLY # 29行
ORACLE_HOSTNAME=ljforacle03 # 37行
UNIX_GROUP_NAME=ljforacle03 # 42行
INVENTORY_LOCATION=/oracle/app/oracle/oraInventory # 47行
ORACLE_HOME=/oracle/app/oracle/product/11/db_1 # 83行
ORACLE_BASE=/oracle/app/oracle # 88行
oracle.install.db.InstallEdition=EE # 99行
oracle.install.db.DBA_GROUP=dba # 142行
oracle.install.db.OPER_GROUP=oinstall # 147行
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE # 160行
oracle.install.db.config.starterdb.globalDBName=liangdb # 165行
oracle.install.db.config.starterdb.SID=liangdb # 170行
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false # 376行
DECLINE_SECURITY_UPDATES=true # 385行
# 设置安全更新(貌似是有bug,这个一定要选true,否则会无限提醒邮件地址有问题,终止安装。PS:不管地址对不对)
9、缺少/etc/oraInst.loc文件
- 如果服务器上已经有oraInst.loc文件,那么可以跳过该步骤
- 在使用自动安装方式时,创建oraInst.loc文件的步骤仅需在第一次安装Oracle程序时做
- 如果使用OUI图形界面安装程序,那么该安装程序会自动创建oraInst.loc文件
- 在Linux服务器上,oraInst.loc文件通常位于/etc目录中
- oraInst.loc文件包含有一下信息:
- Oracle清单目录路径:inventory_loc=/oracle/app/oracle/oraInventory
- 包含有管理Oracle安装和升级的文件
- 该目录结构中含有inventory.xml文件,该文件含有服务器上已安装的各种Oracle版本记录
- 拥有安装和升级Oracle软件操作权限的OS组的名称:inst_group=oinstall
- 该组拥有安装和升级Oracle软件的权限
- Oracle清单目录路径:inventory_loc=/oracle/app/oracle/oraInventory
vim /etc/oraInst.loc
inventory_loc=/oracle/app/oracle/oraInventory
inst_group=oinstall
chown oracle:oinstall /etc/oraInst.loc
chmod 644 /etc/oraInst.loc
10、切换至oracle用户,开始安装oracle
cd /oracle/database
./runInstaller -force -silent -noconfig -ignorePrereq -responseFile /oracle/database/response/db_install.rsp
Starting Oracle Universal Installer...
....
As a root user, execute the following script(s):
1. /oracle/app/oracle/product/11/db_1/root.sh
Successfully Setup Software.
11、安装完后,切换root用户运行脚本
[root@ljforacle03 ~]# sh /oracle/app/oracle/product/11/db_1/root.sh
12、静默配置监听
[oracle@ljforacle03 database]$ source /home/oracle/.bash_profile
[oracle@ljforacle03 database]$ netca /silent /responseFile /oracle/database/response/netca.rsp
Parsing command line arguments:
Parameter "silent" = true
Parameter "responsefile" = /oracle/database/response/netca.rsp
Done parsing command line arguments.
Oracle Net Services Configuration:
Profile configuration complete.
Oracle Net Listener Startup:
Running Listener Control:
/oracle/app/oracle/product/11/db_1/bin/lsnrctl start LISTENER
Listener Control complete.
Listener started successfully.
Listener configuration complete.
Oracle Net Services configuration successful. The exit code is 0
[oracle@ljforacle03 database]$
13、查看监听状态
[oracle@ljforacle03 database]$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 05-SEP-2019 11:08:49
Copyright (c) 1991, 2009, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date 05-SEP-2019 10:13:39
Uptime 0 days 0 hr. 55 min. 10 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /oracle/app/oracle/product/11/db_1/network/admin/listener.ora
Listener Log File /oracle/app/oracle/diag/tnslsnr/ljforacle02/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ljforacle02)(PORT=1521)))
Services Summary...
Service "liangdb" has 1 instance(s).
Instance "liangdb", status READY, has 1 handler(s) for this service...
Service "liangdbXDB" has 1 instance(s).
Instance "liangdb", status READY, has 1 handler(s) for this service...
The command completed successfully
[oracle@ljforacle03 database]$
14、修改配置文件
vi /oracle/database/response/dbca.rsp
[GENERAL]
RESPONSEFILE_VERSION = "11.2.0"
OPERATION_TYPE = "createDatabase"
[CREATEDATABASE]
GDBNAME = "liangdb"
POLICYMANAGED = "false"
CREATESERVERPOOL = "false"
FORCE = "false"
SID = "liangdb"
TEMPLATENAME = "General_Purpose.dbc"
SYSPASSWORD = "********"
SYSTEMPASSWORD = "********"
SYSMANPASSWORD = "********"
DBSNMPPASSWORD = "********"
DATAFILEJARLOCATION = {ORACLE_HOME}/assistants/dbca/templates/
DATAFILEDESTINATION = {ORACLE_BASE}/oradata/{DB_UNIQUE_NAME}/
RECOVERYAREADESTINATION={ORACLE_BASE}/fast_recovery_area/{DB_UNIQUE_NAME}
STORAGETYPE=FS
CHARACTERSET = "ZHS16GBK"
REGISTERWITHDIRSERVICE= FALSE
LISTENERS = "LISTENER"
VARIABLES = DB_UNIQUE_NAME=liangdb,ORACLE_BASE=/oracle/app/oracle,PDB_NAME=,DB_NAME=liangdb,ORACLE_HOME=/oracle/app/oracle/product/11/db_1,SID=liangdb
MEMORYPERCENTAGE = "60"
DATABASETYPE = "MULTIPURPOSE"
AUTOMATICMEMORYMANAGEMENT = "FALSE" # 如果内存低于16G的设置为 flase
TOTALMEMORY = "12000"
15、静默建库命令
[oracle@ljforacle03 root]$ source /home/oracle/.bash_profile
[oracle@ljforacle03 root]$ dbca -silent -responseFile /oracle/database/response/dbca.rsp
Cleaning up failed steps
5% complete
Copying database files
7% complete
9% complete
16% complete
23% complete
30% complete
41% complete
Creating and starting Oracle instance
43% complete
48% complete
53% complete
57% complete
58% complete
59% complete
62% complete
64% complete
Completing Database Creation
68% complete
71% complete
75% complete
85% complete
96% complete
100% complete
Look at the log file "/oracle/app/oracle/cfgtoollogs/dbca/liangdb/liangdb0.log" for further details.
[oracle@ljforacle03 root]$
16、检查oracle进程状态
ps -ef | grep ora_ | grep -v grep
lsnrctl status (lsnrctl是oracle命令)