ORACLE/Backup & Recovery2014. 8. 15. 13:18
반응형

출처 :https://hoing.io/archives/268

 

1. TEST Information

Items Description
Test Date 2011 / 12 / 04
CPU VirtualBox VCPUx4
Main Memory 2GB
O/S version RHEL 5.5
Host Name test1, test2
ORACLE_SID testdb1, testdb2
Oracle version 10.2.0.5

 

 

 

 

 

 

 

 

 

 

 

 

 

2. Scenario

 

1) 현재 testdb1 , testdb2  SID RAC(10.2.0.5) 에서 HOT Backup을 이용하여 clonedb를 생성

2) 복제 되는 instance SID copydb 로 할 것이며, single 로 복구를 시도 할 것이다.

3) RAC /oradata/testdb ,  single  /oradata3/copydb 로 복구 할 것이다.

 

 

 

3. HOT BACKUP

 

■ 테스트를 간편하게 하기 위해 alter database begin backup; 으로 백업 진행한다.

 

SQL> alter database begin backup;

 

 Redo Temp Tablespace 파일을 제외한 모든 datafile 을 복사 한다.

$ cp system01.dbf /oradata3/copydb/

$ cp sysaux01.dbf /oradata3/copydb/

$ cp undotbs01.dbf /oradata3/copydb/

$ cp undotbs02.dbf /oradata3/copydb/

$ cp users01.dbf /oradata3/copydb/

 

 

■ 복사 후 end backup  을 실행한다.

 

SQL> alter database end backup;

 

END Backup 을 실행한 시간을 확인한다.

SQL> select to_char(sysdate,'YYYY-MM-DD:HH24:MI:SS') "Time" from dual;

 

Time

-------------------

2011-12-04:12:10:09

 

 

 

 

 

4. TEST Table Creation

 

■ 복사 후 복구 테스트를 위해서 테이블과 데이터를 입력한다.

 

■ 테이블 생성

SQL> create table test01 (no number) tablespace users;

 

■ 데이터 입력

 

BEGIN

for i in 1..1000 loop

insert into test01 values(i);

end loop;

commit;

END;

/

 

 

 log switch   checkpoint 발생

SQL> alter system switch logfile;   -- 수회 실행

 

 

 test table삭제

SQL> drop table test01 purge;

 

 

■ 삭제 시간 확인

SQL> select to_char(sysdate,'YYYY-MM-DD:HH24:MI:SS') "Time" from dual;

 

Time

-------------------

2011-12-04:12:26:00

 

 

 

 

 

5. Ready to clonedb

 

 spfile  pfile을 생성

SQL> create pfile='$ORACLE_HOME/dbs/initCOPYDB.ora' from spfile;

 

 controlfile 재생성을 위해 trace 파일 생성

SQL> alter database backup controlfile to trace as '/oradata3/copydb/recon.sql';

 

 pfile 수정

아래 파라미터를 clonedb 환경에 맞게 수정 한다물론 디렉토리도 생성을 해야 한다.

*.audit_file_dest=

*.background_dump_dest=

*.control_files='

*.user_dump_dest='

*.db_name='testdb'

 

RAC 파라미터 변경아래와 같이 변경

*.instance_number=1

*.cluster_database=false

*.thread=1

*.undo_tablespace='UNDOTBS1'

 

 

 pfile 수정

create controlfile 절을 수정한다.

CREATE CONTROLFILE SET DATABASE "COPYDB" RESETLOGS  NOARCHIVELOG

   REUSE => SET

  NORESETLOGS => RESETLOGS

  

그 외 경로를 clonedb에 맞게 수정한다.

 

복구 하고 open  temp tablespace를 생성 함으로 temp tablespace 생성 절을 별도로 백업 해둔다

ALTER TABLESPACE TEMP ADD TEMPFILE '/oradata3/copydb/temp01.dbf'

SIZE 524288000  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;

 

아래와 같이 CHARACTER SET KO16MSWIN949;   까지 유지해서 파일을 작성한다.

 

 

STARTUP NOMOUNT

CREATE CONTROLFILE SET DATABASE "COPYDB" RESETLOGS  NOARCHIVELOG

    MAXLOGFILES 192

    MAXLOGMEMBERS 3

    MAXDATAFILES 1024

    MAXINSTANCES 32

    MAXLOGHISTORY 292

