Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie vergleiche ich zwei Datenbankobjekte in Oracle?

In diesem Tutorial gebe ich ein Beispiel zum Vergleichen von zwei Datenbanktabellenobjekten unterschiedlicher Schemas mit dem Hilfspaket DBMS_COMPARISON in Oracle.

Schritte zum Vergleichen zweier Tabellenobjekte in Oracle mit DBMS_COMPARISON

Schritt 1 Erstellen Sie den Vergleich mit DBMS_COMPARISON. Im folgenden Beispiel vergleicht es die eine Tabelle aus dem SCOTT-Schema und eine Tabelle aus dem HR-Schema in derselben Datenbank und erstellt einen Vergleich namens emp_compare .

BEGIN
DBMS_COMPARISON.create_comparison (
comparison_name => 'emp_compare',
schema_name => 'scott',
object_name => 'emp',
dblink_name => NULL,
remote_schema_name => 'hr',
remote_object_name => 'emp2');
END;
/

Ausgabe:

PL/SQL procedure successfully completed.

Schritt 2 Nach dem Ausführen des obigen PL/SQL-Blocks würde der Vergleich erstellt werden. Der nächste Schritt besteht darin, diesen Vergleich wie unten gezeigt durchzuführen.

SET SERVEROUTPUT ON
DECLARE
t_scan_info DBMS_COMPARISON.comparison_type;
l_diff BOOLEAN;
BEGIN
l_diff := DBMS_COMPARISON.compare (
comparison_name => 'emp_compare',
scan_info => t_scan_info,
perform_row_dif => TRUE
);

IF NOT l_diff THEN
DBMS_OUTPUT.put_line('Differences found and scan_id is ' || t_scan_info.scan_id);
ELSE
DBMS_OUTPUT.put_line('No differences found.');
END IF;
END;
/

Ausgabe:

Differences found and scan_id is 7
PL/SQL procedure successfully completed.

Schritt 3 Wenn Unterschiede gefunden werden, können Sie die Unterschiede durch die folgende Abfrage überprüfen:

SELECT comparison_name,
local_rowid,
remote_rowid,
status
FROM user_comparison_row_dif
WHERE comparison_name = 'EMP_COMPARE';

Ausgabe:

COMPARISON_NAME    LOCAL_ROWID              REMOTE_ROWID         STATUS
EMP_COMPARE        AAAR3sAAEAAAACXAAA       AAAU5vAAEAAAAW9AAA   DIF
EMP_COMPARE        AAAR3sAAEAAAACXAAD       AAAU5vAAEAAAAW9AAD   DIF

Sie erhalten die Ausgabe wie oben gezeigt. Darin werden Ihnen der Vergleichsname, die lokale Zeilen-ID (scott.emp-Tabellenzeilen-ID), die entfernte Zeilen-ID (hr.emp2-Tabellenzeilen-ID) und der Status angezeigt.

Jetzt können Sie beide Tabellen nach diesen ROWIDs abfragen, um die Unterschiede zu überprüfen.

Sie können auch die Daten der beiden Tabellen aus den unterschiedlichen Schemas mithilfe der SQL-Abfrage vergleichen, wie im folgenden Beispiel gezeigt.

SELECT EMPNO,
ENAME,
JOB,
MGR,
HIREDATE,
SAL,
COMM,
DEPTNO
FROM scott.emp
MINUS
SELECT EMPNO,
ENAME,
JOB,
MGR,
HIREDATE,
SAL,
COMM,
DEPTNO
FROM hr.emp2;

Siehe auch:

  • Teilen Sie einen String in einem PL/SQL-Beispiel auf
  • Extrahieren Sie DDL-Anweisungen aus dem Oracle-DUMP (dmp-Datei)