아카이브모드 사용


파라미터파일(init[SID].ora)에 다음과 같이 지정한다.

log_archive_start = true   (자동 아카이브를 사용하겠음,  ARCH백그라운드프로세스가 실행됨)

log_archive_dest = "C:\Oracle\oradata\maddog\archive" (아카이브로그가 저장될 곳)

log_archive_format = %%ORACLE_SID%%T%TS%S.ARC (파일이름을 어떤 식으로 할 것인가 지정)

이렇게 한 후, 데이터베이스를 시동하면 자동아카이빙으로 들어가게 된다.

오라클 8iEE(Enterprise Edition 8.1.xx버전이후로는 다음과 같이 사용할 것을 권고하고 있다.)

log_archive_start가 true이면 온라인redolog파일이 full되었을 경우 자동으로 아카이빙을 처리할 수 있게 한다.

log_archive_dest_1 = "location=C:\Oracle\oradata\maddog\archive"



log_archive_dest_n에서 n은 5개까지 잡혀져 있다.

자동 아카이빙이란
online redo log파일이 full이되면 로그스위치가 발생한다.
LGWR는 redo를 online redo log의 또 다른 set에 쓰기 시작한다.
(즉, 다른 로그그룹에 쓴다.)
로그 스위치후, 체크포인트가 발생한다.
LGWR는 DBWR에게 DB의 변경사항들을 포함하는 모든 버퍼에 있는 버퍼캐쉬의 내용을
디스크에 쓰도록한다. 또한 LOGWR는 로그스위치정보를 datafile의 헤더와 control파일에
쓴다. 자동 아카이빙을 설정했다면 마지막으로 ARCH백그라운드 프로세스가 online redo log를
LOG_ARCHIVE_DEST에 지정되어 있는 디렉토리로 복사한다.
만약 수동으로 아카이브하려면 다음과 같이 해줘야 한다.

이것은 full된 online redo log파일을 아카이브한다.

alter system archive log all to '/u01/oracle/arch'



alter system archive log start(자동아카이빙사용)는 ARCHIVE_LOG_DEST에 지정된 디렉토리로

archive log파일을 기록한다. 만일 수동으로 위치를 지정하고 싶다면 다음과 같이

한다.

alter system archive log start to '/u02/oracle/archive'



SVRMGR> startup

ORACLE 인스턴스가 시작되었습니다.

시스템 글로벌 영역                         45487372 바이트 합계

Fixed Size                                          70924 바이트

Variable Size                                    28364800 바이트

Database Buffers                                 16973824 바이트

Redo Buffers                                        77824 바이트

데이터베이스가 마운트되었습니다.

데이터베이스가 열려졌습니다.

SVRMGR> archive log list

데이터베이스 로그 모드         아카이브 모드가 아님

자동 아카이벌                  사용 가능

아카이브 수신지                C:\Oracle\oradata\maddog\archive (ARCHIVE_LOG_DEST)

가장 오래된 온라인 로그 순차   1165

현재 로그 순차                 1167

현재 위의 예에서 보듯이 DB가 아카이브 모드가 아니다.

데이터베이스 로그 모드'는 데이터베이스 생성시 지정해줘야 된다.

default는 noarchivelog이다.

create database .. [archivelog or noarchivelog]



noarchivelog인 데이터베이스를 archivelog모드로 변경하기 위해선 다음과 같이 해야 한다.

1. 데이터베이스 인스턴스를 shutdown한다.

2. 데이터베이스를 백업한다.(DB변경사항이 있으면 하는 형식적인 절차이다.)

3. 데이터베이스 인스턴스를 start, mount한다.(open하지 않음)

만일 OPS(Oracle Parallel Server)를 사용한다면 exclusive하게 mount해야 한다.

4. 데이터베이스를 archivelog모드로 변경한다.



SVRMGR> shutdown

데이터베이스가 닫혔습니다.

