Linux下静默安装Oracle
相比Windows,在Linux安装Oracle的步骤可能略显繁琐,同时Oracle提供了静默安装方法在不适用图形界面的情况下进行安装,我们本次使用静默安装。为了避免以后忘记,因此我将本次安装过程记录,当日后需要的时候,可以再次回顾。
本人环境:CentOS 7.6 64位
安装版本:Oracle 11.2.0
准备安装包
关于 Oracle 11g
的安装包,我们可以直接到官网上下载。
下载链接:https://www.oracle.com/database/technologies/oracle-database-software-downloads.html
下载完成之后,我们需要将安装包上传到Linux服务器上,Oracle 11g的安装包比较大,因此我借助了 WinSCP
文件传输软件来完成上传,最终,Linux服务器上得到的安装包如下。
接着,将安装包依次解压,命令如下:
unzip linux.x64_11gR2_database_1of2.zip
unzip linux.x64_11gR2_database_2of2.zip
解压完成,会得到一个database的文件夹。
安装依赖包
在这里,需要安装一些依赖包,命令如下:
yum -y 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
安装之后,需要检查下依赖包是否安装完整,过滤出未安装完整的依赖,命令如下:
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"
如果发现有未安装的,可以通过 yum
安装,或者通过 wget
命令下载rpm包,再手动安装。
[_0_8_centos database]# 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" package pdksh is not installed [_0_8_centos database]#
如上,发现 pdksh
没有安装,通过 yum
安装。
[_0_8_centos database]# yum -y install pdksh Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile No package pdksh available. Error: Nothing to do [_0_8_centos database]#
可以看到没有相关安装包可用,那么只能通过 wget
命令直接下载rpm包后手动安装,命令如下:
mkdir /software/temp wget -O /software/temp/pdksh-5.2.14-37.el5_8.1.x86_64.rpm http://vault.centos.org/5.11/os/x86_64/CentOS/pdksh-5.2.14-37.el5_8.1.x86_64.rpm
下载完成,进入刚创建的临时目录 /software/temp ,通过命令 rpm -ivh
进行手动安装。
[_0_8_centos software]# cd /software/temp [_0_8_centos temp]# ls pdksh-5.2.14-37.el5_8.1.x86_64.rpm [_0_8_centos temp]# rpm -ivh pdksh-5.2.14-37.el5_8.1.x86_64.rpm warning: pdksh-5.2.14-37.el5_8.1.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID e8562897: NOKEY Preparing... ################################# [100%] Updating / installing... 1:pdksh-5.2.14-37.el5_8.1 ################################# [100%] [_0_8_centos temp]#
再次检查下依赖包是否完整,确保所需依赖包都已安装。
创建Oracle用户及安装目录
- 创建和查看用户
# 创建用户 groupadd oinstall groupadd dba groupadd asmdba useradd -g oinstall -G dba,asmdba oracle -d /home/oracle # 查看用户 id oracle
- 设置Oracle账户密码
[_0_8_centos software]# passwd oracle Changing password for user oracle. New password: BAD PASSWORD: The password is shorter than 8 characters Retype new password: passwd: all authentication tokens updated successfully. [_0_8_centos software]#
- 设置安装目录
[_0_8_centos software]# mkdir -p /software/app/oracle [_0_8_centos software]# chown oracle:oinstall /software/app/oracle [_0_8_centos software]# chmod -R 775 /software [_0_8_centos software]# chown oracle:oinstall -R /software
修改系统文件参数配置
- 配置hostname
可以将服务器名写入到hosts文件,这样以后就可以通过服务器名来进行连接。
vi /etc/hosts
在文件末加入 127.0.0.1 oracledb localhost localhost.localdomain
,最后保存退出。
测试是否配置成功,则执行命令:ping -c 3 oracledb
[_0_8_centos temp]# ping -c 3 oracledb PING oracledb (127.0.0.1) 56(84) bytes of data. 64 bytes from VM_0_8_centos (127.0.0.1): icmp_seq=1 ttl=64 time=0.018 ms 64 bytes from VM_0_8_centos (127.0.0.1): icmp_seq=2 ttl=64 time=0.021 ms 64 bytes from VM_0_8_centos (127.0.0.1): icmp_seq=3 ttl=64 time=0.020 ms --- oracledb ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 1999ms rtt min/avg/max/mdev = 0.018/0.019/0.021/0.005 ms [_0_8_centos temp]#
- 修改内核参数
vi /etc/sysctl.conf
将 kernel.shmmax 与 kernel.shmall 注释掉,然后在文件末追加新配置内容。以下是从网上收集到的一些配置,需根据自己服务器内存选择追加的内容,仅供参考。
# 主机是4G内存选用 kernel.shmmax = 4294967296 kernel.shmall = 4294967296 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 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 fs.aio-max-nr=1048576 # 主机是32G内存选用 kernel.shmmax = 17179869184 kernel.shmall = 17179869184 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 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 fs.aio-max-nr=1048576 # 主机是64G内存选用 kernel.shmmax = 68719476736 kernel.shmall = 68719476736 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 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 fs.aio-max-nr=1048576
修改参数之后,我们需要让参数生效,执行命令:sysctl -p
。
- 检查selinux,确保SELINUX=disabled
cat /etc/selinux/config
- 修改资源使用配置文件
vi /etc/security/limits.conf
在文件末追加以下内容:
oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536
- 修改用户登录认证
vi /etc/pam.d/login
在文件末追加以下内容:
session required /lib64/security/pam_limits.so session required pam_limits.so
vi /etc/profile
在文件末追加以下内容:
if [ $USER = "oracle" ]; then if [ $SHELL = "/bin/ksh" ]; then ulimit -p 16384 ulimit -n 65536 else ulimit -u 16384 -n 65536 fi fi
为了让上面修改的环境变量立即生效,执行命令:source /etc/profile
。
设置oracle用户环境变量
- 切换到oracle用户
su - oracle
- 修改用户的环境变量
vi .bash_profile
在文件末追加以下内容:
umask 022 export ORACLE_HOSTNAME=oracledb export ORACLE_BASE=/software/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1 export ORACLE_SID=orcl export PATH=$ORACLE_HOME/bin:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib export TNS_ADMIN=$ORACLE_HOME/network/admin # export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK" export NLS_LANG="AMERICAN_CHINA.ZHS16GBK"
OK,到这里我们的准备工作已经差不多,接下来就是静默安装配置和正式安装了,我们最好重启下服务器,执行命令:reboot
。
静默安装Oracle
- 修改响应文件db_install.rsp
进入 /software/database
(之前解压生成的目录),需要修改一下响应文件:vi /software/database/response/db_install.rsp
,参考了网上文章,需要修改的内容如下:
# 选择安装类型:1.只装数据库软件 2.安装数据库软件并建库 3.升级数据库 oracle.install.option=INSTALL_DB_SWONLY # 指定操作系统主机名,通过hostname命令获得 ORACLE_HOSTNAME=oracledb # 指定oracle inventory目录的所有者,通常会是oinstall或者dba UNIX_GROUP_NAME=oinstall # 指定产品清单oracle inventory目录的路径 INVENTORY_LOCATION=/software/app/oracle/inventory # 指定数据库语言,可以选择多个,用逗号隔开 SELECTED_LANGUAGES=en,zh_CN # 设置ORALCE_HOME的路径 ORACLE_HOME=/software/app/oracle/product/11.2.0/dbhome_1 # 设置ORALCE_BASE的路径 ORACLE_BASE=/software/app/oracle # 选择Oracle安装数据库软件的版本 oracle.install.db.InstallEdition=EE # 是否自定义安装 oracle.install.db.isCustomInstall=false # 指定拥有OSDBA、OSOPER权限的用户组,通常会是dba组 oracle.install.db.DBA_GROUP=dba oracle.install.db.OPER_GROUP=dba # 选择数据库的用途,一般用途/事物处理,数据仓库 oracle.install.db.config.starterdb.type=GENERAL_PURPOSE # 指定SID oracle.install.db.config.starterdb.SID=orcl # 选择字符集,我这里选择有ZHS16GBK简体中文库 oracle.install.db.config.starterdb.characterSet=ZHS16GBK # 是否设置安全更新,这里一定要设置为true DECLINE_SECURITY_UPDATES=true
下面就是正式安装了,切换到oracle用户,命令:su - oracle
,进入 /software/database
文件夹目录,执行以下命令,开始安装。
./runInstaller -silent -ignorePrereq -responseFile /software/database/response/db_install.rsp
在安装过程中,界面会提示告诉我们,可以到具体的日志路径下查看安装日志,使用 tail -f
实时监控日志即可。
[_0_8_centos database]$ ./runInstaller -silent -ignorePrereq -responseFile /software/database/response/db_install.rsp Starting Oracle Universal Installer... Checking Temp space: must be greater than 120 MB. Actual 87303 MB Passed Checking swap space: must be greater than 150 MB. Actual 2047 MB Passed Preparing to launch Oracle Universal Installer from /tmp/OraInstall2020-04-11_03-59-06PM. Please wait ...[_0_8_centos database]$ [WARNING] [INS-32055] The Central Inventory is located in the Oracle base. CAUSE: The Central Inventory is located in the Oracle base. ACTION: Oracle recommends placing this Central Inventory in a location outside the Oracle base directory. [WARNING] [INS-32055] The Central Inventory is located in the Oracle base. CAUSE: The Central Inventory is located in the Oracle base. ACTION: Oracle recommends placing this Central Inventory in a location outside the Oracle base directory. You can find the log of this install session at: /software/app/oracle/inventory/logs/installActions2020-04-11_03-59-06PM.log The following configuration scripts need to be executed as the "root" user. #!/bin/sh #Root scripts to run /software/app/oracle/inventory/orainstRoot.sh /software/app/oracle/product/11.2.0/dbhome_1/root.sh To execute the configuration scripts: 1. Open a terminal window 2. Log in as "root" 3. Run the scripts 4. Return to this window and hit "Enter" key to continue Successfully Setup Software. [_0_8_centos database]$
当在界面看到提示 Successfully Setup Software
,则说明安装完成,同时根据提示,还需要新开一个窗口使用root用户登陆并执行以下命令:
/software/app/oracle/inventory/orainstRoot.sh /software/app/oracle/product/11.2.0/dbhome_1/root.sh
最后,按回车键完成Oracle安装。
静默配置监听
切换到oracle用户,命令:su - oracle
,进入 /software/database
文件夹目录,执行命令:netca /silent /responsefile /software/database/response/netca.rsp
,开始配置监听。
[_0_8_centos database]$ netca /silent /responsefile /software/database/response/netca.rsp Parsing command line arguments: Parameter "silent" = true Parameter "responsefile" = /software/database/response/netca.rsp Done parsing command line arguments. Oracle Net Services Configuration: Profile configuration complete. Oracle Net Listener Startup: Running Listener Control: /software/app/oracle/product/11.2.0/dbhome_1/bin/lsnrctl start LISTENER Listener Control complete. Listener started successfully. Listener configuration complete. Oracle Net Services configuration successful. The exit code is 0
静默创建数据库
- 修改文件dbca.rsp
vi /software/database/response/dbca.rsp
根据自己需要修改,比如这样:
GDBNAME = "orcl" SID = "orcl" SYSPASSWORD = "oracle" SYSTEMPASSWORD = "oracle" SYSMANPASSWORD = "oracle" DBSNMPPASSWORD = "oracle" DATAFILEDESTINATION =/software/app/oracle/oradata RECOVERYAREADESTINATION=/software/app/oracle/flash_recovery_area # 根据实际情况设置字符集 CHARACTERSET = "ZHS16GBK"
- 静默创建数据库
切换到oracle用户,命令:su - oracle
,进入 /software/database
文件夹目录,执行命令:dbca -silent -responseFile /software/database/response/dbca.rsp
,开始创建数据库。
[_0_8_centos database]$ dbca -silent -responseFile /software/database/response/dbca.rsp Copying database files 1% complete 3% complete 11% complete 18% complete 26% complete 37% complete Creating and starting Oracle instance 40% complete 45% complete 50% complete 55% complete 56% complete 60% complete 62% complete Completing Database Creation 66% complete 70% complete 73% complete 85% complete 96% complete 100% complete Look at the log file "/software/app/oracle/cfgtoollogs/dbca/orcl/orcl.log" for further details. [_0_8_centos database]$
我们可以使用Oracle用户,通过命令 lsnrctl status
查看监听状态。
[_0_8_centos ~]$ lsnrctl status LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 11-APR-2020 17:20:16 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 11-APR-2020 16:20:37 Uptime 0 days 0 hr. 59 min. 39 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /software/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora Listener Log File /software/app/oracle/diag/tnslsnr/VM_0_8_centos/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=VM_0_8_centos)(PORT=1521))) Services Summary... Service "orcl" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service... Service "orclXDB" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service... The command completed successfully [_0_8_centos ~]$
OK,到这里已经成功在Linux下安装Oracle。
登录Oracle
接下来,我们用上面设置的密码 SYSPASSWORD = "oracle"
来验证是否能正常登录。
[_0_8_centos ~]$ sqlplus sys/ as sysdba SQL*Plus: Release 11.2.0.1.0 Production on Sat Apr 11 17:34:39 2020 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>
设置Oracle开机启动
最后,我们还需要配置一下,让Oracle能够在服务器开机时自动启动。
- 配置/etc/oratab
vi /etc/oratab
使用root用户,修改 /etc/oratab
配置内容,设置如下:orcl:/software/app/oracle/product/11.2.0/dbhome_1:Y
。其中,/software/app/oracle/product/11.2.0/dbhome_1
为之前设置的 $ORACLE_HOME
路径。
- 配置/etc/rc.d/rc.local
vi /etc/rc.d/rc.local
su oracle -lc "/software/app/oracle/product/11.2.0/dbhome_1/bin/lsnrctl start" su oracle -lc "/software/app/oracle/product/11.2.0/dbhome_1/bin/dbstart"
- 给文件 /etc/rc.d/rc.local 增加执行权限
在CentOS7下,我们还需要检查文件 /etc/rc.d/rc.local 是否有执行权限,如果没有执行权限,则需执行命令:chmod +x /etc/rc.d/rc.local
。
完成以后操作后,需要验证一下,执行重启命令:reboot
,重启之后先执行命令:su - oracle
切换到Oracle,再执行命令 lsnrctl status
查看监听状态,同时可以正常进行Oracle登录,说明开机自启动是没问题的。
[_0_8_centos ~]$ su - oracle Password: Last login: Sat Apr 11 19:20:11 CST 2020 on pts/0 [_0_8_centos ~]$ lsnrctl status LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 11-APR-2020 19:23:44 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 11-APR-2020 19:17:31 Uptime 0 days 0 hr. 6 min. 12 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /software/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora Listener Log File /software/app/oracle/diag/tnslsnr/VM_0_8_centos/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=VM_0_8_centos)(PORT=1521))) Services Summary... Service "orcl" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service... Service "orclXDB" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service... The command completed successfully [_0_8_centos ~]$
可能遇到的问题
- Swap空间不够
在Oracle静默安装过程中,查看安装日志,发现出现错误并提示 swap空间
不够。
使用 free -m
命令查看swap大小,发现大小为0,难怪会提示空间小于150M。因此,我们需要给服务器增加swap虚拟空间。
[_0_8_centos /]# free -m total used free shared buff/cache available Mem: 32009 312 31455 0 242 31377 Swap: 0 0 0
参考了网上资料,给Linux主机创建了2G的swap文件,创建过程如下:
[_0_8_centos /]# dd if=/dev/zero of=/software/swap bs=2048 count=1048576 1048576+0 records in 1048576+0 records out 2147483648 bytes (2.1 GB) copied, 3.23491 s, 664 MB/s [_0_8_centos /]# mkswap /software/swap Setting up swapspace version 1, size = 2097148 KiB no label, UUID=ba7467e4-4d16-4c15-958a-9f03a8af5bc2 [_0_8_centos /]# chmod 600 /software/swap [_0_8_centos /]# swapon /software/swap [_0_8_centos /]# free -m total used free shared buff/cache available Mem: 32009 316 29324 0 2368 31336 Swap: 2047 0 2047 [_0_8_centos /]#
为了让开机时自动启用,还需修改文件 /etc/fstab
添加一行:
/software/swap swap swap defaults 0 0
- 提示 lsnrctl 命令找不到
我们使用oracle用户来操作,查看监听状态时,可能提示命令找不到。
[_0_8_centos ~]# su oracle [_0_8_centos root]$ cd ~ [_0_8_centos ~]$ lsnrctl status bash: lsnrctl: command not found [_0_8_centos ~]$ ^C [_0_8_centos ~]$
这是因为,在这里切换帐户一定要加 -
,即使用 su - oracle
,否则就会出现上面的错误。