跳转到内容

RAC 攻击 - Oracle 集群数据库实战/RAC 攻击 12c/服务故障转移

来自维基教科书,自由的教科书


  1. oracle用户身份登录到collabn1。创建一个新的服务svctest,并将RAC1设置为首选实例,RAC2设置为可用实例。这意味着该服务通常会在RAC1实例上运行,但如果RAC1不可用,它会故障转移到RAC2实例。
  2. 如果你还没有创建容器数据库,请省略-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
  3. 检查两个节点上的lsnrctl以及两个节点上的SERVICE_NAMES初始化参数来查看服务运行的位置。
  4. 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
  5. 使用 SHUTDOWN ABORT 终止运行服务svctest的实例。
  6. SQL> show user USER is "SYS" SQL> select instance_name from v$instance; INSTANCE_NAME ---------------- RAC1 SQL> shutdown abort; ORACLE 实例已关闭。 SQL>
  7. 等待几分钟,然后重复步骤 2。发生了什么?
  8. collabn1:/home/oracle[RAC1]$ srvctl status service -d RAC -s svctest
  9. 重启你终止的实例。
  10. 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]$
    
  11. 重复步骤 2。服务现在运行在哪个位置?
  12. collabn1:/home/oracle[RAC1]$ srvctl status service -d RAC -s svctest
  13. 手动故障转移服务。确认服务现在运行的位置。请注意,这不会断开任何当前会话。
  14. 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


华夏公益教科书