靜默安裝Oracle也沒那麼恐怖

幾種必須靜默安裝的情況

  • 服務器爲了減少資源佔用,沒安裝圖形組件
  • 不能進入機房,只能遠程SSH
  • 想炫(Z)耀(B),靜默安裝顯得有技術含量

    磁盤分區要求

    如沒有特別要求,裝機時可按如下分區比較好管理

    /boot   ext3   100M  
    Swap    swap   32G   #一般和內存一樣大  
    /u01    ext3   800G  #Oracle安裝目錄和數據庫數據文件存放目錄,大小要大於預估的全部數據量
    /opt    ext3   5G  
    /tmp    ext3   2G  
    /       ext3   剩餘空間  

    安裝步驟大綱

沒明確指出操作賬號的步驟,請仔細看命令前面是井號還是美元,井號就是用root做的,美元就是用oracle做的。

  1. 裝前檢查
  2. 創建組和用戶
  3. 修改內核參數
  4. 修改用戶限制
  5. 關閉SELinux及防火牆
  6. 創建安裝目錄
  7. 設置環境變量
  8. 執行runInstaller安裝Oracle
  9. 執行dbca建立數據庫
  10. 配置tnsnames.ora
  11. 執行lsnrctl啓動監聽,PLSQL連接

    安裝前檢查

    兩個安裝包
    linux.x64_11gR2_database_1of2.zip
    linux.x64_11gR2_database_2of2.zip
    Oracle版本是11.2.0.1.0
    Linux版本Red Hat Enterprise Linux Server release 6.6 (Santiago)



物理內存檢查:
至少4G,查看物理內存命令:

# grep MemTotal /proc/meminfo

虛擬內存檢查:
物理內存4-8G,虛擬內存爲2倍物理內存;
物理內存8-32G,虛擬內存爲1.5倍物理內存;
物理內存>32G,虛擬內存等於物理內存;


查看虛擬內存命令:

# grep SwapTotal /proc/meminfo

依賴包檢查

rpm -q \
binutils \
compat-libstdc++-33 \
elfutils-libelf \
elfutils-libelf-devel \
elfutils-libelf-devel-static \
expat \
gcc \
gcc-c++ \
glibc \
glibc-common \
glibc-devel \
glibc-headers \
libaio \
libaio-devel \
libgcc \
libstdc++ \
libstdc++-devel \
make \
ksh \
sysstat \
numactl-devel \
kernel-headers \
libgomp        \
unixODBC \
unixODBC-devel | grep "not installed"|awk '{print $2;}'

輸入下面幾個包,說明系統沒有

compat-libstdc++-33
elfutils-libelf-devel
elfutils-libelf-devel-static
gcc
gcc-c++
libaio-devel
libstdc++-devel
ksh
numactl-devel
unixODBC
unixODBC-devel

配好yum源,逐個yum install上面的包。

創建組和用戶

[root@ORATEST]# groupadd oinstall
[root@ORATEST]# groupadd dba
[root@ORATEST]# useradd -g oinstall -G dba oracle
[root@ORATEST]# passwd oracle
Changing password for user oracle.
New password: 
BAD PASSWORD: it is based on a dictionary word
BAD PASSWORD: is too simple
Retype new password:      #此處密碼輸入oracle,BAD PASSWORD提示不用管
passwd: all authentication tokens updated successfully.

修改內核參數

# vi /etc/sysctl.conf

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 = 1048586
fs.aio-max-nr = 1048576

使設置生效

#sysctl -p

檢查設置是否成功

[root@ORATEST ~]# sysctl kernel.sem fs.file-max net.ipv4.ip_local_port_range net.core.rmem_default net.core.rmem_max net.core.wmem_default net.core.wmem_max fs.aio-max-nr
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 = 1048586
fs.aio-max-nr = 1048576

用戶限制設置

# vi /etc/security/limits.conf

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

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

關閉SELinux及防火牆

查看SELinux狀態:sestatus

永久關閉SELinux,需重啓:
# vi /etc/sysconfig/selinux

#SELINUX=enforcing
SELINUX=disabled

即時關閉SELinux指令:
setenforce 0  或者  setenforce permissive

關閉防火牆:
Linux6及以下:
查看防火牆狀態:service iptables status

重啓後生效 
關閉: chkconfig iptables off 

