Oracle Database TIP
아카이브 로그 모드(Archive Log Mode) 18 6 66,566

by 김정식 ARCHIVELOG NO ARCHIVELOG LOG_ARCHIVE_START LOG_ARCHIVE_DEST 아카이브 로그 [2006.01.10]


아카이브 로그 모드(Archive Log Mode)란?

  우리가 오라클데이터베이스에 접속을해서 DML이나 DDL등의 명령어로 작업을 수행하면, 모든 작업의 기록이 리두로그 파일에 저장이 된다.

  작업의 양이 많아지면 리두로그파일에 기록하는 내용도 굉장히 많아지게 되겠죠. 그렇게 되면 데이터를 기록하기 위해서 리두로그파일을 늘려야 하는 일이 발생을 한다.

  그런데 오라클 리두로그파일은 계속 증가하는 것이 아니라 몇 개의 리두로그 파일을 만들어 놓고 번갈아 가면서 기록하는 구조로 되어 있다.

  이렇게 번갈아 가면서 기록을 하게 되면 새로운작업의 내용이 예전의 작업내용을 덮어쓰므로 예전의 작업한 내용을 잃게 된다는 단점이 있다. 그래서 예전의 작업한 내용에 데이터 손실이 발생하면 복구하기 어렵다는 단점이 있다.

  이런 단점을 해결하기 위한 방법이 리두로그파일의 내용을 다른 디렉토리에 자동으로 복사해서 저장하도록 운영하는 방법이다. 이렇게 운영하는 방법을 아카이브 로그 모드(Archive Log Mode)라고 한다.

  오라클데이터베이스는 기본적으로 No Archive Log Mode 이고, Archive Log Mode로 운영하기 위해서는 따로 설정을 해주어야 한다.

PFILE을 수정하여 데이타베이스를 archivelog mode로 설정하기

  NO ARCHIVE LOG 상태의 데이터베이스를 ARCHIVE LOG 모드 상태로 변경하기 위해서는 다음과 같은 순서로 작업해야 한다.

  • 1) INIT.ORA 파라미터 파일을 수정한다.
  • 2) 데이터베이스 인스턴스를 종료(SHUTDOWN)한다.
  • 3) 데이터베이스 인스턴스를 MOUNT한다.(OPEN하지 않습니다)
  • 4) 데이터베이스를 ARCHIVE LOG 모드로 변경한다.
  • 5) 데이터베이스 인스턴스를 OPEN한다.

1) INIT.ORA파일의 parameter 수정

  INIT.ORA 파일에서 아래 부분을 수정하고, 주석(#)을 제거하고 저장합니다.

 
# 아카이브 프로세스를 오라클 시작과 함께 실행하도록 설정
# log switch 발생시 자동으로 archive를 수행 합니다
LOG_ARCHIVE_START = TRUE
 
# 아카이브 로그 파일을 저장할 디렉토리 설정
LOG_ARCHIVE_DEST = "C:\oracle\ora92\database\archive"  
 
# 아카이브 로그 파일의 이름 설정
LOG_ARCHIVE_FORMAT = %S.ARC
    

  ※ LOG_ARCHIVE_FORMAT 옵션

  - %S : redo 로그 시퀀스 번호를 표시하여 자동으로 왼쪽이 0으로 채워져 파일 이름 길이를 일정하게 만든다.

  - %s : redo 로그 시퀀스 번호를 표시하고, 파일 이름 길이를 일정하게 맞추지 않는다.

  - %T : redo 스레드 넘버를 표시하며, 자동으로 왼쪽이 0으로 채워져 파일 이름 길이를 일정하게 만든다.

  - %t : redo 스레드 넘버를 표시하며, 파일 이름 길이를 일정하게 맞추지 않는다.

2) 데이터베이스 인스턴스를 종료
 
-- SQLPLUS 실행
SQLPLUS /nolog
 
-- SYSDBA 권한으로 접속 합니다. 
SQL>CONN SYS/MANAGER AS SYSDBA
  
