TECH
QUESTION
자주하는 질문답변 입니다.
Oracle
작성자 | 유건데이타 | 등록일 | 2015-07-15 |
제목 | READ ONLY TABLESPACE recover | ||
---|---|---|---|
read only tablespace mechanism과 read-only상태를 포함하는 tablespace의
recovery방법에 대해서 살펴본다. Explanation ----------- 1. 개요 Oracle7 V7.1부터 tablespace를 읽기만 가능한 tablespace로 만들 수 있다. tablespace를 read-only tablespace로 변경하는 문장은 다음과 같다. SQL>alter tablespace tablespace_name read only; 위의 명령을 수행하기 위한 선행조건은 다음과 같다. (1) 변경하고자 하는 tablespace가 online이어야 한다. (2) 이 tablespace가 active rollback segment를 포함하지 않아야 한다. (3) begin backup mode 상태가 아니어야 한다. (4) initSID.ora file 내의 COMPATIBLE parameter가 7.1.0 이상이어야 한다. (5) 해당 tablespace에 active transaction이 있어서는 안 된다. 이렇게 tablespace를 read-only상태로 지정하게 되면, 다음과 같은 정보가 저장된다. - control file내에 해당 datafile을 read-only 상태로 설정하고 stop SCN 기록 - 해당 datafile의 header에도 stop SCN 기록 - sys.TS$ 에 stop SCN값 기록. 이 read-only tablespace를 다시 read write상태로 변경하게 되면, 지정되었던 stop SCN과 현재의 SCN을 이용하여 controlfile내에 offline SCN/online SCN으로 기록해 두어 read-only상태로 존재하던 SCN 범위가 확인 가능하도록 한다. 이렇게 tablespace를 read-only상태로 유지하게 되면 먼저 한번만 write후 읽기만 가능한 장비등에 저장, 사용할 수 있다. 그외에 실제적인 장점은 backup/recovery시에 도움이 된다는 것이다. read-only상태에서 한번 backup을 받으면 이후 read-write가 되기 전까지 추가적인 backup이 필요없으며, 일정 기간만 read-only상태로 유지하더라도 recovery시 해당 기간 동안은 archive file을 아예 비교하지도 않고 skip하게 되어 recovery성능에 도움이 된다. read-write tablespace의 경우는 변경이 이루어지지 않았다 하더라도 recovery시 archive file을 계속 확인해야 하는 작업이 필요하다. 2. Backup과 Recovery read-only tablespace에 대한 정보는 controlfile내에 저장되기 때문에, recovery시 controlfile을 현재것을 사용하느냐, 과거것을 사용하느냐에 따라 recovery 절차도 달라지게 된다. 현재의 controlfile을 사용하는 경우 datafile header의 stop SCN과 controlfile내의 stop SCN이 같으면 recovery가 필요없게 되어, 간단히 작업이 끝나게 되므로 tablespace가 read-only상태가 되면 backup을 한번 받아두는것이 중요하다. 다음에 read-only tablespace의 backup과 recovery에 관한 주요한 scenario를 current controlfile의 유무로 나누어 정리하였다. tablespace이름은 USERS를 예로 하고, USERS의 datafile은 /oracle/oradata/users01.dbf 로 가정한다. (1) current control file을 이용하는 경우 - read-only tablespace의 read-only상태의 backup이 있고, control file에 이 tablespace가 read-only라는 정보가 있을 때, 복구 방법: db open상태에서: SVRMGR>alter tablespace users offline; backup 받은 datafile을 restore시킨다. SVRMGR>alter tablespace users online; db mount상태에서: backup 받은 datafile을 restore시킨다. SVRMGR>alter database open; 만약 이러한 상태에서 tablespace를 recover하고자 하면 다음과 같은 오류가 발생한다. SVRMGR> recover tablespace readonly; ORA-00283: Recovery session canceled due to errors ORA-00264: no recovery required - read-only tablespace가 read-only이 상태였을 때의 backup이 있고, 현재의 control file 정보에는 이 tablespace-write가 되어있고, 현재의 tablespace가 read-write이면, 복구 방법: db open상태에서: SVRMGR>alter tablespace users offline; backup 받은 datafile을 restore시킨다. SVRMGR>recover tablespace users; db mount상태에서: backup 받은 datafile을 restore시킨다. SVRMGR>recover database; 혹은 SVRMGR>recover datafile '/oracle/oradata/users01.dbf'; SVRMGR>alter database open; 이 때, tablespace가 read-write로 변경된 이후의 모든 archive file이 필요하다. - read-only tablespace가 read-write 상태였을 때의 backup이 있고, 현재의 control file이 tablespace가 read-only 상태를 나타내고, 현재 tablespace가 read-only상태이면, 복구 방법: db open상태에서: SVRMGR>alter tablespace users offline; backup 받은 datafile을 restore시킨다. SVRMGR>recover tablespace users; db mount상태에서: backup 받은 datafile을 restore시킨다. SVRMGR>recover database; 혹은 SVRMGR>recover datafile '/oracle/oradata/users01.dbf'; SVRMGR>alter database open; 이 때, tablespace backup받은 시점 이후부터, read-only로 변경되었을 시점까지의 archive file이 필요하다. (2) coltrolfile을 backup본을 이용하는 경우 - tablespace가 read only->read write->read only로 변경되었다고 가정. controlfile의 backup본이 tablespace가 read-write라는 정보를 가지고 있고, datafile의 backup은 controlfile backup이전 상태의 read-only 시점의 것이고, tablespace는 현재 read-only이라면, 복구 방법: db down상태에서 controlfile backup과 datafile backup을 restore한다. SVRMGR>startup mount; SVRMGR>recover database using backup controlfile; SVRMGR>alter database open resetlogs; 이것은 tablespace가 read-write로 전환된 첫번째 archive file부터 현재의 redo log file가지를 적용한다. - control file의 bakcup본이 이 tablespace가 read-only임을 나타내고, tablespace가 read-write일 때의 datafile backup이 존재하고, tablespace가 현재 read-only라면, backup control file을 이용하여서는 read-only 상태의 tablespace를 recovery할 수 없다. recover를 시도하면, 다음과 같은 오류가 발생한다. SVRMGR> recover database using backup controlfile; ORA-00283: Recovery session canceled due to errors ORA-01233: file 3 is read only - cannot recover using backup controlfile ORA-01110: data file 3: '/oracle/oradata/users01.dbf' 복구 방법: control file을 재생성한다. SVRMGR>alter database backup controlfile to trace; SVRMGR>select value from v$parameter where name = 'user_dump_dest'; 여기에 나타난 directory에서 ls -alt *.trc하여 CREATE CONTROLFILE문장이 포함된 file을 찾는다. 이 trace file이름을 cnt.sql이라고 수정하고, NORESETLOGS부분을 RESETLOGS로 변경한다. SVRMGR>shutdown immediate SVRMGR>startup nomount; SVRMGR>@cnt.sql SVRMGR>recover database using backup controlfile; SVRMGR>alter database open resetlogs; tablespace backup이후부터 현재까지의 archive file과 online redo log file들이 필요하다. - control file의 bakcup본이 이 tablespace가 read-only임을 나타내고, read-only 상태의 datafile backup이 존재하고, tablespace가 현재 read-only라면, 이러한 경우 전혀 read-only tablespace에 대한 recovery는 필요하지 않은 상태이나 backup본의 controlfile을 이용하기 때문에 database의 recovery가 필요하게 되고, recovery시 여전히 앞에서와 같이 ORA-1233이 발생하게 된다. 이러한 경우에는 다음과 같이 하면 해당 tablespace에 대해서는 recovery 를 시도하지 않고 사용할 수 있다. SVRMGR>startup mount; SVRMGR>alter database datafile '/oracle/oradata/users01.dbf' offline; SVRMGR>recover database using backup controlfile; SVRMGR>alter database open resetlogs; SVRMGR>alter tablespace users online; 이것은 controlfile backup이후 시점부터 현재까지의 archive file과 online redo log file이 필요하다. |
Comment | |||
---|---|---|---|
등록된 코멘트가 없습니다. |