web-dev-qa-db-ja.com

Data Guardを使用したOracleでのスキーマベースのレプリケーション

システムクラスターにはアクティブ/パッシブデータベースレプリケーションがあるため、パッシブdbはノードのDRクラスに属しています。ダウンタイムなしの展開を設計しようとしているので、いくつかのアイデアを出しました。

2つのデータベーススキーマがあるため、1つと2つ目のデータベーススキーマ(レプリケートされない)のみをレプリケートして、完全な読み取り/書き込みモードで使用できますか?

データガードは、データを複製するために使用されます。以前の会社では、MySQL(無料版)を使用してそのようなことを簡単に実行しましたが、Oracleでそれが可能かどうかはわかりません。私にとって、MySQLがそれを行うことができれば、Oracleも同様にできますが、インターネットはその正確な答えを私に提供していません。

いくつかのEXCLUDEコマンドを実行してレプリケートされるものを制限することは可能ですが、その除外されたスキーマを完全な読み取り/書き込みモードで使用する必要があることをどこかで読みました。

ありがとう

3
fenix

あるデータベースから別のデータベースへのレプリケーションを実行するが、特定のスキーマをスキップする場合は、Data Guardロジカルスタンバイデータベースが適している可能性があります。

ただし、スキーマレベルで同じデータベース内からレプリケーションを実行する場合、Oracle GoldenGateはそれを「実行する可能性があります」...ただし、GoldenGateを使用したことがないので、それが可能かどうか確認できませんよく合う。

この回答は、あるデータベースから別のデータベースへのレプリケーションを実行することを想定していますが、特定のスキーマはスキップします。

ロジカル・スタンバイ・データベースは、ログマイナーとSQL Applyを使用して、スタンバイ・データベースでSQL文を再生します。レプリケートするものとレプリケートしないものを非常に細かく制御できます。ただし、ロジカルスタンバイの管理はフィジカルスタンバイの管理よりもはるかに複雑であるため、Data Guardに慣れていない場合は、ロジカルスタンバイデータベースの管理を試みる前に、フィジカルスタンバイの管理に精通しています。さらに、ロジカルスタンバイは読み取り/書き込みで開いており、それらのオブジェクト(またはスキーマ全体)のSQL Applyをオフにして、GUARDをスタンバイに設定することで、直接変更できるオブジェクトとできないオブジェクトを制御できます。

1)Data Guardフィジカルスタンバイを作成します

2)フィジカルスタンバイをロジカルスタンバイに変換します

--STANDBY 
alter database recover managed standby database cancel;

--PRIMARY
execute dbms_logstdby.build;

--STANDBY
alter database recover to logical standby keep identity;
alter database open;
alter database start logical standby apply immediate;

3)スキーマ全体のレプリケーション(DDLおよびDML)をスキップします(HRはスキップするスキーマであると想定)

--STANDBY
alter database stop logical standby apply;

EXECUTE DBMS_LOGSTDBY.SKIP(STMT => 'SCHEMA DDL', schema_name => 'HR', object_name => '%');
EXECUTE DBMS_LOGSTDBY.SKIP(STMT => 'DML', schema_name => 'HR', object_name => '%');

alter database start logical standby apply immediate;

4)SQL Applyを通じて維持されていないオブジェクトへの変更を許可します

alter database guard standby;

Data Guardロジカルスタンバイデータベースに関する12cのドキュメントは、次の場所にあります。

ロジカル・スタンバイ・データベースの作成

ロジカルスタンバイデータベースの管理

2
Kris Johnston