Oracleトランザクションセットアップ例(Log ReaderまたはLog Server Agent)[Syniti Data Replication]


Oracle Databaseをソースとしてトランザクションログを参照したレプリケーションを実施するための構成手順例を紹介します。トリガーを使用した場合の設定についてはこちらをご参照ください。

事前準備

Syniti DRが利用する.Netプロバイダをインストールするために、Syniti DRサーバにOracle Clientをインストールします。この際にOracle Data Provider for .NET(ODP.NET)を含んでいることを確認してください。

接続ユーザの構成

Oracleに接続するためのユーザを構成します。以下ではユーザの作成から権限割り当て等まで例を紹介しています。ここではレプリケーション対象のテーブル個別に設定可能な項目もanyで権限割り当てしていますのでご注意ください。

非コンテナデータベースの場合

この例では非コンテナデータベースで、sdruserを作成し、それに対して必要な権限を割り当てる手順を紹介しています。<Password>は任意の文字列に置き換えてください。

--ユーザ作成
create user sdruser identified by <Password>;

--セッションの作成を許可
grant create session to sdruser;

--カタログ参照権限
grant select on SYS.ALL_USERS to sdruser;
grant select on SYS.ALL_TABLES to sdruser;
grant select on SYS.ALL_TAB_COMMENTS to sdruser;
grant select on SYS.ALL_OBJECTS to sdruser;
grant select on SYS.ALL_VIEWS to sdruser;
grant select on SYS.ALL_TAB_COLUMNS to sdruser;
grant select on SYS.ALL_COL_COMMENTS to sdruser;
grant select on SYS.ALL_CONSTRAINTS to sdruser;
grant select on SYS.ALL_CONS_COLUMNS to sdruser;
grant select on SYS.USER_CONSTRAINTS to sdruser;
grant select on SYS.USER_CONS_COLUMNS to sdruser;
grant select on SYS.ALL_IND_COLUMNS to sdruser;

--テーブル参照権限
grant select any table to sdruser;

--テーブル作成、更新権限(任意、ターゲットの場合、必須)
grant unlimited tablespace to sdruser;
grant create any table to sdruser;
grant insert any table to sdruser;
grant update any table to sdruser;
grant delete any table to sdruser;

--テーブル削除、構成変更権限(任意、ターゲットの場合、必須)
grant alter any table to sdruser;
grant drop any table to sdruser;

--サプリメンタルロギング設定権限
grant alter database to sdruser;

--サプリメンタルロギング(最小レベル)での設定権限
grant alter any table to sdruser;

--ディクショナリファイルの構築権限
grant execute on sys.dbms_logmnr_d to sdruser;

--トランザクションログ参照権限
grant execute on sys.dbms_logmnr to sdruser;
grant select on sys.v_$parameter to sdruser;
grant select on sys.v_$log to sdruser;
grant select on sys.v_$logfile to sdruser;
grant select on sys.V_$logmnr_contents to sdruser;
grant select on sys.V_$thread to sdruser;
grant select on sys.V_$archive_dest to sdruser;
grant select on SYS.AUD$ to sdruser;

--アーカイブログも参照する場合に必要
grant select on sys.v_$archived_log to sdruser;

--10g以降の場合
grant select any transaction to sdruser;

--12c以降の場合
grant select on cdb_pdbs to sdruser;
grant logmining to sdruser;
grant select on sys.v_$database to sdruser;
grant select on sys.v_$containers to sdruser;
grant select on DBA_LOG_GROUPS to sdruser;
grant select on DBA_LOG_GROUP_COLUMNS to sdruser;
grant EXECUTE_CATALOG_ROLE to sdruser;

ルチテナント・コンテナ・データベースの場合

この例ではマルチテナント・コンテナ・データベースで、共通ユーザアカウントとしてcdb$rootにc##sdruserを作成し、それに対して必要な権限を割り当てる手順を紹介しています。<Password>は任意の文字列に置き換え、<PDB name>は環境に合わせて変更をお願いします。

--セッションをcdb$rootに変更
alter session set container = cdb$root;

--ユーザ作成
create user c##sdruser identified by <Password>;

--セッションの作成を許可
grant create session to c##sdruser container=ALL;

--サプリメンタルロギングを設定(最小/テーブルレベルの場合)
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

--サプリメンタルロギングを設定(データベースレベル)
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE INDEX) COLUMNS;

--サプリメンタルロギングの変更権限
grant alter database to c##sdruser container=ALL;

--トランザクションログ参照権限
grant execute on sys.dbms_logmnr_d to c##sdruser container=ALL;
grant select on sys.v_$parameter to c##sdruser container=ALL;
grant select on sys.v_$log to c##sdruser container=ALL;
grant select on sys.v_$logfile to c##sdruser container=ALL;
grant select on sys.V_$logmnr_contents to c##sdruser container=ALL;
grant select on sys.V_$thread to c##sdruser container=ALL;
grant select on sys.V_$archive_dest to c##sdruser container=ALL;
grant select on sys.v_$archived_log to c##sdruser container=ALL;
grant select any transaction to c##sdruser container=ALL;
grant select on cdb_pdbs to c##sdruser container=ALL;
grant logmining to c##sdruser container=ALL;
grant select on sys.v_$database to c##sdruser container=ALL;
grant select on sys.v_$containers to c##sdruser container=ALL;
grant select on DBA_LOG_GROUPS to c##sdruser container=ALL;
grant select on DBA_LOG_GROUP_COLUMNS to c##sdruser container=ALL;
grant EXECUTE_CATALOG_ROLE to c##sdruser container=ALL;
grant select on sys.aud$ to c##sdruser;
alter user c##sdruser set container_data=ALL container=current;

