IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    shard node的outage测试

    小荷发表于 2016-11-22 08:42:12
    love 0

    shard node的路由方式有直接路由和代理路由,之前我们已经说过,由于我没有connection pool,我们只能来测试一下,在代理路由的情况下,连接shardcat的情况下,当shard node出现意外,连接在shardcat上的操作会发生什么问题。

    这里我们要注意下,查询分如下几种情况:
    1. 基于shard key的查询。
    2. 不基于shard key的查询
    3. multi shard的查询
    4. 貌似基于shard key的查询。
    (不喜欢看测试过程的,可以直接拖到文末看结果。^_^)

    加载数据:

    insert into products
    select rownum,dbms_random.STRING('U',8),dbms_random.STRING('A',64),round(dbms_random.value(1,1000),2) from dual
    connect by level<=1000;
    
    begin
       for k in 1 .. 1000 loop
         insert into customers(custid,firstname,lastname,CLASS,geo,passwd)
         values
           (k, 'HE', 'Jimmy', 'A', 'CHINA', to_char(k+999));
       end loop;
       commit;
     end;
     /
    
    begin
       for k in 1 .. 1000 loop
         insert into ORDERS(ORDERID,CUSTID,ORDERDATE,SUMTOTAL,STATUS)
         values
           (k+888, k, sysdate-k,mod(k,99),'SEND');
       end loop;
       commit;
     end;
     /
    
    begin
       for k in 1 .. 1000 loop
         insert into LINEITEMS(ORDERID,CUSTID,PRODUCTID,PRICE,QTY)
         values
           (k+888, k, K+777,mod(k,99)*k/10.24,k+5);
       end loop;
       commit;
     end;
     /
     
    commit;

    加载之后我的shard table,customers表的情况是:

    =====> sh1:
    SQL> select CUSTID,passwd from customers where rownum<=15;
    
    CUSTID                         PASSWD
    ------------------------------ ------------------------------
    1                              1000
    2                              1001
    8                              1007
    29                             1028
    30                             1029
    40                             1039
    46                             1045
    50                             1049
    75                             1074
    78                             1077
    79                             1078
    117                            1116
    143                            1142
    148                            1147
    156                            1155
    
    15 rows selected.
    
    SQL> 
    
    
    
    ====> sh2:
    SQL&gt; select count(*) from customers;
    
      COUNT(*)
    ----------
           484
    
    SQL>
    SQL> 
    SQL> 
    SQL> select CUSTID,passwd from customers where rownum<=15;
    
    CUSTID                         PASSWD
    ------------------------------ ------------------------------
    3                              1002
    5                              1004
    16                             1015
    28                             1027
    67                             1066
    69                             1068
    82                             1081
    87                             1086
    94                             1093
    133                            1132
    134                            1133
    135                            1134
    137                            1136
    141                            1140
    176                            1175
    
    15 rows selected.
    
    SQL>

    所以我的查询语句就是:
    1. 基于shard key的查询。
    select CUSTID,FIRSTNAME,LASTNAME from customers where custid=’1′;
    select CUSTID,FIRSTNAME,LASTNAME from customers where custid=’3′;

    2. 不基于shard key的查询
    select CUSTID,FIRSTNAME,LASTNAME from customers where PASSWD=’1000′;
    select CUSTID,FIRSTNAME,LASTNAME from customers where PASSWD=’1002′;

    3. multi shard的查询
    select CUSTID,FIRSTNAME,LASTNAME from customers where custid in (‘1′,’3’);

    4. 貌似基于shard key的查询。
    select CUSTID,FIRSTNAME,LASTNAME from customers where custid=1;
    select CUSTID,FIRSTNAME,LASTNAME from customers where custid=3;

    我们通过一个循环语句来测试:

    while true
    do 
    echo "############################ `date` ############################"
    sqlplus -s app_schema/oracle<<EOF
    set line 1000
    set feedback on
    set echo on
    select 'Using shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid='1';
    select 'Using shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid='3';
    select 'NOT Using shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where PASSWD='1000';
    select 'NOT Using shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where PASSWD='1002';
    select 'Using multi shard' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid in ('1','3');
    select 'Look like use shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid=1;
    select 'Look like use shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid=3;
    exit
    EOF
    sleep 1
    echo ""
    echo ""
    echo ""
    done


    场景1:在没有dataguard FSFO保护的情况下,shard node 1 database crash。

    ############################ Sun Nov 20 00:10:00 CST 2016 ############################
    
    TYPE            CUSTID                                                       FIRSTNAME                                                    LASTNAME
    --------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Using shard_key 1                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE            CUSTID                                                       FIRSTNAME                                                    LASTNAME
    --------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Using shard_key 3                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE                CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ------------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    NOT Using shard_key 1                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE                CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ------------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    NOT Using shard_key 3                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE              CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ----------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Using multi shard 1                                                            HE                                                           Jimmy
    Using multi shard 3                                                            HE                                                           Jimmy
    
    2 rows selected.
    
    
    TYPE                    CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ----------------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Look like use shard_key 1                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE                    CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ----------------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Look like use shard_key 3                                                            HE                                                           Jimmy
    
    1 row selected.

    –sh1 shutdown abort

    ############################ Sun Nov 20 00:10:02 CST 2016 ############################
    
    TYPE            CUSTID                                                       FIRSTNAME                                                    LASTNAME
    --------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Using shard_key 1                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE            CUSTID                                                       FIRSTNAME                                                    LASTNAME
    --------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Using shard_key 3                                                            HE                                                           Jimmy
    
    1 row selected.
    
    select 'NOT Using shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where PASSWD='1000'
    *
    ERROR at line 1:
    ORA-03150: end-of-file on communication channel for database link
    ORA-03113: end-of-file on communication channel
    
    
    select 'NOT Using shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where PASSWD='1002'
    *
    ERROR at line 1:
    ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
    
    
    select 'Using multi shard' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid in ('1','3')
    *
    ERROR at line 1:
    ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
    
    
    select 'Look like use shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid=1
    *
    ERROR at line 1:
    ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
    
    
    select 'Look like use shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid=3
    *
    ERROR at line 1:
    ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
    
    
    
    
    
    ############################ Sun Nov 20 00:10:03 CST 2016 ############################
    select 'Using shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid='1'
    *
    ERROR at line 1:
    ORA-02519: cannot perform cross-shard operation. Chunk "1" is unavailable
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18795
    ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18772
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18811
    ORA-06512: at line 1
    
    
    
    TYPE            CUSTID                                                       FIRSTNAME                                                    LASTNAME
    --------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Using shard_key 3                                                            HE                                                           Jimmy
    
    1 row selected.
    
    select 'NOT Using shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where PASSWD='1000'
    *
    ERROR at line 1:
    ORA-02519: cannot perform cross-shard operation. Chunk "1" is unavailable
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18795
    ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18772
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18811
    ORA-06512: at line 1
    
    
    select 'NOT Using shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where PASSWD='1002'
    *
    ERROR at line 1:
    ORA-02519: cannot perform cross-shard operation. Chunk "1" is unavailable
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18795
    ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18772
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18811
    ORA-06512: at line 1
    
    
    select 'Using multi shard' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid in ('1','3')
    *
    ERROR at line 1:
    ORA-02519: cannot perform cross-shard operation. Chunk "1" is unavailable
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18795
    ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18772
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18811
    ORA-06512: at line 1
    
    
    select 'Look like use shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid=1
    *
    ERROR at line 1:
    ORA-02519: cannot perform cross-shard operation. Chunk "1" is unavailable
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18795
    ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18772
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18811
    ORA-06512: at line 1
    
    
    select 'Look like use shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid=3
    *
    ERROR at line 1:
    ORA-02519: cannot perform cross-shard operation. Chunk "1" is unavailable
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18795
    ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18772
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18811
    ORA-06512: at line 1

    我们看到,在sh1 shutdown abort之后,在shardcat上的查询,出现短暂的一次db link连接失败的报错后,后面就都是:
    1. 基于shard key的查询。–访问sh1的操作失败,访问sh2的操作正常
    2. 不基于shard key的查询。–无论访问sh1还是sh2,都失败
    3. multi shard的查询 –访问失败
    4. 貌似基于shard key的查询 –无论访问sh2还是sh2,都失败。

    这里我们看出,貌似基于shard key的访问,如上面进行隐式转换的语句,看上去像基于shard key,其实还是不能正常访问到对应的shard node的。

    我们再re-startup sh1

    ############################ Sun Nov 20 00:11:12 CST 2016 ############################
    
    TYPE            CUSTID                                                       FIRSTNAME                                                    LASTNAME
    --------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Using shard_key 1                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE            CUSTID                                                       FIRSTNAME                                                    LASTNAME
    --------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Using shard_key 3                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE                CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ------------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    NOT Using shard_key 1                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE                CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ------------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    NOT Using shard_key 3                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE              CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ----------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Using multi shard 1                                                            HE                                                           Jimmy
    Using multi shard 3                                                            HE                                                           Jimmy
    
    2 rows selected.
    
    
    TYPE                    CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ----------------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Look like use shard_key 1                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE                    CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ----------------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Look like use shard_key 3                                                            HE                                                           Jimmy
    
    1 row selected.

    re-startup sh1之后,所有的访问都恢复正常。


    场景2:在没有dataguard FSFO保护的情况下,shard node 1 主机 power down。

    ############################ Sun Nov 20 00:32:25 CST 2016 ############################
    
    TYPE            CUSTID                                                       FIRSTNAME                                                    LASTNAME
    --------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Using shard_key 1                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE            CUSTID                                                       FIRSTNAME                                                    LASTNAME
    --------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Using shard_key 3                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE                CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ------------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    NOT Using shard_key 1                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE                CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ------------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    NOT Using shard_key 3                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE              CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ----------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Using multi shard 1                                                            HE                                                           Jimmy
    Using multi shard 3                                                            HE                                                           Jimmy
    
    2 rows selected.
    
    
    TYPE                    CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ----------------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Look like use shard_key 1                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE                    CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ----------------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Look like use shard_key 3                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    -- shutdown sh1 server power
    
    ############################ Sun Nov 20 00:32:27 CST 2016 ############################
    select 'Using shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid='1'
    *
    ERROR at line 1:
    ORA-12170: TNS:Connect timeout occurred
    
    
    
    TYPE            CUSTID                                                       FIRSTNAME                                                    LASTNAME
    --------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Using shard_key 3                                                            HE                                                           Jimmy
    
    1 row selected.
    
    select 'NOT Using shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where PASSWD='1000'
    *
    ERROR at line 1:
    ORA-12543: TNS:destination host unreachable
    
    
    select 'NOT Using shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where PASSWD='1002'
    *
    ERROR at line 1:
    ORA-12543: TNS:destination host unreachable
    
    
    select 'Using multi shard' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid in ('1','3')
    *
    ERROR at line 1:
    ORA-12543: TNS:destination host unreachable
    
    
    select 'Look like use shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid=1
    *
    ERROR at line 1:
    ORA-12543: TNS:destination host unreachable
    
    
    select 'Look like use shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid=3
    *
    ERROR at line 1:
    ORA-12543: TNS:destination host unreachable
    
    
    
    
    
    ############################ Sun Nov 20 00:33:43 CST 2016 ############################
    select 'Using shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid='1'
    *
    ERROR at line 1:
    ORA-12543: TNS:destination host unreachable
    
    
    
    TYPE            CUSTID                                                       FIRSTNAME                                                    LASTNAME
    --------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Using shard_key 3                                                            HE                                                           Jimmy
    
    1 row selected.
    
    select 'NOT Using shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where PASSWD='1000'
    *
    ERROR at line 1:
    ORA-12543: TNS:destination host unreachable
    
    
    select 'NOT Using shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where PASSWD='1002'
    *
    ERROR at line 1:
    ORA-12543: TNS:destination host unreachable
    
    
    select 'Using multi shard' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid in ('1','3')
    *
    ERROR at line 1:
    ORA-12543: TNS:destination host unreachable
    
    
    select 'Look like use shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid=1
    *
    ERROR at line 1:
    ORA-12543: TNS:destination host unreachable
    
    
     select 'Look like use shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid=3
    *
    ERROR at line 1:
    ORA-12543: TNS:destination host unreachable
    
    
    
    
    
    ############################ Sun Nov 20 00:34:03 CST 2016 ############################
    select 'Using shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid='1'
    *
    ERROR at line 1:
    ORA-12543: TNS:destination host unreachable
    
    
    
    TYPE            CUSTID                                                       FIRSTNAME                                                    LASTNAME
    --------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Using shard_key 3                                                            HE                                                           Jimmy
    
    1 row selected.
    
    select 'NOT Using shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where PASSWD='1000'
    *
    ERROR at line 1:
    ORA-12543: TNS:destination host unreachable
    
    
    select 'NOT Using shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where PASSWD='1002'
    *
    ERROR at line 1:
    ORA-12543: TNS:destination host unreachable
    
    
    select 'Using multi shard' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid in ('1','3')
    *
    ERROR at line 1:
    ORA-12543: TNS:destination host unreachable
    
    
    select 'Look like use shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid=1
    *
    ERROR at line 1:
    ORA-12543: TNS:destination host unreachable
    
    
    select 'Look like use shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid=3
    *
    ERROR at line 1:
    ORA-02519: cannot perform cross-shard operation. Chunk "1" is unavailable
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18795
    ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18772
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18811
    ORA-06512: at line 1
    
    
    
    
    
    ############################ Sun Nov 20 00:34:19 CST 2016 ############################
    select 'Using shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid='1'
    *
    ERROR at line 1:
    ORA-02519: cannot perform cross-shard operation. Chunk "1" is unavailable
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18795
    ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18772
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18811
    ORA-06512: at line 1
    
    
    
    TYPE            CUSTID                                                       FIRSTNAME                                                    LASTNAME
    --------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Using shard_key 3                                                            HE                                                           Jimmy
    
    1 row selected.
    
    select 'NOT Using shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where PASSWD='1000'
    *
    ERROR at line 1:
    ORA-02519: cannot perform cross-shard operation. Chunk "1" is unavailable
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18795
    ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18772
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18811
    ORA-06512: at line 1
    
    
    select 'NOT Using shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where PASSWD='1002'
    *
    ERROR at line 1:
    ORA-02519: cannot perform cross-shard operation. Chunk "1" is unavailable
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18795
    ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18772
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18811
    ORA-06512: at line 1
    
    
    select 'Using multi shard' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid in ('1','3')
    *
    ERROR at line 1:
    ORA-02519: cannot perform cross-shard operation. Chunk "1" is unavailable
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18795
    ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18772
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18811
    ORA-06512: at line 1
    
    
    select 'Look like use shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid=1
    *
    ERROR at line 1:
    ORA-02519: cannot perform cross-shard operation. Chunk "1" is unavailable
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18795
    ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18772
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18811
    ORA-06512: at line 1
    
    
    select 'Look like use shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid=3
    *
    ERROR at line 1:
    ORA-02519: cannot perform cross-shard operation. Chunk "1" is unavailable
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18795
    ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18772
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18811
    ORA-06512: at line 1
    
    
    
    
    
    ############################ Sun Nov 20 00:34:20 CST 2016 ############################

    我们看到,在shard node 1 server power down之后,在shardcat上的查询,出现短暂的大约2分钟的hang,等待之后报错ORA-12543: TNS:destination host unreachable,再后面就和db shutdown abort的情况一下了:
    1. 基于shard key的查询。–访问sh1的操作失败,访问sh2的操作正常
    2. 不基于shard key的查询。–无论访问sh1还是sh2,都失败
    3. multi shard的查询 –访问失败
    4. 貌似基于shard key的查询 –无论访问sh2还是sh2,都失败。

    –restart server之后,重启listener和db:

    ############################ Sun Nov 20 00:37:48 CST 2016 ############################
    
    TYPE            CUSTID                                                       FIRSTNAME                                                    LASTNAME
    --------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Using shard_key 1                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE            CUSTID                                                       FIRSTNAME                                                    LASTNAME
    --------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Using shard_key 3                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE                CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ------------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    NOT Using shard_key 1                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE                CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ------------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    NOT Using shard_key 3                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE              CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ----------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Using multi shard 1                                                            HE                                                           Jimmy
    Using multi shard 3                                                            HE                                                           Jimmy
    
    2 rows selected.
    
    
    TYPE                    CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ----------------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Look like use shard_key 1                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE                    CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ----------------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Look like use shard_key 3                                                            HE                                                           Jimmy
    
    1 row selected.


    场景3:在dataguard FSFO保护的情况下,shard node 1 database crash。

    ############################ Mon Nov 21 22:46:53 CST 2016 ############################
    
    TYPE            CUSTID                                                       FIRSTNAME                                                    LASTNAME
    --------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Using shard_key 1                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE            CUSTID                                                       FIRSTNAME                                                    LASTNAME
    --------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Using shard_key 3                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE                CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ------------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    NOT Using shard_key 1                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE                CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ------------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    NOT Using shard_key 3                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE              CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ----------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Using multi shard 1                                                            HE                                                           Jimmy
    Using multi shard 3                                                            HE                                                           Jimmy
    
    2 rows selected.
    
    
    TYPE                    CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ----------------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Look like use shard_key 1                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE                    CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ----------------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Look like use shard_key 3                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    --shutdown abort sh1
    
    ############################ Mon Nov 21 22:46:55 CST 2016 ############################
    select 'Using shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid='1'
    *
    ERROR at line 1:
    ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
    
    
    
    TYPE            CUSTID                                                       FIRSTNAME                                                    LASTNAME
    --------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Using shard_key 3                                                            HE                                                           Jimmy
    
    1 row selected.
    
    select 'NOT Using shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where PASSWD='1000'
    *
    ERROR at line 1:
    ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
    
    
    select 'NOT Using shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where PASSWD='1002'
    *
    ERROR at line 1:
    ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
    
    
    select 'Using multi shard' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid in ('1','3')
    *
    ERROR at line 1:
    ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
    
    
    select 'Look like use shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid=1
    *
    ERROR at line 1:
    ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
    
    
    select 'Look like use shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid=3
    *
    ERROR at line 1:
    ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
    
    
    
    
    
    ############################ Mon Nov 21 22:46:56 CST 2016 ############################
    select 'Using shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid='1'
    *
    ERROR at line 1:
    ORA-02519: cannot perform cross-shard operation. Chunk "1" is unavailable
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18795
    ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18772
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18811
    ORA-06512: at line 1
    
    
    
    TYPE            CUSTID                                                       FIRSTNAME                                                    LASTNAME
    --------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Using shard_key 3                                                            HE                                                           Jimmy
    
    1 row selected.
    
    select 'NOT Using shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where PASSWD='1000'
    *
    ERROR at line 1:
    ORA-02519: cannot perform cross-shard operation. Chunk "1" is unavailable
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18795
    ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18772
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18811
    ORA-06512: at line 1
    
    
    select 'NOT Using shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where PASSWD='1002'
    *
    ERROR at line 1:
    ORA-02519: cannot perform cross-shard operation. Chunk "1" is unavailable
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18795
    ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18772
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18811
    ORA-06512: at line 1
    
    
    select 'Using multi shard' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid in ('1','3')
    *
    ERROR at line 1:
    ORA-02519: cannot perform cross-shard operation. Chunk "1" is unavailable
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18795
    ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18772
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18811
    ORA-06512: at line 1
    
    
    select 'Look like use shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid=1
    *
    ERROR at line 1:
    ORA-02519: cannot perform cross-shard operation. Chunk "1" is unavailable
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18795
    ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18772
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18811
    ORA-06512: at line 1
    
    
    select 'Look like use shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid=3
    *
    ERROR at line 1:
    ORA-02519: cannot perform cross-shard operation. Chunk "1" is unavailable
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18795
    ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18772
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18811
    ORA-06512: at line 1
    
    
    --FSFO effect
    
    ############################ Mon Nov 21 22:47:46 CST 2016 ############################
    
    TYPE            CUSTID                                                       FIRSTNAME                                                    LASTNAME
    --------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Using shard_key 1                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE            CUSTID                                                       FIRSTNAME                                                    LASTNAME
    --------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Using shard_key 3                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE                CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ------------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    NOT Using shard_key 1                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE                CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ------------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    NOT Using shard_key 3                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE              CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ----------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Using multi shard 3                                                            HE                                                           Jimmy
    Using multi shard 1                                                            HE                                                           Jimmy
    
    2 rows selected.
    
    
    TYPE                    CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ----------------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Look like use shard_key 1                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE                    CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ----------------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Look like use shard_key 3                                                            HE                                                           Jimmy
    
    1 row selected.

    我们可以看到,在50秒的时间,就完成了FSFO。在FSFO切换期间内:
    1. 基于shard key的查询。–访问sh1的操作失败,访问sh2的操作正常
    2. 不基于shard key的查询。–无论访问sh1还是sh2,都失败
    3. multi shard的查询 –访问失败
    4. 貌似基于shard key的查询 –无论访问sh2还是sh2,都失败。

    等FSFO完,所有的操作就都恢复正常。

    注意,FSFO完之后,数据库在broker中的状态变成需要reinstated:

    DGMGRL>    show configuration verbose
    
    Configuration - sh1
    
      Protection Mode: MaxPerformance
      Members:
      sh3 - Primary database
        Error: ORA-16825: multiple errors or warnings, including fast-start failover-related errors or warnings, detected for the database
    
        sh1 - (*) Physical standby database (disabled)
          ORA-16661: the standby database needs to be reinstated
    
      (*) Fast-Start Failover target
    
      Properties:
        FastStartFailoverThreshold      = '30'
        OperationTimeout                = '30'
        TraceLevel                      = 'SUPPORT'
        FastStartFailoverLagLimit       = '30'
        CommunicationTimeout            = '180'
        ObserverReconnect               = '0'
        FastStartFailoverAutoReinstate  = 'TRUE'
        FastStartFailoverPmyShutdown    = 'TRUE'
        BystandersFollowRoleChange      = 'ALL'
        ObserverOverride                = 'FALSE'
        ExternalDestination1            = ''
        ExternalDestination2            = ''
        PrimaryLostWriteAction          = 'CONTINUE'
        ConfigurationWideServiceName    = 'sh1_CFG'
    
    Fast-Start Failover: ENABLED
    
      Threshold:          30 seconds
      Target:             sh1
      Observer:           sdb1
      Lag Limit:          30 seconds
      Shutdown Primary:   TRUE
      Auto-reinstate:     TRUE
      Observer Reconnect: (none)
      Observer Override:  FALSE
    
    Configuration Status:
    ERROR
    
    DGMGRL>

    我们现在来把sh1恢复成初始状态。
    (1) 启动sh1数据库,注意,reinstate需要在standby上做,在sh1上做是会报错的。

    [oracle12c@sdb2 ~]$ dgmgrl sys/oracle@sh1
    DGMGRL for Linux: Release 12.2.0.1.0 - Production on Tue Nov 22 15:26:42 2016
    
    Copyright (c) 1982, 2016, Oracle and/or its affiliates.  All rights reserved.
    
    Welcome to DGMGRL, type "help" for information.
    Unable to connect to database using sh1
    ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
    
    Failed.
    DGMGRL> exit
    [oracle12c@sdb2 ~]$ dgmgrl sys/oracle
    DGMGRL for Linux: Release 12.2.0.1.0 - Production on Tue Nov 22 15:26:56 2016
    
    Copyright (c) 1982, 2016, Oracle and/or its affiliates.  All rights reserved.
    
    Welcome to DGMGRL, type "help" for information.
    Connected as SYSDG.
    DGMGRL> startup
    ORACLE instance started.
    Database mounted.
    ORA-16649: possible failover to another database prevents this database from being opened
    
    DGMGRL>  
    DGMGRL> reinstate database sh1
    ORA-16795: the standby database needs to be re-created
    
    Configuration details cannot be determined by DGMGRL
    DGMGRL> 
    DGMGRL> 
    DGMGRL> exit
    [oracle12c@sdb2 ~]$

    (2) 在sh3上做reinstate,注意,做完reinstate之后,虽然不用re-create standby,但是sh3还是primary,sh1还是standby。另外,observer的状态还没有恢复。

    [oracle12c@sdb4 ~]$ dgmgrl sys/oracle@sh3
    DGMGRL for Linux: Release 12.2.0.1.0 - Production on Tue Nov 22 15:33:23 2016
    
    Copyright (c) 1982, 2016, Oracle and/or its affiliates.  All rights reserved.
    
    Welcome to DGMGRL, type "help" for information.
    Connected to "sh3"
    Connected as SYSDBA.
    DGMGRL> show configuration verbose
    
    Configuration - sh1
    
      Protection Mode: MaxPerformance
      Members:
      sh3 - Primary database
        Error: ORA-16825: multiple errors or warnings, including fast-start failover-related errors or warnings, detected for the database
    
        sh1 - (*) Physical standby database (disabled)
          ORA-16661: the standby database needs to be reinstated
    
      (*) Fast-Start Failover target
    
      Properties:
        FastStartFailoverThreshold      = '30'
        OperationTimeout                = '30'
        TraceLevel                      = 'SUPPORT'
        FastStartFailoverLagLimit       = '30'
        CommunicationTimeout            = '180'
        ObserverReconnect               = '0'
        FastStartFailoverAutoReinstate  = 'TRUE'
        FastStartFailoverPmyShutdown    = 'TRUE'
        BystandersFollowRoleChange      = 'ALL'
        ObserverOverride                = 'FALSE'
        ExternalDestination1            = ''
        ExternalDestination2            = ''
        PrimaryLostWriteAction          = 'CONTINUE'
        ConfigurationWideServiceName    = 'sh1_CFG'
    
    Fast-Start Failover: ENABLED
    
      Threshold:          30 seconds
      Target:             sh1
      Observer:           sdb1
      Lag Limit:          30 seconds
      Shutdown Primary:   TRUE
      Auto-reinstate:     TRUE
      Observer Reconnect: (none)
      Observer Override:  FALSE
    
    Configuration Status:
    ERROR
    
    DGMGRL> reinstate database sh1
    Reinstating database "sh1", please wait...
    Reinstatement of database "sh1" succeeded
    DGMGRL>  
    DGMGRL> 
    DGMGRL> 
    DGMGRL> 
    DGMGRL> 
    DGMGRL> show configuration verbose
    
    Configuration - sh1
    
      Protection Mode: MaxPerformance
      Members:
      sh3 - Primary database
        Error: ORA-16820: fast-start failover observer is no longer observing this database
    
        sh1 - (*) Physical standby database 
          Error: ORA-16820: fast-start failover observer is no longer observing this database
    
      (*) Fast-Start Failover target
    
      Properties:
        FastStartFailoverThreshold      = '30'
        OperationTimeout                = '30'
        TraceLevel                      = 'SUPPORT'
        FastStartFailoverLagLimit       = '30'
        CommunicationTimeout            = '180'
        ObserverReconnect               = '0'
        FastStartFailoverAutoReinstate  = 'TRUE'
        FastStartFailoverPmyShutdown    = 'TRUE'
        BystandersFollowRoleChange      = 'ALL'
        ObserverOverride                = 'FALSE'
        ExternalDestination1            = ''
        ExternalDestination2            = ''
        PrimaryLostWriteAction          = 'CONTINUE'
        ConfigurationWideServiceName    = 'sh1_CFG'
    
    Fast-Start Failover: ENABLED
    
      Threshold:          30 seconds
      Target:             sh1
      Observer:           sdb1
      Lag Limit:          30 seconds
      Shutdown Primary:   TRUE
      Auto-reinstate:     TRUE
      Observer Reconnect: (none)
      Observer Override:  FALSE
    
    Configuration Status:
    ERROR
    
    DGMGRL>

    (3) 我们先来恢复一下observer。在observer server上,也就是sh1上重置observer状态和重启observer进程:

    [oracle12c@sdb1 startObsrv_sh1]$ dgmgrl  sys/oracle@sh1_obsrv
    DGMGRL for Linux: Release 12.2.0.1.0 - Production on Tue Nov 22 15:39:09 2016
    
    Copyright (c) 1982, 2016, Oracle and/or its affiliates.  All rights reserved.
    
    Welcome to DGMGRL, type "help" for information.
    Connected to "sh1"
    Connected as SYSDBA.
    DGMGRL> show configuration verbose
    
    Configuration - sh1
    
      Protection Mode: MaxPerformance
      Members:
      sh3 - Primary database
        Error: ORA-16820: fast-start failover observer is no longer observing this database
    
        sh1 - (*) Physical standby database 
          Error: ORA-16820: fast-start failover observer is no longer observing this database
    
      (*) Fast-Start Failover target
    
      Properties:
        FastStartFailoverThreshold      = '30'
        OperationTimeout                = '30'
        TraceLevel                      = 'SUPPORT'
        FastStartFailoverLagLimit       = '30'
        CommunicationTimeout            = '180'
        ObserverReconnect               = '0'
        FastStartFailoverAutoReinstate  = 'TRUE'
        FastStartFailoverPmyShutdown    = 'TRUE'
        BystandersFollowRoleChange      = 'ALL'
        ObserverOverride                = 'FALSE'
        ExternalDestination1            = ''
        ExternalDestination2            = ''
        PrimaryLostWriteAction          = 'CONTINUE'
        ConfigurationWideServiceName    = 'sh1_CFG'
    
    Fast-Start Failover: ENABLED
    
      Threshold:          30 seconds
      Target:             sh1
      Observer:           sdb1
      Lag Limit:          30 seconds
      Shutdown Primary:   TRUE
      Auto-reinstate:     TRUE
      Observer Reconnect: (none)
      Observer Override:  FALSE
    
    Configuration Status:
    ERROR
    
    DGMGRL> 
    DGMGRL> 
    DGMGRL> STOP OBSERVER ALL
    Observer stopped.
    DGMGRL>
    DGMGRL>
    DGMGRL> show configuration verbose
    
    Configuration - sh1
    
      Protection Mode: MaxPerformance
      Members:
      sh3 - Primary database
        Warning: ORA-16819: fast-start failover observer not started
    
        sh1 - (*) Physical standby database 
          Warning: ORA-16819: fast-start failover observer not started
    
      (*) Fast-Start Failover target
    
      Properties:
        FastStartFailoverThreshold      = '30'
        OperationTimeout                = '30'
        TraceLevel                      = 'SUPPORT'
        FastStartFailoverLagLimit       = '30'
        CommunicationTimeout            = '180'
        ObserverReconnect               = '0'
        FastStartFailoverAutoReinstate  = 'TRUE'
        FastStartFailoverPmyShutdown    = 'TRUE'
        BystandersFollowRoleChange      = 'ALL'
        ObserverOverride                = 'FALSE'
        ExternalDestination1            = ''
        ExternalDestination2            = ''
        PrimaryLostWriteAction          = 'CONTINUE'
        ConfigurationWideServiceName    = 'sh1_CFG'
    
    Fast-Start Failover: ENABLED
    
      Threshold:          30 seconds
      Target:             sh1
      Observer:           (none)
      Lag Limit:          30 seconds
      Shutdown Primary:   TRUE
      Auto-reinstate:     TRUE
      Observer Reconnect: (none)
      Observer Override:  FALSE
    
    Configuration Status:
    WARNING
    
    DGMGRL> exit
    [oracle12c@sdb1 startObsrv_sh1]$ 
    [oracle12c@sdb1 startObsrv_sh1]$ cd /home/oracle12c/startObsrv_sh1
    [oracle12c@sdb1 startObsrv_sh1]$ rm *
    [oracle12c@sdb1 startObsrv_sh1]$ 
    [oracle12c@sdb1 startObsrv_sh1]$ nohup dgmgrl -silent sys/oracle@sh1_obsrv "start observer" &
    [oracle12c@sdb1 startObsrv_sh1]$ dgmgrl  sys/oracle@sh1_obsrv
    DGMGRL for Linux: Release 12.2.0.1.0 - Production on Tue Nov 22 15:46:41 2016
    
    Copyright (c) 1982, 2016, Oracle and/or its affiliates.  All rights reserved.
    
    Welcome to DGMGRL, type "help" for information.
    Connected to "sh1"
    Connected as SYSDBA.
    DGMGRL> show configuration verbose
    
    Configuration - sh1
    
      Protection Mode: MaxPerformance
      Members:
      sh3 - Primary database
        sh1 - (*) Physical standby database 
    
      (*) Fast-Start Failover target
    
      Properties:
        FastStartFailoverThreshold      = '30'
        OperationTimeout                = '30'
        TraceLevel                      = 'SUPPORT'
        FastStartFailoverLagLimit       = '30'
        CommunicationTimeout            = '180'
        ObserverReconnect               = '0'
        FastStartFailoverAutoReinstate  = 'TRUE'
        FastStartFailoverPmyShutdown    = 'TRUE'
        BystandersFollowRoleChange      = 'ALL'
        ObserverOverride                = 'FALSE'
        ExternalDestination1            = ''
        ExternalDestination2            = ''
        PrimaryLostWriteAction          = 'CONTINUE'
        ConfigurationWideServiceName    = 'sh1_CFG'
    
    Fast-Start Failover: ENABLED
    
      Threshold:          30 seconds
      Target:             sh1
      Observer:           sdb1
      Lag Limit:          30 seconds
      Shutdown Primary:   TRUE
      Auto-reinstate:     TRUE
      Observer Reconnect: (none)
      Observer Override:  FALSE
    
    Configuration Status:
    SUCCESS
    
    DGMGRL>

    (4) 我们把主备切换回来,sh1切回成主。注意切换过程,shard node会不可访问。

    [oracle12c@sdb1 ~]$ dgmgrl sys/oracle@sh3_obsrv
    DGMGRL for Linux: Release 12.2.0.1.0 - Production on Tue Nov 22 15:58:49 2016
    
    Copyright (c) 1982, 2016, Oracle and/or its affiliates.  All rights reserved.
    
    Welcome to DGMGRL, type "help" for information.
    Connected to "sh3"
    Connected as SYSDBA.
    DGMGRL> show configuration verbose
    
    Configuration - sh1
    
      Protection Mode: MaxPerformance
      Members:
      sh3 - Primary database
        sh1 - (*) Physical standby database 
    
      (*) Fast-Start Failover target
    
      Properties:
        FastStartFailoverThreshold      = '30'
        OperationTimeout                = '30'
        TraceLevel                      = 'SUPPORT'
        FastStartFailoverLagLimit       = '30'
        CommunicationTimeout            = '180'
        ObserverReconnect               = '0'
        FastStartFailoverAutoReinstate  = 'TRUE'
        FastStartFailoverPmyShutdown    = 'TRUE'
        BystandersFollowRoleChange      = 'ALL'
        ObserverOverride                = 'FALSE'
        ExternalDestination1            = ''
        ExternalDestination2            = ''
        PrimaryLostWriteAction          = 'CONTINUE'
        ConfigurationWideServiceName    = 'sh1_CFG'
    
    Fast-Start Failover: ENABLED
    
      Threshold:          30 seconds
      Target:             sh1
      Observer:           sdb1
      Lag Limit:          30 seconds
      Shutdown Primary:   TRUE
      Auto-reinstate:     TRUE
      Observer Reconnect: (none)
      Observer Override:  FALSE
    
    Configuration Status:
    SUCCESS
    
    DGMGRL> 
    DGMGRL> switchover to sh1
    Performing switchover NOW, please wait...
    Operation requires a connection to database "sh1"
    Connecting ...
    Connected to "sh1"
    Connected as SYSDBA.
    New primary database "sh1" is opening...
    Operation requires start up of instance "sh3" on database "sh3"
    Starting instance "sh3"...
    ORACLE instance started.
    Database mounted.
     Database opened.
    Connected to "sh3"
    Switchover succeeded, new primary is "sh1"
    DGMGRL> 
    DGMGRL> show configuration verbose
    
    Configuration - sh1
    
      Protection Mode: MaxPerformance
      Members:
      sh1 - Primary database
        sh3 - (*) Physical standby database 
    
      (*) Fast-Start Failover target
    
      Properties:
        FastStartFailoverThreshold      = '30'
        OperationTimeout                = '30'
        TraceLevel                      = 'SUPPORT'
        FastStartFailoverLagLimit       = '30'
        CommunicationTimeout            = '180'
        ObserverReconnect               = '0'
        FastStartFailoverAutoReinstate  = 'TRUE'
        FastStartFailoverPmyShutdown    = 'TRUE'
        BystandersFollowRoleChange      = 'ALL'
        ObserverOverride                = 'FALSE'
        ExternalDestination1            = ''
        ExternalDestination2            = ''
        PrimaryLostWriteAction          = 'CONTINUE'
        ConfigurationWideServiceName    = 'sh1_CFG'
    
    Fast-Start Failover: ENABLED
    
      Threshold:          30 seconds
      Target:             sh3
      Observer:           sdb1
      Lag Limit:          30 seconds
      Shutdown Primary:   TRUE
      Auto-reinstate:     TRUE
      Observer Reconnect: (none)
      Observer Override:  FALSE
    
    Configuration Status:
    SUCCESS
    
    DGMGRL>

    场景4:最后,我们来测试一下在FSFO保护的情况下,shard node 1 power down。

    ############################ Tue Nov 22 16:08:36 CST 2016 ############################
    
    TYPE            CUSTID                                                       FIRSTNAME                                                    LASTNAME
    --------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Using shard_key 1                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE            CUSTID                                                       FIRSTNAME                                                    LASTNAME
    --------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Using shard_key 3                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE                CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ------------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    NOT Using shard_key 1                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE                CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ------------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    NOT Using shard_key 3                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE              CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ----------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Using multi shard 1                                                            HE                                                           Jimmy
    Using multi shard 3                                                            HE                                                           Jimmy
    
    2 rows selected.
    
    
    TYPE                    CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ----------------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Look like use shard_key 1                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE                    CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ----------------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Look like use shard_key 3                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    
    
    ############################ Tue Nov 22 16:08:37 CST 2016 ############################
     select 'Using shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid='1'
    *
    ERROR at line 1:
    ORA-12543: TNS:destination host unreachable
    
    
    
    TYPE            CUSTID                                                       FIRSTNAME                                                    LASTNAME
    --------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Using shard_key 3                                                            HE                                                           Jimmy
    
    1 row selected.
    
    select 'NOT Using shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where PASSWD='1000'
    *
    ERROR at line 1:
    ORA-02519: cannot perform cross-shard operation. Chunk "5" is unavailable
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18795
    ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18772
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18811
    ORA-06512: at line 1
    
    
    select 'NOT Using shard_key' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where PASSWD='1002'
    *
    ERROR at line 1:
    ORA-02519: cannot perform cross-shard operation. Chunk "5" is unavailable
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18795
    ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18772
    ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 18811
    ORA-06512: at line 1
    
    
    select 'Using multi shard' as TYPE,CUSTID,FIRSTNAME,LASTNAME from customers where custid in ('1','3')
    *
    ERROR at line 1:
    ORA-12543: TNS:destination host unreachable
    
    
    
    TYPE                    CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ----------------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Look like use shard_key 1                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE                    CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ----------------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Look like use shard_key 3                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    
    
    ############################ Tue Nov 22 16:09:37 CST 2016 ############################
    
    TYPE            CUSTID                                                       FIRSTNAME                                                    LASTNAME
    --------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Using shard_key 1                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE            CUSTID                                                       FIRSTNAME                                                    LASTNAME
    --------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Using shard_key 3                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE                CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ------------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    NOT Using shard_key 1                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE                CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ------------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    NOT Using shard_key 3                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE              CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ----------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Using multi shard 3                                                            HE                                                           Jimmy
    Using multi shard 1                                                            HE                                                           Jimmy
    
    2 rows selected.
    
    
    TYPE                    CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ----------------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Look like use shard_key 1                                                            HE                                                           Jimmy
    
    1 row selected.
    
    
    TYPE                    CUSTID                                                       FIRSTNAME                                                    LASTNAME
    ----------------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
    Look like use shard_key 3                                                            HE                                                           Jimmy
    
    1 row selected.

    可以看到,当server的down的时候,被ovserver观察到,立马做主备切换。切换时间大约1分钟。 切换期间,行为和之前的一样:
    1. 基于shard key的查询。–访问sh1的操作失败,访问sh2的操作正常
    2. 不基于shard key的查询。–无论访问sh1还是sh2,都失败
    3. multi shard的查询 –访问失败
    4. 貌似基于shard key的查询 –无论访问sh2还是sh2,都失败

    主机重启后,后续的操作也是类似的,启动listener,启动数据库,到sh3上做reinstate database sh1,再做switchover,再重启observer。

    总结:
    1. 在没有ADG+FSFO的高可用保护下,当shard node宕掉的时候,只有基于shard key的访问才能正常,其他的访问都不正常。需要等shard node重新启动后,才能恢复正常访问。
    2. 在没有ADG+FSFO的高可用保护下,当shard node主机宕掉的时候,中间会hang两分钟左右的时间,过了两分钟的停顿时间后,只有基于shard key的访问才能正常,其他的访问都不正常。需要等shard node重新启动后,才能恢复正常访问。
    3. 在有ADG+FSFO的高可用保护下,当shard node宕掉的时候,只有基于shard key的访问才能正常,其他的访问都不正常。切换过程大约50秒,50秒之后,所有访问恢复正常访问。
    4. 在有ADG+FSFO的高可用保护下,当shard node主机宕掉的时候,只有基于shard key的访问才能正常,其他的访问都不正常。切换过程大约50秒,50秒之后,所有访问恢复正常访问。

    可以看到,有FSFO的保护,影响业务时间可以在一分钟以内。

    另外,由于reinstate之后,还需要switchover,切换成本比较高,又是一次down库,所以如果有RAC,那么对业务的影响可以降至最低。



沪ICP备19023445号-2号
友情链接