LOGFILE

  GROUP 1 (

    '/oradata3/copydb/redo01a.log',

    '/oradata3/copydb/redo01b.log'

  ) SIZE 300M,

  GROUP 2 (

    '/oradata3/copydb/redo02a.log',

    '/oradata3/copydb/redo02b.log'

  ) SIZE 300M,

  GROUP 3 (

    '/oradata3/copydb/redo03a.log',

    '/oradata3/copydb/redo03b.log'

  ) SIZE 300M,

  GROUP 4 (

    '/oradata3/copydb/redo04a.log',

    '/oradata3/copydb/redo04b.log'

  ) SIZE 300M

-- STANDBY LOGFILE

DATAFILE

  '/oradata3/copydb/system01.dbf',

  '/oradata3/copydb/undotbs01.dbf',

  '/oradata3/copydb/sysaux01.dbf',

  '/oradata3/copydb/undotbs02.dbf',

  '/oradata3/copydb/users01.dbf'

CHARACTER SET KO16MSWIN949;

 

 

 

 

6. Creation clonedb

 

 sid를 변경하고 컨트롤 파일을 재생성 한다.

$ export ORACLE_SID=COPYDB

 

SQL*Plus: Release 10.2.0.5.0 - Production on Sun Dec 4 12:48:19 2011

Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.

Connected to an idle instance

SQL> @recon.sql

 

 

■ 시간 기반으로 복구 한다.

 

복구를 진행할 세션에서 복구하기 편한 방식으로 시간 설정을 한다.

SQL> alter session set nls_date_format='YYYY-MM-DD:HH24:MI:SS';

 

 

삭제한 시간이 2011-12-04:12:26:00 이기 때문에 24 분으로 복구 하겠다.

 

SQL> recover database until time '2011-12-04:12:24:00' using backup controlfile;

 

복구를 실시하면 아래와 같이 아카이브 파일을 필요로 한다.

ORA-00279: change 565796 generated at 12/04/2011 12:01:54 needed for thread 2

ORA-00289: suggestion : /oracle/product/102/db/dbs/arch2_14_768267462.dbf

ORA-00280: change 565796 for thread 2 is in sequence #14

 

