Logical Standby的維護操作_SKIP

聽海★藍心夢發表於2011-09-21

logstdby上以下兩種情況需要用到SKIP維護操作:

1>定製規則,standby對primary特定物件的更新不做apply
2>日常維護,standby上出現GAP後skip掉無法apply的object,transcation或是特定使用者的DML\DDL操作等

執行skip需要停止logical standby上的apply操作後進行。

1.定製規則過濾primary的操作

logstby並不要求與Primary的物理一致,可以使用DBMS_LOGSTDBY.SKIP的儲存過程過濾掉一些並不希望apply在standby上的sql操作。目前logcial standby上支援的sql skip如下:

*DML or DDL changes for tables
*CREATE, ALTER, or DROP INDEX DDL statements
*CREATE, ALTER, DROP, or TRUNCATE TABLE statements
*CREATE, ALTER, or DROP TABLESPACE statements
*CREATE or DROP VIEW statements

eg:

1>Skipping a Table in a Logical Standby Database

SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;
SQL> EXECUTE DBMS_LOGSTDBY.SKIP('SCHEMA_DDL', 'TABLE_OWNER', 'TABLE_NAME');
SQL> EXECUTE DBMS_LOGSTDBY.SKIP('DML', 'TABLE_OWNER', 'TABLE_NAME');
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;


2>Skipping ALTER or CREATE TABLESPACE Statements

SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;
SQL> EXEC DBMS_LOGSTDBY.SKIP('CREATE TABLESPACE', NULL, NULL, NULL);
SQL> EXEC DBMS_LOGSTDBY.SKIP('ALTER TABLESPACE', NULL, NULL, NULL);
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;


dba_logstdby_skip檢視可以檢視logstdby上定製的skip規則。如果需要取消一些skip規則,則使用DBMS_LOGSTDBY.UNSKIP,方法同skip類似。

2.skip transaction

透過dba_logstdby_events查詢未能apply的問題事件,然後使用dbms_logstdby.skip_transaction包skip掉堵塞的transaction。

eg:

1>查詢堵塞的transaction

skip時需要transactions的一些特定值(xidusn, xidslt, xidsqn),透過dba_logstdby_events檢視獲取當前logstdby上apply事件的相關資訊。

SQL> set line 200
SQL> col STATUS for a80
SQL> col STATUS_CODE for 9999999999
SQL> select xidusn, xidslt, xidsqn, status, status_code from dba_logstdby_events
where event_time = (select max(event_time) from dba_logstdby_events);

  XIDUSN   XIDSLT   XIDSQN STATUS                                               STATUS_CODE
-------- -------- -------- ---------------------------------------------------- ----------
      4       47    10833 ORA-00959: tablespace 'TS_KXYK_DETAIL_V3_2008_N1'      959
                          does not exist         
SQL>

2>執行skip操作

SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;
Database altered.
SQL> execute dbms_logstdby.skip_transaction(xidusn_p => '4',xidslt_p =>'47',xidsqn_p => '10833');

PL/SQL procedure successfully completed.
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
Database altered.

檢視standby上的alert.log,可以看到skip transaction的日誌,類似如下:
… …
LOGSTDBY: Skip Transaction xid 0x0004.02b.00002959, chunk[0],
scn: 0x0000.01a375c
… …

【轉】http://fbirdzp.blogbus.com/logs/50888748.html

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/751371/viewspace-707990/,如需轉載,請註明出處,否則將追究法律責任。

相關文章