1. 程式人生 > >CentOS 7靜默(無圖形化介面)安裝Oracle 11g

CentOS 7靜默(無圖形化介面)安裝Oracle 11g

1、準備CentOS 7 系統環境

我以 CentOS-7-x86_64-DVD-1511.iso 為例,簡述Oracle 11g的安裝過程。
由於是使用靜默模式(silent)安裝的,無需使用圖形化介面,我選擇了最小安裝的伺服器版的CentOS 7。
安裝過程可參考 https://jingyan.baidu.com/article/fd8044fade8ac35031137a82.html
安裝完成後,只有命令列介面。

2、下載 Oracle 11g

11.2.0.2.0 zlinux64版本的Oracle是安裝在IBM伺服器的,CentOS 7是無法安裝的。
下載完成後,有兩個壓縮檔案

linux.x64_11gR2_database_1of2.zip
linux.x64_11gR2_database_2of2.zip

通過Xftp將壓縮檔案上傳到 /tmp/

3、安裝依賴包

安裝依賴包之前,個人建議將yum源修改為aliyun源,下載速度快些,執行如下命令即可:

cd /etc
mv yum.repos.d yum.repos.d.bak
mkdir yum.repos.d
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache

修改成功後,安裝如下依賴包:

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"

發現 pdksh 沒有安裝
這裡寫圖片描述

執行yum -y install pdksh,發現CentOS 7 沒有相關安裝包可用
這裡寫圖片描述

通過wget命令直接下載pdksh的rpm包,我下載到了/tmp/

wget -O /tmp/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

下載完成後,進入 /tmp/

rpm -ivh pdksh-5.2.14-37.el5_8.1.x86_64.rpm

再次檢查依賴包是否安裝完整

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"

這裡寫圖片描述
到此依賴包安裝完整

4、新增oracle使用者組和使用者

groupadd oinstall
groupadd dba
groupadd asmadmin
groupadd asmdba
useradd -g oinstall -G dba,asmdba oracle -d /home/oracle

新增完成後,檢視oracle使用者

id oracle

初始化oracle使用者的密碼

passwd oracle

這裡寫圖片描述

5、配置hostname(本機IP對映)

vim /etc/hosts
192.168.154.154 centos-oracle

測試hostname

ping -c 3 centos-oracle

這裡寫圖片描述

6、優化OS核心引數

kernel.shmmax 引數設定為實體記憶體的一半

vim /etc/sysctl.conf
fs.aio-max-nr=1048576
fs.file-max=6815744
kernel.shmall=2097152
kernel.shmmni=4096
kernel.shmmax = 1073741824
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

使引數生效

sysctl -p

這裡寫圖片描述

7、限制oracle使用者的shell許可權

vim /etc/security/limits.conf
oracle              soft    nproc   2047
oracle              hard    nproc   16384
oracle              soft    nofile  1024
oracle              hard    nofile  65536
vim /etc/pam.d/login
session  required   /lib64/security/pam_limits.so
session  required   pam_limits.so
vim /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

8、建立oracle安裝目錄

mkdir -p /db/app/oracle/product/11.2.0 
mkdir /db/app/oracle/oradata 
mkdir /db/app/oracle/inventory 
mkdir /db/app/oracle/fast_recovery_area 
chown -R oracle:oinstall /db/app/oracle 
chmod -R 775 /db/app/oracle

9、配置oracle使用者環境變數

su - oracle
vim .bash_profile
umask 022
export ORACLE_HOSTNAME=centos-oracle
export ORACLE_BASE=/db/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/
export ORACLE_SID=ORCL
export PATH=.:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$ORACLE_HOME/jdk/bin:$PATH
export LC_ALL="en_US"
export LANG="en_US"
export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"
export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"

以上配置完成後,個人建議重啟下系統

reboot 

10、解壓oracle壓縮檔案到 /db

cd /tmp
unzip linux.x64_11gR2_database_1of2.zip -d /db
unzip linux.x64_11gR2_database_2of2.zip -d /db

解壓完成後

