반응형

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
반응형

Control file 장애 상황 

1. Parameter file 의 경로와 실제 파일 경로가 다른 경우

2. Control file 끼리 내용이 서로 다른 경우

3. Old control file 또는 control file 이 삭제되었을 경우



1. Parameter file 의 경로와 실제 파일 경로가 다른 경우


해결 방법 : Parameter file 의 내용을 수정하거나 , Parameter file에 안들어가 있는 control file 을 추가해주면 됨



2. Control file 끼리 내용이 서로 다른 경우


해결 방법 : Control file 의 version 넘버가 큰 파일을 작은 파일로 덮어쓰면 됨 


3. Old control file 또는 control file 이 삭제되었을 경우

- 백업 데이터 파일과 Archive redo log file 을 사용하여 using backup control file 옵션으로 복구

- 위와 같은 방법이 불가능할 경우 control file 을 재생성

            - 현재 redo log file에 손상이 없을 경우 - noresetlogs 모드로 재생성

- 현재 redo log file에 손상이 있을 경우 - resetlogs 모드로 재생성


NORESETLOGS 옵션으로 CONTROL FILE 재생성


DB MOUNT 상태에서 Control file 을 재생성하는 스크립트 생성

-> alter database backup controlfile to trace '/app/oracle/back.sql' ;          <-- 경로와 이름은 아무렇게나 해도 됨


DB 를 종료하고 생성한 스크립트를 vi editor 로 열기

-> vi /app/oracle/back.sql 


스크립트를 열면 내용이 상당히 많은데 필요한 부분만 빼고 다 지워주자

스크립트의 내용중 -- 부분은 주석이라는 의미

 

STARTUP NOMOUNT 

CREATE CONTROLFILE REUSE DATABASE "TESTDB" NORESETLOGS  ARCHIVELOG   

......

CHARACTER SET KO16MSWIN949

;


스크립트 내용중 위와 같이 STARTUP NOMOUNT가 스크립트 실행되는 첫 부분 이다.

아래 NORESETLOGS 라고 써있는 부분이 RESETLOGS 모드와 NORESETLOGS모드를 구분하는 부분

여기선 NORESETLOGS 모드로 재생성 함으로써 나머지 다 지움.


DB가 꺼진 상태에서 스크립트 실행

SYS> @/app/oracle/back.sql

스크립트가 실행되면서 control file 이 정상적으로 생성되었고 자동으로 mount 상태로 됨

SYS> alter database open   

Control file 이 재생성되어 정상적으로 DB가 OPEN 됨


※스크립트로 Control file 재생성시 주의사항

1. DB가 RESETLOGS Mode 로 OPEN 되는지 NORESETLOGS Mode로 OPEN 되는지 구분하고 생성하시오

2. 스크립트 안에 공백이 있으면 생성 도중에 에러가 생김

3. NORESETLOGS 모드일 경우는 스크립트 내부의 Redo log file 이 전부 해당 경로에 있어야 함

4. RESETLOGS 모드일 경우 스크립트 내부의 Redo log file 이 없어도 reset logs 로 open 될 때 재생성 됨

5. 두 모드 공통적으로 데이터파일은 반드시 스크립트 내부의 경로에 실제 존재해야 함

6. Control file 의 생성위치는 파라미터 파일에 지정된 경로


Redo log file 까지 손상이 생겨 RESETLOGS 옵션으로 CONTROL FILE 재생성


DB MOUNT 상태에서 Control file 을 재생성하는 스크립트 생성

-> alter database backup controlfile to trace '/app/oracle/back2.sql' ;          <-- 경로와 이름은 아무렇게나 해도 됨


DB 를 종료하고 생성한 스크립트를 vi editor 로 열기

-> vi /app/oracle/back2.sql 


스크립트를 열면 내용이 상당히 많은데 필요한 부분만 빼고 다 지워주자

스크립트의 내용중 -- 부분은 주석이라는 의미

 

STARTUP NOMOUNT 

CREATE CONTROLFILE REUSE DATABASE "TESTDB" RESETLOGS  ARCHIVELOG   

......

CHARACTER SET KO16MSWIN949

;


스크립트 내용중 위와 같이 STARTUP NOMOUNT가 스크립트 실행되는 첫 부분 이다.

아래 NORESETLOGS 라고 써있는 부분이 RESETLOGS 모드와 NORESETLOGS모드를 구분하는 부분

여기선 NORESETLOGS 모드로 재생성 함으로써 나머지 다 지움.


DB가 꺼진 상태에서 스크립트 실행

SYS> @/app/oracle/back2.sql

스크립트가 실행되면서 control file 이 정상적으로 생성되었고 자동으로 mount 상태로 됨

