2012. 7. 11. 17:35

-18 Enterprise DBA Part 1B: Backup and Recovery Workshop

완전 복구 : 방식1(마운트된 데이타 베이스)

상황 : 검사한 결과 데이타 파일 2가 저장된 디스크 2에 훼손된 블록이 있다는 것을
발견했으며 V$DATAFILE 및 V$TABLESPACE 뷰를 보고 데이터 파일 2가 시스템 테이블스
페이스에 속한 파일 중 하나임을 확인.


1. 가능하면 가장 최근 벡업에서 파일을 복원한다.

        UNIX> host cp /disk1/backup/df2.dbf /disk2/data/
        NT > host copy c:\backup\df2.dbf d:\data\


2. MOUNT 모드로 인스턴스를 시작하고 데이터 파일을 복구한다.

        SQL> startup mount pfile=initDB00.ora
        or SQL> recover datafile ‘/disk2/data/df2.dbf‘;
        ORA-00279: change 148448 ...11/29/97 17:04:20 needed for thread
        ORA-00289: suggestion : /disk1/archive/arch_6.rdo
        ORA-00280: change 148448 for thread 1 is in sequence #6
        Log applied.
        ...
        Media recovery complete.

3. 데이터 파일을 실패 시점으로 되돌리기 위해 필요한 모든 아키이브된 로그 및 리두
로그가 적용되었다.


4. 복구가 완료되면 모든 데이터 파일이 동기화된다. 데이타베이스를 연다.

        SQL> alter database open;

사용자에게 데이타베이스를 사용할 수 있다는 것을 알리고 시스템 장애가 발생한 시점
이전에 COMMIT 되지 않은 데이터를 다시 입력 한다.

- 참고 사항 -

• 적용할 아카이브된 로그가 많은 경우에는 RECOVER 명령의 AUTOMATIC기능을 사용하거
나 SQL*PLUS 명령을 사용한다.

        SQL> set autorecovery on

        SQL> recover database;

• 이 복구 방법을 사용하는 동안에는 데이타베이스가 Closed 된 상태여야 하므로 복구
프로세스 동안 사용자는 전체 데이타베이스를 엑세스 할 수 없다.

• 사용할 수 있는 공간이 충분한 경우 현재 LOG_ARCHIVE_DEST에 지정되어 있는 위치로
필요한 아키이브된 리두로그 파일을 복원한다.



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


5-20 Enterprise DBA Part 1B: Backup and Recovery Workshop

Lesson 5: Complete Recovery Without Recovery Manager

완전 복구 : 방식2(오픈 데이터베이스 복구를 시작할 때 데이타베이스가 열려 있는 경우)

상황 : 매체고장이 아니라 실수로 데이터 파일 번호 2를 제거한경우 데이터베이스가 현재
오픈되어 있으므로 다음 명령을 사용하여 해당 데이터파 파일이 어느 데이블 스페이스에
속한 것인지 확인할 수 있다.

        SQL> select file_id f#, file_name,
        2> tablespace_name tablespace, status
        3> from dba_data_files;
        F# FILE_NAME TABLESPACE STATUS
        ---- ---------------------------------- ---------- ---------
        1     /disk1/data/system_01.dbf         SYSTEM     AVAILABLE
        2     /disk2/data/df2.dbf               USER_DATA  AVAILABLE
        3     /disk1/data/rbs01.dbf             RBS        AVAILABLE
        ...


1. 데이터파일이 시스템 또는 롤빽 세그먼트 데이터 파일이 아니므로 방식 2를 사용할 수
있다. 데이터 파일 2를 오프라인 상태로 만들어야 하는 지 여부를 결정해야 한다. 이경우
오라클 서버가 이미 이 파일을 오프라인 상태로 만들었다.

        SQL> select d.file# f#, d.name, d.status, h.status
           2 from v$datafile d, v$datafile_header h
           3 where d.file# = h.file#;
         F#   D.NAME                                 D.STATUS   H.STATUS
        ---- ---------------------------------- ---------- ---------
          1   /disk1/data/system_01.dbf          SYSTEM    ONLINE
             2   /disk2/data/df2.dbf                RECOVER   OFFLINE
             3   /disk1/data/rbs_01.dbf             ONLINE    ONLINE
        ...

2. 파일이 오프라인이므로 이제 파일을 성공적으로 복원할 수 있다.

        UNIX > host cp /disk1/backup/df2.dbf /disk2/data/
        NT > host copy c:\backup\df2.dbf d:\data\

