Control file 연습문제
step 1. Closed Backup 으로 받은 데이터 파일을 사용해서 DB를 OPEN
작업 전 수행 사항
- 기존 백업 모두 삭제 rm -rf /data//backup/close/*
- control file 만 백업 cp /data/temp6/*.ctl /data/backup/close
- DB 오픈해서 스위치로그, 체크포인트 일으키기
SYS> startup
SYS> alter system switch logfile ;
SYS> /
SYS> alter system checkpoint ;
SYS> /
SYS> shut immediate ;
- 데이터 파일만 백업 cp /data/temp6/*.dbf /data/backup/close/
만일의 경우를 대비해 전체 백업을 해둠 cp /data/temp6/* /data/backup/close2/
- 운영중인 모든 파일 삭제해서 장애를 만듬 rm -rf /data/temp6/*
- 백업된 data file 복원 cp /data/backup/close/*.dbf /data/temp6/
- 백업된 control file 복원 cp /data/backup/close/*.ctl /data/temp6/
복구 시작
Redo log file 이 없기 때문에 resetlogs 모드로 control file 을 재생성 하기로 한다.
STARTUP 을 해주면 old control file 에러가 나옴
control file 을 재생성하는 스크립트를 만들자 .
스크립트를 생성하고 DB 종료후 vi editor 로 스크립트를 수정
스크립트 화면에서 필요없는 내용은 다지우고 아래화면 과같이 RESETLOGS 에 관련된 내용만 남김
반드시 아래 data file 경로에 해당 데이터파일이 들어있어야 한다.
스크립트를 실행하면 자동으로 mount 상태로 됨
resetlogs 옵션을 줘서 DB를 OPEN 과 동시에 redo log file 도 생성됨
끝!
Data file 연습 문제
step 1. truncate table 장애 복구하기
- 준비상황 -
1. 현재 상황 닫힌 백업 수행
2. OPEN 해서 아래와 같이 테스트용 테이블 스페이스와 테이블 생성
SYS> create tablespace test
2 datafile '/data/temp6/test01.dbf' to size 5m ;
SYS> create table scott.tt111 (no number) tablespace test ;
SYS> insert into scott.tt111 values(1) ;
SYS> commit ;
SYS> select to_char(sysdate,'YYYY-MM-DD:HH24:MI:SS' ) from dual ; <-- 복구에 필요한 시간 확인하기 위해
SYS> select * from scott.tt111 ; <-- 데이터 잘 들어 있는지 확인
SYS> ! rm /data/test6/test01.dbf <-- 파일을 지움으로서 장애 발생
SYS> ! ls /data/test6/test01.dbf <-- 파일 있는지 확인 결과는 당연히 없음
SYS> truncate table scott.tt111 ; <-- truncate 로 table 삭제
SYS> select * from scott.tt111 ; <-- 지워져서 안나옴
- 복구시작 -
※ 임시경로 /data/temp 를 사용하여 복구하고 테스트용 테이블 스페이스 test의 백업파일이 없다는 상황 인지
SYS> shut immediate <--복구하기 위해 DB를 꺼준다
임시경로로 backup 된 data file , 운영중이던 control file, redo log file 을 복사
SYS> cp /data/backup/close/*.dbf /data/temp/
SYS> cp /data/temp6/*.ctl /data/temp/
SYS> cp /data/temp6/*.log /data/temp/
SYS> ! vi $ORACLE_HOME/dbs/inittestdb.ora <-- control file 경로 변경
SYS> startup mount <-- mount 로 open
SYS> alter database rename file '/data/temp6/system01.dbf'
2 to '/data/temp/system01.dbf' ; <-- data file 들 rename (삭제된 test01.dbf 는 rename하지않음)
SYS> alter database rename file '/data/temp6/redo01.log'
2 to '/data/temp/redo01.log' ; <-- redo log file 들 rename
SYS> alter database create datafile '/data/temp6/test01.dbf'
2 as '/data/temp/test01.dbf' ; <-- 삭제된 백업파일을 생성
SYS> recover database until time '2014-11-04:11:11:11' ; <-- 확인했던 복구 시간으로 복구
SYS> alter database open resetlogs ;
SYS> select * from scott.tt111 ;
NO
----------
1 <-- 제대로 복구 잘됨
step 2. drop user 장애 복구하기 ( 삭제된 tuser 를 복구해서 tuser.test1 이 조회되도록 하시오 )
- 준비 상황 -
1. 현재 상태를 확인한 후 전체 파일 백업
2. 정상 open 한 후 test 용 계정 tuser 를 아래와 같이 생성 후 권한을 할당
SYS> create user tuser
2 identified by abc123
3 default tablespace users
4 temporary tablespace temp ;
SYS> grant connect, resource to tuser ;
3. 새로 생성한 tuser 로 로그인해서 테스트용 테이블을 생성
SYS> conn tuser/abc123
TUSER> create table test1 (no number) ;
TUSER> insert into test1 values (1) ;
TUSER> commit ;
TUSER> create table test2 (no number) ;
TUSER> insert into test2 (no number) ;
TUSER> commit ;
TUSER> select to_char(sysdate,'YYYY-MM-DD:HH24:MI:SS') from dual ; <-- 복구할 시간 확인
4. sys 계정으로 로그인하여 tuser 를 삭제
TUSER> conn sys/oracle as sysdba
SYS> drop user tuser cascade ;
SYS> select * from tuser.test1 ; <-- 아무것도 조회되지 않음
- 복구 시작 -
[oracle@localhost data]$ mkdir temp2
[oracle@localhost data]$ cp /data/backup/close/*.dbf /data/temp2/
[oracle@localhost data]$ cp /data/temp/*.ctl /data/temp2/
[oracle@localhost data]$ cp /data/temp/*.log /data/temp2/
[oracle@localhost data]$ vi /app/oracle/product/11g/dbs/inittestdb.ora <--컨트롤 파일 경로 변경
[oracle@localhost data]$ exit
SQL> startup mount
ORACLE instance started.
Total System Global Area 422670336 bytes
Fixed Size 1344616 bytes
Variable Size 293604248 bytes
Database Buffers 121634816 bytes
Redo Buffers 6086656 bytes
Database mounted.
SQL> alter database rename file '/data/temp/system01.dbf' to '/data/temp2/system01.dbf' ; <--데이터파일 rename
Database altered.
SQL> alter database rename file '/data/temp/redo01.log' to '/data/temp2/redo01.log' ; < -- 로그파일 rename
Database altered.
SQL> recover database until time'2014-10-17:10:14:04';
Media recovery complete.
SQL> alter database open resetlogs;
Database altered.
SQL> select * from tuser.test1;
NO
----------
1
step 3. 아래에서 D시점에 삭제된 scott.tt890 table 을 복구하시오
A 단계
SYS> create tablespace test2
2 datafile '/data/temp2/test02.dbf' size 5m ;
B 단계
SYS> shut immediate ;
SYS> !cp /data/temp2/* /data/backup/close/
C 단계
SQL> startup
ORACLE instance started.
Total System Global Area 422670336 bytes
Fixed Size 1344616 bytes
Variable Size 293604248 bytes
Database Buffers 121634816 bytes
Redo Buffers 6086656 bytes
Database mounted.
Database opened.
SQL> create table scott.tt890 ( no number ) tablespace test2;
Table created.
SQL> insert into scott.tt890 values (1);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from scott.tt890;
NO
----------
1
SQL> select to_char(sysdate,'YYYY-MM-DD:HH24:MI:SS') from dual;
TO_CHAR(SYSDATE,'YY
-------------------
2014-10-17:10:41:07
D 단계
SQL> drop table scott.tt890 purge;
Table dropped.
SQL> select * from scott.tt890;
select * from scott.tt890
*
ERROR at line 1:
ORA-00942: table or view does not exist
'오라클 > 백업/복구' 카테고리의 다른 글
데이터 이동하기 (0) | 2014.11.06 |
---|---|
Redo log flle 장애 처리방법 (0) | 2014.11.05 |
Log Miner 활용하기 (0) | 2014.11.05 |
Control file 복구 (0) | 2014.11.04 |
Data file Recovery (불완전 복구) (0) | 2014.11.04 |
Data File Recovery (0) | 2014.10.30 |
Backup (cold, hot) (0) | 2014.10.30 |