-- Anmeldung an der Datenbank, von der aus der Vergleich durchgeführt wird (hier eine 11g-DB) conn sys/sys@:/o11g as sysdba --Ein Account mit DBA-Rechten für den Owner des Packages wird eingerichtet CREATE USER kirk IDENTIFIED BY uhura DEFAULT TABLESPACE USERS QUOTA UNLIMITED ON USERS; GRANT CREATE SESSION TO kirk; GRANT CREATE ANY TABLE, CREATE ANY INDEX, DROP ANY TABLE, UPDATE ANY TABLE, INSERT ANY TABLE, DELETE ANY TABLE, ALTER ANY TABLE, SELECT ANY TABLE, ANALYZE ANY TO kirk; GRANT SELECT ANY DICTIONARY, CREATE ANY PROCEDURE, ALTER ANY PROCEDURE TO kirk; GRANT EXECUTE ON DBMS_COMPARISON TO kirk; --Einrichten des Datenbank-Links zur Remote-DB, hier eine 10g-Express Edition mit der SID "xe": --Parallel muss die Kennung der Remote-DB in der TNS_NAMES.ORA eingetragen werden. DROP PUBLIC DATABASE LINK sc_rem; CREATE PUBLIC DATABASE LINK sc_rem CONNECT TO scotty IDENTIFIED BY beam_me_up USING 'xe'; CREATE USER spock IDENTIFIED BY faszinierend DEFAULT TABLESPACE USERS QUOTA UNLIMITED ON USERS; CREATE USER scotty IDENTIFIED BY beam_me_up DEFAULT TABLESPACE USERS QUOTA UNLIMITED ON USERS; GRANT CREATE SESSION, CREATE TABLE TO spock, scotty; --Erstellen der Tabellen in den Schemata Scotty und Spock conn kirk/uhura DROP TABLE scotty.object1; DROP TABLE scotty.object1a; DROP TABLE spock.object2; DROP TABLE ausgabe; CREATE TABLE scotty.object1 AS SELECT * FROM dba_objects WHERE object_id IS NOT NULL; --Ein Unique Index ist für den Vergleich unabdingbar ALTER TABLE scotty.object1 ADD CONSTRAINT object1_pk PRIMARY KEY(object_id); -- Für den Vergleich innerhalb des Schemas Scotty wird die Tabelle kopiert CREATE TABLE scotty.object1a AS SELECT * FROM scotty.object1; ALTER TABLE scotty.object1a ADD CONSTRAINT object1a_pk PRIMARY KEY(object_id); exec DBMS_STATS.GATHER_SCHEMA_STATS (ownname => 'scotty'); CREATE TABLE spock.object2 AS SELECT * FROM scotty.object1; ALTER TABLE spock.object2 ADD CONSTRAINT object2_pk PRIMARY KEY (object_id); exec DBMS_STATS.GATHER_SCHEMA_STATS (ownname => 'spock'); --Erstellen der Tabelle für die Ausgabe der Vergleichsergebnisse im Schema Kirk CREATE TABLE ausgabe ( vergleichsname VARCHAR2(30), schema_lokal VARCHAR2(30), basistabelle VARCHAR2(30), schema_remote VARCHAR2(30), db_link VARCHAR2(30), vergleichstabelle VARCHAR2(30), index_wert NUMBER, scan_id NUMBER, in_basis VARCHAR2(10), in_vergleich VARCHAR2(10)); -- Anmeldung an der Datenbank, die über einen DB-Link angesprochen wird (hier eine 10g-Express Edition) conn sys/sys@:/xe as sysdba CREATE USER scotty IDENTIFIED BY beam_me_up DEFAULT TABLESPACE USERS QUOTA UNLIMITED ON USERS; GRANT CREATE SESSION, CREATE TABLE TO scotty; /* Einrichten des Datenbank-Links zur Basis-DB zur Tabellenerstellung Wichtig: Für die Erstellung eines Datenbanklinks von einer 10er-DB zu einer 11er-DB muss das Passwort wegen der Unterscheidung zwischen Klein- und Großschreibung in Anführungszeichen gesetzt werden, sonst bekommt man bei dem Versuch, auf die Remote-Tabellen zuzugreifen, immer die Fehlermeldung: ORA-01017: Benutzername/Kennwort ungültig; Anmeldung abgelehnt */ DROP PUBLIC DATABASE LINK sc_o11g; CREATE PUBLIC DATABASE link sc_o11g CONNECT TO scotty IDENTIFIED BY "beam_me_up" USING 'o11g'; --Erstellen der Tabelle im Schema Scotty der Remote-DB DROP TABLE scotty.object1_rem; CREATE TABLE scotty.object1_rem AS SELECT * FROM scotty.object1@sc_o11g; ALTER TABLE scotty.object1_rem ADD CONSTRAINT object_xe_pk PRIMARY KEY(object_id); exec DBMS_STATS.GATHER_SCHEMA_STATS (ownname => 'SCOTTY');