본문 바로가기
Developer/DB

[DB] 11gR2 Data Pump, Export import와 파라미터 비교

by 순수한소년 2022. 3. 8.
728x90
반응형

출처

Datapump ?
Datapump 특징
Export import와 파라메터 비교
11g nf data pump
Datapump Scenario

The command-line clients, expdp and impdp

The DBMS_DATAPUMP PL/SQL package (also known as the Data Pump API)

The DBMS_METADATA PL/SQL package (also known as the Metadata API)

 

: 데이터펌프 클라이언트는 커맨드라인에서 입력된 parameter를 이용하여 DBMS_DATAPUMP PL/SQL package 안에 있는

프로시져들을 실행시킴.  parameter를 통하여 DB전체나 일부분의 data 혹은 meta data exporting importing 할 수 있다.

metadata들을 이관 할 때는 DBMS_METADATA PL/SQL package를 이용하게 되는데 이 패키지는 dictionary metadata를 추출하고

재생성 처리할 수 있다.

위 두 패키지는 data pump client에 의해 독립적으로 사용될 수 있다.

 

Using Data File Copying to Move Data ( TTS )

가장 빠른 방법이며 datafile copy하고 해당 datapump를 이용하여 해당 objects metadata dump file로 받는다.

 

TRANSPORT_TABLESPACES 정의 된 tablespace export한다
TRANSPORTABLE=ALWAYS

table모드로 지원하여 table parameter를 통해 table, partitions, subpartition등을 export할 수 있다.
 

 

 

Using Direct Path to Move Data

 

 

Direct I/O를 이용하여 OS영역의 메모리를 사용하지 않고 데이터파일에 바로 쓰는 방법으로 data conversion  parsing을 최소화하며

대상 table이 가능한 조건이면 자동으로 이 방법을 사용하게 된다. 아래와 같은 조건으로 direct path 방법을 사용하지 못한다면

external table방식으로 대처된다.

Using Conventional Path to Move Data

 

 

DB link를 통해 원격지의 DB로 바로 import를 할 수도 있고, 원격 DB export dump을 바로 생성할 수도 있다.

기본적으로 4가지 data access방법 중 가능 느리다. 하지만 file System의 여유공간 문제 등을 해결할 수 있다.

 

 

 

데이터펌프는 master table, master process , worker processes를 이용하여 작업을 수행하고 진행과정을 tracking한다.

 

Tracking Progress Within a Job
 

Data metadata가 이관될 때 해당 작업의 진행상황을 tracking하는 master table은 일반 테이블과 마찬가지로 DB안에 생성된다.

master table의 기능은 다음과 같다.

 

Export : db objects들의 위치를 export작업 동안 유지,관리하고 있다가 export 작업이 끝날 때 dump file에 기록한다.
Import : dumpfile 부터 load되어 target DB import작업을 해야 하는 objects들을 위한 작업 sequence작업을 한다.

 

Master table은 현재 export import를 수행하는 유저의 스키마에 생성되기 때문에 해당유저는 create table 권한이 있어야 하며

해당 tablespace에 충분한 quota가 있어야 한다. Table name은 해당 job name과 동일하게 생성된다.

그러므로 data pump job name을 지정할 때는 기존에 있는 table name과 동일하게 설정할 수 없다.

 

다음과 같은 경우 master table이 유지되거나 drop된다.

 

 Job이 성공적으로 완료되면, the master table is dropped.
 STOP_JOB interactive command, 유지되며 restarting job에 이용된다.
 KILL_JOB interactive command, dropped and the job cannot be restarted.
 예기치 못하게 job이 종료되면 master table은 유지되며 job restart할 수 있다.
 

Export import 대상을 object name이나 해당 object을 소유하고 있는 스키마로 지정할 수 있으며, the EXCLUDE and INCLUDE

parameters을 통해 object type이나 name을 지정할 수 있다. 또한 row단위의 filtering도 가능하게 되었다. 이러한 filter정보는 

master table에 존재한다.

Coordination of a Job

 

하나뿐인 master process가 모든 export import job을 생성하고 제어한다. Client와 통신하는 일뿐만 아니라, work process

 pool도 생성하며 해당 작업을 logging하는 수행한다.

 
 Transforming Metadata During a Job

 

Data Pump Import parameters: REMAP_DATAFILE, REMAP_SCHEMA, REMAP_TABLE,REMAP_TABLESPACE, TRANSFORM,

