Erstellen Sie neue materialisierte Ansicht ohne die " materialisierte view-logs entfernt werden

Ich möchte die materialisierte Ansicht auf vorgefertigte Tabelle zu halten, eine Tabelle synchronisieren, bevor Sie eine migration. Die Daten ändern sich ständig, so dass die Veränderungen zwischen export-start-und import fertig stellen aufgespürt werden müssen. Es geht ohne zu sagen, die Tabelle ist riesig, sodass eine vollständige Aktualisierung ist zu langsam.

Schritte-id durchführen möchten:

  1. Tabelle erstellen auf der neuen db.
  2. Erstellen mv-Protokoll auf alte db-Tabelle.
  3. Importieren Sie die Daten aus der alten db auf die neue db.
  4. Create materialized view auf die neue db auf die fertige Tabelle und halten Aktualisierung es von der Stelle, wenn das mv-Protokoll erstellt wurde.

Das problem ist, dass der moment der materialized view erstellt wird, die mv-Protokoll auf die alte Tabelle gelöscht wird.

Alten DB:
create table kvrtest (id-Nummer, Katze, Zahl);

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.

Neuen DB:
create table kvrtest (id-Nummer, Katze, Zahl);

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;

Zu diesem Zeitpunkt die mv-log bereinigt wird

select * from MLOG$_KVRTEST; --Yields 0, a fast refresh from here does not catch these records.

Irgendwelche Vorschläge?

InformationsquelleAutor kon5ad | 2012-11-28
Schreibe einen Kommentar