일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- oracle install
- Unix
- perl one-liner
- perl + 정규표현식
- RHEL4
- patch
- 오라클
- prompt
- command & perl
- solaris network
- MySQL
- Oracle RAC
- fdisk
- mariaDB
- perl string
- cygwin
- Linux
- bash
- 연산자
- oracle
- php5
- PERL
- grid
- dba
- memory
- SQL
- solaris
- sqlplus
- rac
- Network
Archives
- Today
- Total
DATA 전문가로 가는 길
[Admin][Oracle] Archive log mode와 No Archive log mode 개념과 설정 방법 본문
Data Architecture/Admin
[Admin][Oracle] Archive log mode와 No Archive log mode 개념과 설정 방법
EstenPark 2011. 2. 10. 15:33작성자 : 박상수
작성일자 : 2011.02.10
작업환경 : VMware7 [ RHEL4, Oracle Database 10g r2 patchset 4 ]
작성일자 : 2011.02.10
작업환경 : VMware7 [ RHEL4, Oracle Database 10g r2 patchset 4 ]
1. Archive Log 개념
[1-1 개념] DB 운영에서 사용되는 오라클 백업은 2가지가 있습니다. No Archive log mode와 Archive log mode 그것입니다. 오라클의 복구 핵심 중 하나는 Redo log file이며 Redo log file에서 그룹A에서 그룹B로 로그 스위치기 발생하고, 다시 그룹A로 넘어오게 되면 로그 스피닝이라고 하는데 기존에 있던 데이터를 덮어쓰게 됩니다. 그래서 기존에 있던 정보는 사라지게 되는 것입니다. Archive log를 사용하는 주된 이유는 Redo log에서 지워지는 데이터를 저장 하려는 이유이며, 자세한 구조와 설명은 아래 내용에서 설명 하겠습니다.
2. Archive Log 구조와 원리
[2-1 Archive Log 구조] User Process에서 Archive Log File 까지 어떻게 진행하는지 아래와 같이 그림으로 작성 하였습니다.
UPDATE table SET alias='길동이' WHERE name='홍길동'
ⓞ 사용자가 데이터를 입력 하면 리스너에 접속하여 서버 프로세스와 1:1로 데이터 ‘길동이’를 전달
① 서버프로세스는 Undo 세그먼트의 공간을 확보 한 후 Redo Log Buffer에 데이터 ‘길동이’ 기록
② DB Buffer cache에 ‘길동이’을 기록 후에 Undo 세그먼트에 이전 정보를 기록
③ 사용자가 commit을 수행하면 LGWR 프로세스에 의해 Redo Log Buffer의 SCN과 데이터를 함께 Redo Log File에 기록
④ Log Switch가 발생하여 리두 로그 그룹 1번은 ACTIVE 상태가 되고 리두 로그 그룹 2번은 CURRENT 상태로 변경 되는데, 이를 로그 스위치 현상이라고 함.
④ LGWR은 CURRENT상태인 리두 로그 그룹 2번으로 데이터를 쓰게 되며, 로그 시퀸스 넘버가 1씩 증가
⑤ Archive mode와 No Archive mode의 상태에 따라 흐름이 변화 됨.
Archive mode : 로그 스위치시 다음 리두 로그 그룹의 체크포인트와 아카이브가 종료되어야만 다음 리두 로그 그룹에 로그를 기록하는 방식
No Archive mode : 오라클 DB 생성시 기본 mode, 로그 스위치시 다음 리두 로그 그룹의 체크포인트만 종료되었다면 해당 리두 로그 그룹에 로그를 기록하는 방식
Archive mode라고 가정한다면 arch 프로세스가 “길동이” 데이터를 Archive Log File에 기록
UPDATE table SET alias='길동이' WHERE name='홍길동'
ⓞ 사용자가 데이터를 입력 하면 리스너에 접속하여 서버 프로세스와 1:1로 데이터 ‘길동이’를 전달
① 서버프로세스는 Undo 세그먼트의 공간을 확보 한 후 Redo Log Buffer에 데이터 ‘길동이’ 기록
② DB Buffer cache에 ‘길동이’을 기록 후에 Undo 세그먼트에 이전 정보를 기록
③ 사용자가 commit을 수행하면 LGWR 프로세스에 의해 Redo Log Buffer의 SCN과 데이터를 함께 Redo Log File에 기록
④ Log Switch가 발생하여 리두 로그 그룹 1번은 ACTIVE 상태가 되고 리두 로그 그룹 2번은 CURRENT 상태로 변경 되는데, 이를 로그 스위치 현상이라고 함.
④ LGWR은 CURRENT상태인 리두 로그 그룹 2번으로 데이터를 쓰게 되며, 로그 시퀸스 넘버가 1씩 증가
⑤ Archive mode와 No Archive mode의 상태에 따라 흐름이 변화 됨.
Archive mode : 로그 스위치시 다음 리두 로그 그룹의 체크포인트와 아카이브가 종료되어야만 다음 리두 로그 그룹에 로그를 기록하는 방식
No Archive mode : 오라클 DB 생성시 기본 mode, 로그 스위치시 다음 리두 로그 그룹의 체크포인트만 종료되었다면 해당 리두 로그 그룹에 로그를 기록하는 방식
Archive mode라고 가정한다면 arch 프로세스가 “길동이” 데이터를 Archive Log File에 기록
3. Archive log / No Archive log mode의 장-단점
[3-1 Archive log]
장점
[3-2 No Archive log]
장점
장점
- 복구 할 수 있는 시점을 조절 할 수 있습니다. 만약 데이터 파일을 11시 30분에 백업 받았다고 가정하고 11시 40분에 해당 데이터 파일이 삭제 되었을 경우 이전 데이터를 복원하고 recover database until time '시간'으로 복구 시점을 조절 가능
- 온라인 복구 가능
- 온라인(HOT, BEGEN) 백업 가능
- 백업 및 복구를 하는데 복잡
- 별도의 디스크 공간이 필요
- 디스크의 I/O 증가 합니다.
[3-2 No Archive log]
장점
- 백업 및 복구하는데 쉬움.
- 별도의 디스크 공간 필요 없음.
- 디스크의 I/O가 발생 하지 않기 때문에 성능 향상
- 복구 시점을 조절 할 수 없음.
- 온라인 복구 불가능 합니다.
- 온라인 백업(HOT, BEGEN) 불가능.
4. 복구 시나리오
[4-1 상황 1] 데이터베이스 종료 상태에서 DBA(관리자) 실수로 spfile, pfile 모두 삭제 했을 경우 복구 방법
[설명] 위에서 설명한 것과 같이 $ORACLE_BASE/admin/testdb/pfile을 $ORACLE_HOME/dbs로 파일을 복사 한 후 DB를 OPEN 하면 됩니다.
[2011-01-26 04:44:58]-[oracle@estenpark:~/product/10g/dbs]
$ ls
backup hc_testdb.dat initdw.ora lkTESTDB orapwtestdb
[2011-01-26 04:44:58]-[oracle@estenpark:~/product/10g/dbs]
$ sqlplus / as sysdba
SYS@testdb> startup
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/home/oracle/product/10g/dbs/inittestdb.ora'
[2011-01-26 04:46:54]-[oracle@estenpark:~/admin/testdb/pfile]
$ cp init.ora.010201115288 $ORACLE_HOME/dbs/inittestdb.ora
[설명] 지금부터 복구를 시작 하겠습니다. 파일을 복사합니다.
[2011-01-26 04:46:54]-[oracle@estenpark:~/admin/testdb/pfile]
$ cp init.ora.010201115288 $ORACLE_HOME/dbs/inittestdb.ora
[2011-01-26 04:47:24]-[oracle@estenpark:~/product/10g/dbs]
$ ls
backup hc_testdb.dat initdw.ora inittestdb.ora lkTESTDB orapwtestdb
[2011-01-26 04:48:56]-[oracle@estenpark:~]
$ sqlplus / as sysdba
SYS@testdb>
[설명] 데이터 파일을 OPEN 하기 이전에 Controlfile의 경로가 맞는지 반드시 확인 합니다.
$ vi inittestdb.ora
###########################################
# File Configuration
###########################################
control_files=( '/home/oracle/oradata/testdb/control01.ctl',
'/home/oracle/oradata/testdb/control03.ctl')
[설명] 아래와 같이 startup하여 데이터베이스가 정상적으로 OPEN 되어서 복구 완료 입니다.
SYS@testdb> startup
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1267068 bytes
Variable Size 92277380 bytes
Database Buffers 188743680 bytes
Redo Buffers 2924544 bytes
Database mounted.
Database opened.
SYS@testdb> show parameter pfile;
NAME TYPE VALUE
----------------------------------------------------
spfile string
[4-2 상황 2] 현재 파라미터 파일은 pfile 입니다. 고객사에서 pfile을 spfile로 변경 해달라고 요청이 왔습니다.
[설명] 이 방법은 별도의 설명이 필요 없습니다. pfile을 spfile로 만들어 주고 데이터베이스를 재 기동 하면 됩니다.
SYS@testdb> create spfile from pfile;
SYS@testdb> shutdown immediate;
SYS@testdb> startup
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1267068 bytes
Variable Size 92277380 bytes
Database Buffers 188743680 bytes
Redo Buffers 2924544 bytes
Database mounted.
Database opened.
SYS@testdb> show parameter pfile;
NAME TYPE VALUE
------------------------------------------------
spfile string /home/oracle/product/10g/dbs/spfiletestdb.ora
[설명] 위에서 설명한 것과 같이 $ORACLE_BASE/admin/testdb/pfile을 $ORACLE_HOME/dbs로 파일을 복사 한 후 DB를 OPEN 하면 됩니다.
[2011-01-26 04:44:58]-[oracle@estenpark:~/product/10g/dbs]
$ ls
backup hc_testdb.dat initdw.ora lkTESTDB orapwtestdb
[2011-01-26 04:44:58]-[oracle@estenpark:~/product/10g/dbs]
$ sqlplus / as sysdba
SYS@testdb> startup
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/home/oracle/product/10g/dbs/inittestdb.ora'
[2011-01-26 04:46:54]-[oracle@estenpark:~/admin/testdb/pfile]
$ cp init.ora.010201115288 $ORACLE_HOME/dbs/inittestdb.ora
[설명] 지금부터 복구를 시작 하겠습니다. 파일을 복사합니다.
[2011-01-26 04:46:54]-[oracle@estenpark:~/admin/testdb/pfile]
$ cp init.ora.010201115288 $ORACLE_HOME/dbs/inittestdb.ora
[2011-01-26 04:47:24]-[oracle@estenpark:~/product/10g/dbs]
$ ls
backup hc_testdb.dat initdw.ora inittestdb.ora lkTESTDB orapwtestdb
[2011-01-26 04:48:56]-[oracle@estenpark:~]
$ sqlplus / as sysdba
SYS@testdb>
[설명] 데이터 파일을 OPEN 하기 이전에 Controlfile의 경로가 맞는지 반드시 확인 합니다.
$ vi inittestdb.ora
###########################################
# File Configuration
###########################################
control_files=( '/home/oracle/oradata/testdb/control01.ctl',
'/home/oracle/oradata/testdb/control03.ctl')
[설명] 아래와 같이 startup하여 데이터베이스가 정상적으로 OPEN 되어서 복구 완료 입니다.
SYS@testdb> startup
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1267068 bytes
Variable Size 92277380 bytes
Database Buffers 188743680 bytes
Redo Buffers 2924544 bytes
Database mounted.
Database opened.
SYS@testdb> show parameter pfile;
NAME TYPE VALUE
----------------------------------------------------
spfile string
[4-2 상황 2] 현재 파라미터 파일은 pfile 입니다. 고객사에서 pfile을 spfile로 변경 해달라고 요청이 왔습니다.
[설명] 이 방법은 별도의 설명이 필요 없습니다. pfile을 spfile로 만들어 주고 데이터베이스를 재 기동 하면 됩니다.
SYS@testdb> create spfile from pfile;
SYS@testdb> shutdown immediate;
SYS@testdb> startup
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1267068 bytes
Variable Size 92277380 bytes
Database Buffers 188743680 bytes
Redo Buffers 2924544 bytes
Database mounted.
Database opened.
SYS@testdb> show parameter pfile;
NAME TYPE VALUE
------------------------------------------------
spfile string /home/oracle/product/10g/dbs/spfiletestdb.ora
파라미터 파일은 오라클에서 필수 파일 중 하나로 명시 되어있습니다. 사용 방법은 쉽지만 관리를 잘 해야 하는 파일 중 하나 입니다. 보통 백업 파일의 기준이 redo log file, control file, data file, archive log file 무조건 백업을 하게 되고 상황에 따라서 파라미터 파일도 백업 절차에 포함 될 경우도 있습니다.
반드시 알아야 할 것은 pfile, spfile의 차이점을 정확하게 이해해야 합니다.
'Data Architecture > Admin' 카테고리의 다른 글
[Admin][Oracle] tnsnames.ora Setup (1) | 2015.02.17 |
---|---|
[Admin][Oracle] SELECT, UPDATE, COMMIT 실행되는 과정 (0) | 2011.04.17 |
[Admin][Oracle] 오라클 파라미터 파일 정리(spfile, pfile) (2) | 2011.01.26 |
[Admin][Oracle] Archive log / No Archive log (0) | 2011.01.12 |
[Admin][Oracle] 오라클 사용자의 생성과 권한의 설정 (0) | 2011.01.11 |
Comments