3. RECOVER 또는 ALTER DATABASE RECOVER 명령을 사용하여 복원된 데이터 파일에 아카이브
로그 및 리두 로그를 적용한다.
        SQL> recover datafile ‘/disk2/backup/df2.dbf‘;
        or SQL> recover tablespace USER_DATA;

4. 복구가 완료되면 모든 데이터 파일이 동기화 된다. 데이터 파일을 온라인 상태로 만든다.

        SQL> alter database datafile ‘/disk2/data/df2.dbf‘ online;
        or SQL> alter tablespace USER_DATA online;

- 참고사항 -
• 경우에 따라 오라클은 파일 문제를 감지하여 해당 파일을 자동으로 오프라인 상태로 만든다.
따라서 복구 전에 경고 로그를 검사하여 오류가 있는지 확인하고 파일의 상태를 검사한다.
OFFLINE 상태인 파일은 복구가 필요 할 수 있다.

• 테이블스페이스를 오프라인 상태로 만들면 모든 데이터 파일이 오프라인 상태가 되므로 해당
테이블 스페이스에 포함된 어떠한 데이터도 액세스 할 수 없다. 다중 파일 테이블 스페이스의
경우 하나의 데이터 파일이 오프라인 상태가 되면 해당 데이터 파일에 포함된 데이터만 엑세스
할 수 없게 되고 테이블 스페이스는 계속 사용할 수 있는 상태로 남는다.

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


5-22 Enterprise DBA Part 1B: Backup and Recovery Workshop

완전 복구 : 방식 3(오픈 데이터베이스, 복구를 시작할 때 DB가 Closed 되어 있는경우)
상황 : 매체 고장이 디스크 다행히 디스크 2만 포함하는 디스크 제어 장치의 오류로 인한 것임을 확인 했다. 또한 자세히 조사해본 결과 데이터 파일 2가 시스템 또는 롤백 세스먼트 데이터 파일이 아니며 사용자의 월말 보고서 작업에 방해가 되지 않는 다는 것을 알수 있었다.

1. 데이터베이스를 마운트 한다. 데이터 파일 2를 열 수 없으므로 데이터베이스가 열리지 않는다.

        SQL> startup mount pfile=$HOME/initDB00.ora
        Database mounted.
            해당 파일이 속한 테이블스페이스 번호를 모를 경우 다음 명령을 사용한다.
        
        SQL> select d.file#, d.ts#, h.tablespace_name, d.name,
        2 h.error
        3 from v$datafile d, v$datafile_header h
        4 where d.file# = h.file#;

        FILE#  TS#  TABLESPACE         NAME                           Error
        ----- --- ---------- ------------------------- --------------
        1         0         SYSTEM         /disk1/data/system01.dbf
        2         1                           /disk2/data/df2.dbf            FILE NOT FOUND
        3         2         RBS                   /disk1/data/rbs01.dbf
        ...

2. 데이터 파일이 오프라인 상태가 아니면 데이터베이스가 오픈되지 않으므로 파일을 오프라인 상태로만들어야 한다. V$DATAFILE을 질의하여 파일이 온라인 상태임을 확인했다. 따라서 다음 명령을 실행해야 한다.
        
        SQL> alter database datafile '/disk2/data/df2.dbf' offline;
        참고 : DB가 오픈되지 않았으므로 여기서는 ALTER TABLESPACE 명령을 사용할 수 없다

3. 이제 데이터베이스를 오픈 할 수 있다.
        SQL> alter database open;

4. 사용자가 시스템을 엑세스하여 파일을 복원할 수 있게 되었다. 파일을 손상된 디스크 2에 복원할 수 없으므로 디스크 3에 복원한다.
        for UNIX > host cp /disk1/backup/df2.dbf /disk3/data/
        for NT> host copy c:\backup\df2.dbf e:\data\
이제 Oracle 서버에 새 파일의 위치를 알려야 한다.
        SQL> alter database rename file '/disk2/data/df2.dbf'
        2         to '/disk3/data/df2.dbf';
데이터베이스가 열려 있고 테이블스페이스 복구가 필요한 경우 해당 데이터 파일을 소유하고 있는 테이블스페이스의 이름을 확인하려면 다음과 같이 한다.
        SQL> select file_id f#, file_name,
        2 tablespace_name tablespace, status
        3 from dba_data_files;
        F#     FILE_NAME                                 TABLESPACE STATUS
        ---- ---------------------------------- ---------- ---------
        1       /disk1/data/system_01.dbf                          SYSTEM        AVAILABLE
        2       /disk3/data/df2.dbf                                     USER_DATA  AVAILABLE
        3       /disk1/data/rbs01.dbf                                 RBS               AVAILABLE

