別忘記DBMS_LOGSTDBY.SKIP的轉義符

viadeazhu發表於2010-02-04

在使用logical standby時,可以使用DBMS_LOGSTDBY.SKIP來不復制某些特定的objects。

但是,如果我們希望不復制以'XXX_'開頭的表,但保留以'XXX'開頭的表,由於'_'代表任意字元,所以如果我們這樣skip:

EXECUTE DBMS_LOGSTDBY.SKIP (stmt => 'DML', schema_name => 'MYSCHEMA', object_name => 'XXX_%', proc_name => null);

這樣的寫法其實會連以'XXX'開頭的表都被skip掉。

 

這時,我們可以使用DBMS_LOGSTDBY.SKIP的ESC引數來制定轉義符。

PROCEDURE SKIP
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 STMT                           VARCHAR2                IN
 SCHEMA_NAME                    VARCHAR2                IN     DEFAULT
 OBJECT_NAME                    VARCHAR2                IN     DEFAULT
 PROC_NAME                      VARCHAR2                IN     DEFAULT
 USE_LIKE                       BOOLEAN                 IN     DEFAULT
 ESC                            CHAR(1)                 IN     DEFAULT

esc

Identifies an escape character (such as the character "/") that you can use for pattern matching. If the escape character appears in the pattern before the character "%" or "_" then Oracle interprets this character literally in the pattern, rather than as a special pattern matching character. See for more information about pattern matching.

這樣實現我們的需求:

EXECUTE DBMS_LOGSTDBY.SKIP (stmt => 'DML', schema_name => 'MYSCHEMA', object_name => 'XXX/_%', proc_name => null,ESC=>'/');

 

本來是非常簡單的一個方法,卻因為我們沒有好好仔細看一遍Manual,所以一段時間內不知道如何實現。

遇到問題,看官方手冊應該是第一位的,而不是百度和google。

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

相關文章