Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment comparer deux objets de base de données dans Oracle ?

Dans ce didacticiel, je donne un exemple pour comparer deux objets de table de base de données de schémas différents à l'aide du package utilitaire DBMS_COMPARISON dans Oracle.

Étapes pour comparer deux objets de table dans Oracle à l'aide de DBMS_COMPARISON

Étape 1 Créez la comparaison à l'aide de DBMS_COMPARISON. Dans l'exemple suivant, il comparera une table du schéma SCOTT et une table du schéma HR dans la même base de données et créera une comparaison nommée 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;
/

Sortie :

PL/SQL procedure successfully completed.

Étape 2 Après avoir exécuté le bloc PL/SQL ci-dessus, la comparaison serait créée. L'étape suivante consiste à exécuter cette comparaison comme indiqué ci-dessous.

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

Sortie :

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

Étape 3 Si des différences sont trouvées, vous pouvez vérifier les différences à l'aide de la requête suivante :

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

Sortie :

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

Vous obtiendrez la sortie comme indiqué ci-dessus. Dans lequel il vous montrera le nom de la comparaison, l'identifiant de la ligne locale (identifiant de la ligne de la table scott.emp), l'identifiant de la ligne distante (identifiant de la ligne de la table hr.emp2) et le statut.

Vous pouvez maintenant interroger les deux tables pour ces ROWID afin de vérifier les différences.

Vous pouvez également comparer les données des deux tables des différents schémas à l'aide de la requête SQL, comme illustré dans l'exemple ci-dessous.

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;

Voir aussi :

  • Fractionner une chaîne dans un exemple PL/SQL
  • Extraire les instructions DDL du DUMP Oracle (fichier dmp)