- mandatory
: archive 작업이 성공적으로 완료되어야 online redo log file을 겹쳐 사용할 수 있다.
공간이 부족할 경우 wait 한다.alter system set log_archive_dest_1='location=/home/oracle/arch1 mandatory' scope=spfile;
- optional
: archive 작업이 성공적으로 완료 되지 않은 경우에도 online redolog file을 겹쳐사용할 수 있다. (기본값)
공간이 부족하면 archivelog file이 생성 되지 않습니다.alter system set log_archive_dest_2='location=/home/oracle/arch2 optional' scope=spfile;
- archivelog file의 여유 공간을 항상 확인해줘야한다.
[oracle@oracle ~]$ df -h /dev/mapper/ol-root 45G 24G 21G 54% /
- archive log file이 생성 될때 이름 포맷을 설정
%s : log sequence number
%t : thread number (instance number)
%r : resetlogs id 여러 데이터베이스에 걸쳐 아카이브 된 로그파일의 유일한 이름을 나타낸다.alter system set log_archive_format='arch_%t_%s_%r.arc' scope=spfile;
- 만약 archive log mode 상태에서 archive log file이 생성 되는 위치 설정을 같은곳에하거나 잘못설정하거나 archive log file이 생성 될때 이름 포맷을 설정을 잘못하면 db mount 단계까지도 start 안된다.
- 해결방법
- db 정상종료
- pfile을 이용하여 archive log file 위치정보, 포맷설정 변경
- db open
- create spfile from pfile;
- db 재시작
● 1. db 정상 종료
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
● 2. mount 단계까지만 db start (control file까지만 열기)
SQL> startup mount
ORACLE instance started.
Total System Global Area 531476480 bytes
Fixed Size 1365796 bytes
Variable Size 201328860 bytes
Database Buffers 322961408 bytes
Redo Buffers 5820416 bytes
Database mounted.
● 3. archive log mode로 변경
SQL> alter database archivelog;
Database altered.
SQL> alter database noarchivelog;
● 4. db open
SQL> alter database open;
Database altered.
● 5. archive log mode 확인
SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /home/oracle/arch2
Oldest online log sequence 1
Next log sequence to archive 3
Current log sequence 3
SQL> select log_mode from v$database;
LOG_MODE
------------
ARCHIVELOG
select * from v$log;
select * from v$archive_dest;
-- 보통 3개 정도 본다
select destination, binding, status from v$archive_dest;
select * from v$archived_log;
현재의 current한 redo 로그 파일을 아카이브(log_archive_dest에 지정된 위치로) 변경
alter system archive log current;
select sequence#, name from v$archived_log;

