테이블스페이스 관련된 로그내용은 자동으로 복구하지 못한다.(지워진 테이블스페이스 자동으로 못 만든다.)
복구과정 중 에러뜨면, 수동으로 만들어주고 진행한다.
 

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 작업 편하게 하기 / 로그마이너 
Posted by 딩구르
,