即時關閉防火牆指令  
關閉: service iptables stop

創建安裝目錄

[root@ORATEST ~]# mkdir -p /u01/app/
[root@ORATEST ~]# chown -R oracle:oinstall /u01/app/
[root@ORATEST ~]# chmod -R 775 /u01/app/

配置環境變量

[root@ORATEST ~]# su - oracle
[oracle@ORATEST ~]$ vi /home/oracle/.bash_profile vi /home/oracle/.bash_profile
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
ORACLE_SID=oral; export ORACLE_SID
export ORACLE_OWNER=oracle
export PATH=$PATH:$ORACLE_HOME/bin:/bin:/usr/local/bin:/usr/sbin:/usr/bin
export TNS_ADMIN=$ORACLE_HOME/network/admin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/oracm/lib:/lib:/usr/lib:/usr/local/lib
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/JRE
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/JRE/lib
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib
export LIBPATH=${CLASSPATH}:$ORACLE_HOME/lib:$ORACLE_HOME/ctx/lib
export SPFILE_PATH=$ORACLE_HOME/dbs
export ORA_NLS10=$ORACLE_HOME/nls/data
umask 022

新開個會話,以Oracle賬號登陸,檢查環境是否生效

[oracle@ORATEST ~]$ env | more
[oracle@ORATEST ~]$ umask

以root賬號,新建oraInst.loc,執行

# vi /etc/oraInst.loc

inventory_loc=/u01/app/oracle/oraInventory
inst_group=oinstall

[root@ORATEST ~]# chown oracle:oinstall /etc/oraInst.loc
[root@ORATEST ~]# chmod 664 /etc/oraInst.loc

執行runInstaller安裝Oracle

修改host文件

[root@ORATEST ~]# vi /etc/hosts
...
127.0.0.1   ORATEST   #最後加上這行

將兩個安裝包上傳到/u01/app,確保安裝包屬於oracle用戶

[root@ORATEST app]# chown -R oracle:oinstall *.zip
[root@ORATEST app]# ll
total 2295600
-rw-r--r--. 1 oracle oinstall 1239269270 Jan 22 14:29 linux.x64_11gR2_database_1of2.zip
-rw-r--r--. 1 oracle oinstall 1111416131 Jan 22 14:29 linux.x64_11gR2_database_2of2.zip

如果已經屬於oracle用戶,上面步驟不用做。
在oracle賬號下,按順序解壓

[oracle@ORATEST app]$unzip linux.x64_11gR2_database_1of2.zip  
[oracle@ORATEST app]$unzip linux.x64_11gR2_database_2of2.zip  

解壓後文件都在database目錄裏

[oracle@ORATEST app]$ ll
total 2295604
drwxr-xr-x. 8 oracle oinstall       4096 Aug 21  2009 database
-rw-r--r--. 1 oracle oinstall 1239269270 Jan 22 14:29 linux.x64_11gR2_database_1of2.zip
-rw-r--r--. 1 oracle oinstall 1111416131 Jan 22 14:29 linux.x64_11gR2_database_2of2.zip

拷貝安裝配置模板文件到當前目錄(/u01/app)下

[oracle@ORATEST app]$ cp database/response/db_install.rsp  .

創建三個目錄,oracle是安裝目錄,oradata是數據文件目錄,oradatabackup,是數據文件備份目錄

[oracle@ORATEST app]$ mkdir oracle   
[oracle@ORATEST app]$ mkdir oradata
[oracle@ORATEST app]$ mkdir oradatabackup

編輯db_install.rsp,編輯後和原始文件差異如下,

