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]$