Oracle/pump

pump

pbj1102 2022. 1. 28. 10:21
반응형

///////////////////////////////////////////////////////////
  오라클 백업/복구 ( export, import )
///////////////////////////////////////////////////////////

analyze table document compute statistics


export/import  수행속도 느림
data pump  수행속도 빠름

 

 

# export 방식

 1. Conventional Path export
  - DB Buffer cache 에서 필요한 데이터를 Evaluation Buffer 복사 후 데이터 가공 데이터 저장
   ( text -> binary ) 
                * export 시 발생되는 DDL, DML 등의 명령은 백업파일에 반영되지 않음


 2. Dircect Path export 
  - DB Buffer Cache 에서 데이터 가공 ( text -> binary )
    * 백업 대상이 되는 테이블스페이스, 테이블에 lock 발생
     => DDL, DML 작업은 실패, 보류

 

export 옵션
Keyword    Description (Default)      Keyword      Description (Default)
--------------------------------------------------------------------------
USERID     username/password          FULL         export entire file (N)
BUFFER     size of data buffer        OWNER        list of owner usernames
FILE       output files (EXPDAT.DMP)  TABLES       list of table names
COMPRESS   import into one extent (Y) RECORDLENGTH length of IO record
GRANTS     export grants (Y)          INCTYPE      incremental export type
INDEXES    export indexes (Y)         RECORD       track incr. export (Y)
DIRECT     direct path (N)            TRIGGERS     export triggers (Y)
LOG        log file of screen output  STATISTICS   analyze objects (ESTIMATE)
ROWS       export data rows (Y)       PARFILE      parameter filename
CONSISTENT cross-table consistency(N) CONSTRAINTS  export constraints (Y)


 - buffer : Evaluation Buffer 크기지정 ( 용량이 클 수록 export 작업이 빨라짐 ) 
 - file   : export 결과 저장할 파일명
 - owner  : export 받을 사용자 이름
        - tables : export 받을 테이블 이름
        - talbespace : export 받을 테이블스페이스 이름
        - pathfile : export 옵션을 미리 지정한 파라미터 파일지정


import 옵션
Keyword  Description (Default)       Keyword      Description (Default)
--------------------------------------------------------------------------
USERID   username/password           FULL         import entire file (N)
BUFFER   size of data buffer         FROMUSER     list of owner usernames
FILE     input files (EXPDAT.DMP)    TOUSER       list of usernames
SHOW     just list file contents (N) TABLES       list of table names
IGNORE   ignore create errors (N)    RECORDLENGTH length of IO record
GRANTS   import grants (Y)           INCTYPE      incremental import type
INDEXES  import indexes (Y)          COMMIT       commit array insert (N)
ROWS     import data rows (Y)        PARFILE      parameter filename
LOG      log file of screen output   CONSTRAINTS  import constraints (Y)

 show : 데이터를 import 하지 않고 내용만 확인
 fromuser : export 할 당시의 object의 소유자 지정
 touser : imprt 할 object 의 새 소유자 지정


////////////////////////////////////////////////////////////////////
  TEST
///////////////////////////////////////////////////////////////////

 exp system/oracle full=y file=/home/oracle/export/full.dmp
 exp system/oracle tables=hash_pt file='/home/oracle/export/table_01.dmp','/home/oracle/export/table_02.dmp' filesize=1m
 exp system/oracle file=/home/oracle/export/own_scott_pm.dmp owner=scott, pm

cat par_scott.dat 
file=/home/oracle/export/par_scott.dmp
direct=y
owner=scott
  exp system/oracle parfile=par_scott.dat


 

 


imp system/oracle file='/home/oracle/export/table_01.dmp' fromuser=system touser=scott
imp system/oracle file=/home/oracle/export/own_scott_pm.dmp show=y log=emptest.log


*  모든 유저 확인
select username from dba_users;


///// 주의사항
1) export 한 서버와 동일한 tablespace 생성
2) 충분한 크기위 temporary tablespace 확인
3) export 한 서버와 동일한 사용자 생성

 





 

/////////////////////////////////////////////////////////////////////
   Data pump 
/////////////////////////////////////////////////////////////////////

exp/imp 보다 빠름. 10g 부터 생김


# 템프시 디렉토리를 알아야함 ( 펌프시 파일 떨어지는 경로 볼수 있음)
select * from dba_directories

# 디렉토리 추가 및 삭제 
create directory test_dpump as '/home/oracle/dpdump';
drop directory test_dpump_2;