mkdir /db/etc/
cp /db/database/response/* /db/etc/
vim /db/etc/db_install.rsp
oracle.install.option=INSTALL_DB_SWONLY
DECLINE_SECURITY_UPDATES=true
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/db/app/oracle/inventory
SELECTED_LANGUAGES=en,zh_CN
ORACLE_HOSTNAME=centos-oracle
ORACLE_HOME=/db/app/oracle/product/11.2.0
ORACLE_BASE=/db/app/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.isCustomInstall=true
oracle.install.db.DBA_GROUP=dba
oracle.install.db.OPER_GROUP=dba

開始安裝

su - oracle
./runInstaller -silent -responseFile /db/etc/db_install.rsp -ignorePrereq

安裝期間可以使用tail命令監看oracle的安裝日誌

tail -f /db/app/oracle/inventory/logs/installActions2017-07-12_03-48-29PM.log

這裡寫圖片描述
安裝完成,提示Successfully Setup Software.
根據提示完成配置
這裡寫圖片描述

su root
sh /db/app/oracle/inventory/orainstRoot.sh
sh /db/app/oracle/product/11.2.0/root.sh

這裡寫圖片描述

11、配置靜默監聽

su - oracle
netca /silent /responsefile /db/etc/netca.rsp

這裡寫圖片描述

檢視監聽埠

netstat -tnulp | grep 1521

這裡寫圖片描述

12、靜默建立資料庫

TOTALMEMORY 設定為總記憶體的80%

vi /db/etc/dbca.rsp
GDBNAME = "orcl"
SID = "orcl"
SYSPASSWORD = "oracle"
SYSTEMPASSWORD = "oracle"
SYSMANPASSWORD = "oracle"
DBSNMPPASSWORD = "oracle"
DATAFILEDESTINATION =/db/app/oracle/oradata
RECOVERYAREADESTINATION=/db/app/oracle/fast_recovery_area
CHARACTERSET = "AL32UTF8"
TOTALMEMORY = "1638"

執行靜默建庫

dbca -silent -responseFile /db/etc/dbca.rsp

這裡寫圖片描述

檢視oracle例項程序

ps -ef | grep ora_ | grep -v grep

這裡寫圖片描述

檢視監聽狀態

lsnrctl status

這裡寫圖片描述

登入sqlplus,檢視例項狀態

sqlplus / as sysdba
select status from v$instance;

這裡寫圖片描述

出現以下情況,解決方式如下:輸入startup,根據提示資訊,將$ORACLE_BASE/admin/資料庫名稱/pfile目錄下的init.ora.xxx形式的檔案copy到$ORACLE_HOME/dbs目錄下initoracle.ora(根據startup提示)即可。
這裡寫圖片描述

檢視資料庫編碼

select userenv('language') from dual;

這裡寫圖片描述

檢視資料庫版本資訊

select * from v$version;

這裡寫圖片描述

啟用scott使用者

alter user scott account unlock;
alter user scott identified by tiger;
select username,account_status from all_users;

這裡寫圖片描述

13、Navicat遠端連線Oracle

開放1521埠

firewall-cmd --zone=public --add-port=1521/tcp --permanent
firewall-cmd --reload

開啟OCI介面,在右側OCI library一欄中選擇instantclient-basic解壓目錄下的oci.dll,然後點選確定。
這裡寫圖片描述

重啟Navicat,點選連線,選中Oracle
這裡寫圖片描述

IP為Oracle伺服器的IP地址,服務名為Oracle的例項名,可忽略大小寫

select instance_name from v$instance;

這裡寫圖片描述

使用者名稱使用剛啟用的scott,密碼為tiger,填完以上資訊後點擊連線測試
這裡寫圖片描述

到此Navicat遠端連線Oracle資料庫成功。

14、設定Oracle開機啟動

vi /db/app/oracle/product/11.2.0/bin/dbstart
ORACLE_HOME_LISTNER=$ORACLE_HOME
vi /db/app/oracle/product/11.2.0/bin/dbshut
ORACLE_HOME_LISTNER=$ORACLE_HOME
vi /etc/oratab

`orcl:/db/app/oracle/product/11.2.0:Y

vi /etc/rc.d/init.d/oracle
#! /bin/bash
# oracle: Start/Stop Oracle Database 11g R2
#
# chkconfig: 345 90 10
# description: The Oracle Database is an Object-Relational Database Management System.
#
# processname: oracle
. /etc/rc.d/init.d/functions
LOCKFILE=/var/lock/subsys/oracle
ORACLE_HOME=/db/app/oracle/product/11.2.0
ORACLE_USER=oracle
case "$1" in
'start')
   if [ -f $LOCKFILE ]; then
      echo $0 already running.
      exit 1
   fi
   echo -n $"Starting Oracle Database:"
   su - $ORACLE_USER -c "$ORACLE_HOME/bin/lsnrctl start"
   su - $ORACLE_USER -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME"
   su - $ORACLE_USER -c "$ORACLE_HOME/bin/emctl start dbconsole"
   touch $LOCKFILE
   ;;
'stop')
   if [ ! -f $LOCKFILE ]; then
      echo $0 already stopping.
      exit 1
   fi
   echo -n $"Stopping Oracle Database:"
   su - $ORACLE_USER -c "$ORACLE_HOME/bin/lsnrctl stop"
   su - $ORACLE_USER -c "$ORACLE_HOME/bin/dbshut"
   su - $ORACLE_USER -c "$ORACLE_HOME/bin/emctl stop dbconsole"
   rm -f $LOCKFILE
   ;;
'restart')
   $0 stop
   $0 start
   ;;
'status')
   if [ -f $LOCKFILE ]; then
      echo $0 started.
      else
      echo $0 stopped.
   fi
   ;;
*)
   echo "Usage: $0 [start|stop|status]"
   exit 1
esac
exit 0

開機啟動oracle

systemctl enable oracle

15、開機啟動問題

oracle ORA-12547: TNS:lost contact

cd /db/app/oracle/product/11.2.0/bin/
chmod 6751 oracle

TNS-12555: TNS:permission denied

cd /var/tmp
chown -R oracle:oinstall .oracle