--セッションをPDBに変更
alter session set container = <PDB name>;


--セッションの作成を許可
grant create session to c##sdruser;

--カタログ参照権限
grant select on SYS.ALL_USERS to c##sdruser;
grant select on SYS.ALL_TABLES to c##sdruser;
grant select on SYS.ALL_TAB_COMMENTS to c##sdruser;
grant select on SYS.ALL_OBJECTS to c##sdruser;
grant select on SYS.ALL_VIEWS to c##sdruser;
grant select on SYS.ALL_TAB_COLUMNS to c##sdruser;
grant select on SYS.ALL_COL_COMMENTS to c##sdruser;
grant select on SYS.ALL_CONSTRAINTS to c##sdruser;
grant select on SYS.ALL_CONS_COLUMNS to c##sdruser;
grant select on SYS.USER_CONSTRAINTS to c##sdruser;
grant select on SYS.USER_CONS_COLUMNS to c##sdruser;
grant select on SYS.ALL_IND_COLUMNS to c##sdruser;

--テーブル参照権限
grant select any table to c##sdruser;

--テーブル作成、更新権限(任意、ターゲットの場合、必須)
grant unlimited tablespace to c##sdruser;
grant create any table to c##sdruser;
grant insert any table to c##sdruser;
grant update any table to c##sdruser;
grant delete any table to c##sdruser;

--テーブル削除、構成変更権限(任意、ターゲットの場合、必須)
grant alter any table to c##sdruser;
grant drop any table to c##sdruser;

--サプリメンタルロギングが最小/テーブルレベルの場合の追加権限
grant alter any table to c##sdruser;

クラウドDBの設定(Amazon RDSの例)

クラウド上でサービスとして提供されているデータベースの場合、データベースの変更をalter databaseでは実施できず、独自のコマンドを使用しなければいけない場合があります。

例えばサプリメンタルロギングを有効化するといったケースです。Amazon RDSのOracle DBインスタンスでデータベースレベルでサプリメンタルロギングを有効にする場合には以下のように実行します。

exec rdsadmin.rdsadmin_util.alter_supplemental_logging(‘ADD’,’PRIMARY KEY’);
exec rdsadmin.rdsadmin_util.alter_supplemental_logging(‘ADD’,’UNIQUE’);

詳細は下記をご参照ください。

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/Appendix.Oracle.CommonDBATasks.html#Appendix.Oracle.CommonDBATasks.AddingSupplementalLogging

シンクロナイゼーション(双方向)での追加設定

シンクロナイゼーション(双方向)のレプリケーションを実施する場合、参照するトランザクションログをどのユーザが実行したかという監査情報が必要になります。

この監査証跡を設定するためには、以下を実施します。

1.以下をデータベース(CDB$ROOT)で実行します。

ALTER SYSTEM SET audit_trail=DB SCOPE=SPFILE;

2.データベースインスタンスを再起動します。

3.再起動後、セッションを記録するように以下を実行します。

AUDIT SESSION;

または、以下のように個別のユーザで有効化することもできます。

AUDIT SESSION BY sdruser;

このコマンドはデータベースの再起動後も有効です。監査をオフにする場合、オフにするAUDITステートメントごとにNOAUDITステートメントを実行します。

NOAUDIT SESSION;
NOAUDIT SESSION BY sdruser;

ソース接続設定

ODP.NETがインストール先WindowsのGACに登録されている場合、自動的にそれがアセンブリとして読み込まれます。GACに登録されていない場合、明示的にアセンブリOracle.DataAccess.dllファイルを指定する必要があります。

データベースへの接続情報を指定します。

  • シンクロナイゼーションを実施する場合、指定するユーザIDはSyniti DR固有のものにする必要があります。Syniti DRはこのユーザIDが実行したトランザクションをレプリケーションしません。
  • マルチテナント・コンテナ・データベースの場合、レプリケーション対象のテーブルが存在するPDBを指定します。

トランザクショナルレプリケーションの有効化

この記事ではLog ReaderまたはLog Server Agentでトランザクショナルレプリケーションを実施する場合の設定を紹介しています。

Log Readerの場合

トランザクションログの参照に関する設定を行います。

  • マルチテナント・コンテナ・データベースの場合、[…]から接続設定を編集し、CDB$ROOTに接続するように設定を変更します。
  • Oracle 19c以降の場合、Oracle側でCONTINUOUS_MINEオプションがサポートされなくなったため、アーカイブログ参照設定のCOUTINUOUS_MINEオプションを使用のチェックを外す必要があります。

Log Server Agentの場合

ログサーバエージェントのコンポーネントを配置するパスと、取得したトランザクションログを保存するフォルダ、またそれの保持設定を行います。

  • マルチテナント・コンテナ・データベースの場合、[Use ログコンテナ]にチェックを入れて接続設定を編集し、CDB$ROOTに接続するように設定を変更します。
  • [Remote LSAの使用]はOracleデータベースサーバ側にログサーバエージェントを構成する場合に使用します。構成が必要な場合には、サポートまでお問い合わせください。
関連したトピックス

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください