테이블스페이스 관련된 로그내용은 자동으로 복구하지 못한다.(지워진 테이블스페이스 자동으로 못 만든다.)
복구과정 중 에러뜨면, 수동으로 만들어주고 진행한다.
log miner - 리두로그파일 내용볼수 있는 오라클 제공 툴
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 실습1 시작
Drop tablespace 복구 - 백업된 Control file 없을 경우
: 1일 백업
2일에 TS_D라는 테이블스페이스 생성하고 테이블 생성 후 데이터까지 입력.
백업 받지 못하고 3일에 drop tablespace TS_D; 로 삭제
현재 4일 (복구경로 /home/orcle/temp)
에러발생------------->>>>>>>>>>>>>>>>>>>>>>
1. 현재상태 확인
SYS> select name from v$controlfile;
SYS> select name from v$datafile;
SYS> select member from v$logfile;
2. 현재 상황 전체 백업 (닫힌 / 열린 백업 상관없음)
SYS> alter tablespace example begin backup;
SYS> !cp /home/oracle/oradata/testdb/example01.dbf /data/backup/open/
SYS> alter tablespace example end backup;
sysaux / system / undotbs1 / users 동일
3. 신규 Tablespace 생성 및 데이터 입력
SYS> create tablespace test
2 datafile '/home/oracle/oradata/testdb/test01.dbf' size 5M;
SYS> create table test8 (no number) tablespace test;
SYS> insert into test8 (8);
SYS> commit;
SYS> select * from test8;
SYS> select to_char(sysdate, 'YYYY-MM-DD:HH24:MI:SS') from dual;
4. 장애발생 - 백업 없는 상태에서 Tablespace 삭제
SYS> drop tablespace test including contents and data files;
SYS> select * from test8;
없음
복구과정------------->>>>>>>>>>>>>>>>>>>>>>
5. alert_testdb.log 파일에서 삭제시간 확인
$ vi /home/oracle/admin/testdb/bdump/alert_testdb.log
시간 → 명령 수행시간 (이시간 이전으로 복구하면 됨)
drop tablespace test including contents and datafiles
시간 → 완료 시간
Deleted file /home/oracle/oradata/testdb/test01.dbf
Completed: drop tablespace test including contents and datafiels
6. 필요파일 복원
SYS> shutdown immediate;
- DATAFILE, 컨트롤파일 - 백업본
- REDO log file - 사용본
$ cp /data/backup/open/system01.dbf /home/oracle/temp/
$ cp /data/backup/open/sysaux01.dbf /home/oracle/temp/
$ cp /data/backup/open/undotbs01.dbf /home/oracle/temp/
$ cp /data/backup/open/control01.ctl /home/oracle/temp/
$ cp /home/oracle/oradata/testdb/redo* /home/oracle/temp/
7. 파라미터파일 수정
$ vi /home/oracle/product/10g/dbs/inittestdb.ora
컨트롤파일위치수정
SYS> startup mount;
8. 경로변경
ⓐ 데이터파일 경로 변경
SYS> alter database rename file '/home/oracle/oradata/testdb/system01.dbf'
2 to '/home/oracle/temp/system01.dbf';
sysaux / undotbs 동일작업
SYS> alter database datafile '/home/oracle/oradata/testdb/users01.dbf' offline drop;
example01.dbf 동일작업 - 복구에 사용안하는 테이블 스페이스 offline drop
- 테이블스페이스 목록 조회 해 보아도 test 테이블 스페이스는 없다.
ⓑ 리두로그 파일들도 동일작업
SYS> alter database rename file '/home/oracle/oradata/testdb/redo01_a.log'
2 to '/home/oracle/temp/redo01_a.log';
나머지 리두로그파일 동일작업
SYS> @log
현재 CURRENT log 확인하기.
9. 복구
SYS> recover database until time '시간' using backup controlfile;
아카이브로그를 찾는 메시지가 나올때 로그 시퀀스 번호를 확인.
Current log Sequence 번호라면 현재 current redo log file 의 이름을 적어주기.
복구해야 할 내용이 들어있는 Redo log file을 적어주면 된다.
Specify log:{선택| | | }
/home/oracle/temp/redo02_a.log ← 현재 CURRENT 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 6:'/home/oracle/oradata/testb/test01.dbf' ← 문제파일
SYS> select name from v$datafile;
/home/oracle/product/10g/dbs/UNNAMED00006 → 새로 생성됨
위에 문제가 되는 파일을 원래 이름으로 변경
SYS> alter database create datafile '/home/oracle/product/10g/dbs/UNNAMED00006'
2 as '/home/oracle/temp/test01.dbf';
다시 복구명령
SYS> recover database until time '시간' using backup controlfile;
Specify log:{선택| | | }
AUTO 치면 에러
/home/oracle/temp/redo02_a.log ← Current 였던 Redo log 파일 이름 치기
SYS> alter database open resetlogs;
SYS> @df
SYS> select * from test8;
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 실습1 끝
log miner 간단 사용법
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 실습2 시작
log miner (Oracle의 Redo log 파일의 내용을 사람이 볼 수 있도록 변환해 주는 유틸리티)
: scott.tt10 테이블 생성후 drop scott.tt10을 수행하여 drop이 발생한 시간을 redo logfile에서 찾는 실습
에러발생------------->>>>>>>>>>>>>>>>>>>>>>
1. scott.tt10 테이블 생성
SYS> create table scott.tt10 (no number) tablespace example;
SYS> insert into scott.t10 values (1);
SYS> insert into scott.t10 values (2);
SYS> commit;
SYS> select to_char(sysdate,'YYYY-MM-DD:HH24:MI:SS') from dual;
2. drop scott.tt10 발생
SYS> drop table scott.tt10 purge;
시간을 모른다고 가정하고 log 마이너로 찾아내기
3. 현재 redo log 파일 상태 확인
SYS> select a.group#, a.member, b.bytes/1024/1024 MB, b.archived, b.sequence#, b.status
2 from v$logfile a, v$log b
3 where a.group# = b.group#
4 order by 1,2;
4. log miner 설정하기
1) 파라미터파일 에 딕셔너리 파일이 생성될 경로 설정 추가
utl_file_dir="/data/logmnr"
- 해당 디렉토리 $ mkdir /data/logmnr 생성
2) DB 재시작 - 파라미터 적용
3) 딕셔너리 파일 생성
SQL> exec dbms_logmnr_d.build ('dict','/data/logmnr');
4) 분석하기 원하는 log 파일 등록
SQL> exec dbms_logmnr.add_logfile('/home/oracle/oradata/testdb/redo01.log',1);
숫자의의미 : 1- 새파일등록, 2- 기존파일삭제, 3- 다른파일추가
5) 등록한 log 파일 분석
SQL> exec dbms_logmnr.start_logmnr(dictfilename=>'/data/logmnr/dict');
6) 찾고자 하는 내용 조회
SQL> select to_char(timestamp,'YYYY-MM-DD:HH24:MI:SS') seg_owner, username, sql_redo
2 from v$logmnr_contents
3 where sql_redo like '%drop%'
4 and seg_owner = 'SCOTT';
- Redo log, Archive log 파일도 사용가능
- 딕셔너리 파일을 최초 한번만 만들면 되고 추가로 분석하시길 원하는 log파일을 등록하거나 필요없는 파일은 제거하면서 사용
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 실습2 끝
※ 참고 : 아카이브로그 입력 스크립트
2012/02/07 - [Study/Oracle - 백업&복구] - 백업&복구 Extra - 스크립트 : datafile rename 작업 편하게 하기 / 로그마이너
'Oracle > Oracle - 백업&복구' 카테고리의 다른 글
백업&복구 13 - Redo log의 생성 및 기록 원리 (0) | 2012.02.08 |
---|---|
백업&복구 12 - 운영중인 undo tablespace 장애 복구 (2) | 2012.02.08 |
백업&복구 Extra - 스크립트 : datafile rename 작업 편하게 하기 / 로그마이너 (0) | 2012.02.07 |
백업&복구 10 - 불완전 복구 실습 - drop tablespace로 잘못 삭제된 tablespace 복구 (0) | 2012.02.05 |
백업&복구 9.2 - 불완전복구 시간기반 실습추가 - Archive log mode 장애복구 (0) | 2012.02.04 |