아카이브 모드변경과 저장경로 설정방법

==== 목차 ====
[ 1 ] 아카이브 모드 설정방법
[ 2 ] 아카이브 파일 저장경로 설정방법
  1. FRA (Fast Recovery Area) 관리
  2. log_archive_dest 관리 ( 이중화 실습 )
  3. log_archive_dest_n 관리 ( 삼중화 실습 )
  ※ 위 1, 2, 3번으로 아카이브 저장경로 1곳으로 설정가능하나, 사용방법 이해를 위해 최대한 다중으로 저장해보는 실습
[ 3 ] 백업 파일은 FRA 저장, 아카이브만 별도 경로 설정방법

 

[ 1 ] 아카이브 모드 설정 방법

  1. 아카이브 모드 확인
    : database 설치시에 Archive Mode를 설정하지 않아, No Archive Mode이다.

Enable archiving 미선택
 
sqlplus / as sysdba 

SQL> archive log list
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     4
Current log sequence           6

 

  2. 아카이브 모드 변경

1) DB SHUTDOWN
SHUTDOWN IMMEDIATE;

2) DB MOUNT 시작
STARTUP MOUNT;

3) 아카이브 모드 활성화
ALTER DATABASE ARCHIVELOG;

4) DB OPEN 
ALTER DATABASE OPEN;

5) 아카이브 모드 설정 확인
SQL> ARCHIVE LOG LIST; 
Database log mode           Archive Mode  >>>>>  No Archive Mode -> Archive Mode로 변경됨
Automatic archival          Enabled 
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     4
Next log sequence to archive   6
Current log sequence           6

* DB_RECOVERY_FILE_DEST 경로 확인 ( 아래 경로 /archive/날짜별 폴더에 아카이브 파일 저장됨 )
SQL> show parameter recovery;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string        /u01/app/oracle/fast_recovery_area
db_recovery_file_dest_size           big integer   8256M
recovery_parallelism                 integer         0
remote_recovery_file_dest

[ 2 ] 아카이브 파일 저장 경로 설정 방법

  1. FRA (Fast Recovery Area) 에서 아카이브 관리 ( 이하 FRA 로 표현 )
  
    : Database 설치시에 아래 이미지와 같이 "Fast Recovery Area"를 사용한다고 체크했기 때문 [1]번 설정됨
      ===== Archive destination USE_DB_RECOVERY_FILE_DEST =====
      FRA 경로 : Default {Oracle_Base}/fast_recover_area/{DB_UNIQUE_NAME}
      그러므로 archive 파일은 위 FRA 경로에 /archivelog/날짜별 디렉토리에 저장됨

DB 설치시 FAST RECOVERY OPTION 활성화 선택함

 

 

실습) 아카이브 파일 저장 경로에 아카이브 파일 만들기
  : switch log x 5번 -> fra/archivelog/날짜/ 경로에서 아카이브 생성 확인

SQL> alter system switch logfile; 
System altered.

[oracle@ol819cs22 2024_06_14]$ pwd
    /u01/app/oracle/fast_recovery_area/ORA19/archivelog/2024_06_14
[oracle@ol819cs22 2024_06_14]$ ll
    total 7748
    -rw-r-----. 1 oracle dba 7916032 Jun 14 17:16 o1_mf_1_20_m6qz3ojf_.arc
    -rw-r-----. 1 oracle dba    1024 Jun 14 17:16 o1_mf_1_21_m6qz3pom_.arc
    -rw-r-----. 1 oracle dba    1536 Jun 14 17:16 o1_mf_1_22_m6qz3qp2_.arc
    -rw-r-----. 1 oracle dba    1024 Jun 14 17:16 o1_mf_1_23_m6qz3r9r_.arc
    -rw-r-----. 1 oracle dba    1024 Jun 14 17:17 o1_mf_1_24_m6qz3xj3_.arc

 

 

[ 참고 ]
  1. Fast Recovery Area 란?
    : 데이터베이스 복구를 위한 모든 관련 파일을 중앙 집중식으로 관리하는 공간이며, 데이터베이스의 복구 가능성을
      높이고 관리작업을 간소화함. RMAN으로 백업 받을 경우 해당 경로에 /backupset으로 설정되어 저장됨.

  2. FRA 2가지 설정
    1) 위치     

 ALTER SYSTEM SET DB_RECOVERY_FILE_DEST = '/u01/app/oracle/fast_recovery_area' SCOPE=BOTH;


    2) 크기     

 ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE = 100G SCOPE=BOTH;
 ※ FRA 사용 현황 조회 : SELECT * FROM V$RECOVERY_AREA_USAGE;

 

