參考文檔:html
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/cwlin/index.htmlnode
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/ladbi/index.htmllinux
https://oracle-base.com/articles/linux/udev-scsi-rules-configuration-in-oracle-linuxc++
建設背景:數據庫
建設本文檔的目的在於詳細梳理12c RAC圖形化安裝的流程,結合官方文檔儘量解釋安裝過程當中的各類操做的原理,提供不一樣的存儲配置方法和參數修改方法,最後造成一套完整的12c RAC圖形化安裝步驟以便於從此參考。安全
安裝流程:bash
1、軟件下載網絡
下載 linuxx64_12201_database.zip 和 linuxx64_12201_grid_home.zip 就能夠了,而後上傳至節點1的任意目錄。
2、硬件和網絡環境
須要說明的是12c RAC安裝,OCR盤至少須要40GB大小,由於12c新增了MGMTDB實例進行集羣管理,若是你不單獨的爲他建立一個磁盤組,這些信息就會進入OCR盤,致使OCR盤須要40GB的空間纔夠,其中OCR和votefiles大約須要2GB,MGMT佔用38GB,若是RAC節點數大於2那麼還須要再增長一些MGMT的空間,例如5節點大約須要再加5GB,固然這裏的值都是在外部冗餘的條件下計算的。
本文的系統環境爲Oracle Enterprise Linux 6.9。
若是須要更大的SGA,那麼至少要將將tmpfs設置爲大於SGA的值,由於OEL系統下Oracle佔用的共享內存不能大於tmpfs。
7個IP是須要申請的,其中2個做爲Public IP,2個做爲VIP,1個Scan-IP,這5個IP應當是同一網段的,最後還須要2個不一樣網段的Private IP,雖然私網IP能夠自定義,可是在不清楚私網是經過公網直連仍是經過單獨的交換機時(其實oracle要求private ip的interconnect使用單獨的交換機且帶寬須要至少是GB級別),最好申請獨立的私網IP。網卡每一個節點須要2個至少,Public IP佔用一個,Private佔用一個。
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 node2-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* glibc* libgcc* ksh gcc-c++* --以上命令是我本身簡化後的安裝語句,通常來講執行完以上安裝就足夠了,不夠也沒事,裝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相關的文檔便可,手工設置時間也能夠。
因爲內網的數據交互會使用大量UDP端口,所以官網要求爲RAC關閉防火牆,因此:
service iptables stop service ip6tables stop chkconfig iptables off chkconfig ip6tables off --selinux的關閉本身上網搜。
其餘的預安裝要求我的認爲再也不須要了,若是有更高的性能需求能夠查看官方文檔來進行更詳細的設置,但本着簡單安裝、簡單管理的原則,就這樣啦。
4、用戶、組、以及目錄
--兩節點添加用戶和組 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 NLS_LANG=AMERICAN_AMERICA.AL32UTF8 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 --若是不須要輸入密碼則說明互信配置成功。
5、存儲環境設置
存儲的配置總結下只有2步:持久化配置 和 權限配置 。通常來講這兩步是能夠合在一塊兒的,只是使用多路徑軟件時須要分開來說(多路徑軟件多了一個多路徑聚合的步驟)。
所謂持久化就是將磁盤經過UUID或者其餘惟一標識符綁定爲一個human friendly的磁盤名(能夠是磁盤的軟連接等),而權限配置就是爲了可使oracle能夠正確使用這些磁盤,給他們賦予正確的用戶和組以及權限(MODE)。
在Linux環境下可以實現設備持久化的系統服務就是udev,除此以外幾乎別無他法(就算有也千萬別用)。能夠經過man udev來查看udev rules的配置規則。
咱們分兩種狀況來描述存儲配置的步驟。
通常來講生產上的存儲使用系統自帶的多路徑軟件multipath便可完成多路徑持久化配置(lvm device mapper),這裏貼一個示例配置文件的一部分:
# 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-*)的udev配置,這樣安裝時直接查找/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容易混淆。 # start_udev
至此狀況一的權限配置已經完成了。
那麼直接使用99-oracle-asmdevices.rules(udev規則,名字隨便定,第一個數字表示解析順序)或者經過60-raw.rules綁定raw盤來完成持久化配置和權限配置,並綁定易於人眼識別的name。
這種直接使用udev規則的方式與上述多路徑綁定的區別只是在於無需經過多路徑lvm進行映射,使用udev直接完成了綁定工做+權限配置工做。
參考:https://oracle-base.com/articles/linux/udev-scsi-rules-configuration-in-oracle-linux
以及參考:官網文檔附加的A部分中的Configuring Device Persistence Manually for Oracle ASM小節
基本步驟就是:
首先獲取sd盤的uuid或ID_SERIAL(或其餘能夠惟一標識磁盤且在udev中定義了的標識符),而後將uuid/ID_SERIAL綁定至99-oracle-asmdevices.rules便可。
例如: # /usr/lib/udev/scsi_id -g -u -d /dev/sdb --獲取到某個盤的scsi-id。 # udevadm info --query=all --name=/dev/sdb | grep ID_SERIAL --獲取到某個盤的ID_SERIAL
本文綁定UUID和ID_SERIAL的示例都來一個,以便新手能夠清楚的認識udev是個什麼東西:
綁定UUID示例(其實還能夠大大簡化):
[root@node1 ~]# cat /etc/udev/rules.d/99-oracle-asmdevices.rules
KERNEL=="sd*", ENV{DEVTYPE}=="disk", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode", RESULT=="1ATA_VBOX_HARDDISK_VBc6580c49-d54cc0df", RUN+="/bin/sh -c 'mknod /dev/asmdisk01 b $major $minor; chown grid:asmadmin /dev/asmdisk01; chmod 0660 /dev/asmdisk01'"
KERNEL=="sd*", ENV{DEVTYPE}=="disk", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode", RESULT=="1ATA_VBOX_HARDDISK_VB41a7cba4-749c4aec", RUN+="/bin/sh -c 'mknod /dev/asmdisk02 b $major $minor; chown grid:asmadmin /dev/asmdisk02; chmod 0660 /dev/asmdisk02'"
KERNEL=="sd*", ENV{DEVTYPE}=="disk", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode", RESULT=="1ATA_VBOX_HARDDISK_VB6aaaf601-96dab065", RUN+="/bin/sh -c 'mknod /dev/asmdisk03 b $major $minor; chown grid:asmadmin /dev/asmdisk03; chmod 0660 /dev/asmdisk03'"
綁定ID_SERIAL示例:
KERNELS=="sd*",ENV{ID_SERIAL}=="VBOX_HARDDISK_VBc6580c49-d54cc0df",SYMLINK+="asm-ocr", OWNER="grid",GROUP="asmadmin",MODE="0660" KERNELS=="sd*",ENV{ID_SERIAL}=="VBOX_HARDDISK_VB41a7cba4-749c4aec",SYMLINK+="asm-mgmt",OWNER="grid",GROUP="asmadmin",MODE="0660" KERNELS=="sd*",ENV{ID_SERIAL}=="VBOX_HARDDISK_VB6aaaf601-96dab065",SYMLINK+="asm-data",OWNER="grid",GROUP="asmadmin",MODE="0660"
須要注意的是rules文件中的內容是不容許任何主動換行符的,例如\等。
而後執行以下命令使udev規則生效便可:
udevadm control --reload-rules
udevadm trigger --type=devices
//Linux 7以前應該只須要start_udev便可,7版本去除了start_udev的命令,使用udevadm替代。
至於udev的規則文件中KERNELS,ENV{}都是些什麼東西,爲什麼用KERNELS和KERNEL均可以,爲什麼用不一樣的命名方式都行,直接man udev尋找答案。
在這裏我還要提一句,udev在CentOS-7上有個坑,NAME關鍵字再也不能表示devnode名了,只能表示網卡名,這坑實在是太深我也翻車了,仔細看了好幾遍man udev才發現。
6、GRID安裝
這裏有個小坑,12c的GRID安裝再也不會按你設置的grid用戶的$ORACLE_HOME變量來做爲GI的家目錄,而是直接將你GRID軟件的解壓目錄做爲家目錄。
固然這個小坑還可能引起另外一個大坑,屢次嘗試安裝grid時你會發現綁定好的磁盤即使dd格式化掉在安裝grid時也找不到了...此時只要刪瞭解壓的grid目錄從新解壓安裝就行了...(MMP的12c,還有扯淡的屎同樣PDB,誰讓你從11g升12c直接上腿就完事了)
你須要將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磁盤組準備存儲,大概須要40G),若是你選擇NO,那麼請保證OCR盤至少40GB大小(準確數字忘了大概是38GB左右,不過40GB保險)。
根據提示依次在兩節點執行以上腳本便可,出現下圖所示文字是表示執行成功:
至此GRID已經安裝完畢,使用以下命令查看集羣狀態:
su - grid crsctl stat res -t
7、建立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';
8、DATABASE安裝
cd /home/oracle/database ./runInstaller
根據提示執行以上腳本便可。
9、建立數據庫
使用oracle用戶執行dbca建庫:
--如無pdb需求,那麼不選create as container database
--並不推薦以上建庫方式,建議使用下邊的高級配置,能夠本身設置SGA,PGA和字符集等等。
建庫完畢後使用以下命令查看整個集羣和數據庫的狀態:
su - grid crsctl stat res -t srvctl config database -d orcl lsnrctl status
10、最後的工做
ALTER SYSTEM SET AUDIT_TRAIL=NONE SCOPE=SPFILE SID='*';--關閉審計 alter system set deferred_segment_creation=false SCOPE=BOTH SID='*'; --關閉段建立延遲 #ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON=FALSE SCOPE=SPFILE SID='*'; --關閉密碼大小寫驗證,在12c版本中此參數已被棄用,若是手動改成FALSE,除非設置正確的SQLNET.ALLOWED_LOGON_VERSION_SERVER參數,不然全部用戶都會沒法登錄,所以不要這麼改了。 ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS UNLIMITED;--設置登陸次數爲無限 ALTER SYSTEM SET CONTROL_FILE_RECORD_KEEP_TIME=31 SCOPE=BOTH SID='*';--控制文件內容保存時間 ALTER SYSTEM SET MAX_DUMP_FILE_SIZE='2048M' SCOPE=BOTH SID='*';--DUMP文件size的最大值 ALTER SYSTEM SET PROCESSES=2048 SCOPE=SPFILE SID='*';--最大進程數 ALTER SYSTEM SET "_UNDO_AUTOTUNE"=FALSE SCOPE=BOTH SID='*';--關閉UNDO自動調優的功能 ALTER SYSTEM SET "_USE_ADAPTIVE_LOG_FILE_SYNC"=FALSE SCOPE=BOTH SID='*'; --關閉自適應日誌同步功能 alter database add supplemental log data; --打開附加日誌,便於進行故障後數據找回
重啓使以上部分設置生效:srvctl stop/start database -d orcl
最後,再設置下數據和歸檔的備份計劃,根據業務壓力調整下REDO大小和組數就能夠了。