5. RECOVER 또는 ALTER DATABASE RECOVER 명령을 사용하여 복원된 데이터 파일에 아카이브 및 리두 로그를 적용하기 시작한다.
        SQL> recover datafile '/disk3/data/df2.dbf';
        or SQL> recover tablespace USER_DATA;

6. 복구가 완료되면 모든 데이터 파일이 동기화된다. 데이터 파일을 온라인 상태로 만든다.
        SQL> alter database datafile '/disk3/data/df2.dbf' online;
        or SQL> alter tablespace USER_DATA online;

7. 사용자에게 데이터베이스를 사용할 수 있다는 것을 알리고 시스템 장애가 발생한 시점에 커밋되지 않은 데이터를 다시 입력하도록 한다.



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



Enterprise DBA Part 1B: Backup and Recovery Workshop 5-25


완전 복구 : 방식 4(벡업 없는 데이터 파일의 손실)
상황 : 디스크 1에 있는 데이터 파일 7이 손실되었으므로 즉시 백업 테이프를 확인한다. 그러나 복원 중에 해당 파일이 벡업되지 않았다는 오류 메시지를  받았다. 이틀 전 TABLE_DATA 테이블스페이스를 생성한 DBA를 찾아내어 중요한 사용자 데이터가 이 테이블스페이스에 포함되어 있다는 사실을 알아냈으며 이 데이터는 벡업 전략에 포함되지 않는 다는 것을 발견하였다. 이 경우 데이터 파일 7이 시스템 또는 롤벡 세그먼트 데이터 파일이 아니고 지난 이틀 동안 아카이브된 모든 로그를 갖고 있으므로 방식 4를 사용하는 것이 가장 좋다.

1. 데이터베이스가 Closed되어 있는 경우 데이터베이스를 마운트하여 벡업이 없는 해당 데이터 파일을 오프라인 상태로 만든 다음 데이터베이스를 오픈한다. 이렇게 하면 TABLE_DATA 테이블스페이스가 필요 없는 사용자는 시스템에서 작업을 할 수 있다. 테이블 스페이스가 오픈되어 있는 경우 데이터 파일을 오프라인 상태로 만든다. 테이블스페이스가 하나의 데이터 파일만을 포함하므로 다양성을 주기 위해 데이터 파일이 아닌 테이블스페이스를 오프라인으로 설정한다.
참고 : 데이터베이스가 오픈되어 있는 경우 체크포인트가 존재하지 않는 파일에 쓰기 시도하지 않도록 immediate 옵션을 포함시켜야 한다.

        SQL> alter tablespace TABLE_DATA offline immediate;
        Tablespace altered.

벡업의 상태를 검사하기 위해 V$RECOVER_FILE을 질의하여 복구 상태를 확인한다.
        SQL> select * from v$recover_file;
        FILE#  ONLINE   ERROR                      CHANGE# TIME
        ----- ------- ------------------ ------- ----
              7  OFFLINE  FILE NOT FOUND      0

2. 이제 파일을 재생성해야 한다.
        SQL> alter database create datafile '/disk2/DATA/df7.dbf'
             2  as '/disk1/DATA/df7.dbf';
        Database altered.
        SQL> select * from v$recover_file;
        FILE#  ONLINE   ERROR                        CHANGE# TIME
        ----- ------- ------------------ ------- ---------
              7  OFFLINE                                      248621    01-DEC-97

3. RECOVER 또는 ALTER DATABASE RECOVER 명령을 사용하여 복원된 데이터 파일에 아카이브 및 리두 로그를 적용하기 시작한다.
        SQL> recover tablespace TABLE_DATA;

4. 데이터 파일을 실패 시점으로 되돌리기 위해 필요한 모든 아카이브된 로그 및 리두 로그가 적용된다.

5. 이제 모든 데이터 파일이 동기화 되었다.

6. 복구가 완료되면 데이터 파일을 온라인 상태로 만든다. 하나의 데이터 파일만 온라인 상태로 만들 수 있다. 데이터 파일 대신 1단계에서의 테이블스페이스를 사용하고 있다는 점에 유의.
        SQL> alter tablespace TABLE_DATA online;
이제 모든 데이터가 복구되었다. 벡업 전략에 해당 파일을 포함시킨 다음, 사용자에게 테이블스페이스를 다시 사용할 수 있다는 것을 알린다.

Posted by 몰라욧