本記事では、特定ユーザーによるSQL実行を Capture プロセスでスキップさせる方法を説明します。
具体的な例を挙げて説明します。
(DBユーザー)SQ1のテーブルTBLをソースとターゲットで作成します。
(DBユーザー)TEST1もソースとターゲットにいて、SQ1のテーブルTBLを操作できます。
TEST1ユーザーによる変更をSharePlexがキャプチャしないように設定する例です。
1. ソースとターゲットの両方でテーブルを作成します。
- source
$ sqlplus sq1/sq1
SQL> create table tbl (name varchar2(10) primary key, first varchar2(15));
- target
$ sqlplus sq1/sq1
SQL> create table tbl (name varchar2(10) primary key, first varchar2(15));
2. アクティベートします。
< config file >
---
...
expand sq1.% sq1.% hostname@o.orcl
---
3. TEST1 ユーザーによる変更をスキップするため、SP_OCT_DENIED_USERID パラメータを設定します。
SQL> select username,user_id from dba_users where username='TEST1';
USERNAME USER_ID
------------------------------ ----------
TEST1 94
sp_ctrl > set param SP_OCT_DENIED_USERID 94
4. TEST1ユーザーで INSERT 文を実行します。
$ sqlplus TEST1/TEST1
SQL> insert into sq1.tbl values ('ABCD','1234');
SQL> commit;
5. ターゲット側には複製されません。
SQL> select * from sq1.tbl;
no rows selected
6. TEST1 ユーザー以外で INSERT 文を実行します。
$ sqlplus sq1/sq1
SQL> insert into sq1.tbl values ('EFGH','5678');
SQL> commit;
7. ターゲット側に複製されます。
SQL> select * from tbl;
NAME FIRST
---------- ---------------
EFGH 5678
重要
- パラメータ SP_OCT_DENIED_USERID で指定できるユーザーIDは1つのみです。
- パラメータ SP_OCT_DENIED_USERID は構成ファイルに定義されている複製対象テーブルに対しての DML,DDL 文をスキップします。パラメーターSP_OCT_REPLICATE_ALL_DDLが1(有効, 非デフォルト)であることで発生する複製対象ではないオブジェクトへのDDL 文はスキップされません。