[oracle@oracle ~]$ ls /home/oracle/arch1 /home/oracle/arch2
/home/oracle/arch1:
arch_1_3_1157971653.arc
/home/oracle/arch2:
arch_1_3_1157971653.arc
- ※ 주의사항
만약에 db 운영중에 arc file이 유실 되었다는것을 알았다면 그 즉시 backup본을 만들어야한다. 만약 유실되었다는것을 모르고 만들지않고 db 종료하면, 완전복구를 못하므로 과거시점으로 restore해서 돌아가는 방법밖에 없다.
select * from v$archive_processes;
SQL> ! ps -ef | grep arc
oracle 7843 1 0 19:26 ? 00:00:00 ora_arc0_ora11g
oracle 7846 1 0 19:26 ? 00:00:00 ora_arc1_ora11g
oracle 7848 1 0 19:26 ? 00:00:00 ora_arc2_ora11g
oracle 7850 1 0 19:26 ? 00:00:00 ora_arc3_ora11g
oracle 13351 23064 0 20:51 pts/0 00:00:00 /bin/bash -c ps -ef | grep arc
oracle 13353 13351 0 20:51 pts/0 00:00:00 grep arc
select * from v$parameter where name = 'log_archive_dest_1';
select * from v$parameter where name = 'log_archive_dest_2';
select * from v$parameter where name = 'log_archive_format';
- 필수 백업
- datfile
- controlfile
● 1. 백업 대상 확인
select * from v$log;
select name, checkpoint_change#, status from v$datafile;
select tablespace_name, logging from dba_tablespaces;
select name from v$tempfile;
select name from v$controlfile;
select member from v$logfile;
● 2. 백업 쉘 쿼리문 작성
데이터파일, 컨트롤파일 필수, 다른것은 옵션
- 쿼리문 작성
select 'cp -av '||name||' /home/oracle/backup/arch/cold_20240112/' from v$datafile union all select 'cp -av '||name||' /home/oracle/backup/arch/cold_20240112/' from v$tempfile union all select 'cp -av '||name||' /home/oracle/backup/arch/cold_20240112/' from v$controlfile union all select 'cp -av '||member||' /home/oracle/backup/arch/cold_20240112/' from v$logfile;cp -av /u01/app/oracle/oradata/ora11g/system01.dbf /home/oracle/backup/arch/cold_20240112/ cp -av /u01/app/oracle/oradata/ora11g/sysaux01.dbf /home/oracle/backup/arch/cold_20240112/ cp -av /u01/app/oracle/oradata/ora11g/users01.dbf /home/oracle/backup/arch/cold_20240112/ cp -av /u01/app/oracle/oradata/ora11g/example01.dbf /home/oracle/backup/arch/cold_20240112/ cp -av /u01/app/oracle/oradata/ora11g/undotbs01.dbf /home/oracle/backup/arch/cold_20240112/ cp -av /u01/app/oracle/oradata/ora11g/temp_new01.dbf /home/oracle/backup/arch/cold_20240112/ cp -av /u01/app/oracle/oradata/ora11g/control01.ctl /home/oracle/backup/arch/cold_20240112/ cp -av /u01/app/oracle/oradata/ora11g/redo03.log /home/oracle/backup/arch/cold_20240112/ cp -av /u01/app/oracle/oradata/ora11g/redo02.log /home/oracle/backup/arch/cold_20240112/ cp -av /u01/app/oracle/oradata/ora11g/redo01.log /home/oracle/backup/arch/cold_20240112/
● 3. 초기 파라미터 파일 백업
create pfile ='/home/oracle/backup/arch/cold_20240112/initora11g_20240112.ora' from spfile;
● 4. 백업 디렉토리 생성
SQL> ! mkdir -p /home/oracle/backup/arch/cold_20240112/
[oracle@oracle ~]$ ls /home/oracle/backup/arch/cold_20240112/
initora11g_20240112.ora
● 5. db 정상종료
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> !
● 6. 새로운 디렉토리에 백업쉘 실행
[oracle@oracle ~]$ cd /home/oracle/backup/arch/cold_20240112/
[oracle@oracle cold_20240112]$ ls
initora11g_20240112.ora
[oracle@oracle cold_20240112]$ vi backup.sh
-- 입력
cp -av /u01/app/oracle/oradata/ora11g/system01.dbf /home/oracle/backup/arch/cold_20240112/
cp -av /u01/app/oracle/oradata/ora11g/sysaux01.dbf /home/oracle/backup/arch/cold_20240112/
cp -av /u01/app/oracle/oradata/ora11g/users01.dbf /home/oracle/backup/arch/cold_20240112/
cp -av /u01/app/oracle/oradata/ora11g/example01.dbf /home/oracle/backup/arch/cold_20240112/
cp -av /u01/app/oracle/oradata/ora11g/undotbs01.dbf /home/oracle/backup/arch/cold_20240112/
cp -av /u01/app/oracle/oradata/ora11g/temp_new01.dbf /home/oracle/backup/arch/cold_20240112/
cp -av /u01/app/oracle/oradata/ora11g/control01.ctl /home/oracle/backup/arch/cold_20240112/
cp -av /u01/app/oracle/oradata/ora11g/redo03.log /home/oracle/backup/arch/cold_20240112/
cp -av /u01/app/oracle/oradata/ora11g/redo02.log /home/oracle/backup/arch/cold_20240112/
cp -av /u01/app/oracle/oradata/ora11g/redo01.log /home/oracle/backup/arch/cold_20240112/
[oracle@oracle cold_20240112]$ sh backup.sh > backup.log
[oracle@oracle cold_20240112]$ ls
backup.log initora11g_20240112.ora sysaux01.dbf users01.dbf
backup.sh redo01.log system01.dbf
control01.ctl redo02.log temp_new01.dbf
example01.dbf redo03.log undotbs01.dbf
● 1. 백업 대상 확인
● 2. 백업 쉘 쿼리문 작성
select a.file#, a.name, a.checkpoint_change#,
b.status, b.change#, b.time
from v$datafile a, v$backup b
where a.file#=b.file#;
file# name checkpoint_change# status change#
-------------------------------------------------------------------------------
1 /u01/app/oracle/oradata/ora11g/system01.dbf 1547960 NOT ACTIVE 0
2 /u01/app/oracle/oradata/ora11g/sysaux01.dbf 1547960 NOT ACTIVE 0
4 /u01/app/oracle/oradata/ora11g/users01.dbf 1547960 NOT ACTIVE 0
5 /u01/app/oracle/oradata/ora11g/example01.dbf 1547960 NOT ACTIVE 0
6 /u01/app/oracle/oradata/ora11g/undotbs01.dbf 1547960 NOT ACTIVE 0
select 'cp -av '||name||' /home/oracle/backup/arch/hot_20240112/' from v$datafile
union all
select 'cp -av '||name||' /home/oracle/backup/arch/hot_20240112/' from v$tempfile;
----------------------------------
cp -av /u01/app/oracle/oradata/ora11g/system01.dbf /home/oracle/backup/arch/hot_20240112/
cp -av /u01/app/oracle/oradata/ora11g/sysaux01.dbf /home/oracle/backup/arch/hot_20240112/
cp -av /u01/app/oracle/oradata/ora11g/users01.dbf /home/oracle/backup/arch/hot_20240112/
cp -av /u01/app/oracle/oradata/ora11g/example01.dbf /home/oracle/backup/arch/hot_20240112/
cp -av /u01/app/oracle/oradata/ora11g/undotbs01.dbf /home/oracle/backup/arch/hot_20240112/
cp -av /u01/app/oracle/oradata/ora11g/temp_new01.dbf /home/oracle/backup/arch/hot_20240112/
● 3. 백업 디렉토리 생성후, 백업 쉘파일 만들기
[oracle@oracle ~]$ cd backup/arch
[oracle@oracle arch]$ mkdir hot_20240112
[oracle@oracle arch]$ cd hot_20240112/
[oracle@oracle hot_20240112]$ vi backup.sh
---
cp -av /u01/app/oracle/oradata/ora11g/system01.dbf /home/oracle/backup/arch/hot_20240112/
cp -av /u01/app/oracle/oradata/ora11g/sysaux01.dbf /home/oracle/backup/arch/hot_20240112/
cp -av /u01/app/oracle/oradata/ora11g/users01.dbf /home/oracle/backup/arch/hot_20240112/
cp -av /u01/app/oracle/oradata/ora11g/example01.dbf /home/oracle/backup/arch/hot_20240112/
cp -av /u01/app/oracle/oradata/ora11g/undotbs01.dbf /home/oracle/backup/arch/hot_20240112/
cp -av /u01/app/oracle/oradata/ora11g/temp_new01.dbf /home/oracle/backup/arch/hot_20240112/
● 4. checkpoint의 수위를 맞쳐주고 시작하는것이 좋다. (5번을 실행해서 굳이 할필요는 없다.)
alter system checkpoint;
select a.file#, a.name, a.checkpoint_change#,
b.status, b.change#, b.time
from v$datafile a, v$backup b
where a.file#=b.file#;
● 5. online backup 수행한다고 begin
alter database begin backup;
file# name checkpoint_change# status change# time
------------------------------------------------------------------------------------
1 /u01/app/oracle/oradata/ora11g/system01.dbf 1549712 ACTIVE 1549712 24/01/11
2 /u01/app/oracle/oradata/ora11g/sysaux01.dbf 1549712 ACTIVE 1549712 24/01/11
4 /u01/app/oracle/oradata/ora11g/users01.dbf 1549712 ACTIVE 1549712 24/01/11
5 /u01/app/oracle/oradata/ora11g/example01.dbf 1549712 ACTIVE 1549712 24/01/11
6 /u01/app/oracle/oradata/ora11g/undotbs01.dbf 1549712 ACTIVE 1549712 24/01/11
● 6. 백업쉘파일 실행 (datafile 백업)
[oracle@oracle hot_20240112]$ sh backup.sh > backup.log
[oracle@oracle hot_20240112]$ ls
backup.log example01.dbf system01.dbf undotbs01.dbf
backup.sh sysaux01.dbf temp_new01.dbf users01.dbf
● 7. online backup 끝낸다고 end
alter database end backup;
select a.file#, a.name, a.checkpoint_change#,
b.status, b.change#, b.time
from v$datafile a, v$backup b
where a.file#=b.file#;
file# name checkpoint_change# status change# time
------------------------------------------------------------------------------------
/u01/app/oracle/oradata/ora11g/system01.dbf 1549712 NOT ACTIVE 1549712 24/01/11
/u01/app/oracle/oradata/ora11g/sysaux01.dbf 1549712 NOT ACTIVE 1549712 24/01/11
/u01/app/oracle/oradata/ora11g/users01.dbf 1549712 NOT ACTIVE 1549712 24/01/11
/u01/app/oracle/oradata/ora11g/example01.dbf 1549712 NOT ACTIVE 1549712 24/01/11
/u01/app/oracle/oradata/ora11g/undotbs01.dbf 1549712 NOT ACTIVE 1549712 24/01/11
● 8. online 중에 controlfile backup
alter database backup controlfile to '/home/oracle/backup/arch/hot_20240112/control01.ctl';
[oracle@oracle hot_20240112]$ ls
backup.log control01.ctl sysaux01.dbf temp_new01.dbf users01.dbf
backup.sh example01.dbf system01.dbf undotbs01.dbf
[oracle@oracle hot_20240112]$ pwd
/home/oracle/backup/arch/hot_20240112
● 9. archive log current로 변경
: online backup 동안 기록 못한 아카이브 파일 기록
alter system archive log current;
select a.file#, b.name tbs_name, a.name file_name,
a.status, a.checkpoint_change#
from v$datafile a, v$tablespace b
where a.ts# = b.ts#;
select a.file#, a.name, a.checkpoint_change#,
b.status, b.change#, to_char(b.time,'yyyy/mm/dd hh24:mi:ss')
from v$datafile a, v$backup b
where a.file#=b.file#;
select * from database_properties;
select * from v$tempfile;
select * from v$log;
archive log list
select destination, binding, status from v$archive_dest;
select sequence#, name, first_change#, next_change#, next_time
from v$archived_log;
SQL> ! ls /home/oracle/arch1 /home/oracle/arch2
/home/oracle/arch1:
arch_1_3_1157971653.arc arch_1_5_1157971653.arc arch_1_7_1157971653.arc
arch_1_4_1157971653.arc arch_1_6_1157971653.arc
/home/oracle/arch2:
arch_1_3_1157971653.arc arch_1_5_1157971653.arc arch_1_7_1157971653.arc
arch_1_4_1157971653.arc arch_1_6_1157971653.arc