Datapump Expdp

 

1. Datapump 의 장점

- 작업 관리의 편의성

- 필요한 디스크 공간의 예측

- 원격지 DB에 작업 수행 가능

- remapping 기능 지원

 

2. 사용 전 환경 설정

- 디렉토리 생성 및 권한 설정

$mkdir /data/datapump

- scott 에게 datapump 디렉토리에 접근할 수 있는 권한 설정.

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

Grant succeeded.

 

- Datapump 는 기존 export 와 구분하기 위해 expdp 로, import 와 구분하기 위해 impdp 라는 명령을 사용…

 

3. expdp 실행 모드

- Full 모드

- schema 모드

- Tablespace 모드

- Table 모드

 

* Datapump 작업 모니터링

SQL>select owner_name,job_name,job_mode,state from dba_datapump_jobs;

- owner_name : 작업 계정

- job_name : 작업 명칭'

- job_mode : full, table, index, tablespace 등

- state : executing , defining, undefined, not running 등

 

4. 실습 : scott 계정의 emp, dept 테이블만 백업 받기

[oracle@server121 datapump]$ expdp scott/tiger tables=emp,dept \

directory=datapump job_name=t2 dumpfile=emp_dept2

- 주의할 점은 default temporary tablespace 가 정의 되어 있어야 한다. 그렇지 않으면 다음과 같은 오류를 발생시킨다.

- scott 계정으로 expdp 를 실행시킬 때 scott 계정의 default temporary table space 가 지정되어야 한다.

SQL>alter user scott temporary tablespace temp;

5. 실습 : scott schema 전부 백업 받기

[oracle@server121 datapump]$ expdp scott/tiger schemas=scott directory=datapump \

> dumpfile=scott01.dmp

6. 실습 : DB 전체를 백업 받기

[oracle@server121 datapump]$ expdp system/password full=y directory=datapump \

> dumpfile=full01.dmp job_name=a

- 무슨 error 발생 21:14:30 에 ……. 확인해보자

- /data/datapump/export.log 를 확인해 봅니다.

- ora-39139: Data Pump does not support XMLSchema object.

 

ORA-39139: 

Data Pump does not support XMLSchema objects. string will be skipped.

Cause:

Object has XMLSchema-based columns, which are unsupported by Data Pump.

Action:

Use the original exp and imp utilities to move this object. 

 

- 원인은 XMLSchema-based colum 들은 Datapump 를 이용해 옮길 수 없다고 한다. 그래서 export 와 import 를 이용해 옮겨야 한다고 한다.

 

7. 실습 : 일시 중단 후 다시 시작하기

- 실습을 위해 풀백업을 다시 실행

- 실행중에 ctrl +c 키로 중지 시킴

- stauts 로 datapump 의 상태와 잡의 상태를 확인합니다.

 

- sqlplus 에서도 상태를 확인할 수 있습니다.

- stop_job 명령어를 통해 일시적으로 job 을 중지 시킬 수 있습니다.

- expdp system/centos attach=system.a

- attach = owner.job_name

- start_job 명령어를 통해 다시 job 을 실행시킬 수 있습니다.

- 혹은 취소하고 싶다면 kill_job 명령어를 실행하시면 됩니다.

 

- 완료가 되면 작업이 끝난 것을 확인할 수 있습니다.

8. 실습 : 비정상적으로 종료된 job 취소하기

- 실습을 위한 상황을 만듭니다.

- 다음과 같은 오류가 난다면

1. 실제 OS 의 경로에 디렉토리가 있는지 확인

2. grant read,write on directory dp2 to scott; 으로 정확히 주었는지 확인

3. OS 상의 디렉토리 권한을 확인

4. 이것도 안되면

SQL> drop directory dp2

2 ;

Directory dropped.

SQL> create directory dp2 as '/data/dp2';

Directory created.

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

Grant succeeded.


SQL>

 




- expdp 를 full=y 옵션을 주고 수행한 후 ctrl+c 로 작업을 정지 시킵니다.

- stop 을 하여 빠져 나갑니다.

- 같은 방법으로

directory=dp2 , dp3, dp4

dumpfile=full02.dmp, full03.dmp, full04.dmp

job_name=dp2,dp3,dp4

3번 더 반복해 줍니다.

9. 실습 : 여러 사용자의 테이블 한꺼번에 expdp 받기

- 다음과 같이 여러 다른 사용자들의 테이블을 한번에 받기 위하여 tables 의 인자 값을 여러 사용자의 테이블로 주게되면 다음과 같은 오류를 발생 시킵니다.

위는 scott 계정의 emp 테이블과 dpuser 계정의 tt01 테이블을 복사하려 했지만 하나의 스키마만 expdp 가능하다는 오류를 보여 줍니다.

Solution > 그냥 계정별로 하라고요~~~~~~~~~~~

 

10. 실습 : 병렬 expdp 작업 하기

$expdp system/centos full=y directory=datapump dumpfile=full04.dmp \

>job_name=a parallel=4

- 4개의 프로세스를 이용하여 작업

 