​2. log_archive_dest 관리 ( 이중화 )

  : 지정한 경로에 아카이브 파일 쌓기 위한 용도이며, oracle 8i 이전까지 사용하던 방법. 현재도 사용가능하나
    오라클에서권장하지는 않음. LOG_ARCHIVE_DEST는 1개 경로에 쌓는 것이며, 가용성을
    위해서 LOG_ARCHIVE_DUPLEX_DEST를 사용하여 위치를 추가로 설정가능함. 하나의 위치에서 문제가 
    발생하더라도 다른 위치에서 아카이브 로그를 사용할 수 있어 데이터 보호와 가용성을 높일 수 있음.


실습) 아카이브 파일 저장 경로에 아카이브 파일 만들기
  1. 이중화를 위해 /u02 디렉토리 신규 스토리지 attach 함
  2. 아카이브 파일 다른 Disk에 저장하기
    - /tmp <-- /dev/sda2
    - /u02/archivelog/ <-- /dev/sdb1

※ fra와 log_archive_dest는 동시사용 불가하므로 한 곳 경로는 '' 처리    
 < 동시 사용 에러 >
   ALTER SYSTEM SET LOG_ARCHIVE_DEST='/u02/archivelog' SCOPE=BOTH;
   ALTER SYSTEM SET LOG_ARCHIVE_DUPLEX_DEST='USE_DB_RECOVERY_FILE_DEST' SCOPE=BOTH;
   **** 아래 에러 발생 
   ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='/u01/app/oracle/fast_recovery_area' SCOPE=BOTH; 
   * 에러코드 
     ORA-02097: parameter cannot be modified because specified value is invalid
     ORA-16019: cannot use db_recovery_file_dest with LOG_ARCHIVE_DEST or  LOG_ARCHIVE_DUPLEX_DEST     
   * log_archive_dest_n 과 fra 는 에러 발생 하지 않음.  
   
   
  1. fra '' 처리     
     alter system set db_recovery_file_dest='' scope=both;

  2. log_archive_dest만 해도되나, 이중화를 위해 log_archive_duplex_dest 까지 설정
     alter system set log_archive_dest='/tmp' scope=both;
     alter system set log_archive_duplex_dest = '/u02/archivelog'  scope=both;
        