and PARTITION_OPTIONS 등을 통해 데이터 이관 시 tablespace objects owner등을 remapping할 수 있다.

 
 Maximizing Job Performance

 

Multiple worker processesparallel하게 수행시켜 job performance를 증가시킬 수 있다. PARALLEL parameter를 통해 지정할 수

있다. 이 파라메타는 작업 중 언제든지 수정될 수 있다. 보통 CPU갯구의 두배를 넘지 않도록 세팅한다.

 

 

Monitoring Job Status

 

logging mode or interactive-command mode에 상관없이 job attach 할 수 있다.

In logging mode에서는 해당job에 대한 정보들이 자동으로 제공되며In interactive-command mode에서는 따로 job status에 대한 정보를 요청해야

확인이 가능하다. 

A log file, DBA_DATAPUMP_JOBS, USER_DATAPUMP_JOBS, or DBA_DATAPUMP_SESSIONS views 에서도 DATA PUMP job에 대한

정보를 얻을 수 있다.

Monitoring the Progress of Executing Jobs

 

Data Pump operations  v$SESSION_LONGOPS에서 확인가능하며,

COMPRESSION, ENCRYPTION, ENCRYPTION_ALGORITHM, ENCRYPTION_MODE, ENCRYPTION_PASSWORD, QUERY,

REMAP_DATA, and SAMPLE parameters 등은 작업 예정시간 혹은 size 측정에 반영되지 않는다. 또한 작업 초에 위 정보를 확인하는

것을 무의미하다.

 

The V$SESSION_LONGOPS columns that are relevant to a Data Pump job are as follows:

· USERNAME - job owner
· OPNAME - job name
· TARGET_DESC - job operation
· SOFAR - megabytes transferred thus far during the job
· TOTALWORK - estimated number of megabytes in the job
· UNITS - metabytes (MB)
· MESSAGE - a formatted status message of the form:  'job_name: operation_name : nnn out of mmm MB done' 

 

Using Original Export Parameters with Data Pump
 

기존의 export parameter data pump에서는 어떻게 바뀌었는지 알아보자. 문법이나 그 효과가 같은 parameter는 다음 표에서

생략했다.

 

Original Export Parameter Action Taken by Data Pump Export Parameter
BUFFER 펌프에서는 conventional mode를 사용하지 않기 때문에 이 파라메타는 무시된다.
COMPRESS  파라메타도 무시된다. 기존의 the COMPRESS parameter 첫번째 extent를 어떻게 관리할 것인가에 대한 옵션이었으나, 펌프에서의 COMPRESSION parameters는 덤프파일 안에 data를 압축하여 넣을 것인가에 대한 옵션이다.
CONSISTENT 덤프는 현재타임과 FLASHBACK_TIME을 사용한다.
CONSTRAINTS CONSTRAINTS=n 옵션은 펌프에서 EXCLUDE=CONSTRAINTS이다.
DIRECT  파라메타는 무시된다. 펌프에서는 자동으로 최적의 방법을 선택한다.
FEEDBACK 펌프에서는 STATUS command 를 이용하여 export작업의 상태를 확인할 수 있다. 기존의 export에 있는 feedback 옵션과 완전히 같은 방식의 옵션은 아니지만 진행상태를 확인할 수 있다는 점에서는 비슷하다.
FILE 덤프에서는 해당 스키마가 쓰고 접근할 수 있는 디렉토리 오브젝트를 명시한다.
GRANTS GRANTS=n, 덤프에서 EXCLUDE=GRANT. 이다.
GRANTS=y펌프에서는 Default 로 수행하기 때문에 무시된다..
INDEXES INDEXES=n, 펌프에서 EXCLUDE=INDEX 이다.
INDEXES=y, 펌프에서는 자동으로 수행하기 때문에 무시된다.
LOG 앞에 설명했던 parameter 내용을 참조한다. 사용방식이 기존 export와는 다르다.

 