- top 명령어를 통해 확인 할 수 있습니다.

11. 실습 : 파라미터 파일 사용해서 expdp 수행

- 여러 개의 파일로 분할 expdp

$vi expdp_pump.par

Userid=system/oracle

Directory=datapump

Job_name=datapump

Logfile=expdp.log

Dumpfile=expdp_%U.dmp

Filesize=100M

Full=y

:wq

 

$expdp parfile=expdp_pump.par

 


힘들어서 오늘은 여까지 해야겠다....
ㅜㅜ 다음 이시간은 무리고 다음에....

실전! 오라클 백업과 복구
국내도서>컴퓨터/인터넷
저자 : 서진수
출판 : 생능출판사 2010.09.06
상세보기

 

Export and Import

 

- 특정 Tablespace 의 Data 를 추출하는 기능

- 특정 Tablespace 에 문제가 발생하였을 때 클론 DB 에서 복구 후 Export 하여 원본 DB 에 다시 부을 때 자주 사용한다.

 

 

 

- 원본 DB 에 다시 데이터를 IMPORT 합니다.

- fromuser=원 사용자 touser=새로운 사용자

Imcomplete Recovery

 

- 1일에 백업을 받았기에 2일에 생성한 테이블 스페이스와 컨트롤 파일에 대한 백업이 존재하지 않음

- Archive log mode

- Close Backup

- test table 에 대한 tablespace Backup 이 존재하지 않음

- 우선 모든 데이터 파일과 컨트롤 파일, 리두로그 파일을 백업합니다.

- Test 를 위하여 테이블 스페이스를 만들고 데이터를 입력 합니다.

- 현재 test 테이블 스페이스가 있기 때문에 test2 를 만들겠습니다.

 

- 백업이 없는 상태에서 Tablespace 를 drop 을 합니다.

 

- drop tablespace 의 경우 alert_SID.log 파일에서 삭제된 시간을 확인 할 수 있습니다.

 

- 혹은 log miner 를 이용하여도 언제 생성된 테이블이 드롭되었는지도 알 수 있습니다.

 

- 이제 DB를 내리고 Data file 과 Control file 만 Backup 된 것을 가져옵니다.

- Redo log file 은 현재 사용하고 있는 것을 가져와야 합니다.

- 이제 파라미터 파일에서 컨트롤 파일의 경로를 temp2/control_0922.ctl 로 변경해줍니다.

 

- DB 를 mount 상태까지 올린 다음 컨트롤 파일에 기록되어 있는 데이터 파일의 경로를 바꾸어 주어야 합니다.

- 이때 복구가 필요하지 않는 파일은 offline drop 을 이용하여 다시 원래 DB 로 원복 해줄 때 영향이 없도록 해줍니다.

- Redo log 파일의 경로 또한 바꿔줘야 합니다.

-

 

- 이제 복구를 합니다.

SQL>recover database until time '시간' using backup controlfile;

  • 여기서 시간은 alert_SID.log 파일에 기록된 시간 혹은 로그 마이어를 이용하여 찾은 시간을 넣어주시면 됩니다.

     

- 그리고 여기서 현재 current 인 Redo log 파일의 경로를 넣어주시면 됩니다.

 

- 현재 문제가 되는 Tablespace 를 보여 줍니다.

NAME

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

/data/temp2/system01.dbf

/data/temp/test.dbf

/data/temp2/sysaux01.dbf

/data/temp/users01.dbf

/data/temp/example01.dbf

/data/temp/insa.dbf

/data/temp/haksa01.dbf

/data/temp2/undo01.dbf

/home/oracle/product/10g/dbs/UNNAMED00009 <- 새로 생성됨

 

9 rows selected.

 

SQL> alter database create datafile '/home/oracle/product/10g/dbs/UNNAMED00009'

2 as '/data/temp2/test2.dbf';

 

Database altered.

 

SQL>

 

- 다시 한번 복구 명령어를 실행해 줍니다.

 

SQL>alter database open resetlogs; 명령어를 이용하여 DB 를 open 시킵니다.

이 때 주의할 점은 resetlogs 로 open 을 하게되면 redo log 의 scn 이 초기화가 되어 다시는 복구를 위하여 사용할 수가 없습니다. 그렇기 때문에 redo 로그 파일도 오류가 발생한 시점에서 사용하기 전에 다시한번 따로 백업을 하여 올렸을 때 다시 사용할 수 있도록 해야 한다는 것입니다.

 

- 또한 DB 를 resetlogs 로 올리기 전에 복구를 위한 사항들을 모두 확인하고 올리시기를 바랍니다.

 

 

정상적으로 복구가 된 것을 확인 할 수 있습니다.

- 참고도서 -

실전! 오라클 백업과 복구
국내도서>컴퓨터/인터넷
저자 : 서진수
출판 : 생능출판사 2010.09.06
상세보기

'Oracle > Backup&Recover' 카테고리의 다른 글

