Oracle Database

RMAN으로 drop된 테이블스페이스 복구하기

·2016년 7월 15일·조회 13,062

결론부터 말씀드리면 저번주처럼 또 테스트 완료를 못했습니다.

테스트 db가 다른 문제로 올라오질 않아 테스트완료가 되지 못하였으나 작업한 곳까지 올리고 그 후에 하려고 했던 작업을 쓰는걸로 해야할것 같습니다.

1. 일단 테스트를 위해 테이블스페이스생성, 테이블생성, 데이터입력

여기서 테이블스페이스의 경우 ASM이어서 아래와 같은 문장만으로도 생성이 됩니다.

SQL> create tablespace TS_BACKUP_TEST datafile size 10m;
SQL> create table system.BACKUP_TEST_1 (no number, name varchar2(10)) tablespace TS_BACKUP_TEST;
SQL> insert into system.BACKUP_TEST_1 values (1,'AAA');
SQL> commit;

2. RMAN에 접속하여 백업수행하고 컨트롤파일백업만 다시 확인해봅니다.

왜냐하면 drop된 테이블스페이스복구의 key point가 바로 controlfile이기 때문이지요~

RMAN> backup database plus archivelog;
 
RMAN> list backup of controlfile;

List of Backup Sets
===================

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
71      Full    17.33M     DISK        00:00:01     15-JUL-16
        BP Key: 71   Status: AVAILABLE  Compressed: NO  Tag: TAG20160715T190200
        Piece Name: /backup/ARC/ORCL12/autobackup/2016_07_15/o1_mf_s_917290920_crkf4s8d_.bkp
  Control File Included: Ckp SCN: 4735515      Ckp time: 15-JUL-16

3. 그리고 삭제될 테이블스페이스가 백업이 잘 되어있나도 확인해봅니다.

RMAN> list backup of tablespace TS_BACKUP_TEST;

List of Backup Sets
===================

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
68      Full    1.70G      DISK        00:00:12     15-JUL-16
        BP Key: 68   Status: AVAILABLE  Compressed: NO  Tag: TAG20160715T190137
        Piece Name: /backup/ARC/ORCL12/backupset/2016_07_15/o1_mf_nnndf_TAG20160715T190137_crkf41dl_.bkp
  List of Datafiles in backup set 68
  File LV Type Ckp SCN    Ckp Time  Name
  ---- -- ---- ---------- --------- ----
  11      Full 4735494    15-JUL-16 +DATA/ORCL12/DATAFILE/ts_backup_test.385.917290659

4. 그리고 이제 테이블스페이스를 삭제합니다.

우리는 항상 자나깨나 drop문은 다시 봐야합니다. 이거 백업이 있다고 해도 drop은 항상 손떨리죠.

SQL> drop tablespace TS_BACKUP_TEST including contents and datafiles;
Tablespace dropped.
SQL> select * from system.backup_test_1;
select * from system.backup_test_1
                     *
ERROR at line 1:
ORA-00942: table or view does not exist

5. 이제 RMAN에 가서 테이블스페이스가 잘 백업이 되어있는지 다시 확인해봅니다.

RMAN>  list backup of tablespace TS_BACKUP_TEST;
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of list command at 07/15/2016 19:05:53
RMAN-20202: Tablespace not found in the recovery catalog
RMAN-06019: could not translate tablespace name "TS_BACKUP_TEST"

아니 아까 분명히 있었는데 없데요. 이상하네요. 그냥 restore를 수행해봅니다. 역시 없다네요.

그런 테이블스페이스는 알수가 없다는 에러를 뿌립니다.

RMAN> restore tablespace TS_BACKUP_TEST;
Starting restore at 15-JUL-16
using channel ORA_DISK_1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 07/15/2016 19:06:34
RMAN-20202: Tablespace not found in the recovery catalog
RMAN-06019: could not translate tablespace name "TS_BACKUP_TEST"

원인은 우리가 사용하는 catalog가 바로 control file이기 때문입니다.

현재의 control file에는 이미 TS_BACKUP_TEST라는 정보는 지워졌어요. 그래서 아까 백업본을 확인했던 그 컨트롤파일로 다시 DB를 올려볼꺼에요.

==> 그런데 여기까지 하고 DB를 내렸으나 내려가지도 올라오지도 않아 테스트를 못하였습니다.

이 이후에 진행할 내용은 아래와 같습니다.

DB의 문제로 아래 결과를 올리지는 못했지만 확인이 되는데로 아래 부분을 수정하도록 하겠습니다.

2016/07/20 : 테스트DB 기동으로 아래 테스트를 완료하였습니다. 아래 내용 참고부탁드립니다.