데이터베이스가 마운트 해제되었습니다.

ORACLE 인스턴스가 종료되었습니다.

SVRMGR> startup mount exclusive;

ORACLE 인스턴스가 시작되었습니다.

시스템 글로벌 영역                         45487372 바이트 합계

Fixed Size                                          70924 바이트

Variable Size                                    28364800 바이트

Database Buffers                                 16973824 바이트

Redo Buffers                                        77824 바이트

데이터베이스가 마운트되었습니다.

SVRMGR> alter database maddog archivelog;

명령문이 처리되었습니다.

SVRMGR> archive log list

데이터베이스 로그 모드         아카이브 모드

자동 아카이벌                  사용 가능

아카이브 수신지                C:\Oracle\oradata\maddog\archive

가장 오래된 온라인 로그 순차   1165

다음 아카이브 로그 순차        1167

현재 로그 순차                 1167

SVRMGR> alter database maddog open;

명령문이 처리되었습니다.

참조)

패러미터파일에서 log_archive_start = true을 설정하여 자동 아카이브를 사용할 수도 있으나,

서버관리자에서 archive log start로도 자동 아카이브를 사용할 수도 있다.

SVRMGR> archive log list

데이터베이스 로그 모드         아카이브 모드가 아님

자동 아카이벌                  사용 불가능

아카이브 수신지                C:\Oracle\Ora81\RDBMS

가장 오래된 온라인 로그 순차   1165

현재 로그 순차                 1167

SVRMGR> alter system archive log start (alter system은 생략 가능하다)

명령문이 처리되었습니다.

SVRMGR> archive log list

데이터베이스 로그 모드         아카이브 모드가 아님

자동 아카이벌                  사용 가능

아카이브 수신지                C:\Oracle\Ora81\RDBMS

가장 오래된 온라인 로그 순차   1165

현재 로그 순차                 1167

SVRMGR> alter system archive log stop (alter system은 생략 가능하다)

명령문이 처리되었습니다.

참조)
log_archive_format에 대해 살펴보자.

log_archive_format = %%ORACLE_SID%%T%TS%S.ARC

%%ORACLE_SID은 자신의 SID가 될 것이다. 여기서는 maddog이 되겠다.

%T: OPS(Oracle Parallel Server)안에 있는 instance의 redo log들에 대한 쓰레드번호. 좌측이 0으로 채워짐
%t: 상동. 좌측이 0으로 채워지지 않음
%S: 로그시퀀스번호. 좌측이 0으로 채워짐
%s: 상동. 좌측이 0으로 채워지지 않음

실제 위의 예에서 log_archive_format로 지정한 파일이름이 어떻게 생성되는지를 보자.
SVRMGR> alter system switch logfile; 이 명령으로 archive log파일이 디스크에 기록되게 된다

명령문이 처리되었습니다.

SVRMGR> archive log list;

데이터베이스 로그 모드         아카이브 모드

자동 아카이벌                  사용 가능

아카이브 수신지                C:\Oracle\oradata\maddog\archive

가장 오래된 온라인 로그 순차   1166

다음 아카이브 로그 순차        1168

현재 로그 순차                 1168

DB의 아카이브상태는 v$database뷰에서도 알수 있다.

v$database는 또한 change-based복구에서 필요로 하는 SCN을 제공한다.

로그순차(log sequence)의 경우 v$log_history뷰에서도 알 수 있다.

v$database의 정보는 control file에서 수집된 것이다.

SQL> select * from v$database;

DBID NAME      CREATED  RESETLOGS_CHANGE# RESETLOG PRIOR_RESETLOGS_CHANGE#

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

PRIOR_RE LOG_MODE     CHECKPOINT_CHANGE# ARCHIVE_CHANGE# CONTROL CONTROLF

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

CONTROLFILE_SEQUENCE# CONTROLFILE_CHANGE# CONTROLF OPEN_RESETL VERSION_

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