Datapump Expdp (first)  (0) 2011.09.28
Export and Import (특정 Tablespace)  (0) 2011.09.28
Log Miner 에 Archive log file 등록하는 script  (0) 2011.09.27
Log Miner && Supplemental Logging 설정  (0) 2011.09.27
Open Backup  (0) 2011.09.27

Log Miner 에 Archive log file 등록하는 script

- 원하는 경로의 아카이브 파일이나 redo log 파일을 쉽게 등록할 수 있다.

For i in $(ls 경로);

Do echo "exec dbms_logmnr.add_logfile('archive file 경로/$i')" >> addarc.sql;

Done;



2011/09/27 - [Oracle/Recovery] - Log Miner && Supplemental Logging 설정

Log Miner

- Redo log file 에 있는 내용을 추출해서 SQL 문장으로 변환해 주는 유틸리티

1. log miner 는 8i 이후 버전에서만 작동

2. 분석 대상 인스턴스와 같은 플랫폼에서 동작하는 같은 캐릭터셋을 사용하는 DB에서 생성된 Redo log file 만 분석

3. 분석 대상 인스턴스와 Redo log 가 생성된 인스턴스는 DB_BLOCK_SIZE 가 동일해야 함

- 만약 다를 경우 Corruption 이 발생했다는 내용이 기록

 

Supplemental Logging

- 데이터에 DML 이 밸생할 경우 redo log 에 추가적인 내용을 기록하여 복구에 도움을 주기에 항시 사용함으로 설정하기를 권장

 

SQL>seleclt supplemental_log_data_min from v$database;

 

SUPPLEMENTAL_LOG

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

NO

 

SQL>alter database add supplemental log data;

Database altered.

 

SQL>select supplemental_log_data_min from v$database;

 

SUPPLEMENTAL_LOG

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

YES

 

- 비활성

SQL>select supplemental

SQL>alter database drop supplemental log data;

SUPPLEMENTAL_LOG

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

NO

 

- 특정 테이블만 적용할 수도 있습니다.

SQL>alter table scott.emp add supplemental log data (all) columns;

Table altered.

 

- 이 기능을 사용할 경우 redo log 의 생셩 양이 많아지기 때문에 아카이브 로그 모드를 사용할 경우 아카이브 경로를 충분하게 주어야 함.

열린 백업 (Hot Backup / Open Backup / Begin Backup)

 

  • DB 가 Open 된 상태에서 backup 을 수행하며 Archive log Mode 여야 합니다.
  • 11g 부터는 모든 Tablespace 가 백업 모드로 변경할 수 있으나 Redo log 양이 많아지므로 권장하지 않습니다.

SQL>alter tablespace <Tablespace name> begin backup;

SQL>!cp /data/temp/temp/test.dbf /data/backup

SQL>alter database <Tablespace name> end backup;

 

  • Begin backup 이 시작되면 checkpoint 가 발생하여 DB Buffer Cache에 있는 Tablespace 정보가 Data file 로 내려 써지게 되며 이 작업의 최종 SCN 정보가 Data file 과 Control file 에 기록됨
  • 해당 Tablespace 의 Header 에는 Hot-backup-in-progress 라는 플래그가 표시되어 Tablespace 가 Begin backup 중이라는 것을 표시합니다.
  • 그리고 DBWR 은 최종 SCN 이후의 작업은 Data file에 저장하지 않으며 이 후의 작업은 Redo log에 기록되어 있다가 end backup 발생 시 그 때 Data file 에 반영됩니다.

 

SQL>select a.file#,a.name,b.status,to_char(b.time,'YYYY-MM-DD:HH24:MI:SS') as time

2    from v$datafile a, v$backup b

3    where a.file#=b.file#;

 

  • ACTIVE 일 경우 Begin Backup 중인 파일이다

Archive Mode

 

1. DB 종료

2. Parameter file 수정

- Archive log file 저장 경로와 이름 지정

log_archive_start = true <- 9i 까지만 사용, 10g 부터 사용하지 않음

log_archive_dest1='location=경로' ß 첫 번째 저장경로 지정

log_archive_dest2='location=경로' ß 두 번째 저장경로 지정

log_archive_format=%s_%t%r.arc ß 아카이브 로그파일 이름 지정

  • s : 시퀀스 넘버
  • S : 시퀀스 넘버 (0을 채워서 파일 길이를 맞춘다.)
  • t : 인스턴스 넘버
  • T : 인스턴스 넘버 (0을 채워서 파일 길이를 맞춘다.)
  • r : 리셋로그 ID

SPFILE 의 경우

SQL>alter system set log_archive_format='%S_%T_%r.ora' scope=spfile;

SQL>alter system set log_archive_dest_1='location=경로';

또한 위의 log_archive_dest_n 의 옵션은 아카이브가 저장되는 곳의 경로이며 n 의 숫자에 따라 몇 개의 백업을 생성할 수 있습니다.

기본 위치는 $ORACLE_BASE/flash_recovery_area 이나 다른 디스크에 경로를 설정해줄 것을 권장 합니다.

SQL> alter database archivelog;

 

현재 DB 가 Archive log Mode 인지 확인하기 위해서는

SQL>archive log list;

 

+ Recent posts