SQL> SHUTDOWN IMMEDIATE
데이터베이스가 닫혔습니다.
데이터베이스가 마운트 해제되었습니다.
ORACLE 인스턴스가 종료되었습니다.
    

3) 데이터베이스 인스턴스를 MOUNT
 
SQL> STARTUP MOUNT pfile=C:\oracle\ora92\database\INITORA9I.ORA
데이터베이스가 마운트되었습니다.
    

4) DATABASE를 ARCHIVE LOG MODE로 전환.
 
SQL> ALTER DATABASE ARCHIVELOG; 
데이타베이스가 변경되었습니다.
    

5) DATABASE OPEN
 
SQL> ALTER DATABASE OPEN; 
    

6) ARCHIVE LOG MODE가 정상적으로 설정되어 있는지 확인한다.
 
SQL> ARCHIVE LOG LIST
데이터베이스 로그 모드              아카이브 모드
자동 아카이브             사용
아카이브 대상            C:\oracle\ora92\database\archive
가장 오래된 온라인 로그 순서     16
아카이브할 다음 로그   18
현재 로그 순서           18
    

7) 강제로 로그 스위치를 발생시켜서 아카이브 로그 파일이 저장되는지 확인

  C:\oracle\ora92\database\archive 디렉토리에 파일이 생성되었는지 확인 한다.

 
SQL> ALTER SYSTEM SWITCH LOGFILE;
시스템이 변경되었습니다.     
    

ARCHIVELOG MODE에서 NO ARCHIVELOG MODE로 전환하기

  먼저, 위에서 setting 했던 INIT.ORA 파일에서 설정했던 부분을 (#)으로 주석처리 한다.

 
#LOG_ARCHIVE_START = TRUE
#LOG_ARCHIVE_DEST = "C:\oracle\ora92\database\archive"  
#LOG_ARCHIVE_FORMAT = %S.ARC

-- 데이터베이스 종료
SQL> SHUTDOWN IMMEDIATE
 
-- 데이터베이스 인스턴스를  mount 
SQL> STARTUP MOUNT pfile=C:\oracle\ora92\database\INITORA9I.ORA
 
-- 데이터베이스를  no archive log mode로 전환.
SQL> ALTER DATABASE NOARCHIVELOG;
 
--  database open
SQL> ALTER DATABASE OPEN; 
 
-- 아카이브 로그 모드 상태 확인
SQL> ARCHIVE LOG LIST 
데이터베이스 로그 모드              아카이브 모드가 아님
자동 아카이브             사용 안함
아카이브 대상            C:\oracle\ora92\RDBMS
가장 오래된 온라인 로그 순서     17
현재 로그 순서           19    
    

SPFILE(서버 파라미터 파일)을 수정하여 데이타베이스를 ARCHIVELOG MODE로 설정

  Oracle9i 이상의 경우 서버 파라미터 파일을 사용 할 경우 아래와 같은 과정을 거쳐서 아카이브 로그모드로 변경해야 한다.

 
1) 파라미터 설정
 
-- sqlplus 실행
SQLPLUS /nolog
 
-- SYSDBA 권한으로 접속 합니다. 
SQL> CONN / AS SYSDBA
 
-- LOG_ARCHIVE_START 파라미터 변경
SQL> ALTER SYSTEM SET 
     LOG_ARCHIVE_START=TRUE SCOPE=SPFILE;
 
-- LOG_ARCHIVE_DEST 파라미터 변경
SQL> ALTER SYSTEM SET 
     LOG_ARCHIVE_DEST='C:\oracle\ora92\database\archive' 
     SCOPE=SPFILE;
 
-- LOG_ARCHIVE_FORMAT 파라미터 변경
SQL> ALTER SYSTEM SET 
     LOG_ARCHIVE_FORMAT='%S.ARC' SCOPE=SPFILE;
 
 
