TTS 구조와 조건
TTS 검사 집합, 메타데이터, 데이터 파일 대응이며 검사 대상 불일치와 전체 이행 결과는 확인 불가
#핵심 요약
TTS는 메타데이터 덤프와 실제 데이터 파일을 함께 옮기는 방식으로 수업 자료에 설명되어 있음
이동 집합의 Self-contained 검사, 소스 READ ONLY, 문자셋, 플랫폼, Endian 호환성 확인이 필요함
시퀀스, 프로시저, 함수, 뷰는 TTS만으로 이전되지 않는다고 수업 자료가 구분함
#개념과 동작 원리
| 구간 | 실습의 설명 |
|---|---|
| 이동 전 | DBMS_TTS.TRANSPORT_SET_CHECK 후 TRANSPORT_SET_VIOLATIONS에서 위반 확인 |
| 집합 경계 | 테이블, 인덱스, 외래키 참조가 이동 집합 밖에 걸치는지 확인 |
| 변경 차단 | 소스 테이블스페이스를 READ ONLY로 바꾸고 데이터 파일 복사 중 변경을 막음 |
| 기존 도구 | exp의 TRANSPORT_TABLESPACE와 TABLESPACES로 메타데이터 Export, imp의 DATAFILES로 복사 파일 지정 |
| Data Pump | expdp의 TRANSPORT_TABLESPACES, impdp의 TRANSPORT_DATAFILES 사용 |
| 타깃 준비 | 객체 소유 사용자와 파일 접근 권한, Data Pump라면 DIRECTORY, 실제 OS 경로 준비 |
| 사후 확인 | 타깃 READ WRITE, 데이터 파일 등록, 테이블, 인덱스, 제약조건 확인, 사용자 기본 저장 위치, Quota 설정 |
실습의 「불일치 시」에는 READ WRITE 전환 후 테이블 MOVE와 인덱스 REBUILD로 저장 위치를 옮기는 명령이 있음(확인 불가)
어떤 위반을 해결했는지와 재검사 출력은 기재 없음
#주요 용어와 구성 요소
| 구문 | 의미 |
|---|---|
| ts_list | 실제로 이동할 테이블스페이스 이름들을 쉼표로 나열하는 검사 집합임 |
| incl_constraints | 참조 무결성 제약을 검사에 포함할지 지정하며 기본값은 FALSE임 |
| full_check | TRUE는 들어오는 의존성과 나가는 의존성을 함께 검사하며 기본 FALSE와 구분함 |
#필수 명령어 또는 SQL
| 항목 | 실행 조건 |
|---|---|
| 작업 대상 | 이동 집합의 문자셋, 플랫폼, 의존성, 메타데이터 덤프, 데이터 파일과 타깃 등록 |
| 필요 권한 | 검사는 SYSDBA 예시, TTS Export는 전체 Export 역할, Import는 해당 전체 Import 역할과 DIRECTORY, 파일 접근 권한 필요 |
| 바꿀 입력값 | <TS_NAME> 목록, <USERNAME>, 파일별 경로, <TARGET_HOST> |
| 결과 해석 | 위반이 없는 의존성 검사와 문자셋, 플랫폼 호환성 통과는 별개이며 실습 전체 이동 완료 출력은 기재 없음 |
#호환성과 이동 집합 확인 (양쪽)
SELECT property_name, property_value
FROM database_properties
WHERE property_name IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');
SELECT d.platform_name, t.endian_format
FROM v$database d, v$transportable_platform t
WHERE d.platform_name = t.platform_name;
EXEC DBMS_TTS.TRANSPORT_SET_CHECK('<TS_NAME>', TRUE);
SELECT * FROM transport_set_violations;결과 해석: 두 DB의 문자셋과 Endian이 같고 TRANSPORT_SET_VIOLATIONS가 비어 있을 때 진행함
문자셋이 다르면 문자셋 호환성에서 다른 방법을 검토함
#Data Pump로 옮기기
CREATE DIRECTORY dpump AS '/home/oracle/dpump';
GRANT READ, WRITE ON DIRECTORY dpump TO <USERNAME>;
ALTER TABLESPACE <TS_NAME> READ ONLY;expdp directory=dpump dumpfile=<TS_NAME>_tts.dmp transport_tablespaces=<TS_NAME>
scp /home/oracle/dpump/<TS_NAME>_tts.dmp oracle@<TARGET_HOST>:/home/oracle/
scp <SOURCE_DATA_DIR>/<TS_NAME>.dbf oracle@<TARGET_HOST>:<TARGET_DATA_DIR>/CREATE DIRECTORY dpump AS '/home/oracle/dpump';
CREATE USER <USERNAME> IDENTIFIED BY <PASSWORD>;
GRANT CREATE SESSION, CONNECT, RESOURCE TO <USERNAME>;
GRANT READ, WRITE ON DIRECTORY dpump TO <USERNAME>;mv /home/oracle/<TS_NAME>_tts.dmp /home/oracle/dpump/
impdp directory=dpump dumpfile=<TS_NAME>_tts.dmp \
transport_datafiles='<TARGET_DATA_DIR>/<TS_NAME>.dbf'ALTER TABLESPACE <TS_NAME> READ WRITE;
ALTER USER <USERNAME> DEFAULT TABLESPACE <TS_NAME>;
ALTER USER <USERNAME> QUOTA UNLIMITED ON <TS_NAME>;
SELECT tablespace_name, file_name FROM dba_data_files;결과 해석:
순서는 READ ONLY → 메타데이터 Export → 덤프와 데이터 파일 복사 → 타깃에 객체 소유 계정 준비 → TRANSPORT_DATAFILES로 Import → 타깃 READ WRITE → 계정 기본 테이블스페이스와 Quota
타깃에는 객체를 소유할 계정이 먼저 있어야 하고, 같은 이름의 테이블스페이스가 이미 있으면 붙일 수 없음
소스를 다시 READ WRITE로 돌릴지는 업무에 따라 정하며, 수업 자료도 백업용으로 보내는 경우가 아니면 필요한지 의문으로 남겼음
타깃 계정 생성 키워드는 IDENTIFIED임
#구문과 옵션 설명
본문의 TRANSPORT_SET_CHECK 두 번째 TRUE는 incl_constraints이며 full_check=TRUE를 지정한 호출이 아님
TRANSPORT_TABLESPACES는 메타데이터를 내보내고 TRANSPORT_DATAFILES는 복사된 데이터 파일을 지정함
검사 집합, READ ONLY 대상, Export 목록, 실제 파일 목록이 일치해야 함
#사용 조건과 주의사항
DUMP 설명 첫 줄의 데이터 파일 확장자와 실제 명령의 확장자가 다름
실제 파일은 DBA_DATA_FILES의 경로로 확인하는 대상으로 정리함
실습 Export, Import의 실제 실행 계정은 확인 불가이며 필요한 권한은 단계별로 구분함
READ ONLY 구간은 서비스 쓰기를 막을 수 있으며 실습에서는 중단 시간에 영향을 줄 수 있다고 설명함
Endian이 다를 때 변환이 필요하다는 설명은 있으나 변환 작업과 결과는 기재 없음
TTS Export에는 DATAPUMP_EXP_FULL_DATABASE 역할과 이동 집합 전체의 READ ONLY 상태가 필요함
작업 계정의 기본 테이블스페이스는 이동 집합 밖의 쓰기 가능한 공간이어야 함
DBMS_TTS 검사는 EXECUTE_CATALOG_ROLE 조건을 적용하고, Import 계정, DIRECTORY, 대상 파일 접근 권한을 별도로 확인함