DB 복구(Recovery)
controlfile 손실 시 복구
redologfile 손실 시 복구
datafile 손실 시 복구
controlfile 손실 시 복구
Controlfile다중화 목적 : 최신 시점으로 복구하기
다중화되어있는 컨트롤파일의 Member 중 하나라도 이상이 있으면 DB작동이 멈춘다.
반드시 DB를 종료한 상태에서 남아 있는 Member를 사용해서 복원해야한다.
절대 백업파일을 사용하지않는다.
백업파일을 사용해서 백업하는 경우는 오로지 다중화된 controlfile의 Member 모두가 손실된 경우.
상황 : Controlfile이 다중화되어 있는데 특정 member가 손실된 경우
1. DB켜는 중 오류를 발견
1 2 3 s> startup //출력 => nomount는 되지만 mount시 오류발생
DB종료
남아있는 member를 사용해서 손실된 member복구
어떤 member가 손상되었는지 log정보 확인하거나 파일위치를 호가인하여 어떤 member가 손실되었는지 확인한다.
파일이 있는데 손상되어있는 경우는 드물다.
보통은 손실되는 경우가 많다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 // 손상되거나 손실된 컨트롤파일 찾기 => fast_recovery_area에 있는 컨트롤파일이 사라졌다. SQL> show parameter control_files SQL> ! [oracle@localhost ~]$ cd [oracle@localhost ~]$ cd /u01/app/oracle/oradata/ORCL/controlfile/ [oracle@localhost controlfile]$ ls o1_mf_fwvn95xm_.ctl [oracle@localhost controlfile]$ cd [oracle@localhost ~]$ cd /u01/app/oracle/fast_recovery_area/orcl/ORCL/controlfile/ [oracle@localhost controlfile]$ ls [oracle@localhost controlfile]$ cd /home/oracle/ [oracle@localhost ~]$ ls 200820quizMySol.sql checkTablespaceNname.sql consNcol.sql hr1.sql ingMe.sql new_dept.sql 공개 바탕화면 서식 afiedt.buf cons1.sql control103.ctl hr2.sql labs_12c ora12c 다운로드 비디오 음악 backup cons2.sql hr.sql hr3.sql load_emp.sql search_cons.sql 문서 사진 [oracle@localhost ~]$ ^C // 컨트롤파일 복구 [oracle@localhost controlfile]$ cp o1_mf_fwvn95xm_.ctl /u01/app/oracle/fast_recovery_area/orcl/ORCL/controlfile/o1_mf_fwvn96cd_.ctl // 컨트롤파일 잘 복사되었는지 확인 [oracle@localhost controlfile]$ cd /u01/app/oracle/fast_recovery_area/orcl/ORCL/controlfile/ [oracle@localhost controlfile]$ ls o1_mf_fwvn96cd_.ctl
DB 재시작
아까는 mount되지않았던 DB가 정상적으로 start되는 것을 확인할 수 있다.
redologfile 손실 시 복구
redolog file은 group내 member가 하나라도 정상이면 DB는 정상적으로 작동한다.
남아있는 member를 사용해서 복구하지않는다 => redologfile은 reuse안됨
기존에 사용했던 redologfile명 재사용 할 수 없다.
손실된 member 삭제하고 새로 다중화해야한다.
redologfile 다중화 목적 : DB가 멈추지않고 계속 운영할수있도록 위함
1. redolog file확인
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 SQL> select group GROUP ---------- ---------- 1 3 2 3 3 3 4 3 SQL> select group GROUP ---------- -------------------------------------------------- 3 /u01/app/oracle/oradata/ORCL/onlinelog/o1_mf_3_fwv n9t6z_.log 3 /u01/app/oracle/fast_recovery_area/orcl/ORCL/onlin elog/o1_mf_3_fwvn9xf6_.log 2 /u01/app/oracle/oradata/ORCL/onlinelog/o1_mf_2_fwv n9ddv_.log 2 /u01/app/oracle/fast_recovery_area/orcl/ORCL/onlin elog/o1_mf_2_fwvn9l85_.log GROUP ---------- -------------------------------------------------- 1 /u01/app/oracle/oradata/ORCL/onlinelog/o1_mf_1_fwv n9ddb_.log 1 /u01/app/oracle/fast_recovery_area/orcl/ORCL/onlin elog/o1_mf_1_fwvn9o6v_.log 4 /u01/app/oracle/oradata/ORCL/onlinelog/redo4a.log 4 /u01/app/oracle/fast_recovery_area/orcl/ORCL/onlin elog/redo4b.log GROUP ---------- -------------------------------------------------- 1 /u01/app/oracle/oradata/ORCL/datafile/redo1c.log 2 /u01/app/oracle/oradata/ORCL/datafile/redo2c.log 3 /u01/app/oracle/oradata/ORCL/datafile/redo3c.log 4 /u01/app/oracle/oradata/ORCL/datafile/redo4c.log 12 rows selected.
redolog file복구 명령어
1 2 3 4 5 6 7 // redologfile 일부러 삭제 alter database drop logfile member '/u01/app/oracle/oradata/ORCL/onlinelog/o1_mf_1_fwvn9ddb_.log' // rodologfile 복구 alter database add logfile member '/u01/app/oracle/oradata/ORCL/onlinelog/o1_mf_1_fwvn9ddb_1.log'
datafile 손실 시 복구
Recovery = Restore + Recover
Restore(복원) : 백업 파일로부터 손실된 파일을 디살리는 작업
Recover(복구) : datafile만 해당되는 작업
케이스 2가지
Non-critical datafile(일반 Datafile) 손실 시
critical datafile(필수 Datafile-system, undo) 손실 시
Non-critical datafile(일반 Datafile) 손실 시 - DB켜는 중에 손실 상황) DB켜는 중에 데이터파일4의 손실 발생했을 때
DB mount됨(open안됨)
손실된 datafile을 offline시킴
1 s> alter database datafile 4 offline;
DB오픈 시킴
restore : 백업으로부터 손실된 datafile만 복원
1 $>cp /home/oracle/backup/user01.dbf /u01/.../datafile/user01.dbf
recover : 복원된 datafile만 복구(부분 DB복구)
복구가 완료된 datafile online 시킴
1 4> alter database datafile 4 online;
Non-critical datafile(일반 Datafile) 손실 시 - DB켜져있는 중에 손실발생 상황) DB켜져있는 중에 데이터파일4의 손실 발생했을 때
손실된 datafile만 offline시킴
1 s> alter database datafile 4 offline immediate;
DB오픈 유지함
restore : 백업으로부터 손실된 datafile만 복원
1 $> cp /home/oracle/backup/user01.dbf /u01/.../datafile/user01.dbf
recover : 복원된 datafile만 복구(부분 DB복구)
복구가 완료된 datafile online 시킴
1 s> alter database datafile 4 online;
Non-critical datafile 손실 시 복구 예시 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 // datafiles 조회 SQL> select file#, name from v$datafile; FILE# NAME ---------- -------------------------------------------------- 1 /u01/app/oracle/oradata/ORCL/datafile/o1_mf_system _fwvn49fw_.dbf 2 /u01/app/oracle/oradata/ORCL/datafile/o1_mf_users_ hp871s7n_.dbf 3 /u01/app/oracle/oradata/ORCL/datafile/o1_mf_sysaux _fwvn5f1l_.dbf 4 /u01/app/oracle/oradata/ORCL/datafile/o1_mf_undotb s1_fwvn66mp_.dbf FILE# NAME ---------- -------------------------------------------------- 5 /u01/app/oracle/oradata/ORCL/datafile/o1_mf_exampl e_hp86s7s0_.dbf 7 /u01/app/oracle/oradata/ORCL/datafile/o1_mf_users_ fwvn681o_.dbf 8 /u01/app/oracle/oradata/ORCL/datafile/appuser01.dbf 9 /u01/app/oracle/oradata/ORCL/datafile/appuser02.dbf ---------- -------------------------------------------------- 8 rows selected. // DB종류 후 데이터파일 일부러 손실시키기 (rm 명령어 = 삭제) SQL> shut immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> ! [oracle@localhost ~]$ cd /u01/app/oracle//oradata/ORCL/datafile/ [oracle@localhost datafile]$ ls appuser01.dbf o1_mf_sysaux_fwvn5f1l_.dbf o1_mf_undotbs1_fwvn66mp_.dbf redo1c.log redo4c.log appuser02.dbf o1_mf_system_fwvn49fw_.dbf o1_mf_users_fwvn681o_.dbf redo2c.log o1_mf_example_hp86s7s0_.dbf o1_mf_temp_fwvnbgvk_.tmp o1_mf_users_hp871s7n_.dbf redo3c.log [oracle@localhost datafile]$ rm o1_mf_users_hp871s7n_.dbf [oracle@localhost datafile]$ exit exit // DB켜기 SQL> startup ORACLE instance started. Total System Global Area 838860800 bytes Fixed Size 8626240 bytes Variable Size 620761024 bytes Database Buffers 201326592 bytes Redo Buffers 8146944 bytes Database mounted. ORA-01157: cannot identify/lock data file 2 - see DBWR trace file ORA-01110: data file 2: '/u01/app/oracle/oradata/ORCL/datafile/o1_mf_users_hp871s7n_.dbf' // 손실된 datafile만 offline시키기 SQL> alter database datafile 2 offline; Database altered. // DB 오픈시키기 SQL> alter database open; Database altered. // 백업폴더로부터 손실된 datafile만 restore시키기 SQL> ! [oracle@localhost ~]$ cd /home/oracle/backup/ [oracle@localhost backup]$ ls appuser01.dbf conbk.ctl o1_mf_sysaux_fwvn5f1l_.dbf o1_mf_undotbs1_fwvn66mp_.dbf o1_mf_users_hp871s7n_.dbf appuser02.dbf o1_mf_example_hp86s7s0_.dbf o1_mf_system_fwvn49fw_.dbf o1_mf_users_fwvn681o_.dbf [oracle@localhost backup]$ cp /home/oracle/backup/o1_mf_users_hp871s7n_.dbf /u01/app/oracle/oradata/ORCL/datafile/o1_mf_users_hp871s7n_.dbf [oracle@localhost backup]$ exit exit // 복원된 datafile만 recover하기(부분 복구) SQL> recover datafile 2; Media recovery complete. // 복구가 완료된 datafile online 시키기 SQL> alter database datafile 2 online; Database altered. // 잘 복구되었는지 확인 SQL> shut immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> startup ORACLE instance started. Total System Global Area 838860800 bytes Fixed Size 8626240 bytes Variable Size 620761024 bytes Database Buffers 201326592 bytes Redo Buffers 8146944 bytes Database mounted. Database opened.
datafile online까지 잘 진행되었다면 DB를 껐다가 재접속시 원할하게 접속 가능하다!
critical datafile 손실 시 복구 상황 : system01.dbf(file# : 1)
손실한 경우
DB 종료
DB mount시킨다
mount상태에서 restore와 recover를 진행해야한다.
restore : 백업 파일로부터 손실된 Datafile만 복원
1 $> cp /home/oracle/backup/system01.dbf /u01/.../datafile/system01.dbf
recover : 모든 datafile복구(전체 DB 복구)
부분 복구가 아니라 전체 datafile을 복구해야한다.
DB open시킨다.
1 SQL> alter database open;
critical datafile 손실 시 복구 예시
rm *system*
파일중에 system이 들어간 파일을 삭제하겠다는 쿼리.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 //DB를 끄고 dafatile 중 system파일을 일부러 손실시킨다 SQL> shut immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> ! [oracle@localhost ~]$ cd /u01/app/oracle/oradata/ORCL/datafile/ [oracle@localhost datafile]$ ls appuser01.dbf o1_mf_sysaux_fwvn5f1l_.dbf o1_mf_undotbs1_fwvn66mp_.dbf redo1c.log redo4c.log appuser02.dbf o1_mf_system_fwvn49fw_.dbf o1_mf_users_fwvn681o_.dbf redo2c.log o1_mf_example_hp86s7s0_.dbf o1_mf_temp_fwvnbgvk_.tmp o1_mf_users_hp871s7n_.dbf redo3c.log [oracle@localhost datafile]$ rm *system* [oracle@localhost datafile]$ ls appuser01.dbf o1_mf_example_hp86s7s0_.dbf o1_mf_temp_fwvnbgvk_.tmp o1_mf_users_fwvn681o_.dbf redo1c.log redo3c.log appuser02.dbf o1_mf_sysaux_fwvn5f1l_.dbf o1_mf_undotbs1_fwvn66mp_.dbf o1_mf_users_hp871s7n_.dbf redo2c.log redo4c.log [oracle@localhost datafile]$ exit exit SQL> show user USER is "SYS" SQL> startup ORACLE instance started. Total System Global Area 838860800 bytes Fixed Size 8626240 bytes Variable Size 620761024 bytes Database Buffers 201326592 bytes Redo Buffers 8146944 bytes Database mounted. ORA-01157: cannot identify/lock data file 1 - see DBWR trace file ORA-01110: data file 1: '/u01/app/oracle/oradata/ORCL/datafile/o1_mf_system_fwvn49fw_.dbf' // DB 종료 후 mount 시킨다. SQL> shut abort ORACLE instance shut down. SQL> startup mount ORACLE instance started. Total System Global Area 838860800 bytes Fixed Size 8626240 bytes Variable Size 620761024 bytes Database Buffers 201326592 bytes Redo Buffers 8146944 bytes Database mounted. // restore한다 SQL> ! [oracle@localhost ~]$ ls 200820quizMySol.sql checkTablespaceNname.sql consNcol.sql hr1.sql ingMe.sql new_dept.sql 공개 바탕화면 서식 afiedt.buf cons1.sql control103.ctl hr2.sql labs_12c ora12c 다운로드 비디오 음악 backup cons2.sql hr.sql hr3.sql load_emp.sql search_cons.sql 문서 사진 [oracle@localhost ~]$ cd backup/ [oracle@localhost backup]$ ls appuser01.dbf conbk.ctl o1_mf_sysaux_fwvn5f1l_.dbf o1_mf_undotbs1_fwvn66mp_.dbf o1_mf_users_hp871s7n_.dbf appuser02.dbf o1_mf_example_hp86s7s0_.dbf o1_mf_system_fwvn49fw_.dbf o1_mf_users_fwvn681o_.dbf [oracle@localhost backup]$ cp o1_mf_system_fwvn49fw_.dbf /u01/app/oracle/oradata/ORCL/datafile/o1_mf_system_fwvn49fw_.dbf [oracle@localhost backup]$ exit exit // recover한다 SQL> recover database; Media recovery complete. // DB open시킴 SQL> alter database open; Database altered. // DB 어디까이 켜져있는지 확인 SQL> select status from v$instance ; STATUS ------------------------ OPEN