2) DB Shutdown 
SQL> SHUTDOWN IMMEDIATE
 
 
3) Mount 상태로 Startup
SQL> STARTUP MOUNT
 
 
4) 아카이브 로그 모드 활성화
SQL>ALTER DATABASE ARCHIVELOG;
 
 
5) 데이타베이스 오픈
SQL> ALTER DATABASE OPEN; 
 
 
6) 아카이브 로그 모드가 정상적으로 설정되어 있는지 확인한다.
SQL> ARCHIVE LOG LIST;
데이터베이스 로그 모드              아카이브 모드
자동 아카이브             사용
아카이브 대상            C:\oracle\ora92\database\archive
가장 오래된 온라인 로그 순서     17
아카이브할 다음 로그   19
현재 로그 순서           19    
    

SPFILE(서버 파라미터 파일)에서 NO ARCHIVE LOG모드로 전환하기

 
1) 자동 아카이브 모드를 false로 변경 한.
SQL> ALTER SYSTEM SET 
     LOG_ARCHIVE_START=FALSE SCOPE=SPFILE;
 
 
2)DB shutdown 
SQL> SHUTDOWN IMMEDIATE
 

3) mount 상태로 startup
SQL> STARTUP MOUNT
 

4) 데이터베이스를  no archive log mode로 전환.
SQL> ALTER DATABASE NOARCHIVELOG;
 
 
5) 데이타베이스 오픈
SQL> ALTER DATABASE OPEN; 
 
 
6) 아카이브 로그 모드 상태 확인
SQL> ARCHIVE LOG LIST;
데이터베이스 로그 모드              아카이브 모드가 아님
자동 아카이브             사용 안함
아카이브 대상            C:\oracle\ora92\database\archive
가장 오래된 온라인 로그 순서     17
현재 로그 순서           19    
    

- 강좌 URL : http://www.gurubee.net/lecture/1873

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

by 백용준 [2006.03.10 15:27:25]
10g에서는
ALTER SYSTEM SET LOG_ARCHIVE_START=TRUE, FALSE SCOPE=SPFILE;
제외하고 archive mode or noarchive mode 로 설정하시면 됩니다.
그렇지 않고
ALTER SYSTEM SET LOG_ARCHIVE_START=TRUE, FALSE를 실행한다면 아래와 같은 에러가 발생합니다.
"ORA-32004: obsolete and/or deprecated parameter(s) specified"

by 이태훈 [2010.12.16 18:40:40]
10g에서는 archive log dest 를 다른경로로 설정는방법은 없나요?

by 1 [2010.12.20 11:14:06]
SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u02/oracle/DB/arch/arch
Oldest online log sequence 4
Next log sequence to archive 6
Current log sequence 6
SQL> show parameters log_archive_dest_1

NAME TYPE VALUE
------------------------------------ --------------------------------- ------------------------------
log_archive_dest_1 string LOCATION=/u02/oracle/DB/arch/a
rch MANDATORY REOPEN
log_archive_dest_10 string
SQL> alter system set log_archive_dest_1='LOCATION=/u02/oracle/DB/arch2/arch MANDATORY REOPEN' scope=both ;

System altered.

SQL> !ls -lrt /u02/oracle/DB/arch2/
total 0

SQL> alter system switch logfile ;

System altered.

SQL> !ls -lrt /u02/oracle/DB/arch2/
total 17356
-rw-r----- 1 oracle oinstall 17746432 Dec 20 11:16 archTLO_1_6_735939596.dbf

by 손님 [2013.01.02 14:56:05]

Archive 경로 설정할때 reopen=60
이 옵션은 뭔지 아시는 분??

by 손님 [2013.02.14 19:25:21]

 REOPEN은 standby db쪽으로 archive가 실패한경우 지정된 초만큼 후에
다시 archive를 시도하라는 의미 입니다.

by ghksdnek [2014.09.01 17:02:59]

11g에서는 archive log dest를 다른 경로로 지정할 수 없나요??

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입