ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Logical Standby的维护操作_SKIP

Logical Standby的维护操作_SKIP

原创 Linux操作系统 作者:听海★蓝心梦 时间:2011-09-21 08:04:44 0 删除 编辑

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博客 ” ,链接:https://blog.itpub.net/751371/viewspace-707990/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-02-18

  • 博文量
    253
  • 访问量
    1268010