RAC 攻擊 - Oracle 叢集資料庫實戰/RAC 攻擊 12c/服務故障轉移
外觀
- 以oracle使用者身份登入到collabn1。建立一個新的服務svctest,並將RAC1設定為首選例項,RAC2設定為可用例項。這意味著該服務通常會在RAC1例項上執行,但如果RAC1不可用,它會故障轉移到RAC2例項。 如果你還沒有建立容器資料庫,請省略-pdb引數。collabn1:/home/oracle[RAC1]$ srvctl add service -d RAC -pdb PDB -s svctest -r RAC1 -a RAC2 -P BASIC collabn1:/home/oracle[RAC1]$ srvctl start service -d RAC -s svctest
- 檢查兩個節點上的lsnrctl以及兩個節點上的SERVICE_NAMES初始化引數來檢視服務執行的位置。 collabn1:/home/oracle[RAC1]$ srvctl status service -d RAC -s svctest 服務 svctest 正在例項 RAC1 上執行 collabn1:/home/oracle[RAC1]$ lsnrctl services ... 服務 "svctest.racattack" 有 1 個例項。 例項 "RAC1",狀態為 READY,為此服務有 1 個處理程式... 處理程式: "DEDICATED" 建立:1 拒絕:0 狀態:就緒 本地伺服器 collabn2:/home/oracle[RAC2]$ lsnrctl services SQL> col value format a60 SQL> SQL> select name, pdb, inst_id from gv$services; NAME PDB INST_ID ---------------------------------- ------------------------------ ---------- svctest PDB 1 pdb.racattack PDB 1 pdb.racattack PDB 2
- 使用 SHUTDOWN ABORT 終止執行服務svctest的例項。 SQL> show user USER is "SYS" SQL> select instance_name from v$instance; INSTANCE_NAME ---------------- RAC1 SQL> shutdown abort; ORACLE 例項已關閉。 SQL>
- 等待幾分鐘,然後重複步驟 2。發生了什麼? collabn1:/home/oracle[RAC1]$ srvctl status service -d RAC -s svctest
- 重啟你終止的例項。
- 重複步驟 2。服務現在執行在哪個位置? collabn1:/home/oracle[RAC1]$ srvctl status service -d RAC -s svctest
- 手動故障轉移服務。確認服務現在執行的位置。請注意,這不會斷開任何當前會話。 collabn1:/home/oracle[RAC1]$ srvctl relocate service -d RAC -s svctest -i RAC2 -t RAC1 collabn1:/home/oracle[RAC1]$ srvctl status service -d RAC -s svctest
這不會啟動任何例項恢復。你知道為什麼嗎? |
collabn1:/home/oracle[RAC1]$ srvctl status database -d RAC Instance RAC1 is not running on node collabn1 Instance RAC2 is running on node collabn2 collabn1:/home/oracle[RAC1]$ srvctl start instance -d RAC -i RAC1 collabn1:/home/oracle[RAC1]$ srvctl status database -d RAC Instance RAC1 is running on node collabn1 Instance RAC2 is running on node collabn2 collabn1:/home/oracle[RAC1]$