[Oracle] Oracle Data Pump 유틸리티를 사용하여 스키마를 이전하는 절차
Oracle Data Pump 유틸리티를 사용하여 스키마 데이터를 이전하는 절차는 다음과 같습니다. 여기서는 데이터 내보내기(expdp)와 데이터 가져오기(impdp)를 단계별로 설명하고, 이 과정에서 필요한 점검 및 설정 항목을 함께 안내하겠습니다.
- 사전 점검 및 설정
- 데이터 내보내기 (Export)
- 데이터 가져오기 (Import)
- 사후 점검 및 설정
1. 사전 점검 및 설정(소스, 타겟 동일)
1.1. 데이터베이스 접속 정보 및 이전할 스키마 등의 정보 확인
- 사용하는 테이블 스페이스, 권한, Role, 디렉토리 객체 등에 동일해야 합니다.
- 데이터베이스 인스턴스 이름, 사용자 이름, 비밀번호, 이전할 스키마를 확인합니다.
– SID : export ORACLE_SID = orcl
– 사용자 이름: scott
– 비밀번호: tiger
– 이전할 스키마: hr
– 실제 Datapump 디렉터리 : /path/to/datapump
– Oracle 디렉터리 이름: data_pump_dir
1.2. 디렉터리 객체 생성 및 권한 부여
- Oracle Data Pump 유틸리티로 데이터를 import/export할 때 사용할 실제 디렉터리를 생성합니다.
- 디렉터리 객체를 생성 및 삭제할 수 있는 권한을 사용자에게 부여합니다.
- 데이터 파일을 저장할 파일 시스템 경로에 대한 디렉터리 객체를 생성하고 학인합니다.
- 생성한 디렉터리에 대한 읽기 및 쓰기 권한을 사용자에게 부여합니다.
$ mkdir /path/to/datapump SQL> GRANT CREATE ANY DIRECTORY TO scott; SQL> GRANT DROP ANY DIRECTORY TO scott; SQL> CREATE DIRECTORY data_pump_dir AS '/path/to/datapump'; SQL> SELECT * FROM DBA_DIRECTORIES; SQL> GRANT READ, WRITE ON DIRECTORY data_pump_dir TO scott;
1.3. 디스크 공간 확인
DBA_SEGMENTS
뷰를 통해 내보내기될 데이터의 크기를 확인합니다.SELECT TABLESPACE_NAME, SUM(bytes/1024/1024/1024) FROM DBA_SEGMENTS WHERE OWNER = 'scott' GROUP BY TABLESPACE_NAME; SELECT TABLESPACE_NAME, FILE_ID, FILE_NAME, BYTES/1024/1024/1024 AS SIZE_IN_GB, AUTOEXTENSIBLE FROM DBA_DATA_FILES WHERE TABLESPACE_NAME = '<tablespace_name>';
- 내보내기 및 가져오기 작업에 충분한 디스크 공간이 있는지 확인합니다.(소스, 타겟 동일)
$ du -s /path/to/datapump
1.4. 네트워크 연결 상태 확인
- 소스와 타겟 데이터베이스 간의 네트워크 연결 상태를 점검합니다.(타겟 호스트 예: 198.168.56.101)
2. 데이터 내보내기 (Export)
2.1. expdp 명령어를 사용하여 전체 또는 특정 스키마 데이터를 내보냅니다.
$ expdp scott/tiger [FULL=Y 또는 schemas=hr] directory=data_pump_dir dumpfile=hr_export.dmp logfile=hr_export.log include=user include=role include=grant exlude=statistics status=3 parallel=4
2.2. 데이터 내보내기 결과 확인
- 로그 파일(hr_export.log)을 검토하여 오류가 없는지 확인합니다.
$ tail -f hr_export.log 또는 해당 디렉토리의 사용량이 증가하는지 같이 확인하면 좋습니다. $ while > du -sh . > do > sleep 1 > done;
2.3. hr_export.dmp 파일을 타겟 데이터베이스의 서버로 전송합니다.
- scp 명령어를 사용하여 전송합니다.
$ scp /path/to/hr_export.dmp oracle@198.168.56.101:/path/to/datapump
3. 데이터 가져오기 (Import)
3.1. 필요한 경우 타겟 데이터베이스에서 기존 스키마를 삭제
- 기존 스키마가 존재할 경우, 해당 스키마를 삭제합니다. 삭제하기 전에 연결된 session이 없어야 합니다.
SQL> DROP USER hr CASCADE;
3.2. 테이블스페이스의 여유 공간 확보
DBA_DATA_FILES
뷰의AUTOEXTENSIBLE
컬럼 설정값이 “NO”라면 대량의 데이터를 가져오기할 때 공간부족으로 가져오기 작업이 실패할 수 있으므로 DATA FILE을 수작업으로 추가해 줍니다.(1.3 단계에서 확인한 DATA FILE의 갯수 및 크기와 비교)SQL> ALTER TABLESPACE <tablespace_name> ADD DATAFILE SIZE 20G;
3.3. impdp 명령어를 사용하여 스키마 데이터를 가져옵니다.
$ impdp scott/tiger schemas=hr directory=data_pump_dir dumpfile=hr_export.dmp logfile=hr_import.log
3.4. 데이터 가져오기 결과 확인
- 로그 파일(hr_import.log)을 검토하여 오류가 없는지 확인합니다.
$ tail -f hr_import.log
3.5. $ORACLE_HOME/rdbms/admin/utlrp.sql
유틸리티를 실행
- 의존성 문제, Import 순서 문제 등으로 Invalid된(비활성) PL/SQL 오브젝트(프로시저, 함수, 패키지, 트리거 등)를 다시 컴파일(Recompile)합니다.
SQL> @?/rdbms/admin/utlrp.sql
4. 사후 점검 및 설정
4.1. 데이터 무결성 및 일관성 점검
- 데이터가 올바르게 이전되었는지, 데이터 무결성과 일관성을 점검합니다.
- expdp 명령어를 사용할 때 FULL 옵션과 INCLUDE 옵션을 사용해도 권한 설정이 이전되지 않으면 아래 스크립트로 권한 설정를 수작업으로 수행합니다.
DEFINE V_GRANTEE = 'TGMADM'; SET HEADING OFF; SET PAGESIZE 0; SET ECHO OFF; SET FEEDBACK OFF; SET VERIFY OFF; SPOOL grant_privileges.sql; SELECT 'GRANT ' || GRANTED_ROLE || ' TO ' || GRANTEE ||';' FROM DBA_ROLE_PRIVS WHERE GRANTEE = '&V_GRANTEE'; SELECT 'GRANT ' || PRIVILEGE || ' ON ' || OWNER || '.' || TABLE_NAME || ' TO ' || GRANTEE || CASE WHEN GRANTABLE = 'YES' THEN ' WITH GRANT OPTION;' ELSE ';' END FROM DBA_TAB_PRIVS WHERE GRANTEE = '&V_GRANTEE'; SELECT 'GRANT '|| PRIVILEGE || ' TO ' || GRANTEE ||';' FROM DBA_SYS_PRIVS WHERE GRANTEE = '&V_GRANTEE'; SPOOL OFF;
- DBA_OBJECTS 뷰는 Oracle 데이터베이스에서 모든 데이터베이스 객체(테이블, 인덱스, 뷰, 프로시저, 패키지 등)를 관리하고 조회하는 데 사용됩니다. 원본 스키마의 객체 수량과 import된 스키마의 객체 수량을 비교해 봅니다.
COL OWNER FOR A15 COL OBJECT_TYPE FOR A20 COL STATUS FOR A15 SET HEAD OFF SET PAGESIZE 0 SELECT OWNER, OBJECT_TYPE, STATUS , COUNT(*) FROM DBA_OBJECTS WHERE OWNER IN ('TGMADM') GROUP BY OWNER, OBJECT_TYPE, STATUS ORDER BY 1,2,3;
4.2. 데이터베이스 통계 수집
- 성능 최적화를 위해 데이터베이스 통계를 수집합니다.
SQL> EXEC DBMS_STATS.GATHER_SCHEMA_STATS('hr');
4.3. 애플리케이션 연결 테스트
- 애플리케이션이 정상적으로 타겟 데이터베이스에 연결되고 기능이 올바르게 작동하는지 테스트합니다.
4.4. 백업 수행
- 데이터 이전 작업이 완료되고 정상적으로 확인된 후, 타겟 데이터베이스의 백업을 수행합니다.