'Inactive 상태의 리두로그 파일이 유실된 경우'에 해당되는 글 1건

  1. 2011.03.06 OFF-Line 백업을 이용한 불완전 복구 - 1
반응형


1. 사용자 실수로 테이블을 Drop한 경우

SQL> host date
SQL> host time
 설명) 현재 날짜와 시간을 기록해둔다.

SQL> drop table scott.emp cascade constraints;
SQL> select * from scott.emp;
<Error 발생>

 설명) 이전에 오프라인 백업된 파일들 중에 모든 데이터 파일들만 해당 경로에 재설치한다.
         반드시 데이터 파일들만 재설치하여야 하며 컨트롤 파일과 리두로그 파일들은 정상적으로 사용 가능한 상태이므로 재설치할 필요없다.

SQL> shutdown immediate
SQL> exit
[C:\] cd c:\backup
[C:\backup] copy *.dbf c:\oracle\product\10.2.0\oradata\orcl\.
  설명) 반드시 모든 데이터 파일들만 재설치 요망

[C:\backup] sqlplus /nolog
SQL> conn sys/oralce as sysdba;
SQL> startup mount
SQL> recover database until time '2011-03-06:18:00:00'
<Archive 적용>

SQL> alter database open resetlogs;
 설명) 불완전 복구가 수행되었으면 데이터베이스를 resetlog 옵션을 사용하여 open하라.
         불완전 복구에 의한 복구작업 시에는 반드시 resetlog 옵션을 사용하여야 한다.
         현재 데이터베이스는 과거 emp 테이블이 삭제되기 이전 상태로 복구된 상태이다.
         그런데 컨트롤 파일과 리두로그 파일은 복구작업을 수행하기 이전의 현 상태에 대한 정보를 가지고 있기 때문에 시점이 일치하지 않는 문제점이 발생하게 된다. 결국 이 상태에서는 데이터베이스를 정상적으로 open할 수 없기 때문에 resetlog 옵션을 사용하여 모든 상태정보를 초기화할 수 밖에 없다.

SQL> archive log list
SQL> shutdown immediate
SQL> exit

[C:\] cd c:\oracle\product\10.2.0.\oradata\orcl
[C:\] copy *.* c:\backup\.
 설명) 관련된 모든 데이터 파일, 컨트롤 파일, 리두로그 파일, 파라미터 파일들을 오프라인 백업하라.

[C:\] del c:\oracle\product\10.2.0\db_1\database\archive\*.arc
 설명) 불완전 복구에 의해 데이터베이스의 모든 상태정보들이 초기하되면 이전까지 생성되었던 아카이브 파일들도 이젠 더 이상 필요 없는 파일들이 된다. 아카이브 파일들은 사용 가능한 마지막 오프라인 백업 파일 이후에 생성된 것들만 사용 가능하므로 초기화된 현재시점에서는 이전의 아카이브 파일은 사용될 수 없다.


2. Inactive 상태의 리두로그 파일이 유실된 경우

  여러 개의 리두로그 파일들 중에 LGWR 프로세스에 의해 현재 쓰이고 있는 리두로그 파일을 CURRENT 리두로그 파일이라고 하며 나머지 리두로그 파일을 INACTIVE 리두로그 파일이라고 한다. 이 시나리오는 INACTIVE 리두로그 파일에 장애가 발생한 경우 복구하는 방법과 절차이다.

SQL> select * from v$log where stauts='INACTIVE';
SQL> host dir c:\oracle\product\10.2.0\oradata\orcl
SQL> host del c:\oracle\product\10.2.0\oradata\orcl\redo03.log
 설명) redoo3.log 파일은 INACTIVE 상태인 리두로그 파일 중 하나이다.

[C:\] sqlplus /nolog
SQL> conn sys/oralce as sysdba;
SQL> @moredept.sql

alter system switch logfile;
insert into scott.dept values(1, 'IT', 'KOREA');
insert into scott.dept values(2, 'OPS', 'KOREA');
insert into scott.dept values(3, 'HR', 'KOREA');
alter system switch logfile;
insert into scott.dept values(4, 'IT', 'FRANCE');
insert into scott.dept values(5, 'OPS', 'FRANCE');
insert into scott.dept values(6, 'HR', 'FRANCE');
alter system switch logfile;
insert into scott.dept values(7, 'IT', 'TOKYO');
insert into scott.dept values(8, 'OPS', 'TOKYO');
insert into scott.dept values(9, 'HR', 'TOKYO');
commit;
select count(*) from scott.dept;

SQL> exit

 설명) 아카이브 모드에서 INACTIVE 상태의 리두로그 파일이란 사용자의 INSERT, UPDATE, DELETE 작업을 수행하면 발생하는 백업 데이터들을 저장하는 공간이다. 즉, 이 공간에 백업 데이터들은 이미 아카이브 파일로 백업된 상태이기 때문에 더 이상 사용될 수 없더라도 데이터에 대한 복구작업은 수행할 필요가 없다.

 다만, 계속적인 INSERT, UPDATE, DELETE 작업은 수행해야 함으로 유실된 리두로그 파일을 재생성하여 준다면 복구작업은 끝나게 된다.


[C:\] sqlplus /nolog
SQL> conn sys/oralce as sysdba;
SQL> shutdown aboart
SQL> startup

<Error 발생>

SQL> select * from v$logfile;
 설명) 실제 리두로그 파일은 유실되었지만 데이터베이스 내의 상태정보에 해당 파일이 여전히 사용 가능한 상태로 출력된다.

SQL> alter database drop logfile group 3;
 설명) INACTIVE 상태의 리두로그 파일에 대한 복구는 이전 정보를 모두 삭제한 후 재생성하는 방법이다.

SQL> select * from v$logfile;
 설명) 해당 리두로그 파일이 삭제된 것을 확인한다.

SQL> alter database add logfile group 3 'c:\oracle\product\10.2.0\oradata\orcl\redo03.log' size 51201K;
 설명) 유실된 redo03.log 파일의 복구는 관련된 정보를 삭제한 후 재생성하는 방법이다. 원본 리두로그 파일을 생성한다.

SQL> select * from v$logfile;
 설명) 유실된 INACTIVE 상태의 리두로그 파일이 재생성되었는지 확인한다.

SQL> alter database open;
 설명) 유실된 리두로그 파일에 대한 재생성이 완료되었으면 오라클 서버를 시작한다.


참조) '오라클 ACE가 해설하는 ORACLE Backup&Recovery' (저: 주종면)
 
 


반응형