[ Script ]
  1. FRA '' 처리
    SQL> alter system set db_recovery_file_dest='' scope=both;
 
  2. Oracle이 아래 경로로 아카이브 파일 경로 변경함    
    SQL> archive log list
            Database log mode              Archive Mode
            Automatic archival             Enabled
            Archive destination            /u01/app/oracle/product/19.3.0/dbhome_1/dbs/arch
            Oldest online log sequence     24
            Next log sequence to archive   26
            Current log sequence           26

  3. 원하는 경로로 변경      
    alter system set log_archive_dest='/tmp' scope=both;

    SQL> archive log list
            Database log mode              Archive Mode
            Automatic archival             Enabled
            Archive destination            /tmp **********************
            Oldest online log sequence     24
            Next log sequence to archive   26
            Current log sequence           26

  4. 이중화 
    alter system set log_archive_duplex_dest = '/u02/archivelog'  scope=both;

     SQL> archive log list
            Database log mode              Archive Mode
            Automatic archival             Enabled
            Archive destination            /u02/archivelog **********************
            Oldest online log sequence     24
            Next log sequence to archive   26
            Current log sequence           26
  

  5. 아카이브 저장 경로 조회
      SELECT name, value, default_value, display_value
       FROM V$PARAMETER a 
     WHERE NAME in ( 'db_recovery_file_dest','log_archive_dest'
                    ,'log_archive_duplex_dest','log_archive_format' );   

    NAME	                    VALUE	                DEFAULT_VALUE	DISPLAY_VALUE
    log_archive_dest	        /tmp	                NONE	        /tmp
    log_archive_duplex_dest 	/u02/archivelog	        NONE	        /u02/archivelog
    log_archive_format  	    ARCH_STR_%r_%t_%s.ARC	%t_%s_%r.dbf	ARCH_STR_%r_%t_%s.ARC
    db_recovery_file_dest		NONE	


  6. 아카이브 파일 만들기 
    :  switch log x 5번 ->  /tmp, /u02/archivelog 생성 확인
    SQL> alter system switch logfile; 
    System altered.

  7. log_archive_dest 경로 
    [oracle@ol819cs22 ~]$ ll /tmp/*.ARC 
    -rw-r-----. 1 oracle dba 2048 Jun 14 17:56 /tmp/ARCH_STR_1171616389_1_31.ARC
    -rw-r-----. 1 oracle dba 1024 Jun 14 17:56 /tmp/ARCH_STR_1171616389_1_32.ARC
    -rw-r-----. 1 oracle dba 1024 Jun 14 17:56 /tmp/ARCH_STR_1171616389_1_33.ARC
    -rw-r-----. 1 oracle dba 9216 Jun 14 17:56 /tmp/ARCH_STR_1171616389_1_34.ARC
    -rw-r-----. 1 oracle dba 1024 Jun 14 17:56 /tmp/ARCH_STR_1171616389_1_35.ARC
    
  8.log_archive_duplex_dest 경로 
    [oracle@ol819cs22 ~]$ ll /u02/archivelog/
    total 28
    -rw-r-----. 1 oracle dba 2048 Jun 14 17:56 ARCH_STR_1171616389_1_31.ARC
    -rw-r-----. 1 oracle dba 1024 Jun 14 17:56 ARCH_STR_1171616389_1_32.ARC
    -rw-r-----. 1 oracle dba 1024 Jun 14 17:56 ARCH_STR_1171616389_1_33.ARC
    -rw-r-----. 1 oracle dba 9216 Jun 14 17:56 ARCH_STR_1171616389_1_34.ARC
    -rw-r-----. 1 oracle dba 1024 Jun 14 17:56 ARCH_STR_1171616389_1_35.ARC
 
  ※ 아카이브 파일이 .dbf 파일로 저장된다면, archive_format이 변경된 것이므로 아래 수행 후 db restart 후에 재작업!
    : alter system set log_archive_format='ARCH_STR_%r_%t_%s.ARC' scope=spfile;

3. log_archive_dest_n 관리


    : 8i부터 여러 아카이브 로그 목적지를 설정하는 방법. 오라클에서는 log_archive_dest 보다는 
      log_archive_dest_n을권장하고 있음. 그 이유는 유연성과 가용성으로, LOG_ARCHIVE_DEST_n을 
      사용하면 여러 아카이브 로그 목적지를 지정 할 수 있어 로그 관리와 데이터 보호 측면에서 
      더 많은 이점을 제공함. 사용 방법 이해를 위해 아키이브 삼중화까지 해보자.

실습) 아카이브 파일 저장 경로에 아카이브 파일 만들기
  1. 삼중화 저장 경로
    - /tmp <-- /dev/sda2
    - /u02/archivelog/ <-- /dev/sdb1
    - /u01/app/oracle/fast_recovery_area/ORA19/archivelog/2024_06_14/ <-- FRA

※ log_archive_dest_n 에서 사용할 경로 3가지
  - LOG_ARCHIVE_DEST, LOG_ARCHIVE_DUPLEX_DEST 에서 사용했던 경로 2개 
  - FRA 
      
[ Script ]
1. log_archive_dest 경로 모두 '' 처리 
  ALTER SYSTEM SET LOG_ARCHIVE_DUPLEX_DEST = '' SCOPE=BOTH;
  ALTER SYSTEM SET LOG_ARCHIVE_DEST = '' SCOPE=BOTH;

2. log_archive_dest_n 경로 설정
  ALTER SYSTEM SET LOG_ARCHIVE_DEST_1 = 'LOCATION=/tmp' SCOPE=BOTH; -- log_archive_dest 경로
  ALTER SYSTEM SET LOG_ARCHIVE_DEST_2 = 'LOCATION=/u02/archivelog' SCOPE=BOTH; -- log_archive_duplex_dest 경로
  ALTER SYSTEM SET LOG_ARCHIVE_DEST_3 = 'LOCATION=USE_DB_RECOVERY_FILE_DEST' SCOPE=BOTH; -- fra 사용
  ALTER SYSTEM SET DB_RECOVERY_FILE_DEST = '/u01/app/oracle/fast_recovery_area' SCOPE=BOTH; -- fra 경로 지정
 
3. 아키이브 모드 확인
  SQL> archive log list
  Database log mode              Archive Mode
  Automatic archival             Enabled
  Archive destination            USE_DB_RECOVERY_FILE_DEST
  Oldest online log sequence     46
  Next log sequence to archive   48
  Current log sequence           48

4. [2] 번 테스트로 적재된 ARCHIVE 모두 삭제 처리

5. 아카이브 적재 경로 확인 
  SELECT name, value
    FROM V$PARAMETER a 
   where name in ( 'db_recovery_file_dest','log_archive_dest','log_archive_duplex_dest'
   ,'log_archive_format','log_archive_dest_1','log_archive_dest_2','log_archive_dest_3' );   
     
  NAME                VALUE   
  log_archive_dest_1  LOCATION=/tmp   
  log_archive_dest_2  LOCATION=/u02/archivelog    
  log_archive_dest_3  LOCATION=USE_DB_RECOVERY_FILE_DEST  
  log_archive_dest    NONE    
  log_archive_duplex_dest NONE    
  log_archive_format  ARCH_STR_%r_%t_%s.ARC   
  db_recovery_file_dest   /u01/app/oracle/fast_recovery_area  

6.  아카이브 파일 만들기 > switch log x 5번
    SQL> alter system switch logfile; 
    System altered.  
  
7.  삼중화 확인 조회
  : fra는 omf 형태로 자동으로 생성되고, 이외는 설정한 format 형태로 생성됨   
1) LOG_ARCHIVE_DEST_1 : tmp
  [oracle@ol819cs22 2024_06_14]$ ll /tmp/*.ARC 
  -rw-r-----. 1 oracle dba 4096 Jun 14 18:20 /tmp/ARCH_STR_1171616389_1_48.ARC
  -rw-r-----. 1 oracle dba 2048 Jun 14 18:20 /tmp/ARCH_STR_1171616389_1_49.ARC
  -rw-r-----. 1 oracle dba 1024 Jun 14 18:20 /tmp/ARCH_STR_1171616389_1_50.ARC
  -rw-r-----. 1 oracle dba 1024 Jun 14 18:20 /tmp/ARCH_STR_1171616389_1_51.ARC
  -rw-r-----. 1 oracle dba 1024 Jun 14 18:20 /tmp/ARCH_STR_1171616389_1_52.ARC

2) LOG_ARCHIVE_DEST_2 : /u02/archivelog
  [oracle@ol819cs22 2024_06_14]$ ll /u02/archivelog/
  total 20
  -rw-r-----. 1 oracle dba 4096 Jun 14 18:20 ARCH_STR_1171616389_1_48.ARC
  -rw-r-----. 1 oracle dba 2048 Jun 14 18:20 ARCH_STR_1171616389_1_49.ARC
  -rw-r-----. 1 oracle dba 1024 Jun 14 18:20 ARCH_STR_1171616389_1_50.ARC
  -rw-r-----. 1 oracle dba 1024 Jun 14 18:20 ARCH_STR_1171616389_1_51.ARC
  -rw-r-----. 1 oracle dba 1024 Jun 14 18:20 ARCH_STR_1171616389_1_52.ARC

3) LOG_ARCHIVE_DEST_2 : /u01/app/oracle/fast_recovery_area ( USE_DB_RECOVERY_FILE_DEST )
  [oracle@ol819cs22 2024_06_14]$ pwd
  /u01/app/oracle/fast_recovery_area/ORA19/archivelog/2024_06_14
  [oracle@ol819cs22 2024_06_14]$ ll
  total 20
  -rw-r-----. 1 oracle dba 4096 Jun 14 18:20 o1_mf_1_48_m6r2t5h2_.arc
  -rw-r-----. 1 oracle dba 2048 Jun 14 18:20 o1_mf_1_49_m6r2t814_.arc
  -rw-r-----. 1 oracle dba 1024 Jun 14 18:20 o1_mf_1_50_m6r2t8qg_.arc
  -rw-r-----. 1 oracle dba 1024 Jun 14 18:20 o1_mf_1_51_m6r2tfs8_.arc
  -rw-r-----. 1 oracle dba 1024 Jun 14 18:20 o1_mf_1_52_m6r2tgoh_.arc

 

 

 

[ 3 ] 백업 파일은 FRA 저장, 아카이브만 별도 경로 설정

   : 백업 파일은  FRA에 저장하고 싶고, 용량을 지속적으로 소모하는 아카이브 파일은 별도 경로에 저장하고 싶은 경우 

[ Script ]
1. 아래 2 경로 이외는 모두 '' 처리 
  ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='/u01/app/oracle/fast_recovery_area' SCOPE=BOTH;
  ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='location=/u02/archivelog' SCOPE=BOTH;

2. 아카이브 모드 조회
SQL> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /u02/archivelog
Oldest online log sequence     4
Next log sequence to archive   6
Current log sequence           6

3.  아카이브 적재 경로 조회    
  SELECT name, value
    FROM V$PARAMETER a 
   where regexp_like (name ,'db_recovery|log_archive_dest$|log_archive_duplex_dest|log_archive_format
                            |log_archive_dest_1$|log_archive_dest_2$|log_archive_dest_3$' );   
     NAME                            VALUE
log_archive_dest_1      location=/u02/archivelog --------------------------------------아카이브
log_archive_dest_2      
log_archive_dest_3      
log_archive_dest        
log_archive_duplex_dest 
log_archive_format      ARCH_STR_%r_%t_%s.ARC
db_recovery_file_dest   /u01/app/oracle/fast_recovery_area  ------------------------ fra
db_recovery_file_dest_size      8657043456

4. 아카이브 파일 만들기 > switch log x 6번
    SQL> alter system switch logfile; 
    System altered.  

[oracle@ol819cs22 archivelog]$ ll
total 154732
-rw-r-----. 1 oracle dba  43204096 Jun 15 20:45 ARCH_STR_1171716229_1_2.ARC
-rw-r-----. 1 oracle dba 114883584 Jun 15 22:13 ARCH_STR_1171745151_1_1.ARC
-rw-r-----. 1 oracle dba    335360 Jun 15 22:13 ARCH_STR_1171745151_1_2.ARC
-rw-r-----. 1 oracle dba      4608 Jun 15 22:13 ARCH_STR_1171745151_1_3.ARC
-rw-r-----. 1 oracle dba      2048 Jun 15 22:13 ARCH_STR_1171745151_1_4.ARC
-rw-r-----. 1 oracle dba      1024 Jun 15 22:13 ARCH_STR_1171745151_1_5.ARC

5. 백업 파일 만든후 fra 경로 확인
[oracle@ol819cs22 2024_06_15]$ ll
total 1412888
-rw-r-----. 1 oracle dba 1446797312 Jun 15 22:16 o1_mf_nnndf_TAG20240615T221618_m6v5133n_.bkp

RMAN> backup database;
Starting backup at 2024/06/15(SAT) 22:16:17
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=140 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00001 name=/u01/app/oracle/oradata/ORA19/datafile/o1_mf_system_m6q1wqlq_.dbf
input datafile file number=00003 name=/u01/app/oracle/oradata/ORA19/datafile/o1_mf_sysaux_m6q1xjr1_.dbf
input datafile file number=00004 name=/u01/app/oracle/oradata/ORA19/datafile/o1_mf_undotbs1_m6q1xzyw_.dbf
input datafile file number=00002 name=/u01/app/oracle/oradata/ORA19/datafile/o1_mf_ts_test_m6tbonsh_.dbf
input datafile file number=00005 name=/u01/app/oracle/oradata/ORA19/datafile/o1_mf_ts_test_m6t98lo4_.dbf
input datafile file number=00008 name=/u01/app/oracle/oradata/ORA19/datafile/o1_mf_ts_test_m6tbq130_.dbf
input datafile file number=00009 name=/u01/app/oracle/oradata/ORA19/datafile/o1_mf_ts_test_m6tbq2m2_.dbf
input datafile file number=00010 name=/u01/app/oracle/oradata/ORA19/datafile/o1_mf_ts_test_m6tkmsr2_.dbf
input datafile file number=00007 name=/u01/app/oracle/oradata/ORA19/datafile/o1_mf_users_m6q1y12q_.dbf
channel ORA_DISK_1: starting piece 1 at 2024/06/15(SAT) 22:16:19
channel ORA_DISK_1: finished piece 1 at 2024/06/15(SAT) 22:16:34
piece handle=/u01/app/oracle/fast_recovery_area/ORA19/backupset/2024_06_15
                  /o1_mf_nnndf_TAG20240615T221618_m6v5133n_.bkp tag=TAG20240615T221618 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:15
Finished backup at 2024/06/15(SAT) 22:16:34