///////////////////////////////////////////////////////////
오라클 백업/복구 ( 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