[root@rac1 ~]#
前奏
注意事項
1.主機名都用小寫字母,長度不能超過15位,不要有特殊符號
2.兩個節點的Plublic和VIP所在網卡的網卡名要一樣
3.表決盤應該都是相同的大小。不同的大小可能導致可用性降低。
環境
[root@rac1 ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 6.5 (Santiago)
p13390677_112040_Linux-x86-64_1of7.zip
p13390677_112040_Linux-x86-64_2of7.zip
p13390677_112040_Linux-x86-64_3of7.zip
各主機配置
主機名 | CPU | 內存 | 硬盤 | 分區 |
rac1 | 2核 | 8G | 250G*1 | /dev/mapper/vg_rac1-v01 50G / tmpfs 3.9G /dev/shm /dev/sda1 291M /boot /dev/mapper/vg_rac1-v02 30G /home /dev/mapper/vg_rac1-v03 25G /tmp Swap: 24 |
rac2 | 2核 | 8G | 250G*1 | /dev/mapper/vg_rac2-v01 55G / tmpfs 3.9G /dev/shm /dev/sda1 291M /boot /dev/mapper/vg_rac2-v02 30G /home /dev/mapper/vg_rac2-v03 30G /tmp Swap: 24 |
store | 1核 | 1G | 100G(裝系統) 20G(ocr盤,不要分區) 25G(投票盤votingdisk,不要分區) 30G(數據盤,data,不要分區) 35G(不要分區) 40G(不要分區) 45G(不要分區) |
RAC IP地址規划並寫入hosts文件
(只需要在eth0上配置Plublic IP即可。vip和SCAN IP會自動配置,要保證這兩個IP沒有被使用)
1、IP地址規划
主機名 | IP | 類型 | 網絡接口 |
rac1 | 172.16.186.146/24 | Plublic IP | eth0 |
rac1-vip | 172.16.186.147/24 | Virtaual IP | |
rac1priv | 192.168.0.146/24 | Private IP | eth1 |
rac2 | 172.168.186.148/24 | Plublic IP | eth0 |
rac2-vip | 172.168.186.149/24 | Virtaual IP | |
rac2priv | 192.168.0.148/24 | Private IP | eth1 |
rac-scan | 172.168.186.150/24 | SCAN IP | eth0 |
store | 172.16.186.151 | eth0 |
2、分別修改兩個節點的主機名
3、分別修改兩台節點的IP地址
vim /etc/sysconfig/network-scripts/ifcfg-eth0
vim /etc/sysconfig/network-scripts/ifcfg-eth1
4、分別寫入兩個節點的hosts文件
[root@rac1 ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.186.146 rac1
172.16.186.147 rac1-vip
192.168.0.146 rac1-priv
172.16.186.148 rac2
172.16.186.149 rac2-vip
192.168.0.148 rac2-priv
172.16.186.150 rac-scan
[root@rac1 ~]# scp /etc/hosts root@172.16.186.148:/etc
安裝前設置
第零步:關閉系統防火牆
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
service iptables stop && chkconfig iptables off
cat /etc/selinux/config
service iptables status
第一步:配置共享存儲
注: 上圖除sda磁盤分區裝了系統外,其他磁盤都沒分區
配置共享存儲
[root@store ~]# yum -y install lsscsi scsi-target-utils
[root@store ~]# vim /etc/tgt/targets.conf
注:在最后插入以下內容
<target iqn.2020-07.com.example:server.store.sdb>
<backing-store /dev/sdb>
vendor_id samsung
lun 6
</backing-store>
initiator-address 172.16.186.0/24
write-cache off
</target>
<target iqn.2020-07.com.example:server.store.sdc>
<backing-store /dev/sdc>
vendor_id WD
lun 7
</backing-store>
initiator-address 172.16.186.0/24
write-cache off
</target>
<target iqn.2020-07.com.example:server.store.sdd>
<backing-store /dev/sdd>
vendor_id Seagate
lun 8
</backing-store>
initiator-address 172.16.186.0/24
write-cache off
</target>
<target iqn.2020-07.com.example:server.store.sde>
<backing-store /dev/sde>
vendor_id Seagate
lun 9
</backing-store>
initiator-address 172.16.186.0/24
write-cache off
</target>
<target iqn.2020-07.com.example:server.store.sdf>
<backing-store /dev/sdf>
vendor_id Seagate
lun 10
</backing-store>
initiator-address 172.16.186.0/24
write-cache off
</target>
<target iqn.2020-07.com.example:server.store.sdg>
<backing-store /dev/sdg>
vendor_id Seagate
lun 11
</backing-store>
initiator-address 172.16.186.0/24
write-cache off
</target>
釋意:
格式:iqn.yyyy-mm.<reversed domain name>[:identifier]
iqn:表示ISCSI Qualified Name,簡稱iqn
yyyy-mm:表示年份-月份
reversed domain name:表示倒過來的域名,這里是com.example
[root@store ~]# service tgtd start && chkconfig tgtd on
查看target狀態
[root@store ~]# tgt-admin --show
rac1節點和rac2節點配置
[root@rac1 ~]# yum -y install iscsi-initiator-utils
查找發現網絡中的存儲
[root@rac1 ~]# iscsiadm -m discovery -t st -p 172.16.186.151:3260
[root@rac2 ~]# iscsiadm -m discovery -t st -p 172.16.186.151:3260
登錄一下target並查看磁盤
[root@rac1 ~]# for i in b c d e f g;do iscsiadm -m node -T iqn.2020-07.com.example:server.store.sd$i -p 172.16.186.151 -l;done
[root@rac2 ~]# for i in b c d e f g;do iscsiadm -m node -T iqn.2020-07.com.example:server.store.sd$i -p 172.16.186.151 -l;done
yum -y remove iscsi-initiator-utils
service iscsi stop
rm -rf /var/lib/iscsi/
不能重復登錄
卸載設備
iscsiadm -m node -s
iscsiadm -m node -s -T iqn.2020-07.com:server.store.sdb -l
[root@rac1 ~]# fdisk -l|grep -E "^Disk /dev/sd"
rac1節點和rac2節點上各多了6塊磁盤(這里三/dev/sdc~sdh),這塊磁盤就是store節點上共享出來的
第二步:初始化設置
1.禁用ntpd並刪除其配置文件(禁用后rac的grid安裝的時候回自動使用自帶的CTSS進行時間關系)(所有節點執行)
[root@rac1 ~]# service ntpd status && service ntpd stop && chkconfig ntpd off
[root@rac1 ~]# mv /etc/ntp.conf{,.bak}
2.修改profile文件,在文檔尾部新增如下內容(所有節點執行)
[root@rac1 ~]# 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
3.編輯/etc/sysctl.conf(所有節點執行)
[root@rac1 ~]# vim /etc/sysctl.conf
fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.shmall = 1073741824
kernel.shmmax = 96636764160
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500
[root@rac1 ~]# sysctl -p
4.編輯/etc/security/limits.conf(所有節點執行)
[root@rac1 ~]# vim /etc/security/limits.conf
grid soft nproc 2047
grid hard nproc 16384
grid soft nofile 1024
grid hard nofile 65536
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
5.編輯/etc/pam.d/login(所有節點執行)
echo "session required pam_limits.so" >> /etc/pam.d/login
6.創建用戶並修改密碼(所有節點執行)
groupadd -g 4321 oinstall
groupadd -g 4322 dba
groupadd -g 4323 oper
groupadd -g 4324 asmdba
groupadd -g 4325 asmadmin
groupadd -g 4326 asmoper
useradd -g oinstall -G asmadmin,asmdba,asmoper,dba grid
useradd -g oinstall -G asmadmin,asmdba,dba,oper oracle
echo "aa4455**" | passwd --stdin grid
echo "aa4455**" | passwd --stdin oracle
id oracle
id grid
7.新建grid和oracle安裝目錄(所有節點執行)
mkdir -p /u01/app/11.2.0/grid
mkdir -p /u01/app/grid
mkdir /u01/app/oracle
chown -R grid:oinstall /u01
chown oracle:oinstall /u01/app/oracle
chmod -R 775 /u01/
參照官方文檔,采用GI與DB分開安裝和權限的策略,對於多實例管理有利。
8.配置環境變量(節點1)
# 需要注意的是ORACLE_UNQNAME是數據庫名,創建數據庫時指定多個節點是會創建多個實例,ORACLE_SID指的是數據庫實例名
# 配置oracle賬戶環境變量
[root@rac1 ~]# su - oracle
[oracle@rac1 ~]$ vim .bash_profile
export ORACLE_SID=orcl1
export ORACLE_UNQNAME=oracledbrac
export ORACLE_BASE=/u01/app/oracle
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
[oracle@rac1 ~]$ source .bash_profile
[oracle@rac1 ~]$ exit
# 配置grid賬戶環境變量
[root@rac1 ~]# su - grid
[grid@rac1 ~]$ vim .bash_profile
export ORACLE_SID=+ASM1
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/11.2.0/grid
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
[grid@rac1 ~]$ source .bash_profile
9.配置環境變量(節點2)
# 配置oracle賬戶環境變量
[root@rac2 ~]# su - oracle
[oracle@rac2 ~]$ vim .bash_profile
export ORACLE_SID=orcl2
export ORACLE_UNQNAME=oracledbrac
export ORACLE_BASE=/u01/app/oracle
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
[oracle@rac2 ~]$ source .bash_profile
[oracle@rac2 ~]$ exit
# 配置grid賬戶環境變量
[root@rac2 ~]# su - grid
[grid@rac2 ~]$ vim .bash_profile
export ORACLE_SID=+ASM2
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/11.2.0/grid
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
[grid@rac2 ~]$ source .bash_profile
10.配置oracle用戶ssh互信(所有節點執行)
# 這是很關鍵的一步,雖然官方文檔中聲稱安裝GI和RAC的時候OUI會自動配置SSH,但為了在安裝之前使用CVU檢查各項配置,還是手動配置互信更優。
# 節點1執行
[root@rac1 ~]# su - oracle
[[oracle@rac1 ~]$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
[oracle@rac1 ~]$ ssh rac1 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[oracle@rac1 ~]$ exit
[root@rac1 ~]# su - grid
[grid@rac1 ~]$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
[grid@rac1 ~]$ ssh rac1 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[grid@rac1 ~]$ exit
# 節點2執行
[root@rac2 ~]# su - oracle
[oracle@rac2 ~]$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
[oracle@rac2 ~]$ ssh rac1 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[oracle@rac2 ~]$ ssh rac2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[oracle@rac2 ~]$ exit
[root@rac2 ~]# su - grid
[grid@rac2 ~]$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
[grid@rac2 ~]$ ssh rac1 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[grid@rac2 ~]$ ssh rac2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[grid@rac2 ~]$ scp ~/.ssh/authorized_keys rac1:.ssh/authorized_keys
[grid@rac2 ~]$ exit
[root@rac2 ~]# su - oracle
[oracle@rac2 ~]$ scp ~/.ssh/authorized_keys rac1:.ssh/authorized_keys
# 再返回節點1上執行
[oracle@rac1 ~]$ scp ~/.ssh/authorized_keys rac1:.ssh/authorized_keys
[oracle@rac1 ~]$ scp ~/.ssh/authorized_keys rac2:.ssh/authorized_keys
[oracle@rac1 ~]$ exit
[root@rac1 ~]# su - grid
[grid@rac1 ~]$ scp ~/.ssh/authorized_keys rac1:.ssh/authorized_key
[grid@rac1 ~]$ scp ~/.ssh/authorized_keys rac2:.ssh/authorized_key
執行以下命令測試(所有節點執行)
[root@rac1 ~]# su - oracle #第一次輸入時有一個書需要手動一下
[oracle@rac1 ~]$ ssh rac1 date && ssh rac2 date && ssh rac1-priv date && ssh rac2-priv date
[oracle@rac1 ~]$ ssh rac1 date && ssh rac2 date && ssh rac1-priv date && ssh rac2-priv date
[oracle@rac1 ~]$ exit
[root@rac1 ~]# su - grid
[grid@rac1 ~]$ ssh rac1 date && ssh rac2 date && ssh rac1-priv date && ssh rac2-priv date
[grid@rac1 ~]$ ssh rac1 date && ssh rac2 date && ssh rac1-priv date && ssh rac2-priv date
[root@rac2 ~]# su - oracle
[oracle@rac2 ~]$ ssh rac1 date && ssh rac2 date && ssh rac1-priv date && ssh rac2-priv date
[oracle@rac2 ~]$ ssh rac1 date && ssh rac2 date && ssh rac1-priv date && ssh rac2-priv date
[oracle@rac2 ~]$ exit
[root@rac2 ~]# su - grid
[grid@rac2 ~]$ ssh rac1 date && ssh rac2 date && ssh rac1-priv date && ssh rac2-priv date
[grid@rac2 ~]$ ssh rac1 date && ssh rac2 date && ssh rac1-priv date && ssh rac2-priv date
11.安裝依賴包(所有機器都執行)
[root@rac1 ~]# yum -y install binutils-* compat-db* compat-db-* control-center* gcc-* gcc-c++-* glibc-* glibc-common-* \
make-* sysstat-* make-* glibc-* glibc-common-* glibc-devel-* glibc-devel-* \
compat-gcc-* compat-libstdc++-* libstdc++-* libstdc++-devel-* \
openmotif-* sysstat-* libaio-* libaio-devel-* libXp* libXp-devel* elfutils-libelf-devel* unixODBC-* \
unixODBC-devel-* compat-libcap1.x86_64 libcap.so.1 sg3_utils
[root@rac2 ~]# yum -y install binutils-* compat-db* compat-db-* control-center* gcc-* gcc-c++-* glibc-* glibc-common-* \
make-* sysstat-* make-* glibc-* glibc-common-* glibc-devel-* glibc-devel-* \
compat-gcc-* compat-libstdc++-* libstdc++-* libstdc++-devel-* \
openmotif-* sysstat-* libaio-* libaio-devel-* libXp* libXp-devel* elfutils-libelf-devel* unixODBC-* \
unixODBC-devel-* compat-libcap1.x86_64 libcap.so.1 sg3_utils
11.配置udev(所有節點執行)
[root@rac1 ~]# echo "options=--whitelisted --replace-whitespace" >> /etc/scsi_id.config
[root@rac1 ~]# for i in b c d e f g h; do echo "KERNEL==\"sd*\", BUS==\"scsi\", PROGRAM==\"/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/\$name\", RESULT==\"`/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/sd$i`\",NAME=\"asm-disk$i\", OWNER=\"grid\", GROUP=\"asmadmin\", MODE=\"0660\""; done>>/etc/udev/rules.d/99-oracle-asmdevices.rules
[root@rac1 ~]# cat /etc/udev/rules.d/99-oracle-asmdevices.rules
[root@rac2 ~]# echo "options=--whitelisted --replace-whitespace" >> /etc/scsi_id.config
[root@rac2 ~]# for i in b c d e f g h; do echo "KERNEL==\"sd*\", BUS==\"scsi\", PROGRAM==\"/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/\$name\", RESULT==\"`/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/sd$i`\",NAME=\"asm-disk$i\", OWNER=\"grid\", GROUP=\"asmadmin\", MODE=\"0660\""; done>>/etc/udev/rules.d/99-oracle-asmdevices.rules
[root@rac2 ~]# cat /etc/udev/rules.d/99-oracle-asmdevices.rules
注:這里需要注意的是配置的前后都不能有空格,否則會報錯。最后看到的raw盤權限必須是grid:asmadmin用戶。
啟動並驗證udev(所有節點都執行)
[root@rac1 ~]# /sbin/start_udev
[root@rac1 ~]# ll /dev/asm*
第三部分:安裝grid(所有節點執行)
[root@rac1 ~]# su - grid
[grid@rac1 ~]$ unzip p13390677_112040_Linux-x86-64_3of7.zip -d grid/
[grid@rac1 ~]$ exit
[root@rac1 ~]# rpm -ivh /home/grid/pdksh-5.2.14-30.x86_64.rpm
[root@rac1 ~]# rpm -ivh /home/grid/grid/grid/rpm/cvuqdisk-1.0.9-1.rpm #該rpm包在數據庫的包里自帶
[root@rac1 ~]# su - grid
[grid@rac1 ~]$ cd grid/grid
[grid@rac1 ~]$ ./runcluvfy.sh stage -pre crsinst -n rac1,rac2 -verbose -fixup
(這一步要挨着檢查,如有failed需足一解決,其中DNS方面會有個failed可忽略,因為該文檔用的是hosts文件解析)
語法說明:
-pre: 該選項主要檢查是否滿足安裝的需要。
-post:該選擇主要檢查安裝后組件是否正常。
-n:該選項用於指定節點列表。
-verbose:該選項用於輸出詳細的驗證信息。
-fixup:這是Oracle 11gR2中新增加的一個參數。利用這個參數,可以產生一個名為runfixup.sh的腳本。
runfixup.sh腳本中包含一系列的操作系統命令,利用這個腳本可以對操作系統進行一定的修改,使其滿足安裝條件。
完成系統進行校驗之后,以root用戶的身份執行腳本runfixup.sh,就可以解決操作系統中一些尚不滿足安裝條件的情況。
[root@rac1 ~]# /tmp/CVU_11.2.0.4.0_grid/
[root@rac1 ~]# ./runfixup.sh
在其中有一個節點上以圖形化窗口打開,開始安裝grid(會啟動復制到另外一個節點,要切換到圖形化界面) #這里如出問題,需多試幾次
[root@rac1 ~]# export DISPLAY=:0.0 #該句是重點
[root@rac1 ~]# xhost +
[root@rac1 ~]# su - grid
[grid@rac1 ~]$ cd grid/grid/
[grid@rac1 ~]$ ./runInstaller
#跳過軟件更新
選擇第一項:安裝和配置grid。
選擇第二項:高級安裝。
選擇語言:默認英文已選擇,本次加入了簡體中文。
取消配置的GNS選項,並依次填修改集群名稱、scan-ip名稱和端口號。
注意:SCAN-Name 和 /etc/hosts 中的scan 名字相同
默認顯示的是安裝所在的節點rac1所對應的/etc/hosts中公網IP與VIP對應配置的的名稱,點擊Add按鈕,將另一個節點的公網IP對應的rac1與VIP對應的rac2-vip填寫進去。
添加完節點后,點擊SSH Connectivity,遠程鏈接各節點,輸入grid用戶的密碼。
點擊Setup按鈕,測試通過后在點擊Test按鈕。都測試通過后點擊Next進行下一步安裝。
檢查網卡設別名稱與對應的網段是否正確,然后網卡類型選擇對應的是私網還是公網。
如果出現以下錯誤說明/etc/hosts中的各個ip對應配置錯誤,自檢查排除即可。
第一選項,點下一步即可。
按需修改磁盤組名稱(這里我保持了默認),磁盤冗余模式選擇Normal,並選擇change Discovery Path(更改磁盤路徑),修改成配置的共享磁盤路徑,使用前綴加*來顯示所有共享磁盤。
注意:下圖中的磁盤如果之前做過ASM,則哪塊做過哪塊磁盤的狀態就為Member狀態,即使格式化了,估計還有相應信息在磁盤里存着,此時需要刪除磁盤組,並dd刪除磁盤頭的信息。當然最簡潔的方法就是刪除存儲里的磁盤,新添加磁盤即可
按需選擇磁盤組的磁盤3塊磁盤。
注:該盤為Oracle Cluster Registry(OCR,集群注冊),用於記錄集群配置信息,也必須存放在共享磁盤上(最少100M),
下圖中Normal(正常冗余)是做OCR鏡像,需要創建2個磁盤分區,External(外部冗余)創建一個磁盤分區,表示把集群配置信息另外保存,(下圖選擇2塊磁盤會報錯)
輸入grid的管理登錄密碼,密碼必須8位起且夠復雜,不然不能進行下一步(Flz_3qc123)
選擇第二選項,下一步。
下圖默認即可
確認安裝目錄是否和配置文件一致,一般不會錯,但是需要檢查下
默認進行下一步
等待檢測
檢測后根據提示進行處理,下圖中的3項可忽略,在右上角的lgnore All前打上對好即忽略的意思,而后點擊Next進行下一步
下圖點擊yes
下圖點擊install
新開一個窗口,下圖在兩個節點上分別使用root用戶執行下圖中提示的腳本,執行的順序一定不能亂,先在節點1上執行orainstROOT.sh,節點1上執行完后在節點2上執行orainstROOT.sh,orainstROOT.sh腳本在2個節點上執行完后,再在節點1上執行root.sh,執行完后再在節點2上執行root.sh,順序一定不能亂
腳本執行如下(中間需按一次回車)
上圖2個節點腳本執行沒問題后點擊下去中的OK進行下一步
下圖需等片刻
提示以下錯誤,點擊OKJ即可 ,至此grid安裝完成。
點擊Next---Yes---Close
安裝完成后,登錄grid用戶驗證grid相關服務狀態和后台進程:
完成后查看狀態:
[grid@rac1 ~]$ crs_stat -t
[grid@rac2 ~]$ crs_stat -t
安裝database
同樣只需要在一個節點上安裝即可,會自動復制到另外節點。
[root@rac1 ~]# su - oracle
[oracle@rac1 ~]$ unzip p13390677_112040_Linux-x86-64_1of7.zip
[oracle@rac1 ~]$ unzip p13390677_112040_Linux-x86-64_2of7.zip
[oracle@rac1 ~]$ cd database/
[oracle@rac1 database]$ ./runInstaller
取消【我希望通過 My Oracle Support 接受安全更新】
會詢問是否要跳過更新的一個提示,點擊yes即可
如下圖,跳過軟件更新
僅安裝數據庫軟件
選擇 Oracle Real Application Clusters 數據庫安裝,下邊節點已經將兩個節點都顯示出來了,會自動復制到第二個節點,點擊Next
選擇語言
(把簡體中文選到右面框中,如下圖所示)
選擇企業版
安裝路徑,之前都已經配置好的,默認即可
確認Oracle權限用戶組,默認即可
如下圖所示,選中右上角的lgnore All,即表示忽略,然后點擊Next進行下一步安裝
這里會有一個提示,點擊Yes即可,如下圖
概要,可以保存響應文件,點擊install即可
如下所示,開始安裝,會自動復制到節點2
安裝過程中會提示讓使用root用戶執行1個sh配置腳本
按照下圖提示在2個節點上執行腳本,須知:
先在節點1上執行root.sh腳本,等待節點1上執行完畢后同樣的執行方法在節點2上執行,順序一定不能錯
執行完腳本后點擊下圖中的OK即可
如下圖所示,執行完腳本后點確定完成安裝,點擊Close
創建集群數據庫(在節點1上執行即可)
[root@rac1 ~]# su - oracle
[oracle@rac1 ~]$ dbca
選擇第一項,Oracle Real Application Clusters(RAC) database
#創建一個數據庫
如下圖所示,選擇定制數據庫
全局數據庫名和SID前綴都輸入:orcl,選擇雙節點(點擊Select All即可)
如下圖所示,Enterprise Manager和自動維護任務保持默認
所有賬戶(SYS、SYSTEM、DBSNMP、SYSMAN)使用同一管理口令(aa7788**)
如下所示,存儲類型:自動存儲管理(ASM),使用 Oracle-Managed Files選擇數據庫區為之前創建的DATA(+DATA)
指定 ASM 專用的ASMSNMP口令:asmadmin
如下圖所示,開啟指定快速恢復區 並 開啟歸檔
如下圖所示,數據庫組件:默認
如下圖所示,字符集選擇:使用 Unicode(AL32UTF8),其他選項默認
如下圖所示,數據庫存儲:默認
如下圖所示,勾選生成數據庫創建腳本:/u01/app/oracle/admin/orcl/scripts,點擊右下角 Finish 即可
如下圖所示,創建數據庫 - 概要 另存為HTML文件:點擊save as an HTML file
如下圖所示,點擊save即可
如下圖所示,點擊OK即開始安裝
如下圖所示,接下來就是等.........
約40分鍾后腳本創建完畢,如下(點擊ok)
開始安裝,如下
約40分鍾后安裝好了,如下圖(點擊右上角x號關掉即可,下圖中有個https的地址)
如下圖所示,點擊https://rac1:1158/em那個頁面的exit即可退出,下圖中左面執行完select status from gv$instance; 顯示都為open狀態即為搭建完畢
再次查看各節點上的IP,會發現IP多了幾個,多的這幾個IP就是監聽IP、虛擬IP、和scanIP
另外在grid用戶下使用crs_stat -t命令查看時回來到有3個關於gsd的為OFFLINE狀態,找到了在oracle11g中這3個gsd為OFFLINE狀態的解釋:
因為手機瀏覽器不支持粘貼(必須用快捷鍵),明日貼解釋
恢復數據庫
創建表空間
CREATE TEMPORARY TABLESPACE "PSSC_TEMP" TEMPFILE '+DATA/pssc/pssc_temp.dbf' SIZE 2147483648 AUTOEXTEND ON NEXT 52428800 MAXSIZE 20480M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1048576;
CREATE TABLESPACE "TBS_PSSC_SM" DATAFILE '+DATA/pssc/DATA_PSSC_SM.DBF' SIZE 524288000 AUTOEXTEND ON NEXT 104857600 MAXSIZE 32767M LOGGING ONLINE PERMANENT BLOCKSIZE 8192 EXTENT MANAGEMENT LOCAL AUTOALLOCATE DEFAULT NOCOMPRESS SEGMENT SPACE MANAGEMENT AUTO;
創建用戶
create user admin identified by xiaoliu default tablespace TBS_PSSC_SM temporary tablespace PSSC_TEMP profile DEFAULT;
grant dba to admin with admin option;
grant unlimited tablespace to admin with admin option;
恢復數據庫
imp admin/xiaoliu file=/home/oracle/pssc_sm64_20181016.dmp from user=user_pssc_sm64 touser=admin
常用命令
查看監聽狀態
lsnrctl status
設置DISPLAY變量
export DISPLAY=10.0.1.2:0.0
查看Oracle數據庫位置
select name from v$datafile;
select file_name from dba_data_files;
查看磁盤信息
select group_number,path,state,total_mb,free_mb from v$asm_disk;
查看磁盤IO信息
asmcmd lsdsk --statistics -G DATA
查看是否有數據庫實例連接上ASM實例
select instance_name,db_name,status from v$asm_client;
ASM DISK信息(顯示每個磁盤的大小和可用空間)
select path, state, total_mb, free_mb from v$asm_disk;
ASM DISKGROUP(顯示磁盤組的大小和可用空間)
select name,state,type,total_mb,free_mb from v$asm_diskgroup;
ASM管理工具
su - grid
asmca
asmcmd
rlwrap工具可以解決sqlplus和rman退格鍵和上下鍵不能使用的問題
rlwrap sqlplus / as sysdba
rlwrap rman target=USER_PSSC_SM64_20181016/123456
sqlplus亂碼問題
首先查看Oracle服務端的字符集
select userenv('language') from dual;
設置環境變量
export NLS_LANG=CHINESE_CHINA.AL32UTF8
附錄:查看是否為歸檔模式
查看是否為歸檔模式
archive log list
%sqlplus /nolog (啟動sqlplus)
SQL> conn / as sysdba (以DBA身份連接數據庫)
SQL> shutdown immediate; (立即關閉數據庫)
SQL> startup mount (啟動實例並加載數據庫,但不打開)
SQL> alter database archivelog; (更改數據庫為歸檔模式)
SQL> alter database open; (打開數據庫)
SQL> alter system archive log start; (啟用自動歸檔)
SQL> exit (退出)
安裝Grid后的檢查
su - grid
檢查crs狀態
[grid@rac2 ~]$ 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
檢查Clusterware資源
[grid@rac2 ~]$ crs_stat -t -v
檢查集群節點
[grid@rac2 ~]$ olsnodes -n
確認針對Oracle Clusterware文件的Oracle ASM功能:
如果在 Oracle ASM 上暗轉過了OCR和表決磁盤文件,則以Grid Infrastructure 安裝所有者的身份,使用給下面的命令語法來確認當前正在運行已安裝的Oracle ASM:
[grid@rac1 ~]$ srvctl status asm -a
RAC維護
查看服務器狀態
su - grid
[grid@rac2 ~]$ crs_stat -t -v
查看群集運行狀態
[grid@rac2 ~]$ srvctl status database -d oracledbrac
檢查本地節點的CRS狀態
[grid@rac2 ~]$ crsctl check crs
檢查集群的CRS狀態
[grid@rac2 ~]$ crsctl check cluster
查看集群件的表決磁盤信息
[grid@rac2 ~]$ crsctl query css votedisk
查看集群SCAN VIP信息
[grid@rac2 ~]$ srvctl config scan
格式化ASM 裸設備:
[root@rac1 ~]# ll /dev/asm*
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
oracle RAC RMAN自動備份腳本
1.節點1腳本
#!/bin/bash
ORACLE_SID=orcl1
ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
ORACLE_BASE=/u01/app/oracle
export ORACLE_SID=$ORACLE_SID
export ORACLE_HOME=$ORACLE_HOME
export ORACLE_BASE=$ORACLE_BASE
backtime=`date +%Y%m%d`
echo $backtime
# ######################### oracle RAC RMAN自動備份腳本 #########################
# 備份要求
# 條件一:在node1每晚進行全量備份,同時刪除過期備份和歸檔日志文件;
# 條件二:為保證節點備份的可用性,備份時node1本地保存一份,ASM存儲保存一份;
# 條件三:本地node1點發生故障時,node2可以接管備份操作,在node2上生成全備和ASM中生成備份。
#
# by all
# su - oracle
# mkdir -p /home/oracle/log
# mkdir -p /home/oracle/bak
#
# %c 備份片的拷貝數
# %d 數據庫名稱
# %D 位於該月中的第幾天 (DD)
# %M 位於該年中的第幾月 (MM)
# %F 一個基於DBID唯一的名稱,這個格式的形式為c-IIIIIIIIII-YYYYMMDD-QQ,其中IIIIIIIIII為該數據庫的DBID,YYYYMMDD為日期,QQ是一個1-256的序列
# %n 數據庫名稱,向右填補到最大八個字符
# %u 一個八個字符的名稱代表備份集與創建時間
# %p 該備份集中的備份片號,從1開始到創建的文件數
# %U 一個唯一的文件名,代表%u_%p_%c
# %s 備份集的號
# %t 備份集時間戳
# %T 年月日格式(YYYYMMDD)
$ORACLE_HOME/bin/rman log=/home/oracle/log/node1_backupall_$backtime.log <<EOF
connect target /
run{
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 2;
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 2;
# by all
# su - oracle
# mkdir -p /home/oracle/oracle_bak
allocate channel c1 type disk FORMAT '/home/oracle/bak/node1_%d_%T_%u_%p', '+DATA/bak/node1_%d_%T_%u_%p';
allocate channel c2 type disk FORMAT '/home/oracle/bak/node1_%d_%T_%u_%p', '+DATA/bak/node1_%d_%T_%u_%p';
backup as compressed backupset database ;
backup as compressed backupset archivelog all delete input;
# report obsolete命令用於列出rman資料庫中能夠被刪除的全備份、數據文件拷貝和歸檔日志記錄。
# report obsolete;
# 刪除陳舊備份(noprompt=不提示)
# delete noprompt obsolete;
# 核對所有備份集
crosscheck backup;
# 核對歸檔日志
crosscheck archivelog all;
# 刪除EXPIRED備份集(noprompt=不提示)
# delete noprompt expired backup;
# 釋放通道
release channel c1;
release channel c2;
}
EOF
echo "backup complete!"
scp /home/oracle/log/node1_backupall_$backtime.log oracle@rac2:/home/oracle/log/
exit
2.節點2腳本
#!/bin/bash
ORACLE_SID=orcl2
ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
ORACLE_BASE=/u01/app/oracle
export ORACLE_SID=$ORACLE_SID
export ORACLE_HOME=$ORACLE_HOME
export ORACLE_BASE=$ORACLE_BASE
backtime=`date +%Y%m%d`
echo $backtime
if [ -f /oracle/rmanbak/log/node1_backupall_$backtime.log ]
then
echo "node1 backup have been success!"
exit
else
echo "node1 backup have been filed,start node2 backup!"
$ORACLE_HOME/bin/rman log=/oracle/rmanbak/log/node2_backupall_$backtime.log <<EOF
connect target /
run{
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 2;
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 2;
allocate channel c1 type disk FORMAT '/oracle/rmanbak/ORCL/node2_%d_%T_%u_%p','+FRA/ORCL/BACKUPSET/node1_%d_%T_%u_%p' ;
allocate channel c2 type disk FORMAT '/oracle/rmanbak/ORCL/node2_%d_%T_%u_%p','+FRA/ORCL/BACKUPSET/node2_%d_%T_%u_%p';
backup database ;
backup archivelog all delete input;
report obsolete;
delete noprompt obsolete;
crosscheck backup;
crosscheck archivelog all;
delete noprompt expired backup;
release channel c1;
release channel c2;
}
EOF
echo "node2 backup complete!"
fi
#scp /oracle/rmanbak/log/node1_backupall_$backtime.log oracle@OracleNode2:/oracle/rmanbak/log/
exit
歡迎加入QQ群一起討論Linux、開源等技術