반응형

Control file 연습문제  



step 1. Closed Backup 으로 받은 데이터 파일을 사용해서 DB를 OPEN


작업 전 수행 사항 

- 기존 백업 모두 삭제   rm -rf /data//backup/close/*

- control file 만 백업    cp /data/temp6/*.ctl /data/backup/close

- DB 오픈해서 스위치로그, 체크포인트 일으키기    

SYS> startup

SYS> alter system switch logfile ;

SYS> /

SYS> alter system checkpoint ;

SYS> /

SYS> shut immediate ;

- 데이터 파일만 백업     cp /data/temp6/*.dbf /data/backup/close/


만일의 경우를 대비해 전체 백업을 해둠       cp /data/temp6/* /data/backup/close2/


- 운영중인 모든 파일 삭제해서 장애를 만듬        rm -rf /data/temp6/*

- 백업된 data file 복원     cp /data/backup/close/*.dbf /data/temp6/

- 백업된 control file 복원      cp /data/backup/close/*.ctl /data/temp6/



복구 시작 

Redo log file 이 없기 때문에 resetlogs 모드로 control file 을 재생성 하기로 한다.


STARTUP 을 해주면 old control file 에러가 나옴    


control file 을 재생성하는 스크립트를 만들자 .

스크립트를 생성하고 DB 종료후 vi editor 로 스크립트를 수정     


스크립트 화면에서 필요없는 내용은 다지우고 아래화면 과같이 RESETLOGS 에 관련된 내용만 남김

반드시 아래 data file 경로에 해당 데이터파일이 들어있어야 한다.


스크립트를 실행하면 자동으로 mount 상태로 됨

resetlogs 옵션을 줘서 DB를 OPEN 과 동시에 redo log file 도 생성됨


끝!



Data file 연습 문제


step 1. truncate table 장애 복구하기


- 준비상황 -

1. 현재 상황 닫힌 백업 수행

2. OPEN 해서 아래와 같이 테스트용 테이블 스페이스와 테이블 생성

SYS> create tablespace test

   2    datafile '/data/temp6/test01.dbf' to size 5m ;


SYS> create table scott.tt111 (no number) tablespace test ;


SYS> insert into scott.tt111 values(1) ;


SYS> commit ;


SYS> select to_char(sysdate,'YYYY-MM-DD:HH24:MI:SS' ) from dual ;    <-- 복구에 필요한 시간 확인하기 위해


SYS> select * from scott.tt111 ;         <-- 데이터  잘 들어 있는지 확인 


SYS> ! rm /data/test6/test01.dbf             <-- 파일을 지움으로서 장애 발생


SYS> ! ls /data/test6/test01.dbf               <-- 파일 있는지 확인  결과는 당연히 없음


SYS> truncate table scott.tt111 ;     <-- truncate 로 table 삭제


SYS> select * from scott.tt111 ;      <-- 지워져서 안나옴


- 복구시작 -

※ 임시경로 /data/temp 를 사용하여 복구하고 테스트용 테이블 스페이스 test의 백업파일이 없다는 상황 인지


SYS> shut immediate            <--복구하기 위해 DB를 꺼준다


임시경로로 backup 된 data file , 운영중이던 control file, redo log file 을 복사

SYS> cp /data/backup/close/*.dbf /data/temp/

SYS> cp /data/temp6/*.ctl /data/temp/

SYS> cp /data/temp6/*.log /data/temp/


SYS> ! vi $ORACLE_HOME/dbs/inittestdb.ora            <-- control file 경로 변경

SYS> startup mount                                               <-- mount 로 open

SYS> alter database rename file '/data/temp6/system01.dbf'

   2    to '/data/temp/system01.dbf' ;                       <-- data file 들 rename   (삭제된 test01.dbf 는 rename하지않음)

SYS> alter database rename file '/data/temp6/redo01.log'

   2    to '/data/temp/redo01.log' ;                            <-- redo log file 들 rename 


SYS> alter database create datafile '/data/temp6/test01.dbf'

  2    as '/data/temp/test01.dbf' ;                             <-- 삭제된 백업파일을 생성


SYS> recover database until time '2014-11-04:11:11:11' ;       <-- 확인했던 복구 시간으로 복구


SYS> alter database open resetlogs ;


SYS> select * from scott.tt111 ;

        NO

----------

         1                       <-- 제대로 복구 잘됨



step 2. drop user 장애 복구하기     ( 삭제된 tuser 를 복구해서 tuser.test1 이 조회되도록 하시오 )

- 준비 상황 -

1. 현재 상태를 확인한 후 전체 파일 백업

2. 정상 open 한 후 test 용 계정 tuser 를 아래와 같이 생성 후 권한을 할당

SYS> create user tuser

  2    identified by abc123

  3    default tablespace users

  4    temporary tablespace temp ;


SYS> grant connect, resource to tuser ;


3. 새로 생성한 tuser 로 로그인해서 테스트용 테이블을 생성

SYS> conn tuser/abc123

TUSER> create table test1 (no number) ;

TUSER> insert into test1 values (1) ;

TUSER> commit ;

TUSER> create table test2 (no number) ;

TUSER> insert into test2 (no number) ;

TUSER> commit ;

TUSER> select to_char(sysdate,'YYYY-MM-DD:HH24:MI:SS') from dual ;      <-- 복구할 시간 확인


4. sys 계정으로 로그인하여 tuser 를 삭제

TUSER> conn sys/oracle as sysdba

SYS> drop user tuser cascade ; 

SYS> select * from tuser.test1 ;                 <-- 아무것도 조회되지 않음


- 복구 시작 -

[oracle@localhost data]$ mkdir temp2

[oracle@localhost data]$ cp /data/backup/close/*.dbf /data/temp2/

[oracle@localhost data]$ cp /data/temp/*.ctl /data/temp2/

[oracle@localhost data]$ cp /data/temp/*.log /data/temp2/

[oracle@localhost data]$ vi /app/oracle/product/11g/dbs/inittestdb.ora       <--컨트롤 파일 경로 변경

[oracle@localhost data]$ exit


SQL> startup mount

ORACLE instance started.


Total System Global Area  422670336 bytes

Fixed Size                  1344616 bytes

Variable Size             293604248 bytes

Database Buffers          121634816 bytes

Redo Buffers                6086656 bytes

Database mounted.


SQL> alter database rename file '/data/temp/system01.dbf' to '/data/temp2/system01.dbf' ;  <--데이터파일 rename


Database altered.


SQL> alter database rename file '/data/temp/redo01.log' to '/data/temp2/redo01.log' ;    < -- 로그파일 rename


Database altered.


SQL> recover database until time'2014-10-17:10:14:04';           

Media recovery complete.


SQL> alter database open resetlogs;


Database altered.


SQL> select * from tuser.test1;


        NO

----------

         1



step 3. 아래에서 D시점에 삭제된 scott.tt890 table 을 복구하시오




A 단계 

SYS> create tablespace test2

  2    datafile '/data/temp2/test02.dbf' size 5m ;


B 단계

SYS> shut immediate ;

SYS> !cp /data/temp2/* /data/backup/close/


C 단계

SQL> startup

ORACLE instance started.


Total System Global Area  422670336 bytes

Fixed Size                  1344616 bytes

Variable Size             293604248 bytes

Database Buffers          121634816 bytes

Redo Buffers                6086656 bytes

Database mounted.

Database opened.


SQL> create table scott.tt890 ( no number ) tablespace test2;


Table created.


SQL> insert into scott.tt890 values (1);


1 row created.


SQL> commit;


Commit complete.


SQL> select * from scott.tt890;


        NO

----------

         1


SQL> select to_char(sysdate,'YYYY-MM-DD:HH24:MI:SS') from dual;


TO_CHAR(SYSDATE,'YY

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

2014-10-17:10:41:07


D 단계

SQL> drop table scott.tt890 purge;


Table dropped.


SQL> select * from scott.tt890;

select * from scott.tt890

                    *

ERROR at line 1:

ORA-00942: table or view does not exist


E 단계
SQL> drop tablespace test2 ;

Tablespace dropped.

SQL> @dd

TABLESPACE_NAME              MB FILE_NAME
-------------------- ---------- ----------------------------------------
EXAMPLE                 345.625 /data/temp2/example01.dbf
USERS                       7.5 /data/temp2/users01.dbf
UNDOTBS1                    265 /data/temp2/undotbs01.dbf
SYSAUX                      580 /data/temp2/sysaux01.dbf
SYSTEM                      710 /data/temp2/system01.dbf

- 복구 시작 -

SQL> shut immediate 
SQL> !
[oracle@localhost data]$ cp /data/backup/close/*.dbf /data/temp3/         <-- 백업한 데이터파일 복사
[oracle@localhost ~]$ cp /data/temp2/*.log /data/temp3                         <-- 운영중이던 리두로그파일 복사
[oracle@localhost ~]$ cp /data/backup/close/*.ctl /data/temp3/               <-- 백업한 컨트롤파일 복사
[oracle@localhost ~]$ vi /app/oracle/product/11g/dbs/inittestdb.ora           <-- 컨트롤파일 경로 수정
[oracle@localhost ~]$ exit

SQL> startup mount
ORACLE instance started.

Total System Global Area  422670336 bytes
Fixed Size                  1344616 bytes
Variable Size             293604248 bytes
Database Buffers          121634816 bytes
Redo Buffers                6086656 bytes
Database mounted.
SQL> alter database rename file '/data/temp2/system01.dbf' to '/data/temp3/system01.dbf';
<-- data file 들 모두 rename
Database altered.

SQL> alter database rename file '/data/temp2/redo01.log' to '/data/temp2/redo01.log' ;
                                    <-- redo log file 들 모두 rename
Database altered.

SQL> @log
  6  ;

GROUP# MEMBER                                          MB        seq STATUS   arc
------ --------------------------------------------- ---- ---------- -------- -----
     1 /data/temp3/redo01.log                           5          1 CURRENT  NO
     2 /data/temp3/redo02.log                           5          0 UNUSED   YES
     3 /data/temp3/redo03.log                           5          0 UNUSED   YES

SQL> recover database until time '2014-10-17:10:41:07' using backup controlfile;
                                             <-- 컨트롤 파일을 백업파일로 썼기 때문에 using backup controlfile 옵션을 사용
ORA-00279: change 1390324 generated at 10/17/2014 10:36:13 needed for thread 1
ORA-00289: suggestion : /data/arc2/1_1_861185978.arc
ORA-00280: change 1390324 for thread 1 is in sequence #1      <--seq 넘버 1인 redo 파일 찾아서 입력
                             

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/data/temp3/redo01.log
Log applied.
Media recovery complete.

SQL> alter database open resetlogs;

Database altered.

SQL> select * from scott.tt890;

        NO
----------
         1

복구 끝!



반응형

'오라클 > 백업/복구' 카테고리의 다른 글

데이터 이동하기  (0) 2014.11.06
Redo log flle 장애 처리방법  (0) 2014.11.05
Log Miner 활용하기  (0) 2014.11.05
Control file 복구  (0) 2014.11.04
Data file Recovery (불완전 복구)  (0) 2014.11.04
Data File Recovery  (0) 2014.10.30
Backup (cold, hot)  (0) 2014.10.30

+ Recent posts