OPEN_MODE

----------

3524231243 MADDOG    00/09/03                 1 00/09/03                       0

ARCHIVELOG             83385621          161317 CURRENT 00/09/03

3554            83385621 00/11/07 NOT ALLOWED 00/09/03

READ WRITE

SQL> SELECT * FROM V$LOG_HISTORY;

RECID      STAMP    THREAD#  SEQUENCE# FIRST_CHANGE# FIRST_TI NEXT_CHANGE#

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

1  407369109          1          1             1 00/09/03          281

2  407369111          1          2           281 00/09/03          673

3  407369114          1          3           673 00/09/03         1248

4  407369119          1          4          1248 00/09/03         1740

5  407369121          1          5          1740 00/09/03         2339

6  407369124          1          6          2339 00/09/03         2929

7  407369127          1          7          2929 00/09/03         3442

.

.

1165  407373591          1       1165        161240 00/09/03       161317

1166  407374000          1       1166        161317 00/09/03       181479

1167  412272843          1       1167        181479 00/09/03       182038

위의 명령실행후, C:\Oracle\oradata\maddog\archive에 가보면 다음과 같은 파일이 생긴것을 알 수 있다.

MADDOGT001S01167.ARC

현재 활성화된 리두로그는 다음의 질의를 통해 알수 있다.

여기서 ARCHIVED(예제에서는 ARC로 이름이 짤렸다.)는 어떤 리두로그그룹이 archive되었는지 알 수 있다.

SQL> select * from v$log;

GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TI

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

1          1       1168    1048576          1 NO  CURRENT                 182038 00/10/29

2          1       1166    1048576          1 YES INACTIVE                161317 00/09/03

3          1       1167    1048576          1 YES INACTIVE                181479 00/09/03

SQL> select * from v$logfile;

GROUP# STATUS  MEMBER

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

1         C:\ORACLE\ORADATA\MADDOG\REDO01.LOG

2 STALE   C:\ORACLE\ORADATA\MADDOG\REDO02.LOG

3         C:\ORACLE\ORADATA\MADDOG\REDO03.LOG

음.. v$log와 v$logfile을 group#으로 join key를 삼아서 join하면 좋겠군..

패러미터파일(init.ora)의 LOG_ARCHIVE_DEST에 저장되는 아카이브된 redo로그들은

보통 오프라인상태인 테이프등에 백업받아 두는 것이 좋다.

만약 아카이브된 리두로그가 손상되었다면 손상된 리두로그 바로 전의 시점까지만

복구된다. 이런 상황에서는 단지 완벽하지 않은(incomplete) 복구를 할 수 밖에 없다.

incomplete복구는 time-based, change-based, cancel-based가 있다.

2001-11-11 추가

아카이브된 리두로그(offline 리두로그라고도 함)파일들은 log_archive_dest에 쌓이게 되고

여기에 쌓인 파일들의 목록들은 v$archived_log에 기록된다.

2001-12-22 추가

패러미터파일(Init.ora)에서 아카이브관련된 이름은 log_archive_로 시작한다.

SVRMGRL프롬프트상에서 아카이브에 관련된 이름은 archive log로 지정된다.

관련뷰: v$archived_log, v$logfile, v$log, v$log_history

2004-01-31 추가

9i부터는 다음과 같이 하면 된다.

DB를 아카이빙이 사용할 디렉토리 지정

SQL> alter system set log_archive_dest='/u01/app/oracle/admin/dev/arch'; (오라클 재시작시 반영안됨)

or

SQL> alter system set log_archive_dest='/u01/app/oracle/admin/dev/arch' scope=both; (오라클 재시작시 반영됨)

DB를 아카이브모드로 변경

SQL> alter database maddog archivelog;

자동 아카이빙 활성화

SQL> alter system archive log start; 

SQL> alter system set log_archive_start=true scope=spfile; (오라클 재시작시 반영되도록 함)