본문 바로가기
Dev/Oracle

[Oracle] datapump expdp 시점 맞추기

by 흰바다제비 2022. 9. 6.
728x90

expdp로 데이터를 내보낼 때, 데이터의 크기가 크면 오랜 시간이 소요된다. 시작하고 끝나기 까지의 시간이 1시간이라고 할 때, 그동안 데이터에 변화가 생긴다면 어떻게 반영이 될까? 일관되게 고정할 수 있을까? 찾아본 결과 다음과 같다.

 

기본적으로 expdp 유틸리티로 export를 하게 되면 테이블별로만 일관성이 있다. export 하는 모든 테이블이 동일한 시점으로 일관되게 하려면 FLASHBACK_SCN 또는 FLASHBACK_TIME 매개변수를 사용해야 한다.

 

FLASHBACK_TIME 매개변수 값은 지정된 시간 동안 대략적인 SCN으로 변환된다.

expdp ..... flashback_time=systimestamp

# In parameter file.
flashback_time="to_timestamp('09-05-2011 09:00:00', 'DD-MM-YYYY HH24:MI:SS')"

# Escaped on command line.
expdp ..... flashback_time=\"to_timestamp\(\'09-05-2011 09:00:00\', \'DD-MM-YYYY HH24:MI:SS\'\)\"

 

당연하게도 export 작업 중에 데이터의 일관된 read view를 유지하기에 충분한 UNDO 공간이 있는 경우,

이전 시간 또는 SCN을 지정하여 export를 이전 시점과 일관되게 만들 수 있다.

SCN을 사용하려는 경우 다음 쿼리 중 하나를 사용하여 현재 SCN을 검색할 수 있다.

SELECT current_scn FROM v$database;
SELECT DBMS_FLASHBACK.get_system_change_number FROM dual;
SELECT TIMESTAMP_TO_SCN(SYSTIMESTAMP) FROM dual;

 

위 쿼리의 결과로 나온 SCN 값을 다음과 같이 FLASHBACK_SCN 파라미터로 넣어준다.

expdp ..... flashback_scn=5474280

 

다음 쿼리를 이용하여 타임스탬프를 SCN로, SCN를 타임스탬프로 변환할 수 있다.

SELECT TIMESTAMP_TO_SCN(SYSTIMESTAMP) FROM dual;
SELECT SCN_TO_TIMESTAMP(5474751) FROM dual;

 

이와 같이 expdp 실행시 FLASHBACK_SCN 또는 FLASHBACK_TIME 옵션을 주어 시점을 일치시킬 수 있다.

 


참고

 

Oracle Data Pump (expdp, impdp) in Oracle Database 10g, 11g, 12c, 18c, 19c, 21c

Test drive the Oracle 10g replacement for the EXP and IMP utilities.

oracle-base.com

 

728x90

댓글