title: Linux下靜默安裝Oracle 11g RAC
categories: 數(shù)據(jù)庫
tags:
- RAC
- Cluster
- HA
- Oracle
timezone: Asia/Shanghai
date: 2019-01-06
環(huán)境
# Red Hat Enterprise Linux Server release 6.10.x86_64 (Santiago)
# Oracle Linux 7.5 x86_64
p13390677_112040_Linux-x86-64_1of7.zip
p13390677_112040_Linux-x86-64_2of7.zip
p13390677_112040_Linux-x86-64_3of7.zip
注意事項
1.主機名都用小寫字母紊浩,長度不能超過15位凰浮,不要有特殊符號
2.兩個節(jié)點的Plublic和VIP所在網(wǎng)卡的網(wǎng)卡名要一樣
3.表決盤應該都是相同的大小。不同的大小可能導致可用性降低。
第一步:規(guī)劃IP地址和主機名
1.IP地址規(guī)劃
節(jié)點 | hostname | 類型 | IP地址 | 接口 | 備注 |
---|---|---|---|---|---|
1 | rac1 | Plublic IP | 10.0.1.131 | eth0 | 手動設置 |
2 | rac2 | Plublic IP | 10.0.1.132 | eth0 | 手動設置 |
1 | rac1-vip | Virtaual IP | 10.0.1.133 | eth0 | 集群自動設置 |
2 | rac2-vip | Virtaual IP | 10.0.1.134 | eth0 | 集群自動設置 |
Cluster | rac-scan | SCAN IP | 10.0.1.135 | eth0 | 集群自動設置 |
1 | rac1-priv | Private IP | 11.11.11.131 | eth1 | 手動設置 |
2 | rac2-priv | Private IP | 11.11.11.132 | eth1 | 手動設置 |
2.在兩個節(jié)點分別將Plublic IP和Private IP寫入(by all)
只需要手動在兩個節(jié)點上設置靜態(tài)IP地址即可忱辅。修改主機名塘安、關閉防火墻等使用下邊腳本來完成
vim /etc/sysconfig/network-scripts/ifcfg-eth0
vim /etc/sysconfig/network-scripts/ifcfg-eth1
第二步:設置共享存儲
1.現(xiàn)在Win2012上創(chuàng)建5個存儲盤 這里創(chuàng)建了三個1G的投票盤(votingdisk),一個20G的數(shù)據(jù)盤(data),一個10G的備份盤(backup)。
2.連接iscsi 安裝并設置自動啟動(by all)
掃描iscsi存儲并重啟服務器买羞,重啟后會自動掛載
mkdir -p /mnt/cdrom
mount /dev/cdrom /mnt/cdrom
cd /mnt/cdrom/Packages
----- RedHat6:
rpm -ivh iscsi-initiator-utils-6.2.0.873-27.el6_9.x86_64.rpm
chkconfig iscsid on
iscsiadm -m discovery -t sendtargets -p 10.0.1.141:3260
----- RedHat7:
rpm -ivh iscsi-initiator-utils-6.2.0.874-7.0.1.el7.x86_64.rpm
systemctl start iscsid
systemctl enable iscsid
iscsiadm -m discovery -t sendtargets -p 10.0.1.141:3260
3.查看掛載磁盤并分區(qū)(任意一個節(jié)點操作即可)
ll /dev/sd*
fdisk /dev/sdb
fdisk /dev/sdc
fdisk /dev/sdd
fdisk /dev/sde
fdisk /dev/sdf
分區(qū)后如果看不到分區(qū)可用以下命令刷新
partprobe /dev/sdb
partprobe /dev/sdc
partprobe /dev/sdd
partprobe /dev/sde
partprobe /dev/sdf
4.配置裸盤(by all)
vim /etc/udev/rules.d/60-raw.rules
ACTION=="add", KERNEL=="sdb1", RUN+="/bin/raw /dev/raw/raw1 %N"
ACTION=="add", KERNEL=="sdc1", RUN+="/bin/raw /dev/raw/raw2 %N"
ACTION=="add", KERNEL=="sdd1", RUN+="/bin/raw /dev/raw/raw3 %N"
ACTION=="add", KERNEL=="sde1", RUN+="/bin/raw /dev/raw/raw4 %N"
ACTION=="add", KERNEL=="sdf1", RUN+="/bin/raw /dev/raw/raw5 %N"
KERNEL=="raw[1-5]*", OWNER="grid" GROUP="asmadmin", MODE="660"
5.啟動并驗證udev(by all)
----- RedHat6:
/sbin/start_udev
[root@rac1 sshsetup]# ll /dev/raw/
總用量 0
crw-rw---- 1 grid asmadmin 162, 1 12月 28 20:14 raw1
crw-rw---- 1 grid asmadmin 162, 2 12月 28 20:14 raw2
crw-rw---- 1 grid asmadmin 162, 3 12月 28 20:14 raw3
crw-rw---- 1 grid asmadmin 162, 4 12月 28 20:14 raw4
crw-rw---- 1 grid asmadmin 162, 5 12月 28 20:14 raw5
crw-rw---- 1 root disk 162, 0 12月 28 20:14 rawctl
----- RedHat7:
/sbin/udevadm trigger --type=devices --action=change
重新加載udev rule
/sbin/udevadm control --reload
診斷udev rule
/sbin/udevadm test /sys/block/sdb
ll /dev/raw/
如果磁盤有數(shù)據(jù)的可以使用以下命令清空磁盤信息(任意一個節(jié)點操作即可)
dd if=/dev/zero of=/dev/raw/raw1 bs=1024 count=256
dd if=/dev/zero of=/dev/raw/raw2 bs=1024 count=256
dd if=/dev/zero of=/dev/raw/raw3 bs=1024 count=256
dd if=/dev/zero of=/dev/raw/raw4 bs=1024 count=256
dd if=/dev/zero of=/dev/raw/raw5 bs=1024 count=256
第三步:使用初始化腳本初始化系統(tǒng)環(huán)境(見附錄1)
1.使用本腳本應注意事項(by all)
1.必須使用root執(zhí)行
2.請確認已經(jīng)將PlublicIP設置為靜態(tài)IP
3.請確認已掛載Linux安裝光盤
4.本腳本可以重復執(zhí)行
5.本腳本會覆蓋hosts設置,如有特殊需求的請在安裝完畢后手動恢復所需內容
6.vip和priv主機名格式為:“主機名-vip”和“主機名-priv”嫉拐,如有需要請更改
7.此腳本編寫環(huán)境為RedHat6.10 && Oracle 11g RAC
8.此腳本只針對兩個節(jié)點的RAC環(huán)境初始化哩都,腳本啟動的時候會讓選擇節(jié)點1還是節(jié)點2
9.最后請請根據(jù)自己實際情況修改腳本內最上部變量后即可執(zhí)行
2.本腳本所實現(xiàn)功能(by all)
1.關閉SELinux
2.關閉iptables
3.修改主機名
4.寫入hosts
5.禁用ntpd
6.創(chuàng)建所需要的賬戶和組
7.新建grid和oracle安裝目錄
8.配置oracle和grid用戶變量
9.配置本地YUM并安裝依賴包
第四步:安裝grid
注意:在以上的腳本里并沒有對系統(tǒng)內核做修改魁兼,在這步我們使用grid檢測腳本來進行環(huán)境的檢測的同時生成修復腳本來完成對系統(tǒng)內核的修改婉徘,可以在提高效率的同時方式手動修改造成錯誤。
1.配置ssh互信
1.1.使用oracle官方系統(tǒng)的腳本(用root賬戶在其中一個節(jié)點執(zhí)行即可)
注意:需要同時配置grid和oracle兩個賬戶下的public ip和vip的ssh互信
注意:在生成秘鑰的時候不要設置密碼
/home/grid/grid/sshsetup/sshUserSetup.sh -user oracle -hosts 'rac1 rac2 rac1-priv rac2-priv' -advanced
/home/grid/grid/sshsetup/sshUserSetup.sh -user grid -hosts 'rac1 rac2 rac1-priv rac2-priv' -advanced
-hosts 表示:需要配置互信的服務器ip
-user 表示:用于遠程登錄到服務器上的用戶名
-advanced 表示:hosts里的主機咐汞,每兩個主機之間都是互信的盖呼。
如果不加-advanced,例如:本機是HOST-A化撕,在本機執(zhí)行./sshUserSetup.sh -user aime -hosts A B C几晤。那么就是HOST-A->A, HOST-A->B, HOST-A->C 的互信關系。A,B,C之間是不互信的植阴。
1.2.可以使用以下命令測試剛才做的ssh互信是否生效蟹瘾,如果沒有提示輸入密碼并且輸出了系統(tǒng)時間就OK(by all)
su - oracle
ssh rac1 date && \
ssh rac2 date && \
ssh rac1-priv date && \
ssh rac2-priv date
su - grid
ssh rac1 date && \
ssh rac2 date && \
ssh rac1-priv date && \
ssh rac2-priv date
2.執(zhí)行安裝前的檢查并使用生成的腳本修改內核參數(shù)
2.1.執(zhí)行安裝前的檢查(任意節(jié)點執(zhí)行一次即可)
su - grid
/home/grid/grid/./runcluvfy.sh stage -pre crsinst -n rac1,rac2 -verbose -fixup
語法說明:
-pre: 該選項主要檢查是否滿足安裝的需要圾浅。
-post:該選擇主要檢查安裝后組件是否正常。
-n:該選項用于指定節(jié)點列表憾朴。
-verbose:該選項用于輸出詳細的驗證信息狸捕。
-fixup:這是Oracle 11gR2中新增加的一個參數(shù)。利用這個參數(shù)众雷,可以產(chǎn)生一個名為runfixup.sh的腳本灸拍。
runfixup.sh腳本中包含一系列的操作系統(tǒng)命令,利用這個腳本可以對操作系統(tǒng)進行一定的修改砾省,使其滿足安裝條件鸡岗。完成系統(tǒng)進行校驗之后,以root用戶的身份執(zhí)行腳本runfixup.sh编兄,就可以解決操作系統(tǒng)中一些尚不滿足安裝條件的情況轩性。
2.2.根據(jù)提示使用root用戶在兩個節(jié)點執(zhí)行修復腳本并安裝cvuqdisk和pdksh,安裝完成后再此運行檢查應該除了GNS和時間同步其他全部OK(by all)
/tmp/CVU_11.2.0.4.0_grid/runfixup.sh
rpm -ivh /home/grid/grid/rpm/cvuqdisk-1.0.9-1.rpm
rpm -ivh pdksh-5.2.14-37.el5_8.1.i386.rpm
rpm -ivh pdksh-5.2.14-37.el5_8.1.x86_64.rpm
pdksh需要單獨下載:
https://pan.baidu.com/s/1cb3nsP7plx2tAqyLmeMGiQ
https://pan.baidu.com/s/1zL3bawYb4sLYx3bqEHQzlw
3.執(zhí)行靜默安裝(靜默安裝腳本見附錄2)(節(jié)點1執(zhí)行即可狠鸳,會自動復制到節(jié)點2)
/home/grid/grid/runInstaller -showProgress -silent -responseFile /home/grid/grid.rsp
-showProgress 用于在控制臺上顯示安裝進度炮姨。僅在無提示安裝下才支持此選項。
-ignorePrereq 忽略運行先決條件檢查碰煌。由于我們沒有使用DNS來解析SCAN所以會報一個SCAN的錯誤舒岸,因為使用udev綁定裸設備而沒有使用ASMLIB來使用ASM,所以會報一個ASM的錯誤芦圾,這兩個錯誤都是可以忽略的蛾派,但靜默安裝在檢測到錯誤后就會停止安裝,不能像圖形界面那樣點一下忽略跳過个少,所以我們使用這個參數(shù)來繞過預檢
-silent 對于無提示模式下的操作, 輸入內容可以是一個響應文件, 也可以是命令行變量值對的列表洪乍。
-responseFile 指定要使用的響應文件和路徑。
其它命令請查詢幫助 -help
4.根據(jù)提示分別在兩個節(jié)點按以下順序執(zhí)行sh腳本(by all)
1.節(jié)點1:/u01/app/oraInventory/orainstRoot.sh
2.節(jié)點2:/u01/app/oraInventory/orainstRoot.sh
3.節(jié)點1:/u01/app/11.2.0/grid/root.sh
4.節(jié)點2:/u01/app/11.2.0/grid/root.sh
Redhat7在執(zhí)行root.sh的時候出現(xiàn)以下錯誤提示,經(jīng)查是個bug:
ohasd failed to start
Failed to start the Clusterware. Last 20 lines of the alert log follow:
2018-12-31 21:40:24.432:
[client(11531)]CRS-2101:The OLR was formatted using version 3.
解決方法1:
/bin/dd if=/var/tmp/.oracle/npohasd of=/dev/null bs=1024 count=1
5.根據(jù)提示需要提供密碼腳本文件
在運行安裝程序的節(jié)點使用grid用戶執(zhí)行以下腳本
關于此密碼文件的官方說明:https://docs.oracle.com/database/121/CWLIN/app_nonint.htm#CWLIN379
touch /home/grid/cfgrsp.properties
/u01/app/11.2.0/grid/cfgtoollogs/configToolAllCommands RESPONSE_FILE=/home/grid/cfgrsp.properties
在這里我們只提供一個空文件夜焦,關于官方說明只是在需要使用智能管理平臺界面IPMICA的時候才需要提供密碼壳澳。
6.至此grid已安裝完成,附上群集狀態(tài)檢查
[grid@rac1 ~]$ crsctl check crs
CRS-4638: Oracle High Availability Services is online
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
[grid@rac1 ~]$ crs_stat -t -v
Name Type R/RA F/FT Target State Host
----------------------------------------------------------------------
ora....ER.lsnr ora....er.type 0/5 0/ ONLINE ONLINE rac1
ora....N1.lsnr ora....er.type 0/5 0/0 ONLINE ONLINE rac1
ora.OCR.dg ora....up.type 0/5 0/ ONLINE ONLINE rac1
ora.asm ora.asm.type 0/5 0/ ONLINE ONLINE rac1
ora.cvu ora.cvu.type 0/5 0/0 ONLINE ONLINE rac1
ora.gsd ora.gsd.type 0/5 0/ OFFLINE OFFLINE
ora....network ora....rk.type 0/5 0/ ONLINE ONLINE rac1
ora.oc4j ora.oc4j.type 0/1 0/2 ONLINE ONLINE rac1
ora.ons ora.ons.type 0/3 0/ ONLINE ONLINE rac1
ora....SM1.asm application 0/5 0/0 ONLINE ONLINE rac1
ora....C1.lsnr application 0/5 0/0 ONLINE ONLINE rac1
ora.rac1.gsd application 0/5 0/0 OFFLINE OFFLINE
ora.rac1.ons application 0/3 0/0 ONLINE ONLINE rac1
ora.rac1.vip ora....t1.type 0/0 0/0 ONLINE ONLINE rac1
ora....SM2.asm application 0/5 0/0 ONLINE ONLINE rac2
ora....C2.lsnr application 0/5 0/0 ONLINE ONLINE rac2
ora.rac2.gsd application 0/5 0/0 OFFLINE OFFLINE
ora.rac2.ons application 0/3 0/0 ONLINE ONLINE rac2
ora.rac2.vip ora....t1.type 0/0 0/0 ONLINE ONLINE rac2
ora....ry.acfs ora....fs.type 0/5 0/ ONLINE ONLINE rac1
ora.scan1.vip ora....ip.type 0/0 0/0 ONLINE ONLINE rac1
[grid@rac1 ~]$ olsnodes -n
rac1 1
rac2 2
[grid@rac1 ~]$ ps -ef|grep lsnr|grep -v 'grep'|grep -v 'ocfs'|awk '{print$9}'
LISTENER_SCAN1
LISTENER
[grid@rac1 ~]$ srvctl status asm -a
ASM 正在 rac2,rac1 上運行
ASM 已啟用茫经。
[grid@rac1 ~]$ olsnodes -n -i -s -t
rac1 1 rac1-vip Active Unpinned
rac2 2 rac2-vip Active Unpinned
[grid@rac1 ~]$ crsctl query css votedisk
## STATE File Universal Id File Name Disk group
-- ----- ----------------- --------- ---------
1. ONLINE 859e013bd7544f67bfb2f5ebc7ecbae4 (/dev/raw/raw1) [OCR]
2. ONLINE a96ac903004f4ffebf2f6da76fb5325b (/dev/raw/raw2) [OCR]
3. ONLINE 6e53a9f9bf8e4facbf26317b8edfbd34 (/dev/raw/raw5) [OCR]
Located 3 voting disk(s).
[grid@rac1 ~]$ srvctl config scan
SCAN 名稱: rac-scan, 網(wǎng)絡: 1/10.0.1.0/255.255.255.0/eth0
SCAN VIP 名稱: scan1, IP: /rac-scan/10.0.1.135
[grid@rac1 ~]$ srvctl config scan_listener
SCAN 監(jiān)聽程序 LISTENER_SCAN1 已存在巷波。端口: TCP:1521
第五步:安裝Oracle Database
1.創(chuàng)建ASM磁盤組DATA用于存放數(shù)據(jù)庫文件和BAK用于備份
方法1:使用ASMCA
方法2:使用ASMCMD
-
/home/oracle/database/runInstaller
-responseFile 指定要使用的響應文件和路徑。
-silent 對于無提示模式下的操作, 輸入內容可以是一個響應文件, 也可以是命令行變量值對的列表卸伞。
-executePrereqs 僅執(zhí)行先決條件檢查抹镊。
-showProgress 用于在控制臺上顯示安裝進度。僅在無提示安裝下才支持此選項荤傲。
附錄:Bug(附徹底解決辦法)
Bug說明:https://www.cnblogs.com/zx3212/p/7017641.html
ALERT: Grid Infrastructure Fails to Start OHASD With RedHat Linux or Oracle Linux with RedHat Compatible Kernel (RHCK) Version 3.10.0-514.21.2.EL7.X86_64 or Higher (Doc ID 2282371.1)
https://community.oracle.com/message/14424838#14424838
解決方法:手動創(chuàng)建服務文件垮耳,并設置開機自動啟動
touch /usr/lib/systemd/system/ohas.service
chmod 777 /usr/lib/systemd/system/ohas.service
cat <<EOF>/usr/lib/systemd/system/ohas.service
[Unit]
Description=Oracle High Availability Services
After=syslog.target
[Service]
ExecStart=/etc/init.d/init.ohasd run >/dev/null 2>&1 Type=simple
Restart=always
[Install]
WantedBy=multi-user.target
EOF
以root用戶運行下面的命令
systemctl daemon-reload
systemctl enable ohas.service
systemctl start ohas.service
附錄1:初始化腳本(將以下內容保存為sh文件直接執(zhí)行即可)
#/bin/bash
# 本腳本針對RedHat6、CentOS6靜默安裝Oracle 11g RAC初始化系統(tǒng)參數(shù)用
# 本腳本只適用于新安裝系統(tǒng)的初始化,已經(jīng)在使用或者有調整系統(tǒng)參數(shù)的禁止使用V辗稹?∷浴!A逭谩乌询!
# 注意:本腳本會覆蓋hosts設置
################################### 已驗證 Linux 發(fā)行版 ###################################
# Red Hat Enterprise Linux Server release 6.10.x86_64 (Santiago)
# Oracle Linux 7.5 x86_64
################################### 請根據(jù)自己實際情況修改變量 ###################################
rac1HostName=rac1
rac2HostName=rac2
rac1PlublicIP=10.0.1.131
rac2PlublicIP=10.0.1.132
rac1VIP=10.0.1.133
rac2VIP=10.0.1.134
scanIP=10.0.1.135
rac1PrivIP=11.11.11.131
rac2PrivIP=11.11.11.132
scanName=rac-scan
oraclePasswd=oracle
gridPasswd=grid
# grid and oracle 根目錄
GridOracleHomeTemp=/u01
# grid實例名稱(節(jié)點1為:“名稱1”,節(jié)點2為:“名稱2”)
GRID_SIDTemp=+ASM
# 安裝grid時候的:Oracle Base
GRID_BASETemp=/u01/app/grid
# 安裝grid時候的:Software Location
GRID_HOMETemp=/u01/app/11.2.0/grid
# 安裝database時候的:Oracle Base
ORACLE_BASETemp=/u01/app/oracle
# 數(shù)據(jù)庫名稱
ORACLE_UNQNAMETemp=oracledbrac
# 數(shù)據(jù)庫實例名稱(節(jié)點1實例名稱為:orcl1豌研,節(jié)點2為:orcl2)
ORACLE_SIDTemp=orcl
################################### 請根據(jù)自己實際情況修改變量 ###################################
# 檢查當前用戶是否為root權限
if [ `id -u` -eq 0 ];then
echo "當前用戶是root用戶妹田,將繼續(xù)安裝!"
else
echo "非root用戶!"
exit 0
fi
# 輸出提示,是否已設置靜態(tài)IP并掛載光驅
echo
read -p "請確認您已經(jīng)將PlublicIP設置為靜態(tài)IP并已掛載Linux安裝光盤.按Enter鍵開始,Ctrl+C退出" tempchar
echo
# 請選擇你的系統(tǒng)版本(RedHat6或者Redhat7)
read -p "系統(tǒng)版本為:6 or 7:" LinuxVer
if [ ${LinuxVer} -eq 6 ]
then
echo "您選擇的系統(tǒng)是Linux發(fā)行版:6"
elif [ ${LinuxVer} -eq 7 ]
then
echo "您選擇的系統(tǒng)是Linux發(fā)行版:7"
else
echo "輸入錯誤鹃共,程序將推出"
exit
fi
# 選擇當前節(jié)點(此腳本只支持雙節(jié)點安裝RAC)
read -p "當前節(jié)點為1 or 2:" nodeNum
if [ $nodeNum -eq 1 ]
then
echo "當前服務器為:節(jié)點1"
hostname=${rac1HostName}
racPlublicip=${rac1PlublicIP}
racVIP=${rac1VIP}
elif [ $nodeNum -eq 2 ]
then
echo "當前服務器為:節(jié)點2"
hostname=${rac2HostName}
racPlublicip=${rac2PlublicIP}
racVIP=${rac2VIP}
else
echo -e "\033[31m節(jié)點選擇錯誤\033[0m"
exit
fi
# 1.關閉SELinux
grep "SELINUX=disabled" /etc/selinux/config > /dev/null 2>&1
if [ $? -eq 0 ]
then
echo "SElinux本身就是關閉狀態(tài)"
setenforce 0
else
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
[ $? -eq 0 ] && echo "關閉SELinux - Success" || echo -e "\033[31m關閉SELinux----------Failed\033[0m"
setenforce 0
fi
# 2.關閉iptables和firewalld(需要區(qū)分6和7)
if [ ${LinuxVer} -eq 6 ]
then
service iptables stop
chkconfig iptables off
[ $? -eq 0 ] && echo "禁止iptables開機自動啟動 - Success" || echo -e "\033[31m禁止iptables開機自動啟動----------Failed\033[0m"
else
systemctl stop firewalld
systemctl disable firewalld
[ $? -eq 0 ] && echo "禁止firewalld開機自動啟動 - Success" || echo -e "\033[31m禁止firewalld開機自動啟動----------Failed\033[0m"
systemctl stop iptables
systemctl disable iptables
[ $? -eq 0 ] && echo "禁止iptables開機自動啟動 - Success" || echo -e "\033[31m禁止iptables開機自動啟動----------Failed\033[0m"
fi
# 3.修改主機名(需要區(qū)分6和7)
if [ ${LinuxVer} -eq 6 ]
then
hostname ${hostname}
sed -i "/HOSTNAME=/c HOSTNAME=${hostname}" /etc/sysconfig/network
[ $? -eq 0 ] && echo "修改主機名 - Success" || echo -e "\033[31m修改主機名----------Failed\033[0m"
else
hostnamectl set-hostname ${hostname}
[ $? -eq 0 ] && echo "修改主機名 - Success" || echo -e "\033[31m修改主機名----------Failed\033[0m"
fi
# 4.寫入hosts
cat <<EOF >/etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
${rac1PlublicIP} ${rac1HostName}
${rac2PlublicIP} ${rac2HostName}
${rac1VIP} ${rac1HostName}-vip
${rac2VIP} ${rac2HostName}-vip
${scanIP} ${scanName}
${rac1PrivIP} ${rac1HostName}-priv
${rac2PrivIP} ${rac2HostName}-priv
EOF
[ $? -eq 0 ] && echo "寫入hosts文件 - Success" || echo -e "\033[31m寫入hosts----------Failed\033[0m"
# 5.禁用ntpd,Oracle會自動啟用自己的ctssd來進行時間同步(需要區(qū)分6和7)
if [ ${LinuxVer} -eq 6 ]
then
service ntpd stop
chkconfig ntpd off
[ $? -eq 0 ] && echo "禁止ntp開機自動啟動 - Success" || echo -e "\033[31m禁止ntp開機自動啟動----------Failed\033[0m"
# mv /etc/ntp.conf /etc/ntp.conf.bak > /dev/null 2>&1
else
systemctl stop ntpd
systemctl disable ntpd
[ $? -eq 0 ] && echo "禁止ntp開機自動啟動 - Success" || echo -e "\033[31m禁止ntp開機自動啟動----------Failed\033[0m"
# mv /etc/ntp.conf /etc/ntp.conf.bak > /dev/null 2>&1
fi
# 6.創(chuàng)建所需要的賬戶和組
#Add oracle user. If present ,do nothing but create the mandatory groups
#添加oracle用戶鬼佣。 如果存在,除了創(chuàng)建必需組之外什么也不做
USERID="54321"
GROUPID="54321"
# 6.1.檢查GROUPID是否被占用
groupnum=`cat /etc/group | sort -t: -g +2 -3 | grep -v nfsnobody | cut -f3 -d":" | tail -1`
if [ "${groupnum}" -ge "${GROUPID}" ]; then
GROUPID=`expr $groupnum + 1`
fi
# 6.2.檢查USERID是否被占用
usernum=`cat /etc/passwd | sort -t: -g +2 -3 | grep -v nfsnobody | cut -f3 -d":" | tail -1`
if [ "${usernum}" -ge "${USERID}" ]; then
USERID=`expr $usernum + 1`
fi
# 6.3.創(chuàng)建oinstall組
/bin/grep "^oinstall" /etc/group > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "Group oinstall - 已經(jīng)存在"
else
echo "Adding group oinstall with gid ${GROUPID}"
/usr/sbin/groupadd -g ${GROUPID} oinstall
fi
# 6.4.創(chuàng)建dba組
/bin/grep "^dba" /etc/group > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "Group dba - 已經(jīng)存在"
else
echo "Adding group dba"
/usr/sbin/groupadd dba
fi
# 6.5.創(chuàng)建oper組 add by 6
/bin/grep "^oper" /etc/group > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "Group oper - 已經(jīng)存在"
else
echo "Adding group oper"
/usr/sbin/groupadd oper
fi
# 6.6.創(chuàng)建asmdba組 add by 6
/bin/grep "^asmdba" /etc/group > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "Group asmdba - 已經(jīng)存在"
else
echo "Adding group asmdba"
/usr/sbin/groupadd asmdba
fi
# 6.7.創(chuàng)建asmadmin組 add by 6
/bin/grep "^asmadmin" /etc/group > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "Group asmadmin - 已經(jīng)存在"
else
echo "Adding group asmadmin"
/usr/sbin/groupadd asmadmin
fi
# 6.8.創(chuàng)建asmoper組 add by 6
/bin/grep "^asmoper" /etc/group > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "Group asmoper - 已經(jīng)存在"
else
echo "Adding group asmoper"
/usr/sbin/groupadd asmoper
fi
# 6.9.創(chuàng)建oracle賬戶霜浴,如果已有oracle賬號晶衷,將自動為該賬號設置密碼。
/bin/grep "^oracle:" /etc/passwd > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo "Adding user oracle with user id ${USERID}, initial login group oinstall, supplementary group asmadmin,asmdba,dba,oper and home directory /home/oracle"
/usr/sbin/useradd -u ${USERID} -g oinstall -G asmadmin,asmdba,dba,oper -d /home/oracle oracle
if [ "$?" -eq "0" ]; then
echo "Changing ownership of /home/oracle to oracle:oinstall"
/bin/chown oracle:oinstall /home/oracle
else
echo -e "\033[31m創(chuàng)建oracle用戶失敗----------Failed\033[0m"
fi
else
echo "用戶oracle已經(jīng)存在"
fi
# 6.10.創(chuàng)建grid賬戶 如果已有grid賬號阴孟,將自動為該賬號設置密碼晌纫。add by 6
/bin/grep "^grid:" /etc/passwd > /dev/null 2>&1
if [ $? -ne 0 ]; then
#Add the user - password is disabled for grid user.
#添加用戶 - 并自動為grid用戶設置密碼。
echo "Adding user grid with user id ${USERID}, initial login group oinstall, supplementary group asmadmin,asmdba,asmoper,dba and home directory /home/grid"
/usr/sbin/useradd -u `expr ${USERID} + 1` -g oinstall -G asmadmin,asmdba,asmoper,dba -d /home/grid grid
if [ "$?" -eq "0" ]; then
echo "Changing ownership of /home/grid to grid:oinstall"
/bin/chown grid:oinstall /home/grid
else
echo -e "\033[31m創(chuàng)建grid用戶失敗----------Failed\033[0m"
fi
else
echo "用戶grid已經(jīng)存在"
fi
# 6.11.為oracle賬戶設置密碼
echo ${oraclePasswd} | passwd --stdin oracle
if [ $? -eq 0 ]
then
echo "修改oracle密碼 - Success"
else
echo -e "\033[31m修改oracle密碼----------Failed\033[0m"
fi
# 6.12.為grid賬戶設置密碼
echo ${gridPasswd} | passwd --stdin grid
if [ $? -eq 0 ]
then
echo "修改grid密碼 - Success"
else
echo -e "\033[31m修改grid密碼----------Failed\033[0m"
fi
# 6.13.檢查oracle用戶所屬組是否正確
id oracle | grep asmadmin > /dev/null 2>&1
if [ $? -eq 0 ]
then
echo "oracle附屬組檢查通過"
else
usermod -aG asmadmin oracle
if [ $? -eq 0 ]
then
echo "用oracle用戶添加組成功"
else
echo -e "\033[31m用oracle用戶添加組失敗----------Failed\033[0m"
fi
fi
id oracle | grep asmdba > /dev/null 2>&1
if [ $? -eq 0 ]
then
echo "oracle附屬組檢查通過"
else
usermod -aG asmdba oracle
if [ $? -eq 0 ]
then
echo "用oracle用戶添加組成功"
else
echo -e "\033[31m用oracle用戶添加組失敗----------Failed\033[0m"
fi
fi
id oracle | grep dba > /dev/null 2>&1
if [ $? -eq 0 ]
then
echo "oracle附屬組檢查通過"
else
usermod -aG dba oracle
if [ $? -eq 0 ]
then
echo "用oracle用戶添加組成功"
else
echo -e "\033[31m用oracle用戶添加組失敗----------Failed\033[0m"
fi
fi
id oracle | grep oper > /dev/null 2>&1
if [ $? -eq 0 ]
then
echo "oracle附屬組檢查通過"
else
usermod -aG oper oracle
if [ $? -eq 0 ]
then
echo "用oracle用戶添加組成功"
else
echo -e "\033[31m用oracle用戶添加組失敗----------Failed\033[0m"
fi
fi
# 6.14.檢查grid用戶所屬組是否正確
id grid | grep asmadmin > /dev/null 2>&1
if [ $? -eq 0 ]
then
echo "grid附屬組檢查通過"
else
usermod -aG asmadmin grid
if [ $? -eq 0 ]
then
echo "用戶 grid 添加組成功"
else
echo -e "\033[31m用戶 grid 添加組失敗----------Failed\033[0m"
fi
fi
id grid | grep asmdba > /dev/null 2>&1
if [ $? -eq 0 ]
then
echo "grid附屬組檢查通過"
else
usermod -aG asmdba grid
if [ $? -eq 0 ]
then
echo "用戶 grid 添加組成功"
else
echo -e "\033[31m用戶 grid 添加組失敗----------Failed\033[0m"
fi
fi
id grid | grep asmoper > /dev/null 2>&1
if [ $? -eq 0 ]
then
echo "grid附屬組檢查通過"
else
usermod -aG asmoper grid
if [ $? -eq 0 ]
then
echo "用戶 grid 添加組成功"
else
echo -e "\033[31m用戶 grid 添加組失敗----------Failed\033[0m"
fi
fi
id grid | grep dba > /dev/null 2>&1
if [ $? -eq 0 ]
then
echo "grid附屬組檢查通過"
else
usermod -aG dba grid
if [ $? -eq 0 ]
then
echo "用戶 grid 添加組成功"
else
echo -e "\033[31m用戶 grid 添加組失敗----------Failed\033[0m"
fi
fi
# 獲取oinstall組的最終ID
GROUPID=`cat /etc/group | grep oinstall | awk -F ":" '{print $3}'`
# 6.15.檢查oracle用戶主組是否正確
id oracle | grep gid=${GROUPID} > /dev/null 2>&1
if [ $? -eq 0 ]
then
echo "oracle主組檢查通過"
else
usermod --gid ${GROUPID} oracle
if [ $? -eq 0 ]
then
echo "用戶 grid 主組修改成功"
else
echo -e "\033[31m用戶 oracle 主組修改失敗----------Failed\033[0m"
fi
fi
# 6.16.檢查grid用戶主組是否正確
id grid | grep gid=${GROUPID} > /dev/null 2>&1
if [ $? -eq 0 ]
then
echo "oracle主組檢查通過"
else
usermod --gid ${GROUPID} grid
if [ $? -eq 0 ]
then
echo "用戶 grid 主組修改成功"
else
echo -e "\033[31m用戶 grid 主組修改失敗----------Failed\033[0m"
fi
fi
# 7.新建grid和oracle安裝目錄
mkdir -p ${GRID_BASETemp}
mkdir -p ${GRID_HOMETemp}
mkdir -p ${ORACLE_BASETemp}
chown -R grid:oinstall ${GridOracleHomeTemp}
chown oracle:oinstall ${ORACLE_BASETemp}
chmod -R 775 ${GridOracleHomeTemp}
# 8.配置oracle和grid用戶變量
if [ $nodeNum -eq 1 ]
then
grep 666666 /home/oracle/.bash_profile
if [ $? -eq 0 ]; then
cp /home/oracle/.bash_profile.666666 /home/oracle/.bash_profile
else
cp /home/oracle/.bash_profile /home/oracle/.bash_profile.666666
fi
cat <<EOF >>/home/oracle/.bash_profile
#add by 666666
export ORACLE_SID=${ORACLE_SIDTemp}1 # RAC1
export ORACLE_UNQNAME=${ORACLE_UNQNAMETemp}
export ORACLE_BASE=${ORACLE_BASETemp}
export ORACLE_HOME=\$ORACLE_BASE/product/11.2.0/db
export TNS_ADMIN=\$ORACLE_HOME/network/admin
export PATH=/usr/sbin:\$PATH
export PATH=\$ORACLE_HOME/bin:\$PATH
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
EOF
grep 666666 /home/grid/.bash_profile
if [ $? -eq 0 ]; then
cp /home/grid/.bash_profile.666666 /home/grid/.bash_profile
else
cp /home/grid/.bash_profile /home/grid/.bash_profile.666666
fi
cat <<EOF >>/home/grid/.bash_profile
#add by 666666
export ORACLE_SID=${GRID_SIDTemp}1 # RAC1
export ORACLE_BASE=${GRID_BASETemp}
export ORACLE_HOME=${GRID_HOMETemp}
export PATH=/usr/sbin:\$PATH
export PATH=\$ORACLE_HOME/bin:\$PATH
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=\$ORACLE_HOME/JRE:\$ORACLE_HOME/jlib:\$ORACLE_HOME/rdbms/jlib
umask 022
EOF
else
grep 666666 /home/oracle/.bash_profile
if [ $? -eq 0 ]; then
cp /home/oracle/.bash_profile.666666 /home/oracle/.bash_profile
else
cp /home/oracle/.bash_profile /home/oracle/.bash_profile.666666
fi
cat <<EOF >>/home/oracle/.bash_profile
#add by 666666
export ORACLE_SID=${ORACLE_SIDTemp}2 # RAC2
export ORACLE_UNQNAME=${ORACLE_UNQNAMETemp}
export ORACLE_BASE=${ORACLE_BASETemp}
export ORACLE_HOME=\$ORACLE_BASE/product/11.2.0/db
export TNS_ADMIN=\$ORACLE_HOME/network/admin
export PATH=/usr/sbin:\$PATH
export PATH=\$ORACLE_HOME/bin:\$PATH
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
EOF
grep 666666 /home/grid/.bash_profile
if [ $? -eq 0 ]; then
cp /home/grid/.bash_profile.666666 /home/grid/.bash_profile
else
cp /home/grid/.bash_profile /home/grid/.bash_profile.666666
fi
cat <<EOF >>/home/grid/.bash_profile
#add by 666666
export ORACLE_SID=${GRID_SIDTemp}2 # RAC2
export ORACLE_BASE=${GRID_BASETemp}
export ORACLE_HOME=${GRID_HOMETemp}
export PATH=/usr/sbin:\$PATH
export PATH=\$ORACLE_HOME/bin:\$PATH
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=\$ORACLE_HOME/JRE:\$ORACLE_HOME/jlib:\$ORACLE_HOME/rdbms/jlib
umask 022
EOF
fi
# 9.配置本地YUM并安裝依賴包(需要區(qū)分6和7)
mkdir -p /mnt/cdrom
mount /dev/cdrom /mnt/cdrom
mv /etc/yum.repos.d/local.repo /etc/yum.repos.d/local.repo.bak
cat <<EOF >/etc/yum.repos.d/local.repo
[local]
name=local
baseurl=file:///mnt/cdrom
gpgcheck=0
enabled=1
EOF
yum clean all #清理本地緩存
yum clean plugins #清理插件緩存
yum install -y binutils-* compat-db* compat-db-* control-center* gcc-* gcc-c++-* glibc-* glibc-common-* gnome-libs-* \
make-* pdksh* sysstat-* xscreensaver-* make-* gdb-6.1post-* glibc-* glibc-common-* glibc-devel-* glibc-devel-* \
compat-gcc-* compat-gcc-c++-* compat-libstdc++-* compat-libstdc++-devel-* gnome-libs-* libstdc++-* libstdc++-devel-* \
openmotif-* sysstat-* setarch-* libaio-* libaio-devel-* libXp* libXp-devel* elfutils-libelf-devel* unixODBC-* \
unixODBC-devel-* compat-libcap1.x86_64 libcap.so.1 sg3_utils
附錄2:grid靜默安裝響應文件
# 此文件從p13390677_112040_Linux-x86-64_2of7.zip提取
# by 6 20181231 QQ:1327133225
oracle.install.responseFileVersion=/oracle/install/rspfmt_crsinstall_response_schema_v11_2_0
# 修改1:當前安裝節(jié)點的計算機名稱----------------------------------------------(重點注意1)
ORACLE_HOSTNAME=rac1
# 修改2:版本信息路徑(路徑相關可以不修改)
INVENTORY_LOCATION=/u01/app/oraInventory
# 修改3:語言永丝,多選用,隔開(正常來說保持默認即可)
SELECTED_LANGUAGES=en,zh_CN
oracle.install.option=CRS_CONFIG
# 修改4:grid 的 BASE 和 HOME 目錄(路徑相關可以不修改)
ORACLE_BASE=/u01/app/grid
ORACLE_HOME=/u01/app/11.2.0/grid
oracle.install.asm.OSDBA=asmdba
oracle.install.asm.OSOPER=asmoper
oracle.install.asm.OSASM=asmadmin
# 修改5:scan名稱锹漱,和hosts對應--------------------------------------------------(重點注意2)
oracle.install.crs.config.gpnp.scanName=rac-scan
# 修改6:集群監(jiān)聽端口號---------------------------------------------------------(重點注意3)
oracle.install.crs.config.gpnp.scanPort=1521
# 修改7:cluster名稱,可以保持默認
oracle.install.crs.config.clusterName=rac-cluster
oracle.install.crs.config.gpnp.configureGNS=false
oracle.install.crs.config.gpnp.gnsSubDomain=
oracle.install.crs.config.gpnp.gnsVIPAddress=
oracle.install.crs.config.autoConfigureClusterNodeVIP=false
# 修改8:節(jié)點信息慕嚷,跟hosts對應---------------------------------------------------(重點注意4)
oracle.install.crs.config.clusterNodes=rac1:rac1-vip,rac2:rac2-vip
# 修改9:網(wǎng)卡信息和網(wǎng)段哥牍,對應ifconfig結果(兩個節(jié)點的網(wǎng)卡名稱需要一致)----------(重點注意5)
oracle.install.crs.config.networkInterfaceList=eth0:10.0.1.0:1,eth1:11.11.11.0:2
# 存儲形式,使用ASM的話保持默認即可(可以不修改)
oracle.install.crs.config.storageOption=ASM_STORAGE
oracle.install.crs.config.sharedFileSystemStorage.diskDriveMapping=
oracle.install.crs.config.sharedFileSystemStorage.votingDiskLocations=
oracle.install.crs.config.sharedFileSystemStorage.votingDiskRedundancy=NORMAL
oracle.install.crs.config.sharedFileSystemStorage.ocrLocations=
oracle.install.crs.config.sharedFileSystemStorage.ocrRedundancy=NORMAL
oracle.install.crs.config.useIPMI=false
oracle.install.crs.config.ipmi.bmcUsername=
oracle.install.crs.config.ipmi.bmcPassword=
# SYS密碼
oracle.install.asm.SYSASMPassword=asmadmin
# 修改10:表決盤名稱(可以不修改)
oracle.install.asm.diskGroup.name=OCR
# 修改11:表決盤冗余選項(接受以下3個選項)-----------------------------------------(重點注意6)
# HIGH 高冗余:最少5塊磁盤喝检,Oracle ASM默認提供三重鏡像嗅辣。可以容忍在不同故障組中丟失兩個Oracle ASM磁盤挠说。
# NORMAL 正常冗余:最少3塊磁盤澡谭,Oracle ASM默認提供雙向鏡像,這意味著鏡像所有文件损俭,以便每個范圍有兩個副本蛙奖。容許丟失一個磁盤。
# EXTERNAL 外部冗余:最少1塊盤撩炊,由外部RAID提供冗余外永。
oracle.install.asm.diskGroup.redundancy=NORMAL
oracle.install.asm.diskGroup.AUSize=1
# 修改12:表決盤所使用的裸盤崎脉,根據(jù)需要修改------------------------------------------(重點注意7)
oracle.install.asm.diskGroup.disks=/dev/raw/raw1,/dev/raw/raw2,/dev/raw/raw5
oracle.install.asm.diskGroup.diskDiscoveryString=
# ASMSNMP密碼
oracle.install.asm.monitorPassword=asmadmin
oracle.install.crs.upgrade.clusterNodes=
oracle.install.asm.upgradeASM=false
oracle.installer.autoupdates.option=SKIP_UPDATES
oracle.installer.autoupdates.downloadUpdatesLoc=
AUTOUPDATES_MYORACLESUPPORT_USERNAME=
AUTOUPDATES_MYORACLESUPPORT_PASSWORD=
PROXY_HOST=
PROXY_PORT=0
PROXY_USER=
PROXY_PWD=
PROXY_REALM=