#사용자가 directory를 사용해야하므로 read, write 권한을 설정
grant read, write on directory test_dpump to scott;


부여된 권환 확인 ( 부여한 계정 로그인 후 )
select * from user_tab_privs_recd;
select * from user_tab_privs_made;

 

expdp system/oracle directory=test_dpump tables=system.hash_pt dumpfile=hash_160108.dmp logfile=160108_expdp.log


expdp system/oracle directory=test_dpump dumpfile=full.dmp logfile=full_expdp.log
expdp system/oracle directory=test_dpump dumpfile=scott.dmp logfile=scott_expdp.log schemas=scott
expdp system/oracle directory=test_dpump dumpfile=system_hash_pt.dmp logfile=system_hash_pt.log tables=hash_pt
expdp system/oracle directory=test_dpump dumpfile=system_ts.dmp logfile=tbs_ts.log tablespaces=tbs_a,tbs_b,tbs_c,tbs_d 

 

impdp system/oracle directory=test_dpump dumpfile=full.dmp logfile=full_impdp.log
impdp system/oracle directory=test_dpump dumpfile=scott.dmp logfile=scott_impdp.log schemas=scott
impdp system/oracle directory=test_dpump dumpfile=system_hash_pt.dmp logfile=system_hash_pt_impdb.log tables=hash_pt
impdp system/oracle directory=test_dpump dumpfile=system_ts.dmp logfile=tbs_ts_impdp.log tablespaces=tbs_a,tbs_b,tbs_c,tbs_d 


# A유저로 expdp 받은 테이블을 B유저로 impdp 할때 사용
impdp system/oracle directory=TEST_DPUMP dumpfile=scott.dmp logfile=scott_imp.log schemas=scott include=table:\"\=\'hash_pt\'\" remap_schema=scott:test

계정분리 및 테이블 스페이스 분리하여 받기.
impdp system/fkqpsej directory=DATA_PUMP_DIR DUMPFILE=sias.dmp LOGFILE=sias_imp.log 
REMAP_SCHEMA=SIAS:SIAS_TEST 
REMAP_TABLESPACE=SIAS_DAT:SIAS_TEST_DAT,
SIAS_IDX:SIAS_TEST_IDX,
USERS:SIAS_TEST_IDX

 

 
impdp system/oracle directory=DATA_PUMP_DIR dumpfile=tc_user_table.dmp logfile=tc_user_imp.log tables=TC_USER.TCTB_HB_B2B_HPYCON_ISSUE_INFO, TC_USER.TCTB_HM_GIFT_ISU

 

상태확인
select * from dba_datapump_jobs;

expdp system/pw attach=job_name;
help

impdp system/pw attach=job_name;

 

 
스키마만 덤프 (CONTENT=METADATA_ONLY)
- content: 작업시 어떤 내용을 포함시킬 것인가를 결정
     All :테이블과 메타데이터를 모함한 모든것
     DATA_only:테이블 데이터만 포함 
     Metadata_only:메타데이터만 포함

expdp system/Akdntmls directory=DATA_PUMP_DIR LOGFILE=JH_META.log DUMPFILE=JH_META.dmp CONTENT=METADATA_ONLY schemas=JH
impdp system/Akdntm!23 directory=DATA_PUMP_DIR LOGFILE=IMP_JH_META.log DUMPFILE=JH_META.dmp remap_schema = JH:PBJ 





////////////////////////////////////////////////////////////////////////
exp/imp 차이

1. 빠름. => Direct path method loading 사용하기 때문 
 1) 일반적인 conventional path load 
 
 sql의 INSERT command를 이용하여 insert 
 sql command 를 이용하기 때문에 데이터를 위한 insert command가 생성되어
 parsing 되는 과정이 필요하며, 먼저 bind array buffer(data block buffer) 내에
 insert 되는 데이타를 입력시킨 후 disk에 write 됨

 2) Direct path load 수행원리
 
 - sql insert 문장을 generate 하여 수행하지 않음
 - memory 의 bind array buffer 를 사용하지 않고, database block의 format 과 같은
   data block를 memory에 만들어 데이타를 넣은 후 그대로 disk 에 write 함
 - load 시 table 에 lock 걸고 load 가 끝나면 release 시킴
 - table HWM(High Water Mark : 고순위) 부분 block 에 data를 load 함
      * HWM 을 사용하는 이유 : Truncate 명령어 외에는 크기가 줄어들지 않으므로
        항상 빈 새로운 block 를 할당받아 data를 입력할수 있다.
 - instance failure 발생하여도 redo log file 생성되지 않음
 - UNDO information을 발생시키지 않음 => rollback segment 를 사용하지 않는다.
 - OS 에서 asynchronous I/O 가 가능하다면, 복수개의 buffer 에 의해 동시에 
   data를 읽어서 buffer에 write하면서 buffer 에서 disk 로 write 할 수 있다
 - parallel option 을 이용하면 더욱 성능을 향상 시킬 수 있음

