DataBrokerを使用してDataGuardのセットアップを構成しました。スタンバイデータベースに反映されると思われるプライマリデータベースのテーブルに新しいデータを挿入するとき。スタンバイデータベースにあるこれらのデータを確認したところ、反映されていませんでした。そこで、データベースを再起動して、読み取り専用で開きました。遅延を回避するために、以下のコマンドを使用しました。
SQL> alter database recover managed standby database nodelay disconnect from session;
しかし、スタンバイデータベースに反映されるまでにはまだ多くの時間がかかります。
データをプライマリからスタンバイに移行するのにかかる時間遅延はどのくらいですか?
これは、データがスタンバイデータベースに反映されるまでにかかる標準的な時間遅延ですか。それとも、構成で何かを見逃しましたか?.
それを整理する方法はありますか?
リアルタイムで適用することが必要だと思いますが、そのためには、まずスタンバイデータベースにスタンバイREDOログを作成する必要があります。補足として、役割の移行を容易にするために、プライマリデータベースにもスタンバイREDOログを作成することをお勧めします。
スタンバイREDOログは、REDOログと同じサイズである必要があり、REDOログよりも少なくとも1つ多くのスタンバイログのグループが必要です。
プライマリデータベースで次のスクリプトを使用します。このスクリプトは、スタンバイREDOログのステートメントを作成し、スタンバイデータベースで実行します。
select 'alter database add standby logfile group ' ||
to_number((select count(*) from v$log) + rownum) || '(''T:\Oracle\STANDBYREDO\REDO0' ||
to_number((select count(*) from v$log) + rownum) || '.LOG'') SIZE ' ||
(select max( bytes/1024/1024) from v$log) || 'M;' as standbyredo
from v$log
union all
select 'alter database add standby logfile group ' ||
((select max(group#) from v$log) + (select count(*) from v$log) + 1) || '(''T:\Oracle\STANDBYREDO\REDO0' ||
((select max(group#) from v$log) + (select count(*) from v$log) + 1) || '.LOG'') SIZE ' ||
(select max( bytes/1024/1024) from v$log) || 'M;'
from dual;
スタンバイ・ログがスタンバイ・データベースに存在した後、リアルタイムの適用を開始するには、recoverコマンドにusing current logfile
句を含める必要があります。
SQL> alter database recover managed standby database using current logfile disconnect from session;
出荷および適用中に、スタンバイデータベースでv $ standby_logをクエリすることによりスタンバイログが使用されていることを確認できます。
select * from v$standby_log;
物理スタンバイのセットアップ方法を学んでいたときに、スタンバイデータベースで Tim Hallのガイド が非常に貴重であることがわかりました。