RESUMABLE 펌프에서는 the EXP_FULL_DATABASE role 이 있는 유저에게 자동으로 이 기능을 지원하므로 이 옵션은 무시된다.
OWNER 펌프에서는 SCHEMAS parameter이 사용된다.
RECORDLENGTH 펌프에서는 자동으로 버퍼사이즈를 처리하기 때문에 이 파라메타는 무시된다.
RESUMABLE_NAME 펌프에서는 the EXP_FULL_DATABASE role 이 있는 유저에게 자동으로 이 기능을 지원하므로 이 옵션은 무시된다.
RESUMABLE_TIMEOUT 펌프에서는 the EXP_FULL_DATABASE role 이 있는 유저에게 자동으로 이 기능을 지원하므로 이 옵션은 무시된다.
ROWS ROWS=y, 펌프에서는 CONTENT=ALL parameter.
ROWS=n, 펌프에서는 CONTENT=METADATA_ONLY parameter.
STATISTICS 펌프에서는 항상 수행되므로 이 옵션은 무시된다.
TABLESPACES 기존TRANSPORT_TABLESPACE=n, 펌프에서는 TABLESPACES parameter은 무시된다..
TRANSPORT_TABLESPACE=y, 덤프에서는 TRANSPORT_TABLESPACES parameter를 통해 tablespace name list를 확인한다.
TRANSPORT_TABLESPACE TRANSPORT_TABLESPACE=n (the default덤프는 TABLESPACES parameter 사용.
If original Export used TRANSPORT_TABLESPACE=y, then Data Pump Export uses the TRANSPORT_TABLESPACES parameter and only the metadata is exported.
TRIGGERS TRIGGERS=n, 덤프에서는 EXCLUDE=TRIGGER parameter.
TRIGGERS=y, 자동수행이므로 무시된다.
TTS_FULL_CHECK TTS_FULL_CHECK=y, 펌프에서는TRANSPORT_FULL_CHECK parameter.

 

 

이 옵션은 기존의 export에서 덤프파일의 위치를 tape장치에 지정하는 것인데, 펌프에서는 그 format을 지원하지 않는다.

그래서 이 옵션은 error를 출력하게 된다.

 

 

 

 

Using Original Import Parameters with Data Pump

 

기존의 import parameter data pump에서는 어떻게 바뀌었는지 알아보자. 문법이나 그 효과가 같은 parameter는 다음 표에서 생략했다.

 

Original Import Parameter Action Taken by Data Pump Import Parameter
BUFFER Export와 마찬가지로 무시된다.
CHARSET 이 파라메타는 이미 지원이 중지된 옵션이며 앞으로 사용할 계획이 없는 옵션이다. 그 옵션은 펌프에서 에러를 출력한다.
COMMIT 이 옵션도 펌프에서 자동으로 수행하므로 무시된다.
COMPILE 이 옵션도 무시된다. 프로시져는 생성된 이후에 자동 컴파일된다. 의존성문제로 컴파일되지 않는 경우도 있으니 다시 재컴파일 해줘야할 수도 있다.
CONSTRAINTS CONSTRAINTS=n, 펌프에서는 EXCLUDE=CONSTRAINT parameter.
CONSTRAINTS=y, 펌프에서 자동지원 되므로 무시된다..
ATAFILES 덤프에서는 TRANSPORT_DATAFILES parameter 대처
DESTROY DESTROY=y펌프에서는 REUSE_DATAFILES=y parameter.
DESTROY=n, 자동 처리 되는 옵션이므로 무시된다.
FEEDBACK import때도 마찬가지로 status를 사용하면 된다.
FILE export때와 마찬가지로 이용하면 된다.
FILESIZE 이미 해당정보가 dump file set안에 있기 때문에 무시된다.
FROMUSER 펌프에서는 SCHEMAS parameter를 사용한다.
GRANTS GRANTS=n , 펌프에서는 EXCLUDE=OBJECT_GRANT parameter.
IGNORE IGNORE=y, 펌프에서는 TABLE_EXISTS_ACTION=APPEND parameter.

 

Original Import Parameter Action Taken by Data Pump Import Parameter
LOG 방식은 달라졌지만 LOG parameter의 목적은 같다.
INDEXES INDEXES=n, 펌프에서는 EXCLUDE=INDEX parameter.
INDEXES=y, 펌프에서는 무시된다..
INDEXFILE 펌프에서는SQLFILE={directory-object:}filename  INCLUDE=INDEX parameters를 이용
RECORDLENGTH 펌프에서 record length에 대한 이슈는 내부적으로 처리하게 때문에 무시된다.
RESUMABLE IMP_FULL_DATABASE role이 있는 유저면 해당 parameter가 없어도 기능이 제공된다.
RESUMABLE_NAME IMP_FULL_DATABASE role이 있는 유저면 해당 parameter가 없어도 기능이 제공된다.
RESUMABLE_TIMEOUT IMP_FULL_DATABASE role이 있는 유저면 해당 parameter가 없어도 기능이 제공된다.
ROWS=N ROWS=n, 펌프에서는 CONTENT=METADATA_ONLY parameter.
ROWS=y, 펌프에서는 CONTENT=ALL parameter.
SHOW  SHOW=y 가 명시되었으면, 펌프에서는  SQLFILE=[directory_object:]file_name parameter 를 이용하여 DDL문을 특정파일로 생성한다.
STATISTICS 펌프에서는 자동으로 수행되므로 파라메타는 무시된다..
STREAMS_CONFIGURATION 펌프에서 자동을 결정하므로 무시된다. 명시해줄 필요가 없다.
STREAMS_INSTANTIATION 펌프에서 자동을 결정하므로 무시된다. 명시해줄 필요가 없다.

 

Original Import Parameter Action Taken by Data Pump Import Parameter
TABLESPACES TRANSPORT_TABLESPACE=n (the default), 펌프에서는 TABLESPACES parameter을 무시한다..
TRANSPORT_TABLESPACE=y, 펌프에서는 TRANSPORT_TABLESPACES parameter를 통해 tablespace 리스트를 확보한다.
TOID_NOVALIDATE OIDs 는 더 이상 사용가능한 datatype이 아니므로 무시된다.
TOUSER 펌프에서는 REMAP_SCHEMA parameter를 이용하고 해당 스키마가 없을 경우 생성도 한다.
TRANSPORT_TABLESPACE DATEFILE parameter를 명시했으면 TRANSPORT_TABLESPACE parameter는 무시되고 metadata를 불러와 import을 진행한다. 만약 명시되지 않았다면 ORA-39002:invalid operation 이라는 에러를 출력한다.
TTS_OWNERS 무시된다. 펌프에서는 자동으로 해동정보를 덤프파일에 저장한다.
VOLSIZE Export와 마찬가지로 펌프에서는 tape format을 지원하지 않는다..

 

Data Pump Export and Import utilities 는 기존 보다 좀 더 나은 성능향상을 위해 다음과 같은 방법들을 채택하고 있다.

여러 개의 worker process들이 data load, unload할 때 테이블과 파티션 간 병렬처리 메커니즘(inter-parallelism)을 이용하여

   multiple, parallel, direct-path streams 방식을 적용한다.

큰 사이즈의 테이블이나 파티션 테이블에서 external tables 방식을 이용하여 작업 시 하나의 work process가 파티션 내 병렬처리

   메커니즘(intra-parallelism) 을 이용할 수 있다. 병렬 쿼리 처리와 DML I/O 성능을 개선할 수 있다.

인덱스와 패키지 바디를 생성할 때 work process가 자동으로 병렬작업으로 진행한다.

덤프파일이 서버에 의해 바로 읽고 쓰여지므로 클라이언트와의 데이터 통신이 없다.

덤프파일의 저장포맷은 direct path API  internal stream format인데 이 포맷은 테이블스페이스 안의 데이터파일 포맷과 아주

   유사하다. 하여 별도의 data 변환이 없어도 된다.

지원되는 데이터 접근방법인direct path  external tables 방식이 기존의 conventional SQL보다 빠르다. direct path API 는 가장

   빠른 single-stream performance를 제공하고, external tables 은 병력 쿼리와 DML 처리에 효과적으로 이용할 수 있다.

export동안 메타데이터와 데이터 추출을 동시 진행 할 수 있다..

Controlling Resource Consumption

데이터 펌프에서는 job의 순간처리량을 극대화하고 작업시간을 최소화하기 위해서 시스템의 가용한 모든 리소스를 사용하는데 이를

지원하기 위해서는 시스템에서도 CPU, 메모리, I/O 부분이 균형 있게 충분히 지원 되야 한다. 통상적으로 시스템 성능 이슈는

DISK I/O 많이 발생하는데, 이를 방지하기 위하여 덤프파일 set에서 파일들을 다른 disk 혹은 vg으로 분리하고, 동일 시스템에서의

작업일 경우 소스, 타켓 DB(혹은 tablespace단위로)를 분리하는 것도 좋은 방법이다. 이러한 방법들을 지원하기 위한 PARALLEL

parameter Enterprise Edition of Oracle Database 11g.에서만 사용이 가능하다.

Effects of Compression and Encryption on Performance

압축과 암호화를 위한 parameters ( compression , encryption )들은 성능에 악영향을 준다. 기존의 데이터를 변환하기 위해 더 많은

CPU 자원을 소모한다.

Setting the Size Of the Buffer Cache In a Streams Environment

데이터펌프는 프로세스간의 통신을 위해 Streams 을 사용하는데, 만약 SGA_TARGET 파라메타가 설정되어 있으면

the STREAMS_POOL_SIZE initialization parameter가 적절한 값으로 자동세팅 된다. 그러나 만약 SGA_TARGET 파라메타가

설정되어 있지 않으면 the streams pool의 사이즈는 자동으로 shared pool 10%로 설정되는데, 이 때 버퍼캐쉬가 할당받은 메모리

영역을 가져다가 생성된다. 만약 SGA가 최소한의 요구치로 세팅되어 있다면 덤프 작업이 제대로 이루어지지 않을 수도 있다. 오라클에서는 덤프의 작업을 위해서는 최소한 10MB STREAMS_POOL_SIZE를 요구하고 있다.

Initialization Parameters That Affect Data Pump Performance

플랫폼에 따라 모두 적용될 수 없지만 다음과 같은 초기화 parameter들은 Data Pump  Export,  Import 성능에 많은 영향을 준다

- DISK_ASYNCH_IO=TRUE

- DB_BLOCK_CHECKING=FALSE

- DB_BLOCK_CHECKSUM=FALSE

또한 다음 파라메타들이 적절히 세팅 되어 있어야 parallelism 파라메타를 사용할 수 있다.

- PROCESSES

- SESSIONS

- PARALLEL_MAX_SERVERS

또한 SHARED_POOL_SIZE and UNDO_TABLESPACE initialization parameters 도 적절히 세팅되어 있어야 덤프 시 성능을

보장할 수 있다.

Data Pump 11g NF

- compression option = all | metadata_only | data_only | none

- Encryption option , encryption_algorithm, encryption_mode, encryption_password parameter

- Rename table : remap_table=old_table:new_table

- partition option parameter : none | departition | merge

- Reuse_dumpfiles : overwrite dump file

Data pump 사용 예제

- 환경세팅

Mkdir /oradata/datapump

Sqlplus “/as susdba

SQL> create or replace directory datapump as ‘/oradata/datapump’;

SQL> grant read,write on directory datapump to scott;

SQL> grant create any directory to scott;

-Scott 계정의 emp, dept 테이블만 백업받기

$ expdp scott/tiger tables=emp,dept directory=datapump job_name=test1 dumpfile=emp_dept

-Scott schema 전부 백업 받기

$ expdp scott/tiger schemas=scott directory=datapump dumpfile=scott01.dmp

-DB전체 백업 받기

$ expdp system/oracle full=y directory=datapump dumpfile=full01.dmp job_name=a

-병렬로 expdp 진행하기

$ expdp system/oracle full=y directory=datapump dumpfile=full01.dmp job_name=a parallel=4

 

Data pump 사용 예제

- Export 진행 중 중지하였다가 다시 시작

$ expdp system/oracle full=y directory=datapump dumpfile=full01.dmp job_name=a

< Ctrl + c > : 작업 중지

Export> status   -- job status 출력

Export> stop_job  -- job 중지

$ sqlplus “/as sysdba

SQL> select owner_name, job_name, operation, job_mode, state from dba_data_pump_jobs;

$ expdp system/oracle attach=system.a

Export> start_job

Export> Exit

SQL> select owner_name, job_name, operation, job_mode, state from dba_data_pump_jobs;

- Parfile을 이용한 expdp 수행  여러 개의 파일로 분할 expdp

vi expdp_pump.par

Userid=system/oracle

Directory=datapump

Job_name=a

Logfile=expdp.log

Dimpfile=expdp_%U.dmp

Filesize=1000m

full=y

$ expdp parfile=expdp_pump.par

Data pump 사용 예제

- Impdp 병렬 작업 하기

$ impdp system/oracle parallel=3 dumpfile= DATADIR1:full1%U.dat, DATADIR1:full2%U.dat, DATADIR1:full3%U.dat table_exists_action=append

-Import 수행하지 않고 DDL문장 만 추출하기

$ impdp system/oracle directory=datapump dumpfile=expdp_%U.dmp sqlfile=datapump.sql

-작업 예상시간 추출하기

Sqlplus “/as sysdba

Select sid, serial#, sofar, totalwork from v$session_longops where opname=‘DATAPUMP’ and sofar != totalwork;

: job name은 대문자로 한다.

728x90
반응형