2. 버전에 상관없이 사용 가능 ( 10g 이상 )
 조건 
 data pump 로 하위 호환성을 가지게 덤프를 뜨려면
 (스키마를 다른이름의 스키마로 다른 테이블 스페이스에)
 예시 :
 expdp test/test@SID schemas=TEST dumpfile=TEST.dmp VERSION=10.2
 impdp test/test schemas=TEST directory=data_pump_dir dumpfile=TEST.dmp
 REMAP_SCHEMA=test:test1 REMAP_TABLESPACE=test:test1 

 

//////////////////////////////////////////////

 1. Paraller full data pump

expdp system/oracle full=y parallel=4 dumpfile=TEST_DPUMP:full1%U.dat, TEST_DPUMP_2:full%U.dat filesize=100M

-rw-r----- 1 oracle oinstall  47M Jan 11 16:20 full01.dat
-rw-r----- 1 oracle oinstall  55M Jan 11 16:20 full02.dat
-rw-r----- 1 oracle oinstall  31M Jan 11 16:20 full101.dat
-rw-r----- 1 oracle oinstall  25M Jan 11 16:20 full102.dat

 
 4개의 work process 를 가진 full export,
 pump file 은 test_dpump, test_dpump_2 두곳에 라운드로빈 방식으로 생성
 100M 넘지 않으면서 최소 4개의 파일 생성
 job, MT(master table)은 default 로 system_expport_full_01 를 가짐

 

/// impdp
impdp system/oracle directory=IMPDP_TEST parallel=4 dumpfile=full01.dat, full02.dat, full101.dat, full102.dat


 IMPDP_TEST 라는 directory_object 에 impdp
 Default import 는 dump set 전체를 import 하는 것이므로 full=y 는 생략

 

 


2. limit schema export ( fine-grained )

expdp system/oracle schemas = hr,oe directory=TEST_DPUMP dumpfile=schema_hr_oe.dat parfile=exp_par.txt

 HR, OE schema 에서 모든 fuc,prod,pkg,type, product 로 시작하는 view 를 export
 schema definition, system priv graints export 하지 않음


[oracle@DBTEST dpdump]$ cat exp_par.txt
include=function
include=procedure
include=pacakge
include=type
include=view:"like 'PRODUCT%'"

[oracle@DBTEST dpdump]$ ll schema_hr_oe.dat 
-rw-r----- 1 oracle oinstall 212992 Jan 11 16:48 schema_hr_oe.dat

 

impdp system/oracle directory=TEST_DPUMP dumpfile=schema_hr_oe.dat sqlfile=schema_hr_oe.dat










------------------------------------------------------------------------------------------------



※ Data Pump 

- Data 접근 방법
·Direct path
·External table
- LOB column 에 Domain index 존재
- Cluster table 존재
- active trigger 가 있는 테이블
- Global index 가 있는 파티션 테이블
- BFILE 또는 opaque type 칼럼
- Referential integrity constraint 가 있는 테이블
=> 위의 접근 방법은 Data Pump 가 자동으로 선택함.

- 진행중인 job 에 detach 와 reattach 기능
·진행되는 Data Pump 가 job 에 영향을 주지 않음.

- Data Pump job 재실행 기능

- Fine-grained object selection
·EXCLUDE, INCLUDE, CONNECT Parameter 사용

- Explicit database version specification
·9i 부터 제공하던 export & import 와의 호환

- Parallel 실행 (EE 만 가능)
·여러개의 thread 를 띄어 좀더 효율적으로 일 처리

- export job 공간 사용을 추정 가능

- 분산환경에서 Network 모드 이용
·remote database 로 부터 바로 dump file set 에 export 하는데 사용될 수 있다. 
·source database (원본 데이터베이스) 로 부터 target database(대상 데이터베이스) 에 바로 data load 가능

- import 중에 remap 가능
·오브젝트 metadata는 dump file set에 XML로 저장되기 때문에 import 하는 동안에 전환을 적용하는 것이 쉬움




※ Data Pump File

