Clone DB (drop table 복구)

- 기존 testdb 에서 테이블을 생성하고 실습을 위해 drop 시킵니다.

- 또한 운영중인 DB 의 Redo log file 을 복사할 수는 없기에 Redo log group 의 두배 정도의 횟수만큼 switch 를 일으켜 줍니다. 그래서 아카이브 파일에 정보가 기록되게 하는 것 입니다.

SQL>alter system switch logfile;

- Clone DB 용 파라미터 파일을 testdb 파라미터 파일에서 복사한 후 아래 내용을 수정해 줍니다.

Control_files= '/data/temp2/control01.ctl'

db_name='testdb2'

 

- 예전에 백업해 두었던 데이터 파일을 temp2 로 복사 합니다.

 

- testdb2 를 위한 컨트롤 파일을 생성하기 위해 testdb DB 에서 컨트롤 파일 생성을 위한 Trace 를 생성 합니다.

- Redo log file 이 존재 하지 않기에 resetlogs 모드로 편지을 해줍니다.

(resetctl.sql)

 

$export ORACLE_SID=testdb2

- SID 값을 변경하여 testdb2 DB로 접속할 수 있게 파라미터를 변경해 줍니다.

 

 

- TESTDB2 로 접속한 것을 볼 수 있습니다.

- 그리고 트레이스를 실행시켜 mount 단계까지 올려줍니다.

 

- recover 명령어를 통해 불완전 복구를 수행 시키고 resetlogs 옵션으로 DB 를 open 시킵니다.

- Data가 복구된 것을 확인 할 수 있습니다.

- 이제 운영 DB에 Data를 다시 넣기 위하여 Clone DB 에서 export 를 수행 합니다.

 

 

- 다음은 testdb 즉 운영DB에 다시 import 시키는 화면 입니다. 이 작업 전에

$export ORACLE_SID=testdb 명령어를 주어 운영DB 로 접속할 수 있게 환경을 맞춰줘야 합니다.

$imp scott/tiger file=tt100.dmp ignore=y

명령어만 주게되면 다음과 같은 오류를 볼 수가 있는데 이는 서로 다른 계정으로 imp 를 시킬 때 발생하는 오류입니다.

- 다음과 같이 fromuser=scott touser=scott 옵션을 주어 scott 계정으로 table을 import 시키게 만들어 주어야 합니다.

- 만약 system 계정으로 import 시키면 scott 계정의 table이 아닌 system.tt100 으로 입력되기 때문에 주의 하셔야 합니다.

- 다음과 같이 제대로 데이터가 입력된 것을 확인 할 수 있습니다.


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 의 생셩 양이 많아지기 때문에 아카이브 로그 모드를 사용할 경우 아카이브 경로를 충분하게 주어야 함.


set line 200
col owner for a20
col tablespace_name for a10
col table_name for a20
col mb for 9999.99

select owner, tablespace_name,table_name,num_rows*avg_row_len/1024/1024 MB
from dba_tables
where table_name=upper('&table_name')
and owner=upper('&owner')

흠 오랜만에 개인 홈페이지를 위해 silverlight Pivotviewer 를 사용하려고 하니 다시 새롭네요

아직 사용하기에 많은 어려움이 있기는 하지만 실버라이트를 공부하시는 분께는 좋은 자료가 될 수 있다고 생각해서

이렇게 포스팅을 시작합니다. ㅋㅋ

 

우선 피봇뷰어가 무엇인지 봐야겠지요??? ㅋㅋ

처음 보시는 분들은 이 엄청난 퍼포먼스에 새로운 UX 를 경험하시리라 믿어 의심치 않습니다.

     

 http://netflixpivot.cloudapp.net/

문제는 엄청나게 방대한 이미지를 한번에 불러오기에 로딩이 좀 ~~ 길다는 문제가 있지만요

이러한 문제는 여러가지 방법으로 해결할 수 있으리라 생각합니다.

아직 저도 공부하는 입장이며 이 컨트롤이 나온지 그리 오래되지 않으니 뭐... 천천히 해보자구요

 

http://www.timmykokke.com/category/pivotviewer/

위 페이지는 제가 처음 이것을 공부할 때 참고했던 아주 훌륭한~~ 정보가 있는 곳입니다.

 

영어의 압박이 있을 수 있겠지만 개발자에게 영어는 필~~수~~

 

그리고 기본적으로 위의 홈페이지 정보를 기반으로 글을 써 나가겠습니다. 참고로 해석이라고 보셔도 무관할 듯 합니다.

 

우선 피봇뷰어를 사용하는 가장 큰 이유는 방대한 양의 데이터를 한눈에 쉽게 확인할 수 있으며

검색 또한 아주 쉽고 빠르게 이루어진다는 것입니다.

우선 게시판의 예를 들어보죠

게시판의 특성상 한 페이지에 15~20개의 게시물이 생성될 수 있으며 동접자가 많은 사이트의 경우 자신의 글이

순식간에 2~3페이지로 넘어가버리는 것을 경험할 수 있을 것입니다. 뭐 그냥 일반 게시물이라면 상관없겠지만

속은 상하겠죠... ㅋ

하지만 피봇뷰어를 쓴다면 언제 썼는지는 중요치 않습니다.

검색 속성을 어떻게 주느냐에따라 작성자,시간,내용의 종류별로 검색 방법이 다양하면서 쉽게 제공되며 다시 검색 방법을 바꾸기 위해 새로고침버튼을 누를 필요조차 없기 때문이죠.

사용해보시면 알겠지만 자기가 원하는 정보를 검색엔진을 이용한 것보다 훨씬 빠르게 찾을 수 있습니다.

 

여기에 피봇뷰어의 고질적인 문제점이 하나 있습니다. 이 문제는 저도 아직 해결을 하지 못했으며 피봇뷰어의 특성상

해결방안조차 찾질 못하고 있네요.

무엇이 문제일까요??? ㅋ

그것은 게시판은 항시 새로운 사용자가 게시물을 업데이트하는데 반하여 피봇뷰어는 다른 사용자가 업뎃을 하더라도

컨트롤이 재로드 되기 전에는 그 내용을 볼 수 없다는데 있습니다. 한마디로 사용자가 로드한 시점 이후에 작성된

게시물은 다시볼수가 없다는 말이죠. 여기서... 게시판도 같잖아요 하실수도 있겠지만 피봇뷰어의 데이터가 수천개

수만개가 넘을 때 로딩을 경험하셨다면 그런 말씀은 자제를 ~~ ㅋㅋ

피봇뷰어 컨트롤 하나를 가지고도 아직 할 말이 많지만 이것을 알기전에 DeepZoom Control 도 공부해보시는 것도

좋을 듯 하네요

이 두개의 컨트롤이 합쳐져서 피봇뷰어가 탄생을 했으니깐요... ㅋㅋ~~

+ Recent posts