SYS> alter database open resetlogs;           <-- 이때 redo log file 이 재생성됨

Control file 이 재생성되어 정상적으로 DB가 OPEN 됨




반응형

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

Redo log flle 장애 처리방법  (0) 2014.11.05
Log Miner 활용하기  (0) 2014.11.05
control file, data 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
사용자 암호설정/ Archive log mode, No Archive log mode  (0) 2014.10.29
반응형

불완전 복구 = 특정 시점으로 복구하는 방법


상황 1. 1시에 전체파일 백업, 그후 3시에 tt820 테이블에 1 , AAA   / 2, BBB  / 3, CCC 라는 데이터 삽입, 

5시에 잘못된 update 를 수행해 모든 데이터가 DDD로 변경 , commit 까지 한 상태라 rollback 불가

다시 원래 3시의 데이터로 백업


복구 순서 : 1. DB종료후 백업 실행 -> 2. OPEN 후 테스트용 테이블 tt820, 데이터 생성 -> 3. 잘못된 업데이트 수행후 comit 하여 장애상황 만듬 -> 4. DB종료 -> 5. 임시 디렉토리 생성해서 백업한 datafile , 운영중이던 redo log file, control file 을 복사 -> 6. control file 경로 변경후 startup mount -> 7. rename 으로 data file 과 redo log file 경로 변경 -> 8.update가 일어나기 전 시간으로 복구 -> 9. DB OPEN


