Tabellen kopieren

Hallo,
ich habe Aktuelle und eine Archiv-Datenbank. Jetzt möchte ich eine Tabelle(!) aus der aktuellen Datenbank archivieren. Diese Tabelle hat keine Timestamp-Spalte und es werden nur Daten zugefügt und nie gelöscht, aber evtl. geändert. Die Sicherung soll 1x monatlich geschehen.

Da man die Einträge nicht vergleichen kann, würde ich die Archiv-DB einfach löschen und völlig neu kopieren.

Das find ich aber net so pralle - gibt es eine bessrer möglichkeit.
Es handelt sich um eine Oracle 9 Datenbank

Hallo,

der „richtige“ Weg, das zu tun ist die Replikation. Das kannst du mir der Enterprise Manager Konsole einstellen.

„Zu Fuß“ geht es auch:
Du richtest in einer der DBs (ich würde die ZielDB nehmen) einen Database Link ein und machst dann:

INSERT INTO archivtabelle SELECT * FROM databaselinkaufanderetabelle WHERE databaselinkaufanderetabelle.id NOT IN (SELECT archivtabelle.id FROM archivtabelle)

COMMIT nicht vergessen.

Es geht auch mit einer Prozedur, dann kannst du DUP_VAL_ON_INDEX abfangen.

Gruß

Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi,
die idee mit dem db-link ist gut. mit der umsetzung hapert es aber noch etwas.
den link leg ich ja an mit:

CREATE DATABSE LINK dbLink\_name
CONNECT TO user
IDENTIFIED BY pwd
USING 'dbname';

wie ich das jetzt verstehe, muss ‚dbname‘ bestenfalls in der tbsname.ora stehen und zwar auf dem Server !?!?

Weiterhin versteh ich ganz was konzeptionelle an dem db-link nicht. Der link zeigt doch dann auf die datenbank - ich will ja aber den link auf ein bestimmtes schema!? in der oracle doku steht dann nämlich:

CREATE VIEW v AS 
SELECT \* FROM tabelle@dbLink\_name

dbLink_name wäre doch dann aber schon das schema!?!?

wäre schön wenn du nochmal herlfen könntest.
danke

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

das ist alles völlig korrekt.

Die Verbindung muss in der TNSNAMES.ORA auf dem Server stehen.

Da du ja User und Passwort mitgibst, arbeitest du im Schema dieses Users.

Normalerweise verschleiert man den Database Link noch durch ein sysnonym:

CREATE SYNONYM tab FOR tab@database_link.

Vermutlich (Ich hatte einfach noch nie das Bedürfnis es auszuprobieren) geht auch tab.xxx@databaselink wenn du in ein anderes Schema willst. Alternativ müsstest du auf dem Schema des Ziels Synonyme für die zu replizierenden Tabellen anlegen. Damit kannst du auf jeden Fall das Schema der Tabellen trennen.

Gruß

Peter

Gruß

Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]