위에서 알 수 있는 것은 thread 2(RAC에서 2번째 노드의 시퀀스 14번 을 가진 아카이브를 원하는

것이다 .

테스트 환경에서는 파일명이 arc_2_14_768267462.arc  이며경로 및 파일을 입력한다.

 

 

파일명 입력

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

/oradata/arch_testdb/arc_2_14_768267462.arc

 

 

이번에는 thread 1 change 565796 을 포함 한 아카이브 파일을 입력 해야 한다.

ORA-00279: change 565796 generated at  needed for thread 1

 

 

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

 

 

RAC 로 접속해서 쿼리를 수행하여 THREAD1의 565796 변경본이 포함된 아카이브 파일을 찾는다.

SQL> set lines 500

SQL> col name for a50

SQL> SELECT THREAD# ,SEQUENCE# , FIRST_CHANGE#, NEXT_CHANGE#, NAME,

TO_CHAR(FIRST_TIME,'YYYY-MM-DD:HH24:MI:SS') FIRST_TIME  FROM V$ARCHIVED_LOG;

 

 

 

THREAD#  SEQUENCE  # FIRST_CHANGE   # NEXT_CHANGE#      NAME                                   FIRST_TIME

----------  ---------- ------------- ------------ -------------------------------------------------------------------------------

           14       553454              567190      /oradata/arch_testdb/arc_2_14_768267462.arc    2011-12-04:05:52:04

           15       567190              567247      /oradata/arch_testdb/arc_2_15_768267462.arc    2011-12-04:12:20:05

           16        567247             567249      /oradata/arch_testdb/arc_2_16_768267462.arc    2011-12-04:12:20:09

           11       553456              567252    /oradata/arch_testdb/arc_1_11_768267462.arc   2011-12-04:05:52:05

           17       567249              567254      /oradata/arch_testdb/arc_2_17_768267462.arc    2011-12-04:12:20:12

           18       567254              567274      /oradata/arch_testdb/arc_2_18_768267462.arc    2011-12-04:12:20:15

           19       567274              567279      /oradata/arch_testdb/arc_2_19_768267462.arc    2011-12-04:12:21:12

           12       567252              567293      /oradata/arch_testdb/arc_1_12_768267462.arc    2011-12-04:12:20:14

 

확인 해 보면 arc_1_11_768267462.arc 파일인 것을 알 수 있다아래와 같이 경로와 파일명을 입력한다.

 

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

/oradata/arch_testdb/arc_1_11_768267462.arc

 

 

 

 

 

ORA-00279: change 567190 generated at 12/04/2011 12:20:05 needed for thread 2

ORA-00289: suggestion : /oracle/product/102/db/dbs/arch2_15_768267462.dbf

ORA-00280: change 567190 for thread 2 is in sequence #15

ORA-00278: log file '/oradata/arch_testdb/arc_2_14_768267462.arc' no longer

needed for this recovery

 

change 567190 for thread 2 is in sequence #15 메세지를 보면 THREAD2의 15 시퀀스 아카이브 파일을

필요로 한다는 것을 알 수 있다경로 및 파일명을 입력한다.

 

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

/oradata/arch_testdb/arc_2_15_768267462.arc

 

 

위와 같은 패턴으로 요청하는 아카이브 파일을 계속 적용해준다.

 

운영중인 RAC에 생성 된 아카이브 보다 더 높은 시퀀스를 요구 한다면 로그 스위치를 발생하여

생성한 아카이브를 적용 시켜준다.

 

계속 적용 시키면 아래와 같이 recovery가 되었다는 메세지를 볼 수 있다.

 

Log applied.

Media recovery complete.

 

resetlogs로 instance를 open한다

SQL> alter database open resetlogs;

  

Temp Tablespace 를 추가한다.

SQL> ALTER TABLESPACE TEMP ADD TEMPFILE '/oradata3/copydb/temp01.dbf'

SIZE 524288000  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;

 

 

■ 예외 처리

아래와 같이 ORA-38856 가 나오게 되면 Unpulbished Bug-4355382 로써

오라클 문서ID: 334899.1 를 참조한다.

ERROR at line 1:

ORA-38856: cannot mark instance UNNAMED_INSTANCE_2 (redo thread 2) as enabled

 

pfile에 _no_recovery_through_resetlogs=TRUE  를 추가한 후 다시 resetlogs로 open한다.

 

open 후 test01 테이블이 복구 되었는지 조회해 본다.

 

select count(*) from test01;

  COUNT(*)

----------

      1000

반응형
Posted by [PineTree]
ORACLE/Backup & Recovery2011. 11. 23. 00:25
반응형

◈ logfile 정보 보기

set line 150
col tname format a10
col file_name format a40
col error format a10
col first_change# format 999,999,999,999
col OFFLINE_CHANGE# format 999,999,999,999
col ONLINE_CHANGE# format 999,999,999,999
col change# format 999,999,999,999
COL MEMBER format a45

SELECT A1.GROUP#, MEMBER, A1.STATUS, SEQUENCE#, FIRST_CHANGE#
FROM V$LOG A1, V$LOGFILE B2
WHERE A1.GROUP# = B2.GROUP# ;


◈ 복구가 필요한 datafile list 보기

col change# format 9999999999999999999999

select t.name tname, d.name file_name, r.change#,d.status, d.enabled, OFFLINE_CHANGE#,
ONLINE_CHANGE#, to_char(ONLINE_TIME,'RR/MM/DD:HH24:MI:SS') ONTIME
from v$tablespace t, v$datafile d, v$recover_file r
where t.ts#=d.ts# and d.file#=r.file#;

◈ tablespace 와 file의 status 보기

col fname format a50

select t.name TNAME, d.name FNAME, d.status, d.enabled, h.error header_err
from v$tablespace t, v$datafile d, v$datafile_header h
where t.ts#=d.ts# and h.file#=d.file#;

◈ 복구에 필요한 archive파일 리스트 보기

col name format a50

select a.name, a.sequence# , a.first_change#,
to_char(a.first_time,'YYYY/MM/DD:HH24:MI:SS') fst_time,
to_char(a.next_time,'YYYY/MM/DD:HH24:MI:SS') next_time
from v$archived_log a, v$recovery_log r
where a.sequence#=r.sequence#;


◈ recovery file status 보기

select * from V$RECOVERY_FILE_STATUS;


◈ recovery progress 보기

select * from v$recovery_progress;

◈ recovery status 보기

select * from v$recovery_status;

반응형
Posted by [PineTree]
ORACLE/Backup & Recovery2010. 3. 19. 21:59
반응형



SCN이 틀렸을 경우에 복구하는 방법인데요.
정말 위급한 복구 상황에 닥쳤을 경우에 유용하겠지요.
일반적인 복구의 개념이 아니라..
어거지로 어떻게든 복구해서 올려야 하는 상황에 사용하시길
바랍니다. 꼭 정말 위험한 상황에서 사용해야지.
일반적인 복구 상황에서 사용하시면 안됩니다.

아래에서.. 복구 작업이 끝난이후 꼭 해야 하는 것은..

DB재생성후 export후 import 하는 것이 권장된답니다.
그리고 tempfile 추가하는 것도 잊지 말구요.
undo도 깨뜨리고 하니 새로 생성하셔야 합니다.

최악의 복구시나리오시에.. 그래도 해야 할 것은.. system tablespace는 무조건 백업해두어야 합니다. system tablespace가 깨지면 'dul' 유틸을 통해서 블록을 읽으는 복구도 불가능하다고 하네요. system tablespace의 bootstrap이 깨지면 너무 오래된 백업이라면 object를 생성한 dictionary 정보가 없으니 당연히 못쓰겠지요..
아래에서도 마지막에 만든 k4 라는 테이블은 데이터는 있는데
테이블은 dictionary 정보에 없는 기이한 일이 될 수도 있겠지요.
system을 먼저 cp 백업하고. 테이블만들고 datafile을 백업한다면요..

_corrupted_rollback_segments=true => rollback segment가 깨졌음, commit을 했다고 오라클을 속임, _offline_rollback_segments 강제로 rollback segment를 offline 시킴(_corrupted~, _offline~ 은 같이사용
_allow_resetlogs_corruption=true =>redo log 의 한계범위 내에서 데이터파일의 SCN이 틀어져 있거나 또는 recover시에 archive를 찾지 못해서 fail났을 경우, 즉 current redo log를 통해서 복구가 불가능할 경우, 억지로 current redo log를 reset log 시키고 open하는 파라미터

ORA- 10501 event를 통해서 adjust scn은 아래와 같은 레벨이 깨졌을
경우 레벨을 올려가면서 복구하는 방법입니다.

10501, 00000, "periodically check selected heap"
// *Cause:
// *Action:
//    Level:  0x01 PGA
//       0x02 SGA
//       0x04 UGA
//       0x08 current call
//       0x10 user call
//       0x20 large allocation pool



begin backup을 하지 않고 cp로 복사해서 백업을 했을 경우 복구 방법 , archive도 없는 상태이며 SCN이 모두 틀림


1. 트랜잭션이 있는 상태에서 cp로 백업
vi kkk.sql
create table k1 tablespace data02 as select * from dba_segments;
insert into k1 select * from k1;
commit;
create table k2 tablespace data01 as select * from dba_objects;
insert into k2 select * from k2;
insert into k1 select * from k1;
commit;
create table k3 tablespace users as select * from dba_extents;
insert into k3 select * from k3;
commit;
vi kkk2.sql
insert into k1 select * from k1;
insert into k2 select * from k2;
insert into k3 select * from k3;
commit;

SQL> @kkk
@kkk2
@kkk2
@kkk2
@kkk2
@kkk2
@kkk2
@kkk2
SQL> !cp /data1/oradata/PROD/*.dbf PROD_CP
SQL> alter database backup controlfile to '/data1/oradata/PROD_CP/control01.ctl';
SQL> !cp /data1/oradata/PROD/system01.dbf PROD_CP
SQL> create table k4 tablespace users  as select * from dba_extents;

- archive도 없음
mv archive archive3
2. cp로 백업한 것을 restore함(datafile, controlfile만 존재, redo log는 없음)
mv PROD PROD_CP_ORG
mv PROD_CP PROD


3. recovery status 확인
SQL> startup
ORACLE instance started.
Total System Global Area  101799240 bytes
Fixed Size                   456008 bytes
Variable Size              50331648 bytes
Database Buffers           50331648 bytes
Redo Buffers                 679936 bytes
Database mounted.
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open


4. 복구 시도
archive 가 없으므로 controlfile trace에서 RESETLOGS ARCHIVELOG => RESETLOGS NOARCHIVELOG로 변경

(1) 일반적인 복구 시도했으나 archive가 없음
SQL> recover database;
ORA-00283: recovery session canceled due to errors
ORA-01610: recovery using the BACKUP CONTROLFILE option must be done

SQL> recover database until cancel using backup controlfile;
ORA-00279: change 5531180 generated at 11/11/2005 00:20:07 needed for thread 1
ORA-00289: suggestion : /data1/oradata/archive/1_37.arc
ORA-00280: change 5531180 for thread 1 is in sequence #37

Specify log: {=suggested | filename | AUTO | CANCEL}
ORA-00308: cannot open archived log '/data1/oradata/archive/1_37.arc'
ORA-27037: unable to obtain file status
SVR4 Error: 2: No such file or directory
Additional information: 3

ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/data1/oradata/PROD/system01.dbf'

(2) resetlog open도 불가능함
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/data1/oradata/PROD/system01.dbf'

(3) hidden parameter 적용
 initPROD.ora 파일에 아래를 추가

_offline_rollback_segments=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3   $,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)

_corrupted_rollback_segments=true

_allow_resetlogs_corruption=true

(4) controlfile 재생성
SQL> alter database backup controlfile to trace;
SQL> show parameter user_dump_dest
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
user_dump_dest                       string      /data1/oradata/admin/PROD/udump

- 트레이스에서 RESETLOGS ARCHIVELOG => RESETLOGS NOARCHIVELOG 로 변경

CREATE CONTROLFILE REUSE DATABASE "PROD" RESETLOGS NOARCHIVELOG
--  SET STANDBY TO MAXIMIZE PERFORMANCE
   MAXLOGFILES 16
   MAXLOGMEMBERS 2
   MAXDATAFILES 30
   MAXINSTANCES 3
   MAXLOGHISTORY 337
LOGFILE
 GROUP 1 '/data1/oradata/PROD/log01a.log'  SIZE 50M,
 GROUP 2 '/data1/oradata/PROD/log02a.log'  SIZE 50M,
 GROUP 3 '/data1/oradata/PROD/log03b.log'  SIZE 50M
-- STANDBY LOGFILE
DATAFILE
 '/data1/oradata/PROD/system01.dbf',
 '/data1/oradata/PROD/undotbs.dbf',
 '/data1/oradata/PROD/users01.dbf',
 '/data1/oradata/PROD/data01_02.dbf',
 '/data1/oradata/PROD/data02_02.dbf',
 '/data1/oradata/PROD/data01_03.dbf',
 '/data1/oradata/PROD/data01_04.dbf',
 '/data1/oradata/PROD/data01_01.dbf',
 '/data1/oradata/PROD/data02_01.dbf',
 '/data1/oradata/PROD/users02.dbf'
CHARACTER SET KO16KSC5601;
(5) DB재기동후 controlfile 재생성
SQL> startup nomount
ORACLE instance started.
Total System Global Area  101799240 bytes
Fixed Size                   456008 bytes
Variable Size              50331648 bytes
Database Buffers           50331648 bytes
Redo Buffers                 679936 bytes
SQL>
SQL> CREATE CONTROLFILE REUSE DATABASE "PROD" RESETLOGS NOARCHIVELOG
 2  --  SET STANDBY TO MAXIMIZE PERFORMANCE
 3      MAXLOGFILES 16
 4      MAXLOGMEMBERS 2
 5      MAXDATAFILES 30
 6      MAXINSTANCES 3
 7      MAXLOGHISTORY 337
 8  LOGFILE
 9    GROUP 1 '/data1/oradata/PROD/log01a.log'  SIZE 50M,
10    GROUP 2 '/data1/oradata/PROD/log02a.log'  SIZE 50M,
11    GROUP 3 '/data1/oradata/PROD/log03b.log'  SIZE 50M
12  -- STANDBY LOGFILE
13  DATAFILE
14    '/data1/oradata/PROD/system01.dbf',
15    '/data1/oradata/PROD/undotbs.dbf',
16    '/data1/oradata/PROD/users01.dbf',
17    '/data1/oradata/PROD/data01_02.dbf',
18    '/data1/oradata/PROD/data02_02.dbf',
19    '/data1/oradata/PROD/data01_03.dbf',
20    '/data1/oradata/PROD/data01_04.dbf',
21    '/data1/oradata/PROD/data01_01.dbf',
22    '/data1/oradata/PROD/data02_01.dbf',
23    '/data1/oradata/PROD/users02.dbf'
24  CHARACTER SET KO16KSC5601;
Control file created.


(6) db를 resetlogs open하려하나 DB가 DOWN 됨
SQL> recover database until cancel using backup controlfile;
ORA-00279: change 5531180 generated at 11/11/2005 00:20:07 needed for thread 1
ORA-00289: suggestion : /data1/oradata/archive/1_37.arc
ORA-00280: change 5531180 for thread 1 is in sequence #37

Specify log: {=suggested | filename | AUTO | CANCEL}
cancel
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/data1/oradata/PROD/system01.dbf'

ORA-01112: media recovery not started

SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01092: ORACLE instance terminated. Disconnection forced

(7) alert log 분석
 - system tablespace에서 메모리를 관리할 때 오라클 내부적으로 사용하는 bootstrap 깨짐
 - 600 [4000] 에러가 발생, hidden parameter 을 써서 rollback semgent를 offline , corrupt
    시켰기 때문에 발생하는 것으로 판단됨
   
ARC1: Media recovery disabled
Fri Nov 11 00:48:00 2005
Errors in file /data1/oradata/admin/PROD/udump/prod_ora_12450.trc:
ORA-00600: internal error code, arguments: [4000], [5], [], [], [], [], [], []
Fri Nov 11 00:48:04 2005
Errors in file /data1/oradata/admin/PROD/udump/prod_ora_12450.trc:
ORA-00704: bootstrap process failure
ORA-00704: bootstrap process failure
ORA-00600: internal error code, arguments: [4000], [5], [], [], [], [], [], []
Fri Nov 11 00:48:04 2005
Error 704 happened during db open, shutting down database
USER: terminating instance due to error 704
Instance terminated by USER, pid = 12450
ORA-1092 signalled during: alter database open resetlogs...

(8) DB재기동 및 controlfile , redo를 모두 지움, controlfile 재생성
SQL> startup nomount
ORACLE instance started.
Total System Global Area  101799240 bytes
Fixed Size                   456008 bytes
Variable Size              50331648 bytes
Database Buffers           50331648 bytes
Redo Buffers                 679936 bytes
SQL> !rm /data1/oradata/PROD/*.log
SQL> !rm /data1/oradata/PROD/*.ctl
SQL>
SQL> CREATE CONTROLFILE REUSE DATABASE "PROD" RESETLOGS NOARCHIVELOG
 2  --  SET STANDBY TO MAXIMIZE PERFORMANCE
 3      MAXLOGFILES 16
 4      MAXLOGMEMBERS 2
 5      MAXDATAFILES 30
 6      MAXINSTANCES 3
 7      MAXLOGHISTORY 337
 8  LOGFILE
 9    GROUP 1 '/data1/oradata/PROD/log01a.log'  SIZE 50M,
10    GROUP 2 '/data1/oradata/PROD/log02a.log'  SIZE 50M,
11    GROUP 3 '/data1/oradata/PROD/log03b.log'  SIZE 50M
12  -- STANDBY LOGFILE
13  DATAFILE
14    '/data1/oradata/PROD/system01.dbf',
15    '/data1/oradata/PROD/undotbs.dbf',
16    '/data1/oradata/PROD/users01.dbf',
17    '/data1/oradata/PROD/data01_02.dbf',
18    '/data1/oradata/PROD/data02_02.dbf',
19    '/data1/oradata/PROD/data01_03.dbf',
20    '/data1/oradata/PROD/data01_04.dbf',
21    '/data1/oradata/PROD/data01_01.dbf',
22    '/data1/oradata/PROD/data02_01.dbf',
23    '/data1/oradata/PROD/users02.dbf'
24  CHARACTER SET KO16KSC5601;
Control file created.
SQL>
SQL> alter session set events '10015 trace name adjust_scn level 1';
Session altered.
SQL> recover database until cancel using backup controlfile;
ORA-00279: change 5531188 generated at 11/11/2005 00:58:07 needed for thread 1
ORA-00289: suggestion : /data1/oradata/archive/1_1.arc
ORA-00280: change 5531188 for thread 1 is in sequence #1

Specify log: {=suggested | filename | AUTO | CANCEL}
cancel
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/data1/oradata/PROD/system01.dbf'

ORA-01112: media recovery not started

SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01092: ORACLE instance terminated. Disconnection forced

(9) adjust_scn level을 늘려가면서 재시도
QL> startup mount
ORACLE instance started.
Total System Global Area  101799240 bytes
Fixed Size                   456008 bytes
Variable Size              50331648 bytes
Database Buffers           50331648 bytes
Redo Buffers                 679936 bytes
Database mounted.
SQL>
SQL> alter session set events '10015 trace name adjust_scn level 2';
Session altered.
SQL> recover database;
Media recovery complete.
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01139: RESETLOGS option only valid after an incomplete database recovery

SQL> alter database open;
Database altered.
반응형
Posted by [PineTree]