1. SYS> shutdown immediate ;

    SYS> !cp /app/oracle/oradata/testdb/* /data/backup/close/


2. SYS> startup

    

    SYS> create table scott.tt820 ( no number, name varchar2(10) ) tablespace users ;

    SYS> insert into values (1, 'aaa') 

    SYS> insert into values (2, 'bbb')

    SYS> insert into values (3, 'ccc')

    SYS> commit ;

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


TO_CHAR(SYSDATE,'

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

2014-11-04:03:00:00                           < -- 테이블 생성했을때 시간이 3시임을 확인 이시간까지 데이터 존재



    SYS> select * from scott.tt820


NUMBER      NAME

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

1            AAA

2            BBB

3            CCC


3. SYS> update scott.tt820 set name = 'DDD' ;            <-- where 절 하지않아 전체 데이터가 DDD로 업데이트


    SYS> select * from scott.tt820

NUMBER      NAME

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

1            DDD

2            DDD

3            DDD


    SYS> commit ;                    <-- commit 을 해서 이제 rollback 안됨


4. SYS> shutdown immediate         <-- 복구를 위해 DB 종료


5. SYS> !mkdir /data/tmp              <-- 복구 경로로 /data/temp 사용하기위해 디렉토리 미리 생성

    

    SYS> cp /data/backup/close/*.dbf /data/temp                          <-- 백업파일 복사

    SYS> cp /app/oracle/oradata/testdb/*.ctl /data/temp                 <-- 운영중이던 파일 복사

    SYS> cp /app/oracle/oradata/testdb/*.log /data/temp                <-- 운영중이던 파일 복사


6. SYS>! vi $ORACLE_HOME/dbs/inittestdb.ora

          ...

        control_files = '/data/temp/control01.ctl'                    <-- 컨트롤 파일 경로 변경

          ...


    SYS> startup mount 


7. SYS> alter database rename file '/app/oracle/oradata/testdb/system01.dbf' 

2    to '/data/temp/system01.dbf' ;                    <-- 이런식으로 data file 의 경로 변경


    SYS> alter database rename file '/app/oracle/oradata/testdb/redo01.log'

2    to '/data/temp/redo01.log' ;                        <-- 이런식으로 redo log file 의 경로 변경


8. SYS> recover database until time '2014-11-04:03:00:00' ;     <-- until time 옵션을 줘서 해당 시간으로 복구


9. SYS> alter database open resetlogs      <-- 파일들의 scn이 맞지않아 정상적으로는 open 되지 않아 resetlogs 옵션사용


    SYS> select * from scott.tt820 ;


SYS> select * from scott.tt820


NUMBER      NAME

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

1            AAA

2            BBB

3            CCC                     <-- 3시에 수행됬던 데이터로 복구 됨


상황 2. 잘못된 drop tablespace 복구하기 -backup 파일 있을 경우


순서 : 1. 새로운 tablespace 생성 -> 2. DB 종료후 백업실행 -> 3. DB 오픈후 Test용 tablespace 삭제 -> 4. DB 종료후 임시 복구 경로로 필요 파일 복사 -> 5. 파일들의 경로 변경 -> 6. 복구 


1. SYS> create tablespace test

2    datafile '/app/oracle/oradata/testdb/test01.dbf' size 10M ;


2. SYS> shut immediate;

    SYS>! cp /app/oracle/oradata/testdb/* /data/backup/close/

    

3. SYS> startup

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

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

    SYS> commit;


    SYS> drop tablespace test including contents and datafiles;              <--drop 해서 장애 발생


4. SYS> shut immediate ;

    SYS>! mkdir /data/temp2                <-- 복구 하기 위한 임시경로

    SYS>! cp /data/backup/close/*.ctl /data/temp2/                            <-- 백업 파일 사용

    SYS>! cp /data/backup/close/*.dbf /data/temp2/                           <-- 백업 파일 사용 

    SYS>! cp /app/oracle/oradata/testdb/*.log /data/temp2/                 <-- 운영중이던 파일 사용


5. SYS>! vi $ORACLE_HOME/dbs/inittestdb.ora                 <-- 컨트롤 파일 경로 변경

    SYS> startup mount


    SYS> alter database rename file '/app/oracle/oradata/testdb/system01.dbf'

2    to '/data/temp2/system01.dbf' ;                     <-- 데이터 파일 경로 변경


    SYS> alter database rename file '/app/oracle/oradata/testdb/redo01.log'

2    to '/data/temp2/redo01.log' ;                      <-- 리두 로그 파일 경로 변경


6. drop tablespace 된 시점을 확인하기위해 alert log file 에서 찾기  (drop 된 시간을 2014-11-04:06:00:00 라고 가정)


    SYS> recover database until time '2014-11-04:06:00:00' using backup controlfile ;


ORA-00279: change 1373367 generated at 11/04/2014 05:53:12 needed for thread 1

ORA-00289: suggestion : /data/arc2/1_1_861154526.arc

ORA-00280: change 1373367 for thread 1 is in sequence #1

         
※ 복구를 위해 백업된 controlfile 을 가져왔기 때문에 using backup controlfile 옵션을 사용

그 후 sequence #1 번인 archive log file 을 찾는데 파일이 없어서 위와 같은 에러가 나옴

redo log 상태 조회해서 seq #1 번인 리두로그 파일을 지정 해주면 됨


    SYS> recover database until time '2014-11-04:06:00:00' using backup controlfile ;


ORA-00279: change 1373367 generated at 10/17/2014 02:43:12 needed for thread 1

ORA-00289: suggestion : /data/arc2/1_1_861154526.arc

ORA-00280: change 1373367 for thread 1 is in sequence #1


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

/data/temp6/redo01.log


    SYS> alter database open resetlogs ;

복구 끝!                


상황 3. 상황 2. 잘못된 drop tablespace 복구하기 -backup 파일 없을 경우


순서 : 1. DB 종료후 백업실행 -> 2. DB 오픈 후 새로운 tablespace 생성 3. Test용 tablespace 삭제 -> 4. DB 종료후 임시 복구 경로로 필요 파일 복사 -> 5. 파일들의 경로 변경 -> 6. 복구


1. SYS> shut immediate;

    SYS>! cp /app/oracle/oradata/testdb/* /data/backup/close/


2. SYS> startup


    SYS> create tablespace test2

2    datafile '/app/oracle/oradata/testdb/test02.dbf' size 10M ;


    SYS> create table scott.tt860 (no number) tablespace test2;

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

    SYS> commit;


3. SYS> drop tablespace test including contents and datafiles;              <--drop 해서 장애 발생


4. SYS> shut immediate ;

    SYS>! mkdir /data/temp3                <-- 복구 하기 위한 임시경로

    SYS>! cp /data/backup/close/*.ctl /data/temp3/                            <-- 백업 파일 사용

    SYS>! cp /data/backup/close/*.dbf /data/temp3/                           <-- 백업 파일 사용 

    SYS>! cp /app/oracle/oradata/testdb/*.log /data/temp3/                 <-- 운영중이던 파일 사용


5. SYS>! vi $ORACLE_HOME/dbs/inittestdb.ora                 <-- 컨트롤 파일 경로 변경

    SYS> startup mount


    SYS> alter database rename file '/app/oracle/oradata/testdb/system01.dbf'

2    to '/data/temp3/system01.dbf' ;                     <-- 데이터 파일 경로 변경

- 경로를 변경하는데 복구 필요한 test2 tablespace는 없음


    SYS> alter database rename file '/app/oracle/oradata/testdb/redo01.log'

2    to '/data/temp3/redo01.log' ;                      <-- 리두 로그 파일 경로 변경


6. drop tablespace 된 시점을 확인하기위해 alert log file 에서 찾기  (drop 된 시간을 2014-11-04:08:00:00 라고 가정)


    SYS> recover database until time '2014-11-04:08:00:00' using backup controlfile ;


ORA-00279: change 1373367 generated at 11/04/2014 05:53:12 needed for thread 1

ORA-00289: suggestion : /data/arc2/1_1_861154526.arc

ORA-00280: change 1373367 for thread 1 is in sequence #1

         

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

/data/temp6/redo01.log

ORA-00283: recovery session canceled due to errors
ORA-01244: unnamed datafile(s) added to control file by media recovery
ORA-01110: data file 8: '/data/temp/test03.dbf'

위 에러메시지를 확인하면 unnamed datafile 이 control file 에 추가되었다고 알려줌

    SYS> select name from v$datafile ;         <-- 데이터파일을 확인하면 추가된것을 확인할 수 있다.

NAME 
-----------------------------------
/data/temp3/system01.dbf
/data/temp3/sysaux01.dbf
/data/temp3/undotbs01.dbf
/data/temp3/users01.dbf
/data/temp3/example01.dbf
/data/temp3/test.dbf
/app/oracle/product/11g/dbs/UNNAMED00006            <-- 생김

UNNAMED0006 파일을 새로운 경로에 생성 한 후 다시 복구 시도

    SYS> alter database create datafile '/app/oracle/product/11g/dbs/UNNAMED00006'
2    as '/data/temp2/test02.dbf' ;

    SYS> recover database un until time '2014-11-04:08:00:00' using backup controlfile ;


ORA-00279: change 1373367 generated at 11/04/2014 05:53:12 needed for thread 1

ORA-00289: suggestion : /data/arc2/1_1_861154526.arc

ORA-00280: change 1373367 for thread 1 is in sequence #1

         

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

/data/temp6/redo01.log


    SYS> alter database open resetlogs ;


복구 완료!


반응형

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

Redo log flle 장애 처리방법  (0) 2014.11.05
Log Miner 활용하기  (0) 2014.11.05
control file, data file 연습문제  (0) 2014.11.04
Control file 복구  (0) 2014.11.04
Data File Recovery  (0) 2014.10.30
Backup (cold, hot)  (0) 2014.10.30
사용자 암호설정/ Archive log mode, No Archive log mode  (0) 2014.10.29
반응형

1. Restore & Recovery

Restore : backup 받았던 파일을 복원 시키는 것 ( 백업된 후부터 망가지기 전까지의 데이터는 다 날아감 )

Recovery : 복원된 파일을 log file 을 적용시켜서 복구 하는 것 


복구 원리 : 1. rccover 명령 -> control file 정보 확인 -> data file 정보 확인 -> control file 과 data file 정보가 다를 경우 redo log 파일 또는 archived log file 의 정보를 적용시켜 복구 완료함


복구 명령어 : 1. recover database ;

 2. recover tablespace useres ;

       3. recover datafile '/app/oracle/oradata/testdb/users01.dbf' ;


< No Archive Log Mode >


2. 데이터 파일 일부 삭제된 후 복구하기 ( 노 아카이브 모드에서 복구 가능할 때, 리두로그에 남아있어서 )

장애 상황 : 현재 운영중인 DB 서버에서 누군가가 /app/oracle/oradata/testdb/users01.dbf 파일을 지운것을 확인했다.

    현재 운영중인 DB서버는 No Archive log mode이다. 이 경우 복구방법은 지워지기전 백업했던 데이터파일, 

    컨트롤파일, redo log file 까지 전부 복원 하는 것 뿐


- no archive mode  , db open 상태 -

SYS> !rm /app/oracle/oradata/testdb/users01.dbf


SYS> create table scott.tt100(no number) tablespace users ;

Table created


SYS> insert into scott.tt100 value(1) ;

1 row created.


SYS> commit ;


SYS> select * from scott.tt100 ;

NO

------

  1

SYS> alter system switch logfile ;


SYS> /


SYS> /


SYS> /

ERROR at line 1:

ORA-03113:end-of-file on communication channel

Process ID:7520

Session ID : 1 Serial number: 5


SYS> exit


[oracle@localhost ~]$ sqlplus sys/oracle as sysdba


SYS> startup      <-- 에러나서 mount 로 statup 됨


SYS> !cp /data/backup/close/users01.dbf /app/oracle/oradata/testdb/           <-- 백업파일을 다시 복원


SYS> recover tablespace users ;        <- users 복구

Media recovery complete 


SYS> alter database open ;



3. 삭제된 데이터파일을 복구하지않고 DB 시작하기 ( 노아카이브 모드에서 복구 불가능할 때, 아카이브 로그 없는 경우 )

장애상황 : No archive log mode 로 운영중인 데이터베이스에서 데이터파일이 하나 지워졌다.

               때마침 checkpoint 가 발생되어 운영중인 DB가 갑자기 강제 종료가 되어 버렸다.

               다시 접속해서 DB를 재 시작 시키려고 하니 지워진 파일 때문에 시작이 되지 않는다.

               다행히 데이터파일이 지워진 테이블스페이스는 중요한 자료가 없어서 삭제되어도 괜찮고

               빨리 DB 를 시작시켜야만 한다.

- no archive mode  , db open 상태 -

SYS> alter system switch logfile ; 


SYS> /        <- 여러번 로그스위치 해줌


SYS> !rm -rf /app/oracle/oradata/testdb/user01.dbf


SYS> create table scott.tt200(no number) tablespace users ;


SYS> insert into scott.tt200 values (2) ;


SYS> commit ;


SYS> select * from scott.tt200 ;

NO

------

  2


SYS> alter system switch logfile ;


SYS> /


SYS> /


SYS> shutdown immediate ;


SYS> startup


SYS> !cp /data/backup/close/users01.dbf /app/oracle/oradata/testdb/

recover tablespace users; 

ORA-00279: change 2206096 generated at 09/19/2013 05:07:44 needed for thread 1 

ORA-00289: suggestion : /data/arc2/6_1_812624262.arc 

ORA-00280: change 2206096 for thread 1 is in sequence #6 

 

 

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}  엔터 


에러발생


SYS> alter database datafile '/app/oracle/oradata/testdb/users01.dbf' offline drop ;


SYS> alter database open ;



4. 데이터 파일의 경로를 변경해서 복구하기

장애 상황 : Data file 이 있는 디렉토리의 손상으로 긴급히 다른 임시 디렉토리를 만들고 그 곳으로

                Data file 을 이동시키고 복원해야  합니다


파일 위치 : -data file : /data/temp 로 이동시키고 복구

                -control file , redo log file : /app/oracle/oradata/testdb/

                -backup file : /data/backup/close/


작업 순서 : 

1. DB 종료

2. /data/temp 디렉토리 생성해서 /data/backup/close/*.dbf 파일을 복사

3. /data/backup/close/*.log , *.ctl 을 /app/oracle/oradata/testdb 로 이동

4. 컨트롤 파일 내용 수정

5. DB 오픈

SYS> shutdown immediate ;

oracle $ mkdir /data/temp


oracle $ cp /data/backup/close/*.dbf /data/temp 로 복사


oracle $ cp /data/backup/close/*.ctl /app/oracle/oradata/testdb/


oracle $ cp /data/backup/close/*.log /app/oracle/oradata/testdb/


SYS> startup mount 


SYS> !cp /data/backup/close/*.dbf /app/oracle/oradata/testdb/          <-- data file 복원


SYS> alter database rename file '/app/oracle/oradata/testdb/system01.dbf   to '/data/temp/system01.dbf';

Database altered.


SYS> alter database rename file '/app/oracle/oradata/testdb/undotbs01.dbf  to '/data/temp/undotbs01.dbf';

Database altered.


SYS> alter database rename file '/app/oracle/oradata/testdb/sysaux01.dbf  to '/data/temp/sysaux01.dbf';

Database altered.


SYS> alter database rename file '/app/oracle/oradata/testdb/users01.dbf   to '/data/temp/users01.dbf';

Database altered.


SYS> alter database rename file '/app/oracle/oradata/testdb/example01.dbf  to '/data/temp/example01.dbf';

Database altered.


SYS> alter database open;

Database altered.


SYS> select tablespace_name,bytes/1024/1024 MB,file_name from dba_data_files;


TABLESPACE      MB            FILE_NAME

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

USERS                   5          /data/temp/users01.dbf

SYSAUX              240         /data/temp/sysaux01.dbf

UNDOTBS1           35         /data/temp/undotbs01.dbf

SYSTEM              480         /data/temp/system01.dbf

EXAMPLE            100         /data/temp/example01.dbf



< Archive Log Mode - 완전 복구>


아카이브 로그 파일을 이용해서 백업파일에서 장애 난 파일 까지의 데이터를 완전하게 복구 할 수 있다.


실습전 archive 모드로 변경 해주고 파일 다시 백업. 실습을 위해 test2 tablespace 생성해줌

SYS> alter database archivelog ;


SYS> create tablespace test2

  2    datafile '/app/oracle/oradata/testdb/test02.dbf' size 5M ;


SYS> shutdown immediate ;


SYS> !cp /app/oracle/oradata/testdb/* /data/backup/close/ 

1. offline 되는 tablespace 장애 복구


SYS> startup


SYS> create table scott.tt750 (no number) tablespace test2 ;


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


SYS> commit ;


SYS> select * from secott.tt750 ;

NO

---

  1


SYS> !rm /app/oracle/oradata/testdb/test02.dbf


SYS> alter tablespace test2 offline ;


SYS> alter tablespace test2 online ;

*

ERROR at line 1:

ORA-011547: cannot identify/loca data file 6 - see DBWR trace file

ORA-01110: data file 6 : '/app/oracle/oradata/testdb/test02.dbf'


SYS> !cp /data/backup/close/test02.dbf /app/oracle/oradata/testdb/


SYS> alter tablerspace test2 online ;

*

ERROR at line 1:

ORA-01113: file 6 needs media recovery

ORA-01110: data file 6: '/app/oracle/oradata/testdb/test02.dbf'


백업 파일을 복원했는데 online 안되고 복구하라는 에러 메세지가 나옴


SYS> recover tablespace test2;

Media recovery complete.


SYS> alter tablespace test2 online;


Tablespace altered.


SQL> select * from scott.tt750;


        NO

----------

         1


OFFLINE 되는 Tablespace 는 DB 종료없이 해당 Tablespace 만 offline 하고 복구하면 됨


2. offline 안되는 tablespace 장애 복구


SQL> create table scott.tt800 (no number) tablespace system;


Table created.


SQL> insert into scott.tt800 values(2);


1 row created.


SQL> commit;


Commit complete.


SQL> select * from scott.tt800;


        NO

----------

         2


SQL> !rm /app/oracle/oradata/testdb/system01.dbf


SQL> altert tablespace system offline;

SP2-0734: unknown command beginning "altert tab..." - rest of line ignored.

SQL> alter tablespace system offline;

alter tablespace system offline

*

ERROR at line 1:

ORA-01541: system tablespace cannot be brought offline; shut down if necessary



SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.


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.

ORA-01157: cannot identify/lock data file 1 - see DBWR trace file

ORA-01110: data file 1: '/app/oracle/oradata/testdb/system01.dbf'



SQL> !cp /data/backup/close/system01.dbf /app/oracle/oradata/testdb/


SQL> recover tablespace system;

Media recovery complete.


SQL> alter database open;


Database altered.


SQL> select * from scott.tt800;


        NO

----------

         2



3. 백업파일이 없는 상태에서 복구

SQL> @dd


TABLESPACE_NAME              MB         FILE_NAME

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

TEST2                                   5              /app/oracle/oradata/testdb/test02.dbf                    <--파일삭제

EXAMPLE                        345.625           /app/oracle/oradata/testdb/example01.dbf

USERS                               7.5              /app/oracle/oradata/testdb/users01.dbf

UNDOTBS1                         265             /app/oracle/oradata/testdb/undotbs01.dbf

SYSAUX                             570             /app/oracle/oradata/testdb/sysaux01.dbf

SYSTEM                             710             /app/oracle/oradata/testdb/system01.dbf



6 rows selected.


SQL> !rm -f /app/oracle/oradata/testdb/test02.dbf


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


Table created.


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


1 row created.


SQL> commit;


Commit complete.


SQL> alter tablespace test2 offline;


Tablespace altered.


SQL> alter tablespace test2 online;

alter tablespace test2 online

*

ERROR at line 1:

ORA-01157: cannot identify/lock data file 6 - see DBWR trace file

ORA-01110: data file 6: '/app/oracle/oradata/testdb/test02.dbf'



SQL> @dd


TABLESPACE_NAME              MB         FILE_NAME

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

TEST2                                                   /app/oracle/oradata/testdb/test02.dbf                   

EXAMPLE                        345.625           /app/oracle/oradata/testdb/example01.dbf

USERS                               7.5              /app/oracle/oradata/testdb/users01.dbf

UNDOTBS1                         265             /app/oracle/oradata/testdb/undotbs01.dbf

SYSAUX                             570             /app/oracle/oradata/testdb/sysaux01.dbf

SYSTEM                             710             /app/oracle/oradata/testdb/system01.dbf


6 rows selected.


SQL> alter database create datafile

  2  '/app/oracle/oradata/testdb/test02.dbf'       <--삭제 전 원래 경로

  3  as '/home/oracle/test01.dbf';                     <-- 새로 만들어질 경로와 이름


Database altered.


SQL> recover tablespace test2;

Media recovery complete.

SQL> alter tablespace test2 open;

alter tablespace test2 open

                       *

ERROR at line 1:

ORA-02142: missing or invalid ALTER TABLESPACE option



SQL> alter tablespace test2 online;


Tablespace altered.


SQL> select * from scott.tt810;


        NO

----------

         1



반응형

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

Redo log flle 장애 처리방법  (0) 2014.11.05
Log Miner 활용하기  (0) 2014.11.05
control file, data file 연습문제  (0) 2014.11.04
Control file 복구  (0) 2014.11.04
Data file Recovery (불완전 복구)  (0) 2014.11.04
Backup (cold, hot)  (0) 2014.10.30
사용자 암호설정/ Archive log mode, No Archive log mode  (0) 2014.10.29
반응형

1 . 닫힌 백업 ( cold backup , close backup )

- Database가 close 된 상태에서 수행 하는 백업 ( 백업 시점이 동일해야함, 다르면 scn이 달라서 백업이 안됨 )

- data file, online redo log file , control file 백업 가능

- open 상태에서 백업 불가

- archive mode, no arcive mode 상관없음


백업 실습

순서 : 1. 백업받을 파일의 경로 확인후 db 셧다운 -> 2. 원하는 경로에 파일 복사 -> 3. db오픈 

SQL> shutdown immediate 


SQL> !

[oracle@testdb ~] $ cp -av /app/oracle/oradata/testdb/*.dbf /data/backup/close 

[oracle@testdb ~] $ cp -av /app/oracle/oradata/testdb/*.ctl /data/backup/close 

[oracle@testdb ~] $ cp -av /app/oracle/oradata/testdb/*.log /data/backup/close 

[oracle@testdb ~] $ cp -av $ORACLE_HOME/dbs /data/backup/close


[oracle@testdb ~] $ ls /data/backup/close

ctrl01.ctl  ctrl03.ctl  example01.dbf  redo02.log  sysaux01.dbf  temp01.dbf     users01.dbf

ctrl02.ctl  dbs         redo01.log     redo03.log  system01.dbf  undotbs01.dbf



2. 열린 백업 ( hot backup, begin backup , open backup )

- database 가 open 된 상태에서 수행하는 백업

- archive log mode 에서만 수행가능

- 많은 양의 redo log 가 발생

- data file , control file 만 백업 가능

백업 실습

순서 : 1. 백업 해야할 tablespace 를 백업모드로 변경 -> 2. os 명령어로 해당 tablespace의 datafile 을 백업장소로 복사 -> 3. 파일 복사 완료후 백업모드 종료


SQL> archive log list            <-- archive log mode 인지 확인     아닐경우 archive log mode 로 변경


SQL> !vi /app/oracle/open_backup.sql


alter tablespace users begin backup;                   <-- 백업모드로 변경

! cp -av /app/oracle/oradata/testdb/users01.dbf /data/backup/open/                 <-- 파일 백업장소로 복사

alter tablespace users end backup;                      <-- 백업모드 종료


alter tablespace sysaux begin backup;

!cp -av /app/oracle/oradata/testdb/sysaux01.dbf  /data/backup/open/

alter tablespace sysaux end backup;


alter tablespace undotbs1 begin backup;

!cp -av /app/oracle/oradata/testdb/undotbs01.dbf  /data/backup/open/

alter tablespace undotbs1 end backup;


alter tablespace system begin backup;

!cp -av /app/oracle/oradata/testdb/system01.dbf  /data/backup/open/

alter tablespace system end backup;


alter tablespace example begin backup;

!cp -av /app/oracle/oradata/testdb/example01.dbf /data/backup/open/

alter tablespace example end backup;


alter database backup controlfile to /data/backup/open/control01.ctl;

:wq!


SQL> @/app/oracle/open_backup.sql



백업 상태여부 조회 

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# ;


     FILE#       NAME                                                               STATUS             TIME

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

         1         /app/oracle/oradata/testdb/system01.dbf          NOT ACTIVE         2014-10-16:01:21:27

         2         /app/oracle/oradata/testdb/sysaux01.dbf           NOT ACTIVE         2014-10-16:01:20:47

         3         /app/oracle/oradata/testdb/undotbs01.dbf         NOT ACTIVE         2014-10-16:01:21:11

         4         /app/oracle/oradata/testdb/users01.dbf             NOT ACTIVE          2014-10-16:01:20:43

         5         /app/oracle/oradata/testdb/example01.dbf         NOT ACTIVE         2014-10-16:01:21:55


위 상태에서 STATUS 가 NOT ACTIVE 면 end backup 상태 ACTIVE 면 begin backup 상태 이므로 백업이 끝나면 확인해서 반드시 NOT ACTIVE 상태로 만들어 줘야 함


TIME 은 가장 마지막에 begin backup 을 받은 시간


※ Hot backup 구동 원리



- scn3 까지의 데이터를 Hot backup 중인 상태 -


이때 DML 작업이 일어나 D,E 가 추가되는 상황에서 data file 이 백업중이니 변경되는 내용은 Redo Log File 에 저장된다.

이때 Redo Log File 에 필요한 데이터만 저장되는게 아니라 블록 단위로 저장되어서 많은 양의 Redo Log 가 발생한다.

그래서 백업이 오래 지속되면 그 동안의 변경내용이 모두 리두로그파일에 저장되었다가 백업이 끝난후 다시 데이터파일에 적용해야 하기 때문에 데이터 손실을 막기 위해 아카이브 모드로 작동해야 한다.


End backup 을 해야 리두로그 파일에 블록단위로 안들어가고 필요한 데이터만 들어가므로 다량의 리두로그를 쌓지 않기 위해 반드시 begin 백업후에 end 백업을 해줘야 한다.



반응형

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

Redo log flle 장애 처리방법  (0) 2014.11.05
Log Miner 활용하기  (0) 2014.11.05
control file, data file 연습문제  (0) 2014.11.04
Control file 복구  (0) 2014.11.04
Data file Recovery (불완전 복구)  (0) 2014.11.04
Data File Recovery  (0) 2014.10.30
사용자 암호설정/ Archive log mode, No Archive log mode  (0) 2014.10.29
반응형

오라클 접속시 사용자에게 암호 묻게 설정


sqlnet.ora 파일 설정


$ cd $ORACLE_HOME/network/admin

$ vi sqlnet.ora     ( 11g 처음 설치시 없으니 netca 를 이용해서 추가 )


sqlnet.authentication_services=(none)    추가한 후 저장.



orapw 파일 = sys 계정암호 저장되어 있는 파일    나머지 암호 정보는 dba_users 딕셔너리에 저장되어 있음


orapw 파일이 삭제되었을 경우 조치법


$ cd /app/oracle/product/11g/dbs

$ rm -rf orapwtestdb         <-- 삭제

$ sqlplus / as sysdba         실행시 에러발생


ERROR

ORA-01031 : insufficient privileges 


$ orapwd file = /app/oracle/product/11g/dbs/orapwtestdb

Enter password for SYS : ( sys 의 새 암호를 지정 )


※ SYS의 암호를 잊어버렸을 경우 orapwtestdb 파일을 지우고 위와 같은 방법으로 암호파일을 재생성 해주면 된다.




Archive Log Mode & No Archive Log Mode


Archive Log Mode - 혹시모를 에러를 대비해서 redo log file 을 다른 장소로 한번 더 archive 하는 방법

장애시 복구 가능

No Archive Log Mode - redo log file 을 archive 하지않고 운영하는 방법 ( 오라클 설치시 기본 모드 )

    장애시 복구 불가능





No Archive Log Mode -> Archive Log Mode

1. DB 종료 -> 2. Parameter File 수정 -> 3. DB Mount 로 시작 -> 4. mode 변경 -> 5. DB Open



( DB Open 상태라고 가정 ) 

step 1. DB 종료

SQL> shutdown immediate ;


step 2. parameter file 수정

< pfile 을 사용할 경우 >

SQL> !

$ vi $ORACLE_HOME/dbs/inittestdb.ora


(내용추가)

log_archive_start=true               <-- 9i 까지만 사용 10g 이상버전에서는 사용 안함

log_archive_dest_1='location=/data/arc1'           <-- 첫번째 저장경로 지정

log_archive_dest_2='location=/data/arc2'           <-- 두번째 저장경로 지정

log_archive_format=%s_%t_%r.arc                    <-- 아카이브 로그파일 이름 지정


< spfile 을 사용할 경우 >

(DB OPEN 상태에서)

SYS> alter system set log_archive_dest_1='location=/data/arc1' scope=spfile ;


SYS> alter system set log_archive_dest_2='location=/data/arc2' scope=spfile ;


SYS> alter system set log_archive_format="%s_%t%r.arc" scope=spfile ;


SYS> shutdown immediate ;



step 3. DB Mount 로 시작

SYS> startup mount ;


step 4. archive log mode 확인 및 변경

SYS> archive log list ;

Database log mode             No Archive Mode                 <-- 현재 모드 상태가 나옴

....

....


SYS> alter database archivelog ;                  <-- 아카이브 로그 모드로 변경  


step 5. DB 오픈

SYS> alter database open ;


step 6. log switch 수행하여 파일 생성 여부 확인

SYS> alter system switch logfile ;


SYS> /


SYS> /


SYS> !ls /data/arc1

43_1_798054423.arc    44_1_798054423.arc    45_1_798054423.arc


반응형

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

Redo log flle 장애 처리방법  (0) 2014.11.05
Log Miner 활용하기  (0) 2014.11.05
control file, data file 연습문제  (0) 2014.11.04
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