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:
- Tabelle erstellen auf der neuen db.
- Erstellen mv-Protokoll auf alte db-Tabelle.
- Importieren Sie die Daten aus der alten db auf die neue db.
- 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?
Du musst angemeldet sein, um einen Kommentar abzugeben.
beim erstellen neue " MATERIALISIERTE VIEW-REFRESH-tag-log-Tabelle lichtet sich, denn der Blick ist tatsächlich nach dem erstellen.
wenn Sie das nicht möchten, deaktivieren Sie die log-Tabelle verwenden Sie NIEMALS AKTUALISIEREN und ändern Sie anschließend zum AKTUALISIEREN AUF die NACHFRAGE, wie diese:
lassen Sie uns sehen, unsere log-Tabelle
wir haben zwei Zeilen, nett! und dann
dann nach dem aktualisieren der Ansicht log-Tabelle wird wieder klar.
dbms_snapshot.refresh(list => 'kvrtest', method => '?', parallelism => 2);