參考文檔: https://docs.oracle.com/en/database/oracle/oracle-database/12.2/cwlin/index.html https://docs.oracle.com/en/database/oracle/oracle-database/12.2 ...
參考文檔:
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/cwlin/index.html
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/ladbi/index.html
https://oracle-base.com/articles/linux/udev-scsi-rules-configuration-in-oracle-linux
建設背景:
建設本文檔的目的在於詳細梳理12c RAC圖形化安裝的流程,結合官方文檔儘可能解釋安裝過程中的各種操作的原理,提供不同的存儲配置方法和參數修改方法,最後形成一套完整的12c RAC圖形化安裝步驟以便於今後參考。
安裝流程:
一、軟體下載
下載 linuxx64_12201_database.zip 和 linuxx64_12201_grid_home.zip 就可以了,然後上傳至節點1的任意目錄。
二、硬體和網路環境
- 檢查記憶體(至少8GB)、Swap和硬碟大小等等,參考GRID官網安裝文檔的:Server Hardware Checklist for Oracle Database Installation。
需要說明的是12c RAC安裝,OCR盤至少需要40GB大小,因為12c新增了MGMTDB實例進行集群管理,如果你不單獨的為他創建一個磁碟組,這些信息就會進入OCR盤,導致OCR盤需要40GB的空間才夠。
- 檢查操作系統版本,參考GRID官網安裝文檔的:Operating System Checklist for Oracle Database Installation on Linux。
本文的系統環境為Oracle Enterprise Linux 6.9。
- tmpfs務必保證至少是最大記憶體的一半。
如果需要更大的SGA,那麼至少要將將tmpfs設置為大於SGA的值,因為OEL系統下Oracle占用的共用記憶體不能大於tmpfs。
- 檢查網路環境。
7個IP是需要申請的,其中2個作為Public IP,2個作為VIP,1個Scan-IP,這5個IP應當是同一網段的,最後還需要2個不同網段的Private IP,雖然私網IP可以自定義,但是在不清楚私網是直連還是通過交換機時,最好申請獨立的私網IP。網卡每個節點需要2個至少,Public IP占用一個,Private占用一個。
- 以下為一個示例/etc/hosts文件:
vi /etc/hosts #需要註意的是12c對主機名的要求比以前更加嚴格,不再允許出現下劃線'_',只能使用連接線'-'。 #Public IP 192.168.10.101 node1 192.168.10.102 node2 #Private IP 1.1.1.1 node1-priv 1.1.1.2 node2-priv #VIP 192.168.10.103 node1-vip 192.168.10.104 node1-vip #Scan-IP 192.168.10.105 scanip三、系統環境設置
Oracle強烈推薦使用一個名為oracle-database-server-12cR2-preinstall的RPM包來做預原裝的檢測工作。
此RPM包安裝完畢後會出現一個/usr/bin/oracle-database-server-12cR2-preinstall-verify的系統命令,此命令主要就是做一些RAC安裝前的準備工作,如禁用透明大頁,修改內核參數和修改用戶limits等等,需要提示的是此腳本只修改Oracle用戶的limits,對於grid用戶你需要把Oracle的limits內容複製一遍就可以了,相關的文件位置為:
/etc/security/limits.d/oracle-database-server-12cR2-preinstall.conf --需要說明的是:limits.d目錄中的用戶限制文件是在/etc/security/limits.conf文件生效之後生效的,因此會覆蓋limits.conf文件中的重覆部分。 --穩妥起見直接在/etc/security/limits.d/oracle-database-server-12cR2-preinstall.conf文件中定義好oracle和grid用戶的ulimit限制。
Oracle提供了多種 oracle-database-server-12cR2-preinstall RPM包的下載方式,這裡只選擇我認為較簡單的一種獲取方式:
wget http://yum.oracle.com/public-yum-ol6.repo -O /etc/yum.repos.d/public-yum-ol6.repo --執行以上下載命令前最好檢查下你是否本來就有public-yum-ol6.repo,如果有先做個備份防止被覆蓋。 yum -y install oracle-database-server-12cR2-preinstall --如果無法聯網,那麼可以使用yum的--downloadonly選項在其他機器上下載此rpm包後上傳到安裝節點,然後使用rpm安裝。 --無法聯網時使用rpm安裝oracle-database-server-12cR2-preinstall還需要先安裝ksh依賴包。 --此外註意,如果沒有yum makecache那麼以上安裝可能非常慢,因為這個repo庫特別龐大,國內網路連Oracle的yum源的速度大家也懂得。
安裝完畢後會出現一個oracle-database-server-12cR2-preinstall-verify的系統命令,執行此命令應該就可以進行預設置了,然而實測還發現這個命令在OEL6.5版本上不能用,因為需要/etc/sysctl.d文件夾,這個文件夾OEL6.9是有的6.5並沒有,因此要麼是需要低版本的oracle-database-server-12cR2-preinstall,要麼是不支持OEL6.5,無論是哪種原因這裡都懶得深究了。
那麼假如不用oracle-database-server-12cR2-preinstall,我們自己大致需要做哪些預操作呢,主要有以下幾部分:
- 禁用透明大頁
如果有大頁需求,Oracle建議使用標準的大頁提升性能,嚴禁使用透明大頁。透明大頁與標準大頁的區別在於可以在系統運行時分配記憶體,而標準大頁只能重啟生效。
如果你要使用大頁來提升性能,請務必搜索安裝文檔的所有HugePage關鍵詞,根據文檔作出修改,消除大頁帶來的隱患。
- 基礎包安裝
oracle-database-server-12cR2-preinstall也不會幫你裝好這些包,因此這一步是必須要手工做的。
yum -y install binutils.x86_64 compat-libcap1.x86_64 compat-libstdc* e2fsprogs.x86_64 libaio* libXau* libXi* libXtst* libstdc* --以上命令是我自己簡化後的安裝語句,一般來說執行完以上安裝就足夠了,不夠也沒事,裝grid時如果有缺失的根據報錯Detail再裝就好了。 --不同Linux版本所需的包完整列表參考GI安裝官方文檔的4.7小節--Operating System Requirements for x86-64 LinuxPlatforms。
-
內核參數修改(64GB記憶體 40GB tmpfs時的設置)
vi /etc/sysctl.conf fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.shmall = 10485760 kernel.shmmax = 42949672960 kernel.shmmni = 4096 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 = 1048576
-
時間同步設置
參考網上配置ntp相關的文檔即可,手工設置時間也可以。
- 禁用防火牆和selinux
當然你也可以選擇使用防火牆但是開放相應埠,但是簡便起見我還是直接關了。
service iptables stop service ip6tables stop chkconfig iptables off chkconfig ip6tables off --selinux的關閉自己上網搜。
其他的預安裝要求個人認為不再需要了,如果有更高的性能需求可以查看官方文檔來進行更詳細的設置,但本著簡單安裝、簡單管理的原則,就這樣啦。
四、用戶、組、以及目錄
--兩節點添加用戶和組 groupadd -g 501 oinstall groupadd -g 502 dba groupadd -g 503 asmadmin groupadd -g 504 asmdba groupadd -g 505 asmoper groupadd -g 506 oper useradd -u 501 -g oinstall -G asmadmin,asmdba,asmoper,dba grid useradd -u 502 -g oinstall -G dba,asmdba,oper oracle
--兩節點創建目錄並設置許可權 mkdir -p /u01/app/oracle/product/12.2.0/db_1 mkdir -p /u01/app/grid mkdir -p /u01/12.2.0/grid mkdir -p /u01/app/oraInventory chown -R oracle.oinstall /u01/app/oracle/ chown -R oracle.oinstall /u01/app/oracle/* chown -R grid.oinstall /u01/app/grid/ chown -R grid.oinstall /u01/app/oraInventory/ chown -R grid.oinstall /u01/12.2.0/grid/
--修改用戶安全限制: --如果你不使用oracle-database-server-12cR2-preinstall,那麼將以下內容複製到/etc/security/limits.conf文件中即可 --如果你使用了oracle-database-server-12cR2-preinstall,那麼將以下內容複製到/etc/security/limits.d/oracle-database-server-12cR2-preinstall.conf中即可(將之前的內容清空) oracle soft nofile 2048 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 grid soft nofile 2048 grid hard nofile 65536 grid soft nproc 16384 grid hard nproc 16384 grid soft stack 10240 grid hard stack 32768 grid hard memlock 134217728 grid soft memlock 134217728 --無論以上哪種用戶安全限制方式,都是需要PAM模塊來調用的,因此繼續檢查/etc/pam.d/login文件內容: session required pam_limits.so 如果未發現以上行,那麼加上。
--兩節點設置用戶環境變數,向.bash_profile添加如下項: su - grid vi .bash_profile export ORACLE_BASE=/u01/app/grid export ORACLE_HOME=/u01/12.2.0/grid export ORACLE_SID=+ASM1/+ASM2 export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH su - oracle vi .bash_profile export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/12.2.0/db_1 export ORACLE_SID=orcl1/orcl2 export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
--在節點一配置ssh互信,步驟如下: --使用root將資料庫軟體拷貝至/home/oracle/下: # chown oracle.oinstall linuxx64_12201_database.zip # su - oracle $ unzip linuxx64_12201_database.zip $ cd database/sshsetup/ $ ./sshUserSetup.sh -user oracle -hosts "node1 node2" -advanced -noPromptPassphrase $ ./sshUserSetup.sh -user grid -hosts "node1 node2" -advanced -noPromptPassphrase --最後在節點1使用oracle和grid用戶都執行以下兩條命令驗證互信: $ ssh node2 date $ ssh node2-priv date --如果不需要輸入密碼則說明互信配置成功。
五、存儲環境設置
存儲的配置總結下只有2步:持久化配置 和 許可權配置 ,我們分兩種情況來描述存儲配置的步驟。
- 情況一:使用多路徑軟體時:
一般來說生產上的存儲使用系統自帶的多路徑軟體multipath即可完成多路徑持久化配置,這裡貼一個示例配置文件的一部分:
# multipath.conf written by anaconda ...... multipaths { multipath { wwid "360080e50003279f000001a785a275fe8" alias REDO_01 } multipath { wwid "360080e50003279f000001a775a275fba" alias RAC_OCR } multipath { wwid "360080e50003279f000001a795a27604e" alias RAC_ARCHIVE } multipath { wwid "360080e50003217cc00001c6d5a280dd8" alias REDO_02 } multipath { wwid "360080e50003217cc00001c6e5a280e2b" alias RAC_DATA } } --不建議在這裡加uid gid mode來設置屬主和許可權,因為不能設置附屬group。
根據uuid進行了alias的綁定,之後重啟multipathd即可,使用multipath -ll可以看到聚合後的盤。
然後使用multipath自帶的udev文件12-dm-permissions.rules來完成聚合盤(/dev/dm-*)的許可權配置,這樣安裝時直接查找/dev/mapper/*路徑即可找到以alias名字顯示的盤。
--設置步驟: cp /usr/share/doc/device-mapper-1.02.117/12-dm-permissions.rules /etc/udev/rules.d/ vi /etc/udev/rules.d/12-dm-permissions.rules --添加或註釋如下一行: ENV{DM_UUID}=="mpath-?*", OWNER:="grid", GROUP:="asmadmin", MODE:="660" --說白了就是設置下聚合盤的許可權 start_udev
這裡還有一些替代的方法,例如使用60-raw.rules來代替12-dm-permissions.rules的許可權設置功能,例子如下: # vi /etc/udev/rules.d/60-raw.rules ACTION=="add", KERNEL=="dm-0", RUN+="/bin/raw /dev/raw/raw1 %N" ACTION=="add", KERNEL=="dm-1", RUN+="/bin/raw /dev/raw/raw2 %N" ACTION=="add", KERNEL=="dm-2", RUN+="/bin/raw /dev/raw/raw3 %N" ACTION=="add", KERNEL=="dm-3", RUN+="/bin/raw /dev/raw/raw4 %N" ACTION=="add", KERNEL=="dm-4", RUN+="/bin/raw /dev/raw/raw5 %N" KERNEL=="raw*", OWNER="grid" GROUP="asmadmin", MODE="0660" --其原理是:/dev/mapper/下的盤符其實是指向/dev/dm-*的,將這些聚合盤映射為裸設備,也可以同時改變許可權,缺點在於沒有alias容易混淆。 --這裡可能有人說多路徑可能生成不同的dm-*,尾碼數字是不穩定的,我覺得沒必要擔心,只要你不去作死改多路徑配置文件,這個尾碼的數字就不會變,綁定的raw盤也就不會變。 # start_udev
至此情況一的許可權配置已經完成了,你還可以通過99-oracle-asmdevices.rules來繼續改變下底層盤的許可權,但是這一步可做可不做。
# vi /etc/udev/rules.d/99-oracle-asmdevices.rules KERNEL=="sd*", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}=="360080e50003279f000001a785a275fe8", OWNER="grid", GROUP="asmadmin", MODE="0660" KERNEL=="sd*", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}=="360080e50003279f000001a775a275fba", OWNER="grid", GROUP="asmadmin", MODE="0660" KERNEL=="sd*", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}=="360080e50003279f000001a795a27604e", OWNER="grid", GROUP="asmadmin", MODE="0660" KERNEL=="sd*", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}=="360080e50003217cc00001c6d5a280dd8", OWNER="grid", GROUP="asmadmin", MODE="0660" KERNEL=="sd*", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}=="360080e50003217cc00001c6e5a280e2b", OWNER="grid", GROUP="asmadmin", MODE="0660" --重啟udev # start_udev
- 情況二:如果你未使用multipath(常見於使用虛擬機的測試環境)
那麼直接使用99-oracle-asmdevices.rules(Device Mapper)來完成持久化配置和許可權配置,並綁定易於人眼識別的name。
--參考:https://oracle-base.com/articles/linux/udev-scsi-rules-configuration-in-oracle-linux --以及參考:官網文檔附加的A部分中的Configuring Device Persistence Manually for Oracle ASM小節 --基本步驟就是:首先使用scsi_id獲取sd盤的uuid,然後將uuid綁定至99-oracle-asmdevices.rules即可。
以上介紹的兩種情況都是使用了udev來完成存儲配置的,你也可以使用ASMLIB來完成ASM盤的持久化和許可權配置,具體參見GI或Database的官方安裝文檔的:Configuring Storage Device Path Persistence Using Oracle ASMLIB部分。
六、GRID安裝
這裡有個小坑,12c的GRID安裝不再會按你設置的grid用戶的$ORACLE_HOME變數來作為GI的家目錄,而是直接將你GRID軟體的解壓目錄作為家目錄,因此你需要將linuxx64_12201_grid_home.zip拷貝至grid用戶的$ORACLE_HOME,本文中就是/u01/12.2.0/grid,然後:
# chown grid.oinstall linuxx64_12201_grid_home.zip # su - grid $ unzip linuxx64_12201_grid_home.zip --這樣在進行安裝時就會將你設置的grid用戶的$ORACLE_HOME作為GI家目錄了。
--註意所有軟體都只需在節點一解壓,節點二無需操作,安裝GI和DB軟體的過程中安裝程式會自動將軟體傳至遠端節點。
--這裡還需要先裝下cvuqdisk包,這個包存在於解壓後的/home/oracle/database/rpm/目錄下: cp /home/oracle/database/rpm/cvuqdisk-1.0.10-1.rpm /root --使用root rpm安裝cvuqdisk rpm -ivh cvuqdisk-1.0.10-1.rpm --以上包的安裝需要在2節點都執行,使用scp將cvuqdisk包傳至節點二安裝。
解壓後使用grid用戶進行GI安裝:
cd /u01/12.2.0/grid/ ./gridSetup.sh
接下來基本只要下一步下一步就完事了,我自己的安裝步驟忘了截圖,因此這裡參考下如下網址的安裝截圖:
註意:別按他的預安裝步驟做,他使用的是很古老的單用戶RAC安裝方式,現在推薦使用單獨的grid用戶來管理集群,與管理資料庫的oracle用戶分離開。
--這裡需要特別說明下,如果你選了YES即為GIMR創建單獨的MGMT磁碟組,那麼OCR盤大小20GB左右就可以(當然你還需要為MGMT磁碟組準備存儲),如果你選擇NO,那麼請保證OCR盤至少40GB大小(準確數字忘了大概是38GB左右,不過40GB保險)。
根據提示一次在兩節點執行以上腳本即可,出現下圖所示文字是表示執行成功:
至此GRID已經安裝完畢,使用如下命令查看集群狀態:
su - grid crsctl stat res -t
七、創建ASM磁碟組
使用grid用戶執行asmca創建數據磁碟組DATA和存放REDO、歸檔的磁碟組,一般測試環境這幾個磁碟組合在一起即可。
su - grid sqlplus / as sysasm set lines 200 col path for a40 select group_number,header_status,state,name,path,redundancy from v$asm_disk; select group_number,name,state,COMPATIBILITY,DATABASE_COMPATIBILITY from v$asm_diskgroup; create diskgroup DATA external redundancy disk '/dev/mapper/RAC_DATA' ATTRIBUTE 'compatible.asm' = '12.2'; create diskgroup ARCHIVE external redundancy disk '/dev/mapper/RAC_ARCHIVE' ATTRIBUTE 'compatible.asm' = '12.2'; create diskgroup REDO external redundancy disk '/dev/mapper/REDO_01','/dev/mapper/REDO_02' ATTRIBUTE 'compatible.asm' = '12.2';
八、DATABASE安裝
cd /home/oracle/database ./runInstaller
根據提示執行以上腳本即可。
九、創建資料庫
使用oracle用戶執行dbca建庫:
--如無pdb需求,那麼不選create as container database
--並不推薦以上建庫方式,建議使用下邊的高級配置,可以自己設置SGA,PGA和字元集等等。
建庫完畢後使用如下命令查看整個集群和資料庫的狀態:
su - grid crsctl stat res -t srvctl config database -d orcl lsnrctl status
十、最後的工作
ALTER SYSTEM SET AUDIT_TRAIL=NONE SCOPE=SPFILE;--關閉審計 alter system set deferred_segment_creation=false; --關閉段創建延遲 ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON=FALSE SCOPE=SPFILE; --關閉密碼大小寫驗證 ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS UNLIMITED;--設置登錄次數為無限 ALTER SYSTEM SET CONTROL_FILE_RECORD_KEEP_TIME=31;--控制文件內容保存時間 ALTER SYSTEM SET MAX_DUMP_FILE_SIZE='2048M';--DUMP文件size的最大值 ALTER SYSTEM SET PROCESSES=2048 SCOPE=SPFILE SID='*';--最大進程數 ALTER SYSTEM SET "_UNDO_AUTOTUNE"=FALSE;--關閉UNDO自動調優的功能 ALTER SYSTEM SET "_USE_ADAPTIVE_LOG_FILE_SYNC"=FALSE; --關閉自適應日誌同步功能 alter database add supplemental log data; --打開附加日誌,便於進行故障後數據找回 ALTER SYSTEM SET "O7_DICTIONARY_ACCESSIBILITY"=FALSE scope=spfile; --防止具有drop any table許可權的用戶惡意刪除一些數據字典。
重啟使以上部分設置生效:srvctl stop/start database -d orcl
最後,再設置下數據和歸檔的備份計劃,根據業務壓力調整下REDO大小和組數就可以了。