sql >> Database >  >> RDS >> Oracle

Hoe twee database-objecten in Oracle te vergelijken?

In deze zelfstudie geef ik een voorbeeld om twee databasetabelobjecten met verschillende schema's te vergelijken met behulp van het hulpprogramma DBMS_COMPARISON in Oracle.

Stappen om twee tabelobjecten in Oracle te vergelijken met DBMS_COMPARISON

Stap-1 Maak de vergelijking met DBMS_COMPARISON. In het volgende voorbeeld vergelijkt het de ene tabel uit het SCOTT-schema en één tabel uit het HR-schema in dezelfde database en maakt het een vergelijking met de naam 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;
/

Uitvoer:

PL/SQL procedure successfully completed.

Stap-2 Na het uitvoeren van het bovenstaande PL/SQL-blok, zou de vergelijking worden gemaakt. De volgende stap is om deze vergelijking uit te voeren zoals hieronder weergegeven.

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;
/

Uitvoer:

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

Stap-3 Als er verschillen zijn gevonden, kunt u de verschillen controleren met de volgende zoekopdracht:

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

Uitvoer:

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

U krijgt de uitvoer zoals hierboven weergegeven. Waarin het u de vergelijkingsnaam, de lokale rij-id (scott.emp tabelrij-id), de externe rij-id (hr.emp2 tabelrij-id) en de status laat zien.

Nu kunt u beide tabellen voor deze ROWID's opvragen om de verschillen te controleren.

U kunt ook de gegevens van de twee tabellen uit het verschillende schema vergelijken met behulp van de SQL-query, zoals weergegeven in het onderstaande voorbeeld.

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;

Zie ook:

  • Een string splitsen in PL/SQL-voorbeeld
  • Extract DDL-statements uit de Oracle DUMP (dmp-bestand)
  1. Kolomtelling komt niet overeen met waardetelling in rij 1

  2. Verleen privileges voor een bepaalde database in PostgreSQL

  3. 2 manieren om een ​​database op een gekoppelde server te maken met behulp van T-SQL

  4. Fouten:INSERT EXEC-instructie kan niet worden genest. en Kan de ROLLBACK-instructie niet gebruiken in een INSERT-EXEC-instructie. Hoe dit op te lossen?