- 세가지 타입이 있음
·Dump file : Data 와 metadata를 포함하는 덤프 파일.
·Log file : 작업 수행에 관련한 message 를 저장하는 파일.
·SQL file : SQL_FILE parameter 를 사용하여 생긴 output 파일.

* Oracle Direcotory 오브젝트를 생성해야함. (보안 차원에서 절대경로를 지원하지 않음)
=> DBA_DIRECTORIES <<


※ Data Pump File Naming 과 Size

- dump file set 은 하나 이상의 파일을 포함 가능
- DUMPFILE 결정
·콤마 로 구분된 파일 리스트
·%U template

- dump file 의 초기 갯수는 다음 파라미터와 연관:
·PARALLEL 파라미터
·DUMPFILE 파라미터
- FILESIZE 파라미터는 각 dump file 의 싸이즈 결정
- 이미존재하는 파일을 overwrite 하지 않음.


* 파일이름 %U 
-> 여러 개의 파일이 만들어짐을 의미함
-> 01 부터 시작하여 두개의 문자로 만들어짐
-> DUMPFILE을 명시하지 않으면 default 로 expdat.dmp 로 생성됨
-> %U 명시하지 않으면, 초기의 PARALLEL 파라미터와 동일한 수로 파일이 생성됨



※ Data Pump : 인터페이스와 모드

- Data Pump Export , Import 인터페이스
·Command-line
·Parameter 파일
·Interactive command-line
-> Export 수행 중 CTRL+C 가능. 
-> 실행중이거나, 중단된 JOB 에 attach 할때 활성화됨.


- Data Pump Export, Import 모드
·Full
·Schema
·Table
·Tablespace
·Transportable tablespace




※ Data Pump 권한

EXP_FULL_DATABASE
IMP_FULL_DATABASE



 



expdp 파라미터
 Parameter   의미
 directory   백업받는 디렉토리 이름지정 (오라클에서생성한 directory), 경로는 쓰지 않음
 dumpfile    파일 시스템에 저장될 덤프파일의 이름 지정, 역시 경로는 쓰지 않음
  파일이 여러개로 나누어질때 %U를 사용해 자동으로 증가(01~99)
 filesize expdp 받을 때 한 개 파일의 최대 크기 
 parfile 각종 파라미터들을 파일에 저장해놓고 expdp 작업할 때 참조해서 사용
  파일은 .par

 logfile/nologfile  expdp 작업 내용 저장할 로그파일 지정, 지정하고 싶지 않으면 nologfile
 
 exclude  원하는 오브젝트만 선택해서 작업, exclude=object_name:조건
 include  원하는 오브젝트만 선택해서 작업, include=object_name:조건
 query  특정 조건에 맞는 데이터만 expdp
 job_name  expdp 작업을 수행할 때 해당 job에 이름 설정
 parallel 프로세스를 몇개 사용할 것인가를 지정, 속도 upup!
  지정된 개수만큼 데이터 파일을 만들어줘야함
 attatch  일시 중당된 작업에 다시 접속할 때 사용
  add_file :덤프파일 추가
  exit: job 작업에서 빠져나감
  parallel: 현재 작업중인 프로세스 개수 조정
  status: 현재 작업 상태를 모니터링 하는 갱신 시간 지정
  kill_job: 해당 작업 완전히 삭제, 이게 작동 안하면 job_name의 테이블을 drop 해야함
  start_job: 중단된 작업 다시 시작
  stop_job: 현재 작업 일시 중단
 


impdp 파라미터
 Parameter   의미
 include  원하는 오브젝트만 선택해서 작업, include=object_name:조건
 exclude        특정 테이블만 빼고 전부다 impdp할 때 사용, 방법은 include와 동일
 table_exists_action (impdp에만 있는 옵션)
  동일한 이름의 테이블이 존재할 때 테이블의 데이터를 어떻게 할 것이 지정

  skip: 같은 테이블을 만나면 건너뛰고, 다음 테이블 impdp
  append: 같은 테이블이 있으면 기존 내용에 데이터 추가 = 기본값
  truncate: 기존테이블 truncate하고 새로 impdp
  drop: 기존테이블 drop 테이블 새로 만들어서 새로운 내용 impdp

 remap_schema
  예) remap_schema=scott:hr --> scott으로 받은 스키마를 hr로 
 

 remap_tablespace
  예) remap_tablespace=users:example
 
 TRANSFORM
해당 객체에 적용할 메타 데이터 변환
적합한 변환 키워드 : OID, PCTSPACE, SEGMENT_ATTRIBUTES ,STORAGE.



