오라클 복구 시나리오
2010.05.12 08:49
원문 : http://www.ischo.net -- 조인상 // 시스템 엔지니어
Writer : http://www.ischo.net -- ischo // System Engineer in Replubic Of Korea
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
본문 : http://www.ischo.net -- 조인상 //시스템 엔지니어
출처 : http://blog.naver.com/redsark/150067387249
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
시나리오 1.
noarchive mode, offline backup
datafile 유실 또는 깨졌을 때
SQL> startup
ORACLE instance started.
Total System Global Area 85292300 bytes
Fixed Size 70924 bytes
Variable Size 40775680 bytes
Database Buffers 44367872 bytes
Redo Buffers 77824 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 3 - see DBWR trace file
ORA-01110: data file 3: 'C:\ORACLE\ORADATA\ORCL1\USERS01.DBF'
=====================================================================
-- startup시 mount 상태이므로 offbackup 파일을 복사하기위해 DB shutdown
shutdown
-- host copy [offbackup 경로] [해당 oracle sid 경로]
host copy c:\oracle\offbackup\. c:\oracle\oradata\orcl1
-- DB open
startup
시나리오 2.
noarchive mode, offline backup
temp datafile 유실 또는 깨졌을 때
SQL> startup
ORACLE instance started.
Total System Global Area 85292300 bytes
Fixed Size 70924 bytes
Variable Size 40775680 bytes
Database Buffers 44367872 bytes
Redo Buffers 77824 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 4 - see DBWR trace file
ORA-01110: data file 4: 'C:\ORACLE\ORADATA\ORCL1\TEMP01.DBF'
startup 시 문제가 생긴 datafile이 temp 파일인 것을 확인할 수 있다.
temp 파일은 DB 운영시 데이터가 들어있는 중요한 파일이 아니므로 temp datafile 을 offline 시킨후 DB 가동후 재생성 해준다.
temp 파일을 일반 datafile 복구시처럼 offbackup 에 있는 데이터를 restore 하면 꽤 많은 시간이 걸리기 때문이다.
=====================================================================
-- DB mount 상태에서
alter database datafile 'C:\ORACLE\ORADATA\ORCL1\TEMP01.DBF' offline drop;
alter database open;
drop tablespace temp;
-- temp tablespace 생성 (orcl1 에 알맞은 sid 명으로 변경한다.)
create tablespace temp
datafile 'c:\oracle\oradata\orcl1\temp01.dbf' size 20m
temporary;
시나리오 5.
archive mode, offline backup
datafile 유실 또는 깨졌을 때
SQL> startup
ORACLE instance started.
Total System Global Area 85292300 bytes
Fixed Size 70924 bytes
Variable Size 40775680 bytes
Database Buffers 44367872 bytes
Redo Buffers 77824 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 3 - see DBWR trace file
ORA-01110: data file 3: 'C:\ORACLE\ORADATA\ORCL1\USERS01.DBF'
문제가 생긴 파일을 host copy 명령을 사용해 restore 시킨다.
SQL> startup
ORACLE instance started.
Total System Global Area 85292300 bytes
Fixed Size 70924 bytes
Variable Size 40775680 bytes
Database Buffers 44367872 bytes
Redo Buffers 77824 bytes
Database mounted.
ORA-01113: file 3 needs media recovery
ORA-01110: data file 3: 'C:\ORACLE\ORADATA\ORCL1\USERS01.DBF'
DB를 빠른시간 내에 open 하기 위해 문제가 생긴 datafile을 offline 시킨뒤 DB open 한 후 recovery를 수행한다.
=====================================================================
-- offbackup 해둔 datafile 을 host copy 명령으로 복사한다.
host copy c:\oracle\offbackup\users01.dbf c:\oracle\oradata\orcl1
-- users01.dbf 는 문제가 생긴 datafile 로 변경한다.
alter database datafile 'C:\ORACLE\ORADATA\ORCL1\USERS01.DBF' offline;
-- DB open
alter database open;
-- 해당 tablespace 를 offline 시킨다.
alter tablespace users offline immediate;
-- 복구
recover tablespace users;
-- 해당 tablespace 를 online 시킨다.
alter tablespace users online;
시나리오 6.
archive mode, offline backup
users, temp datafile 유실 또는 깨졌을 때
SQL> startup
ORACLE instance started.
Total System Global Area 85292300 bytes
Fixed Size 70924 bytes
Variable Size 40775680 bytes
Database Buffers 44367872 bytes
Redo Buffers 77824 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 3 - see DBWR trace file
ORA-01110: data file 3: 'C:\ORACLE\ORADATA\ORCL1\USERS01.DBF'
startup 시 data file 3, users01.dbf 에만 문제가 있다고 나온다. 하지만 DBWR trace file을 열어보면
*** 2005-12-25 21:57:51.953
*** SESSION ID:(2.1) 2005-12-25 21:57:51.937
ORA-01157: cannot identify/lock data file 3 - see DBWR trace file
ORA-01110: data file 3: 'C:\ORACLE\ORADATA\ORCL1\USERS01.DBF'
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 2) 지정된 파일을 찾을 수 없습니다.
ORA-01157: cannot identify/lock data file 4 - see DBWR trace file
ORA-01110: data file 4: 'C:\ORACLE\ORADATA\ORCL1\TEMP01.DBF'
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 2) 지정된 파일을 찾을 수 없습니다.
users01.dbf, temp01.dbf 두 파일에 문제가 있다는 것을 알 수 있다.
users datafile은 시나리오 5 처럼 복구하며,
temp 파일은 DB 운영시 데이터가 들어있는 중요한 파일이 아니므로 temp datafile 을 offline 시킨후 DB 가동후 재생성 해준다.
=====================================================================
-- users01.dbf 파일 복사
host copy c:\oracle\offbackup\users01.dbf c:\oracle\oradata\orcl1
-- DB open, mount 상태에서 에러가 발생한다.
startup
-- users01.dbf 파일을 offline 시킨다.
alter database datafile 'C:\ORACLE\ORADATA\ORCL1\USERS01.DBF' offline;
-- temp01.dbf open 후 재생성 해주기 위해 제거한다.
alter database datafile 'C:\ORACLE\ORADATA\ORCL1\TEMP01.DBF' offline drop;
-- DB open
alter database open;
-- users tablespace 를 offline 시킨다.
alter tablespace users offline immediate;
-- 복구
recover tablespace users;
-- users tablespace 를 online 시킨다.
alter tablespace users online;
-- temp tablespace를 drop 시킨다.
drop tablespace temp;
-- temp tablespace 생성 (orcl1 에 알맞은 sid 명으로 변경한다.)
create tablespace temp
datafile 'c:\oracle\oradata\orcl1\temp01.dbf' size 20m
temporary;
시나리오 10.
archive mode, offline backup, 불완전 복구
사용자의 실수로 중용한 table 을 drop 한 경우
table 을 drop 한 대략적인 시간을 알고 있을 경우
모든 DBF 파일만을 RESTORE 한 후 다음 mount 단계에서 다음 명령을 수행한다.
RECOVER DATABASE UNTIL TIME '시간 형식'
=====================================================================
-- 모든 datafile을 host copy 명령으로 복사한다.
host copy c:\oracle\offbackup\*.dbf c:\oracle\oradata\orcl1
-- DB open
startup
-- recover
recover database until time '2005/12/25:23:36:56'
-- DB open with resetlogs option
alter database open resetlogs;
-- 불완전 복구 후에는 반드시 offbackup을 수행한다.
@offback
시나리오 11.
archive mode, offline backup, 불완전 복구
archive file 이 유실됬을 경우
datafile 복구시 유실된 arhive file 직전까지 복구
모든 DBF 파일만을 RESTORE 한 후 다음 mount 단계에서 다음 명령을 수행한다.
RECOVER DATABASE UNTIL CANCEL
ORA-00279: change 462868 generated at 12/25/2005 23:47:28 needed for thread 1
ORA-00289: suggestion : C:\ORACLE\ORADATA\ORCL1\ARCHIVE\ORCL1T001S00013.ARC
ORA-00280: change 462868 for thread 1 is in sequence #13
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
Media recovery cancelled.
위 명령 수행후 유실된 archive file 이 나오면 cancel 을 입력한다.
=====================================================================
-- 모든 datafile을 host copy 명령으로 복사한다.
host copy c:\oracle\offbackup\*.dbf c:\oracle\oradata\orcl1
-- DB open
startup
-- recover
recover database until cancel
-- DB open with resetlogs option
alter database open resetlogs;
-- 불완전 복구 후에는 반드시 offbackup을 수행한다.
@offback
시나리오 12.
archive mode, offline backup, 불완전 복구
사용자의 실수로 중용한 table 을 drop 한 경우
DBMS_LOGMNR 패키지를 사용하여 해당 명령 의 실행시간을 확인하여 그 명령의 직전까지 복구하는 방법
pfile 내에 utl_file_dir 파라미터 추가하는 작업이 필요하다.
..
utl_file_dir = "c:\oracle"
..
모든 DBF 파일만을 RESTORE 한 후 다음 mount 단계에서 다음 명령을 수행한다.
RECOVER DATABASE UNTIL TIME '시간 형식'
=====================================================================
-- dbms_logmnr 패키지가 설치되지 않았을 경우 패키지 설치
@C:\ORACLE\ORA81\RDBMS\ADMIN\DBMSLMD
@C:\ORACLE\ORA81\RDBMS\ADMIN\DBMSLM
-- build, LOGMNR DICTIONARY FILE 을 생성해 준다.
exec dbms_logmnr_d.build('816.ora','c:\oracle');
-- 분석하고자 하는 redo log file, archive log file 을 추가
exec dbms_logmnr.add_logfile('c:\oracle\oradata\orcl1\redo03.log',dbms_logmnr.new);
exec dbms_logmnr.add_logfile('c:\oracle\oradata\orcl1\redo02.log',dbms_logmnr.addfile);
exec dbms_logmnr.add_logfile('c:\oracle\oradata\orcl1\redo01.log',dbms_logmnr.addfile);
exec dbms_logmnr.add_logfile('c:\oracle\oradata\orcl1\archiveORCL1T001S00004.ARC',dbms_logmnr.addfile);
exec dbms_logmnr.add_logfile('c:\oracle\oradata\orcl1\archiveORCL1T001S00003.ARC',dbms_logmnr.addfile);
exec dbms_logmnr.add_logfile('c:\oracle\oradata\orcl1\archiveORCL1T001S00002.ARC',dbms_logmnr.addfile);
exec dbms_logmnr.add_logfile('c:\oracle\oradata\orcl1\archiveORCL1T001S00001.ARC',dbms_logmnr.addfile);
-- logmnr 수행, v$logmnr_c dictionary 가 생성된다.
exec dbms_logmnr.start_logmnr(dictfilename => 'c:\oracle\816.ora');
시나리오 13.
archive mode, offline backup 이 없을 때, 해당 datafile 에 관한 모든 archive log file 이 존재할때, 완전 복구
backup 을 하지 않은 datafile 을 유실 또는 깨졌을 때
control file에는 해당 datafile에 대한 정보가 남아 있으므로 그 정보와 archive log file을 사용하여 복구한다.
control file에 존재하는 ap01.dbf datafile에 대한 정보를 사용하여 datafile을 생성한 후 복구한다.
=====================================================================
-- 손상돈 datafile을 생성 한다. (
alter database create datafile 'c:\oracle\oradata\orcl1\ap01.dbf';
-- 복구
recover datafile 'c:\oracle\oradata\orcl1\ap01.dbf';
-- DB open
alter database open;
시나리오 14.
archive mode, offline backup, 완전 복구
read only tablespace가 손상됬을 때
read only tablespace 에는 데이터가 입력 되거나 변경될 수 없으므로 backup을 한 시점으로 부터 손상될 때까지 read only 옵션이
변경된 적이 없다면 host copy 명령으로 backup 본을 복사하는 것만으로 복구 가능하다.
=====================================================================
-- read only tablespace 의 datafile backup 본을 restore
host copy c:\oracle\offbackup\ap01.dbf c:\oracle\oradata\orcl1
-- DB open
alter database open;
출처 : http://blog.naver.com/redsark/150067387249
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
시나리오 1.
noarchive mode, offline backup
datafile 유실 또는 깨졌을 때
SQL> startup
ORACLE instance started.
Total System Global Area 85292300 bytes
Fixed Size 70924 bytes
Variable Size 40775680 bytes
Database Buffers 44367872 bytes
Redo Buffers 77824 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 3 - see DBWR trace file
ORA-01110: data file 3: 'C:\ORACLE\ORADATA\ORCL1\USERS01.DBF'
=====================================================================
-- startup시 mount 상태이므로 offbackup 파일을 복사하기위해 DB shutdown
shutdown
-- host copy [offbackup 경로] [해당 oracle sid 경로]
host copy c:\oracle\offbackup\. c:\oracle\oradata\orcl1
-- DB open
startup
시나리오 2.
noarchive mode, offline backup
temp datafile 유실 또는 깨졌을 때
SQL> startup
ORACLE instance started.
Total System Global Area 85292300 bytes
Fixed Size 70924 bytes
Variable Size 40775680 bytes
Database Buffers 44367872 bytes
Redo Buffers 77824 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 4 - see DBWR trace file
ORA-01110: data file 4: 'C:\ORACLE\ORADATA\ORCL1\TEMP01.DBF'
startup 시 문제가 생긴 datafile이 temp 파일인 것을 확인할 수 있다.
temp 파일은 DB 운영시 데이터가 들어있는 중요한 파일이 아니므로 temp datafile 을 offline 시킨후 DB 가동후 재생성 해준다.
temp 파일을 일반 datafile 복구시처럼 offbackup 에 있는 데이터를 restore 하면 꽤 많은 시간이 걸리기 때문이다.
=====================================================================
-- DB mount 상태에서
alter database datafile 'C:\ORACLE\ORADATA\ORCL1\TEMP01.DBF' offline drop;
alter database open;
drop tablespace temp;
-- temp tablespace 생성 (orcl1 에 알맞은 sid 명으로 변경한다.)
create tablespace temp
datafile 'c:\oracle\oradata\orcl1\temp01.dbf' size 20m
temporary;
시나리오 5.
archive mode, offline backup
datafile 유실 또는 깨졌을 때
SQL> startup
ORACLE instance started.
Total System Global Area 85292300 bytes
Fixed Size 70924 bytes
Variable Size 40775680 bytes
Database Buffers 44367872 bytes
Redo Buffers 77824 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 3 - see DBWR trace file
ORA-01110: data file 3: 'C:\ORACLE\ORADATA\ORCL1\USERS01.DBF'
문제가 생긴 파일을 host copy 명령을 사용해 restore 시킨다.
SQL> startup
ORACLE instance started.
Total System Global Area 85292300 bytes
Fixed Size 70924 bytes
Variable Size 40775680 bytes
Database Buffers 44367872 bytes
Redo Buffers 77824 bytes
Database mounted.
ORA-01113: file 3 needs media recovery
ORA-01110: data file 3: 'C:\ORACLE\ORADATA\ORCL1\USERS01.DBF'
DB를 빠른시간 내에 open 하기 위해 문제가 생긴 datafile을 offline 시킨뒤 DB open 한 후 recovery를 수행한다.
=====================================================================
-- offbackup 해둔 datafile 을 host copy 명령으로 복사한다.
host copy c:\oracle\offbackup\users01.dbf c:\oracle\oradata\orcl1
-- users01.dbf 는 문제가 생긴 datafile 로 변경한다.
alter database datafile 'C:\ORACLE\ORADATA\ORCL1\USERS01.DBF' offline;
-- DB open
alter database open;
-- 해당 tablespace 를 offline 시킨다.
alter tablespace users offline immediate;
-- 복구
recover tablespace users;
-- 해당 tablespace 를 online 시킨다.
alter tablespace users online;
시나리오 6.
archive mode, offline backup
users, temp datafile 유실 또는 깨졌을 때
SQL> startup
ORACLE instance started.
Total System Global Area 85292300 bytes
Fixed Size 70924 bytes
Variable Size 40775680 bytes
Database Buffers 44367872 bytes
Redo Buffers 77824 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 3 - see DBWR trace file
ORA-01110: data file 3: 'C:\ORACLE\ORADATA\ORCL1\USERS01.DBF'
startup 시 data file 3, users01.dbf 에만 문제가 있다고 나온다. 하지만 DBWR trace file을 열어보면
*** 2005-12-25 21:57:51.953
*** SESSION ID:(2.1) 2005-12-25 21:57:51.937
ORA-01157: cannot identify/lock data file 3 - see DBWR trace file
ORA-01110: data file 3: 'C:\ORACLE\ORADATA\ORCL1\USERS01.DBF'
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 2) 지정된 파일을 찾을 수 없습니다.
ORA-01157: cannot identify/lock data file 4 - see DBWR trace file
ORA-01110: data file 4: 'C:\ORACLE\ORADATA\ORCL1\TEMP01.DBF'
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 2) 지정된 파일을 찾을 수 없습니다.
users01.dbf, temp01.dbf 두 파일에 문제가 있다는 것을 알 수 있다.
users datafile은 시나리오 5 처럼 복구하며,
temp 파일은 DB 운영시 데이터가 들어있는 중요한 파일이 아니므로 temp datafile 을 offline 시킨후 DB 가동후 재생성 해준다.
=====================================================================
-- users01.dbf 파일 복사
host copy c:\oracle\offbackup\users01.dbf c:\oracle\oradata\orcl1
-- DB open, mount 상태에서 에러가 발생한다.
startup
-- users01.dbf 파일을 offline 시킨다.
alter database datafile 'C:\ORACLE\ORADATA\ORCL1\USERS01.DBF' offline;
-- temp01.dbf open 후 재생성 해주기 위해 제거한다.
alter database datafile 'C:\ORACLE\ORADATA\ORCL1\TEMP01.DBF' offline drop;
-- DB open
alter database open;
-- users tablespace 를 offline 시킨다.
alter tablespace users offline immediate;
-- 복구
recover tablespace users;
-- users tablespace 를 online 시킨다.
alter tablespace users online;
-- temp tablespace를 drop 시킨다.
drop tablespace temp;
-- temp tablespace 생성 (orcl1 에 알맞은 sid 명으로 변경한다.)
create tablespace temp
datafile 'c:\oracle\oradata\orcl1\temp01.dbf' size 20m
temporary;
시나리오 10.
archive mode, offline backup, 불완전 복구
사용자의 실수로 중용한 table 을 drop 한 경우
table 을 drop 한 대략적인 시간을 알고 있을 경우
모든 DBF 파일만을 RESTORE 한 후 다음 mount 단계에서 다음 명령을 수행한다.
RECOVER DATABASE UNTIL TIME '시간 형식'
=====================================================================
-- 모든 datafile을 host copy 명령으로 복사한다.
host copy c:\oracle\offbackup\*.dbf c:\oracle\oradata\orcl1
-- DB open
startup
-- recover
recover database until time '2005/12/25:23:36:56'
-- DB open with resetlogs option
alter database open resetlogs;
-- 불완전 복구 후에는 반드시 offbackup을 수행한다.
@offback
시나리오 11.
archive mode, offline backup, 불완전 복구
archive file 이 유실됬을 경우
datafile 복구시 유실된 arhive file 직전까지 복구
모든 DBF 파일만을 RESTORE 한 후 다음 mount 단계에서 다음 명령을 수행한다.
RECOVER DATABASE UNTIL CANCEL
ORA-00279: change 462868 generated at 12/25/2005 23:47:28 needed for thread 1
ORA-00289: suggestion : C:\ORACLE\ORADATA\ORCL1\ARCHIVE\ORCL1T001S00013.ARC
ORA-00280: change 462868 for thread 1 is in sequence #13
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
Media recovery cancelled.
위 명령 수행후 유실된 archive file 이 나오면 cancel 을 입력한다.
=====================================================================
-- 모든 datafile을 host copy 명령으로 복사한다.
host copy c:\oracle\offbackup\*.dbf c:\oracle\oradata\orcl1
-- DB open
startup
-- recover
recover database until cancel
-- DB open with resetlogs option
alter database open resetlogs;
-- 불완전 복구 후에는 반드시 offbackup을 수행한다.
@offback
시나리오 12.
archive mode, offline backup, 불완전 복구
사용자의 실수로 중용한 table 을 drop 한 경우
DBMS_LOGMNR 패키지를 사용하여 해당 명령 의 실행시간을 확인하여 그 명령의 직전까지 복구하는 방법
pfile 내에 utl_file_dir 파라미터 추가하는 작업이 필요하다.
..
utl_file_dir = "c:\oracle"
..
모든 DBF 파일만을 RESTORE 한 후 다음 mount 단계에서 다음 명령을 수행한다.
RECOVER DATABASE UNTIL TIME '시간 형식'
=====================================================================
-- dbms_logmnr 패키지가 설치되지 않았을 경우 패키지 설치
@C:\ORACLE\ORA81\RDBMS\ADMIN\DBMSLMD
@C:\ORACLE\ORA81\RDBMS\ADMIN\DBMSLM
-- build, LOGMNR DICTIONARY FILE 을 생성해 준다.
exec dbms_logmnr_d.build('816.ora','c:\oracle');
-- 분석하고자 하는 redo log file, archive log file 을 추가
exec dbms_logmnr.add_logfile('c:\oracle\oradata\orcl1\redo03.log',dbms_logmnr.new);
exec dbms_logmnr.add_logfile('c:\oracle\oradata\orcl1\redo02.log',dbms_logmnr.addfile);
exec dbms_logmnr.add_logfile('c:\oracle\oradata\orcl1\redo01.log',dbms_logmnr.addfile);
exec dbms_logmnr.add_logfile('c:\oracle\oradata\orcl1\archiveORCL1T001S00004.ARC',dbms_logmnr.addfile);
exec dbms_logmnr.add_logfile('c:\oracle\oradata\orcl1\archiveORCL1T001S00003.ARC',dbms_logmnr.addfile);
exec dbms_logmnr.add_logfile('c:\oracle\oradata\orcl1\archiveORCL1T001S00002.ARC',dbms_logmnr.addfile);
exec dbms_logmnr.add_logfile('c:\oracle\oradata\orcl1\archiveORCL1T001S00001.ARC',dbms_logmnr.addfile);
-- logmnr 수행, v$logmnr_c dictionary 가 생성된다.
exec dbms_logmnr.start_logmnr(dictfilename => 'c:\oracle\816.ora');
시나리오 13.
archive mode, offline backup 이 없을 때, 해당 datafile 에 관한 모든 archive log file 이 존재할때, 완전 복구
backup 을 하지 않은 datafile 을 유실 또는 깨졌을 때
control file에는 해당 datafile에 대한 정보가 남아 있으므로 그 정보와 archive log file을 사용하여 복구한다.
control file에 존재하는 ap01.dbf datafile에 대한 정보를 사용하여 datafile을 생성한 후 복구한다.
=====================================================================
-- 손상돈 datafile을 생성 한다. (
alter database create datafile 'c:\oracle\oradata\orcl1\ap01.dbf';
-- 복구
recover datafile 'c:\oracle\oradata\orcl1\ap01.dbf';
-- DB open
alter database open;
시나리오 14.
archive mode, offline backup, 완전 복구
read only tablespace가 손상됬을 때
read only tablespace 에는 데이터가 입력 되거나 변경될 수 없으므로 backup을 한 시점으로 부터 손상될 때까지 read only 옵션이
변경된 적이 없다면 host copy 명령으로 backup 본을 복사하는 것만으로 복구 가능하다.
=====================================================================
-- read only tablespace 의 datafile backup 본을 restore
host copy c:\oracle\offbackup\ap01.dbf c:\oracle\oradata\orcl1
-- DB open
alter database open;