RMAN> shutdown immediate;
RMAN> startup nomount;
RMAN> restore controlfile from '/backup/ARC/ORCL12/autobackup/2016_07_15/o1_mf_s_917290920_crkf4s8d_.bkp';
Starting restore at 20-JUL-16
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=16 device type=DISK
channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:02
output file name=+DATA/ORCL12/CONTROLFILE/current.272.912335235
output file name=/backup/ARC/ORCL12/controlfile/o1_mf_cmwszmbm_.ctl
Finished restore at 20-JUL-16

RMAN> alter database mount;
Statement processed
released channel: ORA_DISK_1

RMAN> list backup of tablespace TS_BACKUP_TEST;
List of Backup Sets
===================

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
68      Full    1.70G      DISK        00:00:12     15-JUL-16
        BP Key: 68   Status: AVAILABLE  Compressed: NO  Tag: TAG20160715T190137
        Piece Name: /backup/ARC/ORCL12/backupset/2016_07_15/o1_mf_nnndf_TAG20160715T190137_crkf41dl_.bkp
  List of Datafiles in backup set 68
  File LV Type Ckp SCN    Ckp Time  Name
  ---- -- ---- ---------- --------- ----
  11      Full 4735494    15-JUL-16 +DATA/ORCL12/DATAFILE/ts_backup_test.385.917290659


RMAN> RUN {
set until scn 4735494;
restore database;
}

RMAN> RUN {
set until scn 4735494;
recover database;
}
executing command: SET until clause
Starting recover at 20-JUL-16
using channel ORA_DISK_1
starting media recovery
media recovery complete, elapsed time: 00:00:00
Finished recover at 20-JUL-16


RMAN> alter database open resetlogs;

SQL> select segment_name from dba_segments where tablespace_name='TS_BACKUP_TEST';
SEGMENT_NAME
--------------------------------------------------------------------------------
BACKUP_TEST_1
SQL> select * from system.BACKUP_TEST_1;
        NO NAME
---------- ----------
         1 AAA
         2 BBB

댓글 7

로그인 후 댓글을 남길 수 있습니다.

  • durecatdurecat· 2016년 7월 15일
    드디어 올려 주셨군요! 저도 테스트 해볼께요 ㅎㅎ
  • durecatdurecat· 2016년 7월 15일
    흠.. 앤님이 하신 데로 하니 저는 복구가 되는데요.. 문제가 멀까요.. alert 로그에 뜨는 다른 에러 메시지는 없는지요? 그리고 select * from v$recover_file; 한번 조회 해 보시면 어떨까요?
  • durecatdurecat· 2016년 7월 15일
    참고로 controlfile recovery 안하고 TSPITR(tablespace point-in-time recovery) 시도 해봤는데 하필 제가 standard 로 설치를 해놔서 enterprise에서만 된다고 에러가 나네요 ㅠㅠ RMAN> recover tablespace ts_backup_test until scn 803628; Starting recover at 15-JUL-16 using channel ORA_DISK_1 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of recover command at 07/15/2016 17:05:57 RMAN-06455: Tablespace Point-in-Time Recovery requires Enterprise Edition
  • · 2016년 7월 15일
    TSPITR 방식은 auxilary database를 임시로 구성하고 그곳에서 다시 가져오는 형태로 알고 있었는데 되는가봐요? 사실 그 방식도 이미 시도를 했었거든요 그래도 다시 해볼께요
  • durecatdurecat· 2016년 7월 16일
    auxilary 의미를 모르겠어서 그 옵션 빼고 실행했는데 에러가 나길래 ㅋㅋ
  • 이상연· 2016년 8월 25일
    안녕하세요, 해주신 테스트 내용으로 진행하여 Recover까지 정상 완료하였습니다, 근데 해당 테이블스페이스 안의 테이블이 desc까지는 정상적으로 출력되나 내용이 없네요...무슨문제일가요..
  • 이상연· 2016년 8월 25일
    SQL> select segment_name from dba_segments where tablespace_name='tbs_sec'; 선택된 레코드가 없습니다. SQL> select segment_name from dba_segments where tablespace_name='TBS_SEC'; SEGMENT_NAME -------------------------------------------------------------------------------- TB_CHARGE SQL> SQL> select * from TB_CHARGE; 선택된 레코드가 없습니다. SQL> desc TB_CHARGE; 이름 널? 유형 ----------------------------------------- -------- ---------------------------- NAME NOT NULL VARCHAR2(20) AGE NUMBER(3) CREATE_DATE DATE SQL>