---------------------------------------------------------
예제



parfile=time.par
cat time.par
FLASHBACK_TIME="TO_TIMESTAMP('2016-10-12 00:00:00,'YYYY-MM-DD HH24:MI:SS')"



1) parallel 사용하여 expdp ( Command-line 인터페이스 )

expdp system/oracle parallel=4 directory=TEST_DPUMP dumpfile=exp%U.dat



select * from dba_directories;
SYS                            TEST_DPUMP
/home/oracle/dpdump


[oracle@DBTEST dpdump]$ pwd
/home/oracle/dpdump

[oracle@DBTEST dpdump]$ ll -al exp0*
-rw-r----- 1 oracle oinstall  524288 Feb 12 13:32 exp01.dat
-rw-r----- 1 oracle oinstall 5115904 Feb 12 13:32 exp02.dat
-rw-r----- 1 oracle oinstall 2224128 Feb 12 13:32 exp03.dat





2) parallel 사용하여 두곳에 덤프파일 생성, full 


expdp system/oracle full=y parallel=4 dumpfile=TEST_DPUMP:full_1%U.dat, TEST_DPUMP_2:full_2%U.dat filesize=2G




SYS                            TEST_DPUMP_2
/home/oracle/dpdump


SYS                            TEST_DPUMP
/home/oracle/dpdump





3) INCLUDE, EXCLUDE 사용하여 expdp 사용

EXCLUDE : 제외   INCLUDE : 포함

expdp system/oracle directory=TEST_DPUMP EXCLUDE=VIEW,PACKAGE dumpfile=exp_exclude%U.dmp

[oracle@DBTEST dpdump]$ ll exp_exclude01.dmp 
-rw-r----- 1 oracle oinstall 7819264 Feb 12 13:54 exp_exclude01.dmp



expdp system/oracle directory=TEST_DPUMP INCLUDE=VIEW,PACKAGE dumpfile=exp_include%U.dmp








11.2.0.2 부터 가능 



expdp system/Akdntm\!23 directory=DATA_PUMP_DIR logfile=HAPPYORDER_exp.log DUMPFILE=HAPPYORDER_exp.dmp  schemas=HAPPYORDER  EXCLUDE=TABLE:\"IN\(\'MEMBER\',\'ORDERMAIN\'\,\'ORDERSUB\'\,\'ORDERSUBHISTORY\'\,\'ORDERADDRESS\'\)\"

expdp system/oracle directory=TEST_DPUMP schemas=scott dumpfile=scott_emp_idx.dmp logfile=scott_emp_idx.log EXCLUDE=INDEX:"IDX_EMP,IDX_SAL" 


expdp system/oracle directory=TEST_DPUMP schemas=scott dumpfile=scott_emp_idx.dmp logfile=scott_emp_idx.log EXCLUDE=INDEX:"= 'IDX_EMP'"


expdp system/oracle directory=TEST_DPUMP schemas=scott dumpfile=scott_emp_idx.dmp logfile=scott_emp_idx.log EXCLUDE=TABLE:"= 'EMP'"


 








4) QUERY, CONTENT 파라미터 사용하여 expdp

CONTENT : 어떤 자료를 UNLOAD 할지.
형식 :  ALL  |   METADATA_ONLY  |   DATA_ONLY

METADATA_ONLY : table row data unload, database object definition 만을 unload
DATA_ONLY : table row data 만 포함


QUERY : table명 명시, import 시에도 사용할 수 있음
=> export 보다 향상된 기능
형식 : [schema.][table_name:]"query_clause"



expdp system/oracle directory=TEST_DPUMP DUMPFILE=CONTENT%U.dmp  CONTENT=METADATA_ONLY

[oracle@DBTEST dpdump]$ ll CONTENT01.dmp 
-rw-r----- 1 oracle oinstall 2711552 Feb 12 14:12 CONTENT01.dmp




expdp system/oracle directory=TEST_DPUMP DUMPFILE=QUERY_2 %U.dmp query=scott.emp:\"where sal\>1000 and job=\'CLERK\'\"
expdp system/Akdntm\!23 directory=PUMP DUMPFILE=exp_cs.dmp query=NHCON_CS.PB_EAI_ISSUE_GROUP_HIST_DUMP:\"where reg_date\>\=to\_date\(\'20180101\'\,\'yyyymmdd\'\)\"


