I den här handledningen ger jag ett exempel för att jämföra två databastabellobjekt med olika scheman med hjälp av verktygspaketet DBMS_COMPARISON i Oracle.
Steg för att jämföra två tabellobjekt i Oracle med DBMS_COMPARISON
Steg-1 Skapa jämförelsen med DBMS_COMPARISON. I följande exempel jämför den en tabell från SCOTT-schemat och en tabell från HR-schemat i samma databas och skapar en jämförelse med namnet 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; /
Utdata:
PL/SQL procedure successfully completed.
Steg-2 Efter exekvering av ovanstående PL/SQL-block skulle jämförelsen skapas. Nästa steg är att köra den här jämförelsen som visas nedan.
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; /
Utdata:
Differences found and scan_id is 7 PL/SQL procedure successfully completed.
Steg-3 Om skillnader hittas kan du kontrollera skillnaderna med följande fråga:
SELECT comparison_name, local_rowid, remote_rowid, status FROM user_comparison_row_dif WHERE comparison_name = 'EMP_COMPARE';
Utdata:
COMPARISON_NAME LOCAL_ROWID REMOTE_ROWID STATUS EMP_COMPARE AAAR3sAAEAAAACXAAA AAAU5vAAEAAAAW9AAA DIF EMP_COMPARE AAAR3sAAEAAAACXAAD AAAU5vAAEAAAAW9AAD DIF
Du kommer att få utdata som visas ovan. Där visas jämförelsenamnet, lokalt rad-id (scott.emp-tabellrad-id), fjärrrad-id (hr.emp2-tabellrad-id) och status.
Nu kan du fråga båda tabellerna för dessa ROWIDs för att kontrollera skillnaderna.
Du kan också jämföra de två tabelldata från de olika schemana med hjälp av SQL-frågan, som visas i exemplet nedan.
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;
Se även:
- Dela en sträng i PL/SQL-exempel
- Extrahera DDL-utlåtanden från Oracle DUMP (dmp-fil)