[oracle@ORATEST app]$ diff db_install.rsp database/response/db_install.rsp
29c29
< oracle.install.option=INSTALL_DB_AND_CONFIG
---
> oracle.install.option=
37c37
< ORACLE_HOSTNAME=localhost
---
> ORACLE_HOSTNAME=
42c42
< UNIX_GROUP_NAME=oinstall
---
> UNIX_GROUP_NAME=
47c47
< INVENTORY_LOCATION=/u01/app
---
> INVENTORY_LOCATION=
78c78
< SELECTED_LANGUAGES=en,zh_CN
---
> SELECTED_LANGUAGES=
83c83
< ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
---
> ORACLE_HOME=
88c88
< ORACLE_BASE=/u01/app/oracle
---
> ORACLE_BASE=
99c99
< oracle.install.db.InstallEdition=EE
---
> oracle.install.db.InstallEdition=
142c142
< oracle.install.db.DBA_GROUP=dba
---
> oracle.install.db.DBA_GROUP=
147c147
< oracle.install.db.OPER_GROUP=dba
---
> oracle.install.db.OPER_GROUP=
160c160
< oracle.install.db.config.starterdb.type=GENERAL_PURPOSE
---
> oracle.install.db.config.starterdb.type=
165c165
< oracle.install.db.config.starterdb.globalDBName=orcl
---
> oracle.install.db.config.starterdb.globalDBName=
170c170
< oracle.install.db.config.starterdb.SID=orcl
---
> oracle.install.db.config.starterdb.SID=
184c184
< oracle.install.db.config.starterdb.characterSet=ZHS16GBK
---
> oracle.install.db.config.starterdb.characterSet=AL32UTF8
200c200
< oracle.install.db.config.starterdb.memoryLimit=1024
---
> oracle.install.db.config.starterdb.memoryLimit=
233c233
< oracle.install.db.config.starterdb.password.ALL=oracle
---
> oracle.install.db.config.starterdb.password.ALL=
278,279c278
< oracle.install.db.config.starterdb.dbcontrol.emailAddress=test@qq.com
< 
---
> oracle.install.db.config.starterdb.dbcontrol.emailAddress=
325c324
< oracle.install.db.config.starterdb.storageType=FILE_SYSTEM_STORAGE
---
> oracle.install.db.config.starterdb.storageType=
333c332
< oracle.install.db.config.starterdb.fileSystemStorage.dataLocation=/u01/app/oradata
---
> oracle.install.db.config.starterdb.fileSystemStorage.dataLocation=
340c339
< oracle.install.db.config.starterdb.fileSystemStorage.recoveryLocation=/u01/app/oradatabackup
---
> oracle.install.db.config.starterdb.fileSystemStorage.recoveryLocation=
386c385
< DECLINE_SECURITY_UPDATES=true
---
> DECLINE_SECURITY_UPDATES=

這些配置項也可以在安裝命令參數裏寫,本文選擇編輯db_install.rsp達到效果。
安裝前文件和環境如下

[oracle@ORATEST app]$ ll
total 2295640
drwxr-xr-x. 8 oracle oinstall       4096 Aug 21  2009 database
-rw-r--r--. 1 oracle oinstall      22770 Jan 22 15:15 db_install.rsp
-rw-r--r--. 1 oracle oinstall 1239269270 Jan 22 14:29 linux.x64_11gR2_database_1of2.zip
-rw-r--r--. 1 oracle oinstall 1111416131 Jan 22 14:29 linux.x64_11gR2_database_2of2.zip
drwxr-xr-x. 2 oracle oinstall       4096 Jan 22 14:56 oracle
drwxr-xr-x. 2 oracle oinstall       4096 Jan 22 15:12 oradata
drwxr-xr-x. 2 oracle oinstall       4096 Jan 22 15:12 oradatabackup
[oracle@ORATEST app]$ env | grep ORA
ORACLE_OWNER=oracle
ORA_NLS10=/u01/app/oracle/product/11.2.0/db_1/nls/data
ORACLE_SID=oral
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1

執行安裝命令

[oracle@ORATEST database]$ ./runInstaller -silent -force -noconfig -ignorePrereq -responseFile /u01/app/db_install.rsp
Starting Oracle Universal Installer...
Checking Temp space: must be greater than 120 MB.   Actual 1628 MB    Passed
Checking swap space: must be greater than 150 MB.   Actual 65535 MB    Passed
Preparing ...
   CAUSE: ...
   ACTION: ....
[WARNING] [INS-30011] ...
The following configuration scripts need to be executed as the "root" user. 
 #!/bin/sh 
 #Root scripts to run
/u01/app/oracle/product/11.2.0/db_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 
Configuration assistants have not been run. This can happen for following reasons - either root.sh is to be run before config or Oracle Universal Installer was invoked with the -noConfig option.
"/u01/app/oracle/product/11.2.0/db_1/cfgtoollogs/configToolAllCommands" script contains all commands to be executed by the configuration assistants. This file may be used to run the configuration assistants outside of OUI. Note that you may have to update this script with passwords (if any) before executing the same.
Successfully Setup Software.