[oracle@DBTEST dpdump]$ ll QUERY_01.dmp 
-rw-r----- 1 oracle oinstall 7856128 Feb 12 14:16 QUERY_01.dmp
[oracle@DBTEST dpdump]$ ll QUERY_2.dmp 
-rw-r----- 1 oracle oinstall 7860224 Feb 12 14:17 QUERY_2.dmp



5) 파일 인터페이스를 사용하여 expdp

[oracle@DBTEST dpdump]$ cat exp_par.txt 
include=function
include=procedure
include=pacakge
include=type
include=view:"like 'PRODUCT%' "



expdp system/oracle schemas=scott directory=TEST_DPUMP dumpfile=parfile.dmp parfile=exp_par.txt


[oracle@DBTEST dpdump]$ ll parfile.dmp 
-rw-r----- 1 oracle oinstall 163840 Feb 12 14:21 parfile.dmp













6) 5분마다 작업 상태를 display, index, trigger 제외, tablespace -> USERS , parallel 2개 , 


expdp system/oracle directory=TEST_DPUMP estimate=blocks tablespaces=users exclude=index,trigger parallel=2 logfile=TEST_DPUMP:ts1.log dumpfile=TEST_DPUMP:ts1%U.dat, TEST_DPUMP_2:ts2%U.dat job_name=exp_ts1 status=300



[oracle@DBTEST dpdump]$ ll ts2*
-rw-r----- 1 oracle oinstall 69632 Feb 12 14:32 ts201.dat

[oracle@DBTEST dpdump]$ ll ts101.dat 
-rw-r----- 1 oracle oinstall 110977024 Feb 12 14:32 ts101.dat








 



7) Remap 기능 사용(impdp)

- Data file 인 경우 REMAP_DATAFILE 이용
- Tablespace 인 경우 REMAP_TABLESPACE 이용
- Schema 인 경우 REMAP_SCHEMA 이용


=> metadata 는 dump file set 에 XML로 저장되기 때문에 import 하는 동안 전환이 어려움 
-> 하지만 impdp 는 몇가지 지원을 함
=> IMP_FULL_DATABASE 권한이 있어야함.

REMAP_SCHEMA 파라미터는 기존의 FROMUSER/TOUSER 기능





 * scott 스키마 덤프 
[oracle@DBTEST dpdump]$ expdp system/oracle directory=TEST_DPUMP dumpfile=SCOTT.dmp schemas=scott


* scott 스키마 덤프를 -> pbj 계정에 impdp
impdp system/oracle directory=TEST_DPUMP dumpfile=SCOTT.dmp remap_schema=scott:pbj



* tablespace 분리하여 impdp ( data, index 를 분리하여 넣기 위함 )


impdp system/fkqpsej directory=DATA_PUMP_DIR DUMPFILE=sias.dmp LOGFILE=sias_imp.log 
REMAP_SCHEMA=SIAS:SIAS_TEST 
REMAP_TABLESPACE=SIAS_DAT:SIAS_TEST_DAT,
SIAS_IDX:SIAS_TEST_IDX,
USERS:SIAS_TEST_IDX




테이블스페이스 생성

create tablespace tbs_pbj_idx 
datafile '/home/oracle/pbj_idx01.dbf' size 1g;

create tablespace tbs_pbj_dat 
datafile '/home/oracle/pbj_dat_01.dbf' size 1g;


scott 의 data tablespace => USERS
         ind tablespace => TBS_SCOTT_IDX





기존 pbj 사용자 table 삭제


PBJ@ORCL > select 'drop table '||table_name from all_tables where owner='PBJ';

'DROPTABLE'||TABLE_NAME
-----------------------------------------
drop table A_TABLE
drop table B
drop table C
drop table SALGRADE
drop table EMP
drop table A
drop table STATS_20160210
drop table PLAN_TABLE
drop table EMPTEST
drop table DEPTTEST
drop table MY_STATS_20160203
drop table STAT_T
drop table P_MONTH
drop table P_DAY
drop table HASH_PT
drop table SALES
drop table SALET
drop table CHECK_LOCK
drop table DQ_RESULT_VALUE_LIST
drop table DQ_RESULT_PATTERN
drop table DQ_RESULT_COMMON
drop table DQ_COLUMNS_SUMMARY
drop table DQ_COLUMNS
drop table DQ_TABLES
drop table DQ_PROFILES
drop table BONUS




impdp system/oracle directory=TEST_DPUMP dumpfile=SCOTT.dmp LOGFILE=remap_imp.log remap_schema=scott:pbj remap_tablespace=USERS:TBS_PBJ_DAT, TBS_SCOTT_IDX:TBS_PBJ_IDX



