Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como comparar dois objetos de banco de dados no Oracle?


Neste tutorial, estou dando um exemplo para comparar dois objetos de tabela de banco de dados de esquemas diferentes usando o pacote utilitário DBMS_COMPARISON no Oracle.

Etapas para comparar dois objetos de tabela no Oracle usando DBMS_COMPARISON


Etapa 1 Crie a comparação usando DBMS_COMPARISON. No exemplo a seguir, ele comparará uma tabela do esquema SCOTT e uma tabela do esquema HR no mesmo banco de dados e criará uma comparação chamada 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;
/

Saída:

PL/SQL procedure successfully completed.

Etapa 2 Após executar o bloco PL/SQL acima, a comparação seria criada. A próxima etapa é executar essa comparação conforme mostrado abaixo.
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;
/

Saída:

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

Etapa 3 Se forem encontradas diferenças, você poderá verificar as diferenças pela seguinte consulta:
SELECT comparison_name,
local_rowid,
remote_rowid,
status
FROM user_comparison_row_dif
WHERE comparison_name = 'EMP_COMPARE';

Saída:

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

Você obterá a saída como mostrado acima. No qual ele mostrará o nome da comparação, o id da linha local (id da linha da tabela scott.emp), o id da linha remota (id da linha da tabela hr.emp2) e o status.

Agora você pode consultar ambas as tabelas desses ROWIDs para verificar as diferenças.

Você também pode comparar os dados das duas tabelas do esquema diferente usando a consulta SQL, conforme mostrado no exemplo abaixo.
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;

Veja também:

  • Dividir uma string no exemplo PL/SQL
  • Extrair instruções DDL do Oracle DUMP (arquivo dmp)