輸出Successfully Setup Software表示安裝成功。同時提示以root賬號執行/u01/app/oracle/product/11.2.0/db_1/root.sh腳本。

[root@ORATEST ~]# /u01/app/oracle/product/11.2.0/db_1/root.sh
Check /u01/app/oracle/product/11.2.0/db_1/install/root_ORATEST_2021-01-25_08-19-46.log for the output of root script

執行完Oracle軟件安裝完成。

建立數據庫

oracle賬號執行,拷貝建立數據庫的配置文件dbca.rsp到app目錄下

[oracle@ORATEST app]$ cp /u01/app/oracle/product/11.2.0/db_1/assistants/dbca/dbca.rsp .

編輯dbca.rsp,編寫完各項目如下

[oracle@ORATEST app]$ cat dbca.rsp | grep -v ^# | grep -v ^$
[GENERAL]
RESPONSEFILE_VERSION = "11.2.0"
OPERATION_TYPE = "createDatabase"
[CREATEDATABASE]
GDBNAME = "ORCL"
SID = "orcl"
TEMPLATENAME = "General_Purpose.dbc"
SYSPASSWORD = "oracle"
SYSTEMPASSWORD = "oracle"
DATAFILEDESTINATION =/u01/app/oradata
CHARACTERSET = "ZHS16GBK"
TOTALMEMORY = "8000"
[createTemplateFromDB]
SOURCEDB = "myhost:1521:orcl"
SYSDBAUSERNAME = "system"
TEMPLATENAME = "My Copy TEMPLATE"
[createCloneTemplate]
SOURCEDB = "orcl"
TEMPLATENAME = "My Clone TEMPLATE"
[DELETEDATABASE]
SOURCEDB = "orcl"
[generateScripts]
TEMPLATENAME = "New Database"
GDBNAME = "orcl11.us.oracle.com"
[CONFIGUREDATABASE]
[ADDINSTANCE]
DB_UNIQUE_NAME = "orcl11g.us.oracle.com"
NODELIST=
SYSDBAUSERNAME = "sys"
[DELETEINSTANCE]
DB_UNIQUE_NAME = "orcl11g.us.oracle.com"
INSTANCENAME = "orcl11g"
SYSDBAUSERNAME = "sys"

同樣這個文件的內容也可以在執行dbca命令時以參數形式輸入,本文選擇編輯dbca.rsp的方式。
app目錄下執行命令建立數據庫

[oracle@ORATEST app]$ dbca -silent -responseFile ./dbca.rsp 
Copying database files
1% complete
3% 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 "/u01/app/oracle/cfgtoollogs/dbca/ORCL/ORCL.log" for further details.

此時數據庫已經啓動,可以訪問了。下面指令測試是否成功

[oracle@ORATEST ~]$ sqlplus / as sysdba
...
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup;
ORACLE instance started.

Total System Global Area 8351150080 bytes
Fixed Size                  2214936 bytes
Variable Size            5100274664 bytes
Database Buffers         3221225472 bytes
Redo Buffers               27435008 bytes
Database mounted.
Database opened.
SQL> 

shutdown和startup都成功執行,說明數據庫正常啓動了。
/u01/app/oradata/ORCL目錄下是剛建立數據庫ORCL的數據文件

[oracle@ORATEST oradata]$ cd ORCL/
[oracle@ORATEST ORCL]$ ll
total 1433964
-rw-r----- 1 oracle oinstall   9748480 Jan 25 15:42 control01.ctl
-rw-r----- 1 oracle oinstall  52429312 Jan 25 15:23 redo01.log
-rw-r----- 1 oracle oinstall  52429312 Jan 25 15:41 redo02.log
-rw-r----- 1 oracle oinstall  52429312 Jan 25 15:23 redo03.log
-rw-r----- 1 oracle oinstall 513810432 Jan 25 15:38 sysaux01.dbf
-rw-r----- 1 oracle oinstall 702554112 Jan 25 15:36 system01.dbf
-rw-r----- 1 oracle oinstall  30416896 Jan 25 11:41 temp01.dbf
-rw-r----- 1 oracle oinstall  78651392 Jan 25 15:36 undotbs01.dbf
-rw-r----- 1 oracle oinstall   5251072 Jan 25 15:23 users01.dbf

配置tnsnames.ora

network/admin下新建ora文件