확인

SYS@ORCL AS SYSDBA> select OWNER, TABLE_NAME, TABLESPACE_NAME from all_tables where owner='PBJ' AND PCT_FREE > 1;


OWNER TABLE_NAME                TABLESPACE_NAME
----- ------------------------- --------------------
PBJ   STAT_T                    TBS_PBJ_DAT
PBJ   STATS_20160210            TBS_PBJ_DAT
PBJ   MY_STATS_20160203         TBS_PBJ_DAT
PBJ   DEPTTEST                  TBS_PBJ_DAT
PBJ   EMPTEST                   TBS_PBJ_DAT
PBJ   PLAN_TABLE                TBS_PBJ_DAT
PBJ   CHECK_LOCK                TBS_PBJ_DAT
PBJ   A_TABLE                   TBS_PBJ_DAT
PBJ   C                         TBS_PBJ_DAT
PBJ   B                         TBS_PBJ_DAT
PBJ   A                         TBS_PBJ_DAT
PBJ   DQ_RESULT_VALUE_LIST      TBS_PBJ_DAT
PBJ   DQ_RESULT_PATTERN         TBS_PBJ_DAT
PBJ   DQ_RESULT_COMMON          TBS_PBJ_DAT
PBJ   DQ_COLUMNS_SUMMARY        TBS_PBJ_DAT
PBJ   DQ_COLUMNS                TBS_PBJ_DAT
PBJ   DQ_TABLES                 TBS_PBJ_DAT
PBJ   DQ_PROFILES               TBS_PBJ_DAT
PBJ   BONUS                     TBS_PBJ_DAT
PBJ   EMP                       ENC_TS
PBJ   SALGRADE                  TBS_PBJ_DAT

21 rows selected.












8) TRANSFORM
- Table과 index 의 다음의 절 배제 가능
- STORAGE 와 TABLESPACE 절 배제
- STORAGE 절만 

=> DDL 문을 생성 할 때 storage 절을 포함시키지 않고자 할때 사용함.

Storage 절만 빼고 DDL 문을 생성할 것 인지 storage 절과 tablespace절을 빼고 생성할 것인지 결정.

형식
TRANSFORM=
SEGMENT_ATTRIBUTES | STORAGE:{y|n}[:TABLE | INDEX]

















8) TABLE_EXISTS_ACTION
키워드: (SKIP), APPEND, REPLACE 및 TRUNCATE.




pbj 계정의 emp 테이블 삭제 후 impdp


SYS@ORCL AS SYSDBA> conn pbj/pbj
Connected.
PBJ@ORCL > drop table emp;

Table dropped.

PBJ@ORCL > select * from emp;
select * from emp
              *
ERROR at line 1:
ORA-00942: table or view does not exist




impdp system/oracle directory=TEST_DPUMP dumpfile=SCOTT.dmp LOGFILE=table_exists_imp.log remap_schema=scott:pbj table_exists_action=SKIP



PBJ@ORCL > select count(*) from emp;

  COUNT(*)
----------
        43





log 확인. 

ORA-39151: Table "PBJ"."HASH_PT" exists. All dependent metadata and data will be skipped due to table_exists_action of skip


















9) job 모니터링
DBA_DATAPUMP_JOBS : pump 진행상태를 보고자 할 때 사용. (job에 attach, job stop, parallelism 변경 )

DBA_DADTAPUMP_SESSIONS : job에 attach 되어 있는 유저 세션에 대한 정보.

V$SESSION_LONGOPS : 전송된 table data 양 확인

















10) 일시 중단 후 다시 작업


attach 모드 옵션
     add_file : 덤프파일을 추가
     exit:job 의 작업에서 빠져나감 
     kill_job : 해당 작업을 삭제
     parallel : 현재 작업중인 프로세스의 개수를 조절
     start_job :중단된 작업을 다시 시작 
     status : 현재 작업을 모니터링하는 시간조절
     stop_job : 현재 작업을 중단 




expdp system/oracle directory=TEST_DPUMP dumpfile=full02.dmp job_name=a full=y


컨트롤 + c


^C
Export> status  

Job: A
  Operation: EXPORT                         
  Mode: FULL                           
  State: EXECUTING                      
  Bytes Processed: 0
  Current Parallelism: 1
  Job Error Count: 0
  Dump File: /home/oracle/dpdump/full02.dmp
    bytes written: 4,096
  
