移行前にテーブルの同期を保つために、事前構築済みテーブルでマテリアライズド ビューを使用したいと考えています。データは常に変化しているため、エクスポート開始からインポート終了までの変化を追跡する必要があります。言うまでもなく、テーブルは巨大であるため、完全な更新は遅すぎます。
実行したい手順:
- 新しいデータベースにテーブルを作成します。
- 古いデータベース テーブルに mv ログを作成します。
- 古いデータベースから新しいデータベースにデータをインポートします。
- prebuild テーブルの新しいデータベースにマテリアライズド ビューを作成し、mv ログが作成された時点から更新し続けます。
問題は、マテリアライズド ビューが作成された瞬間に、古いテーブルの mv ログが削除されることです。
古い DB: テーブル kvrtest (id 番号、cat 番号) を作成します。
alter table kvrtest add ( constraint pkkvrtest primary key (id) using index);
insert into kvrtest (id, cat) values (1, 1);
commit;
CREATE MATERIALIZED VIEW LOG ON kvrtest WITH PRIMARY KEY;
insert into kvrtest (id, cat) values (2, 1);
insert into kvrtest (id, cat) values (3, 2);
commit;
select * from MLOG$_KVRTEST; --Yields 2, these should be caught by a fast refresh.
新しい DB: テーブル kvrtest (id 番号、cat 番号) を作成します。
alter table kvrtest add ( constraint pkkvrtest primary key (id) using index);
insert into kvrtest (id, cat) values (1, 1); --Simulate import.
commit;
CREATE MATERIALIZED VIEW kvrtest
ON PREBUILT TABLE WITHOUT REDUCED PRECISION
USING INDEX
REFRESH FORCE ON DEMAND
AS
select * from kvrtest@oldDb;
この時点で、mv ログはパージされます
select * from MLOG$_KVRTEST; --Yields 0, a fast refresh from here does not catch these records.
助言がありますか?