[oracle@ORATEST ~]$ vi /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora

webdb =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.6.2)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

遠程客戶端的tnsnames.ora寫上相同的配置。如果遠程在PC上,ora文件放在TNS_ADMIN環境變量對應的目錄下。

執行lsnrctl啓動監聽,PLSQL連接

監聽的配置文件不用編寫,採用默認配置。檢查webdb能否解析

[oracle@ORATEST ~]$ tnsping webdb
...
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.6.2)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl)))
TNS-12541: TNS:no listener

可以解析出地址和端口號,否則會報Failed to resolve name。no listerer提示監聽程序沒有啓動,啓動監聽

[oracle@ORATEST ~]$ lsnrctl start
...
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ORATEST)(PORT=1521)))

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date                31-JAN-2021 13:55:20
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Log File         /u01/app/oracle/diag/tnslsnr/ORATEST/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ORATEST)(PORT=1521)))
The listener supports no services
The command completed successfully

啓動成功。
PLSQL連接,用戶system,密碼oracle,數據庫下拉選擇webdb,可以成功登陸。
靜默安裝Oracle也沒那麼恐怖
如果一切順利,到此大功告成。如果遇到一些報錯請往下看。


一些報錯的解決方法

錯誤:
LRM-00109: could not open parameter file '/u01/app/oracle/product/11.2.0/db_1/dbs/initoral.ora'
解決:
[oracle@ORATEST dbs]$ cp /u01/app/oracle/product/11.2.0/db_1/srvm/admin/init.ora ./initoral.ora
錯誤:
ORA-00371: not enough shared pool memory, should be atleast 307023052 bytes
解決
[oracle@ORATEST dbs]$ vi initoral.ora
# replace "clustdb" with your database name
db_name = orcl
shared_pool_size =  307023052  #按提示大小改
錯誤:
ORA-00401: the value for parameter compatible is not supported by this release
解決:
[oracle@ORATEST dbs]$ vi initoral.ora
#compatible=9.2.0.0.0
compatible=11.2.0.0.0 #改成11版本
錯誤:
ORA-27504: IPC error creating OSD context
ORA-27300: OS system dependent operation:unsupp_mtu failed with status: 0
ORA-27301: OS failure message: Error 0
ORA-27302: failure occurred at: skgxpvaddr10
ORA-27303: additional information: requested interface 127.0.0.1 mtu not supported. Check output from ifconfig command
解決:
cd $ORACLE_HOME/rdbms/lib/
[oracle@ORATEST lib]$ make -f ins_rdbms.mk rac_off ioracle
錯誤:
ORA-00439: feature not enabled: Real Application Clusters  
解決:
cd $ORACLE_HOME/rdbms/lib/  
[oracle@ORATEST lib]$ make -f ins_rdbms.mk rac_on ioracle  
錯誤:  
ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance   
ORA-00205: error in identifying control file, check alert log for more info  
解決:  
[root@ORATEST ~]# find / -name init.ora*  
/u01/app/oracle/admin/ORCL/pfile/init.ora.025202192615
[oracle@ORATEST dbs]$ sqlplus / as sysdba
...
SQL> startup pfile='/u01/app/oracle/admin/ORCL/pfile/init.ora.025202192615'
ORACLE instance started.
;
Total System Global Area 8351150080 bytes
Fixed Size                  2214936 bytes
Variable Size            4697621480 bytes
Database Buffers         3623878656 bytes
Redo Buffers               27435008 bytes
Database mounted.
Database opened.
SQL>   create spfile from pfile='/u01/app/oracle/admin/ORCL/pfile/init.ora.025202192615';
File created.

整庫導入

如果新安裝的庫要導入老庫的數據,
在老庫服務器以oracle用戶執行

exp system/oracle@orcl file=./exp.dmp full=y

新庫建立完後,什麼都不需要做,上傳exp.dmp後,直接執行

[oracle@ORATEST app]$ imp system/oracle full=y file=./exp.dmp  #這裏沒寫實例名@orcl 因爲只有一個orcl實例可以省略

就可以成功導入老庫所有數據和用戶。
新老數據庫的字符集相同即可,其它環節字符集不同也可以成功。

總結

終於搞定了傳說中安裝成功率只有50%的Oracle,還是靜默安裝,爽。
如果失敗了,建議格式化u01分區直接重來。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章