Worker 1 Status:
  Process Name: DW00
  State: EXECUTING                      
  Object Name: STORAGE_CONTEXT
  Object Type: DATABASE_EXPORT/CONTEXT
  Completed Objects: 7
  Total Objects: 7
  Worker Parallelism: 1




Export> stop_job
Are you sure you wish to stop this job ([yes]/no): yes






중지된 작업 확인 => dba_datapump_jobs

SYS@ORCL AS SYSDBA> select job_name, operation, state from dba_datapump_jobs;

JOB_NAME               OPERATION  STATE
---------------------- ---------- ---------------
A                      EXPORT     STOP PENDING




[oracle@DBTEST dpdump]$ expdp system/oracle ATTACH=system.A

Export: Release 11.2.0.1.0 - Production on Fri Feb 12 15:04:11 2016

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

Job: A
  Owner: SYSTEM                         
  Operation: EXPORT                         
  Creator Privs: TRUE                           
  GUID: 2B8D691CF0C5DBADE050000AD97118B5
  Start Time: Friday, 12 February, 2016 15:02:22
  Mode: FULL                           
  Instance: ORCL
  Max Parallelism: 1
  EXPORT Job Parameters:
  Parameter Name      Parameter Value:
     CLIENT_COMMAND        system/******** directory=TEST_DPUMP dumpfile=full02.dmp job_name=a full=y 
  State: STOP PENDING                   
  Bytes Processed: 0
  Current Parallelism: 1
  Job Error Count: 0
  Dump File: /home/oracle/dpdump/full02.dmp
    bytes written: 4,096
  
Worker 1 Status:
  Process Name: DW00
  State: EXECUTING                      
  Object Schema: APEX_030200
  Object Type: DATABASE_EXPORT/SCHEMA/TYPE/GRANT/OWNER_GRANT/OBJECT_GRANT
  Completed Objects: 3
  Worker Parallelism: 1

Export>  start_job


중지된 작업을 다시 시작하였을때 아래의 쿼리로 실행중인지 확인 가능 





SYS@ORCL AS SYSDBA> select job_name, operation, job_mode, state from dba_datapump_jobs ;

JOB_NAME               OPERATION  JOB_MODE   STATE
---------------------- ---------- ---------- ---------------
A                      EXPORT     FULL       EXECUTING





Export> kill_job
Are you sure you wish to stop this job ([yes]/no): yes










11) 비정상으로 종료된 JOB 취소


SYS@ORCL AS SYSDBA> select job_name, operation, job_mode, state from dba_datapump_jobs ;

JOB_NAME               OPERATION  JOB_MODE   STATE
---------------------- ---------- ---------- ---------------
SYS_SQL_FILE_FULL_01   SQL_FILE   FULL       NOT RUNNING




[oracle@DBTEST dpdump]$ expdp system/oracle attach=system.SYS_SQL_FILE_FULL_01

Export: Release 11.2.0.1.0 - Production on Fri Feb 12 15:10:12 2016

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
ORA-39002: invalid operation
ORA-39025: jobs of type SQL_FILE are not restartable



=> 위의 문제의 정보를 가진 마스터 테이블 확인후 
drop table 로 마스터테이블 삭제 -> job 삭제됨


SYS@ORCL AS SYSDBA>
select o.status,
       o.object_id,
       o.object_type,
       o.owner||'.'||object_name "OWNER.OBJECT"
  from dba_objects o,
       dba_datapump_jobs j
 where o.owner=j.owner_name
   and o.object_name=j.job_name
   and j.job_name not like 'BIN$%' 
 order by 4, 2 


STATUS   OBJECT_ID OBJECT_TYPE         OWNER.OBJECT
------- ---------- ------------------- -----------------------------------
VALID        76764 TABLE               SYSTEM.SYS_SQL_FILE_FULL_01




SYS@ORCL AS SYSDBA> drop table SYSTEM.SYS_SQL_FILE_FULL_01   




SYS@ORCL AS SYSDBA> select o.status,
  2         o.object_id,
  3         o.object_type,
  4         o.owner||'.'||object_name "OWNER.OBJECT"
  5    from dba_objects o,
  6         dba_datapump_jobs j
  7   where o.owner=j.owner_name
  8     and o.object_name=j.job_name
  9     and j.job_name not like 'BIN$%' 
 10   order by 4, 2 
 11  ;

no rows selected


SYS@ORCL AS SYSDBA> select job_name, operation, job_mode, state from dba_datapump_jobs ;

no rows selected



반응형