<Backup 방법>
Oracle DB Backup은 1) 물리적 백업(physical backup)과, 2) 논리적 백업(Logical backup)의 두가지 방법이 있다.
1. 물리적 백업
물리적인 백업은 Database File (Data File, Control File)을 Backup하는 것을 뜻하며, DB가 Archive Mode에서 수행중인 경우에는 Archive Redo Log File이 자동적으로 생성되므로 Data File, Control File, Archive Redo Log File이 Backup 된다. 물리적 백업은 다음과 같이 두 가지가 가능하다.
- Off-Line Backup
- On-Line Backup
1) Off-Line Backup
Off-line backup은 Tablespace나 Data File이 Off-Line 일 때 실행되는 Backup 으로, 가장 수행하기 쉬운 Backup 방법중의 하나이다. Off-Line Backup은 DB를 종료하고, DB와 관련된 모든 물리적인 파일 (Data File, Control File, 매개변수 File)을 운영체제 명령어를 이용하여 복사한다.
이 Backup은 Data File의 크기가 매우 큰 경우, 많은 시간이 소요될 수 도 있다. 그래서 Off-Line Backup을 Whole-Backup 또는 Cold-Backup이라 한다.
SQL> select name from v$controlfile; ☜ 컨트롤 파일의 위치를 확인
NAME
--------------------------------------------------------------------------------
/export/home/oracle/app/oracle/oradata/orcl/control01.ctl
/export/home/oracle/app/oracle/oradata/orcl/control02.ctl
/export/home/oracle/app/oracle/oradata/orcl/control03.ctl
SQL> select file_name from dba_data_files; ☜ 데이터 파일의 확인
FILE_NAME
--------------------------------------------------------------------------------
/export/home/oracle/app/oracle/oradata/orcl/users01.dbf
/export/home/oracle/app/oracle/oradata/orcl/sysaux01.dbf
/export/home/oracle/app/oracle/oradata/orcl/undotbs01.dbf
/export/home/oracle/app/oracle/oradata/orcl/system01.dbf
SQL> select group#,member from v$logfile; ☜ 리두 로그 파일을 확인
GROUP# MEMBER
---------- ------------------------------------------------------------
3 /export/home/oracle/app/oracle/oradata/orcl/redo03.log
2 /export/home/oracle/app/oracle/oradata/orcl/redo02.log
1 /export/home/oracle/app/oracle/oradata/orcl/redo01.log
SQL>
SQL> shutdown normal; ☜ normal, transaction, immediate중 하나로 DB를 종료
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> ! ☜ 쉘 프롬프트로 일시 복귀함
$ su ☜ root의 권한을 가짐
Password:
# cp /export/home/oracle/app/oracle/oradata/orcl/control0*.ctl /export/home/work/. ☜ 컨트롤 파일 복사
# cp /export/home/oracle/app/oracle/oradata/orcl/redo*.log /export/home/work/. ☜ 리두 로그 파일 복사
# cp /export/home/oracle/app/oracle/oradata/orcl/*.dbf /export/home/work/. ☜ 데이터 파일 복사
# cp dbs/*.ora /export/home/work/. ☜ 파라미터 파일 복사
# ls -l /export/home/work ☜ 복사되었나 확인
-rw-r----- 1 root other 2867200 Jan 4 11:07 control01.ctl
-rw-r----- 1 root other 2867200 Jan 4 11:07 control02.ctl
-rw-r----- 1 root other 2867200 Jan 4 11:07 control03.ctl
-rw-r--r-- 1 root other 8384 Jan 4 11:14 init.ora
-rw-r--r-- 1 root other 12920 Jan 4 11:14 initdw.ora
-rw-r----- 1 root other 10486272 Jan 4 11:09 redo01.log
-rw-r----- 1 root other 10486272 Jan 4 11:09 redo02.log
-rw-r----- 1 root other 10486272 Jan 4 11:09 redo03.log
-rw-r----- 1 root other 2560 Jan 4 11:14 spfileorcl.ora
-rw-r----- 1 root other 461381632 Jan 4 11:10 sysaux01.dbf
-rw-r----- 1 root other 471867392 Jan 4 11:11 system01.dbf
-rw-r----- 1 root other 20979712 Jan 4 11:11 temp01.dbf
-rw-r----- 1 root other 26222592 Jan 4 11:11 undotbs01.dbf
-rw-r----- 1 root other 5251072 Jan 4 11:11 users01.dbf
$ exit ☜ 쉘프롬프트에서 오라클 프롬프트로 복귀
SQL> startup ☜ Instance 기동
ORACLE instance started.
Total System Global Area 289406976 bytes
Fixed Size 778796 bytes
Variable Size 99360212 bytes
Database Buffers 188743680 bytes
Redo Buffers 524288 bytes
Database mounted.
Database opened.
SQL>
- 자동으로 Off-Line Backup 실행하기
Off-Line Backup은 Data File의 크기가 작은 경우 쉽고, 간단하게 실행할 수 있지만, Data File이 큰 경우는 많은 시간이 소요되므로 Script를 사용하여 운영체제의 Scheduler에 의해 Backup이 자동으로 실행되도록 할 수 있다.
다음과 같이 Off-Line 자동 Backup Script를 작성하여 실행한다.
1단계 : Oracle Instance 종료
SHUTDOWN IMMEDIATE
EXIT
2단계 : 데이터베이스와 관련된 모든 물리적 파일 복사
cp /export/home/oracle/app/oracle/oradata/orcl/*.dbf backup/
cp /export/home/oracle/app/oracle/oradata/orcl/*.log backup/
cp /export/home/oracle/app/oracle/oradata/orcl/*.ora backup/
3단계 : 데이터베이스 다시 시작
STARTUP
EXIT
EOF
2) On-Line Backup
Off-Line Backup이 DB가 종료한 상태에서 Backup하는 것에 반해, Online Backup은 DB를 운영하는 도중에 백업을 실행하는 방법이다. On-Line Backup은 Tablespace 단위로 Backup을 수행하며 ALTER TABLESPACE 명령으로 Tablespace를 Backup Mode로 설정하고, Data File을 운영체제에 복사한다.
On-Line Backup을 Hot Backup 또는 Open Backup이라 한다. On-Line Backup은 Off-Line Backup과 달리 모든 File을 Backup 할 수 없고, 필요한 Tablespace만 Backup 할 수 있다.
SQL> select tablespace_name, file_name from dba_data_files;
TABLESPACE_NAME FILE_NAME
--------------- ------------------------------------------------------------
USERS /export/home/oracle/app/oracle/oradata/orcl/users01.dbf
SYSAUX /export/home/oracle/app/oracle/oradata/orcl/sysaux01.dbf
UNDOTBS1 /export/home/oracle/app/oracle/oradata/orcl/undotbs01.dbf
SYSTEM /export/home/oracle/app/oracle/oradata/orcl/system01.dbf
SQL> alter tablespace users begin backup;
☜ Tablespace 내의 모든 객체에 대해 변경된 Data들이 Data File에 적용되고, Memory 영역과 Redo Log File에 일시적으로 저장된다.
Tablespace altered.
SQL> !
$ cp /export/home/oracle/app/oracle/oradata/orcl/users01.dbf bkup/.
$ ls -l bkup
total 10272
-rw-r----- 1 oracle oinstall 5251072 Jan 4 14:07 users01.dbf
$ exit
SQL> alter tablespace users end backup;
☜ 복사후 SQL 문을 실행하여 Data File에 저장되었던 변경된 Data를 실제 Data File에 반영한다.
Tablespace altered.
SQL>
SQL> ALTER SYSTEM SWITCH LOGFILE;
☜ 인위적으로 Log Switch를 실행하여 모든 Data Fie Header에 저장되어 있는 Check Point 번호를 통합
System altered.
SQL>
2. 논리적 백업
논리적 백업은 DB 내의 논리적 객체들을 Backup 하는 방법으로, EXPORT Utility를 사용하여 Backup 하고, IMPORT Utility를 사용하여 복구한다.
EXPORT와 IMPORT Utility가 백업/복구 이외에 다른 기능은 다음과 같다.
- 특정 사용자의 객체를 다른 사용자의 공간으로 이동시킬 수 있다.
- 운영체제가 다른 DB 사이에 Data를 이동시킬 수 있다.
- Table, View, Index 등을 Backup하고 다시 복구함으로써 객체들의 구조가 재생성되어 단편화 (fragmentation)를 감소시킨다.
Export에서 사용 가능한 Keyword는 EXP Utility를 참조하고 또한 Export를 사용하여 논리적으로 DB를 Backup하는 방법은 Database 전체 모드, Tablespace Mode, 사용자 Mode, Table Mode 의 4 종류가 있다. Database 전체 Mode, Tablespace Mode, User Mode, Table Mode
- 모든 Table의 Data
- Index
- Table의 제약 조건
- Trigger
- Clust
- Sequence
- Snapshot
- Stored Procedure
- Synonym
- View
- Profile/Role
- Audit
- 지정된 Tablespace의 Table
- 사용자의 권한
- 사용자의 Index
- Table의 제약조건
- Table의 Trigger
- Database Link
1) 전체백업과 부분백업
- 전체백업
모든 Data File과 Control File을 Backup하는 방식으로, 가장 보편적인 방법이다. 전체 백업은 Database Mode에 관계없이 가능하지만, Archive Mode 인 경우와 No-Archive Mode 인 경우 전체 백업을 수행했을 때의 차이가 있다.
Database 전체에 대한 Backup은 다음과 같은 방법으로 가능하다.
- Control File 뿐만 아니라 모든 Data File을 복사하는 운영체제가 제공하는 Utility
- RMAN BACKUP DATABASE 명령어
- Database 내의 각 Data File에 대해 수행되는 RMAN COPY DATAFILE 명령어와 Control File에 대해 실행되는 COPY
: CURRENT CONTROLFILE 명령어
- 부분백업
전체 Database를 Backup 하는 대신 Tablespace나 Control File과 같이 일부분만을 Backup 하는 방법이다. 부분 Backup은 Archive Mode에서만 가능하므로, 현재 DB가 Archive Mode인지 확인해야 한다. 부분 Backup에는 Tablespace Backup, Data File Backup, Control File Backup, Archive Redo Log File Backup이 있다.
Data File의 Backup 상태는 v$backup View로 확인이 가능하다.
SQL> alter database archivelog; ☜ DB의 Mode를 Archive Mode로 전환
3. Tablespace Backup / Data File Backup
1) On-Line Tablespace Backup
Tablespace Backup은 Tablespace를 구성하는 Data File을 Backup하는 것으로, DB가 Archive Mode라면, On-Line 또는 Off-Line 상태에서도 가능하다.
TABLESPACE_NAME FILE_NAME
--------------- ------------------------------------------------------------
USERS /export/home/oracle/app/oracle/oradata/orcl/users01.dbf
SYSAUX /export/home/oracle/app/oracle/oradata/orcl/sysaux01.dbf
UNDOTBS1 /export/home/oracle/app/oracle/oradata/orcl/undotbs01.dbf
SYSTEM /export/home/oracle/app/oracle/oradata/orcl/system01.dbf
SQL> alter tablespace users begin backup; ☜ users 테이블스페이스에 대해 백업 시작을 알림
Tablespace altered.
SQL> !
$ cp /export/home/oracle/app/oracle/oradata/orcl/users01.dbf bkup/.
$ exit
SQL> alter tablespace users end backup; ☜ users 테이블스페이스에 대해 백업 종료를 알림
Tablespace altered.
SQL> select * from v$backup;
FILE# STATUS CHANGE# TIME
---------- ------------------ ---------- ------------
1 NOT ACTIVE 0
2 NOT ACTIVE 0
3 NOT ACTIVE 0
4 NOT ACTIVE 2858563 04-JAN-06
SQL>
2) Off-Line Tablespace Backup
사용중인 Tablespace를 Off-Line 시켜 Backup할 수 있다. 그러나 SYSTEM Tablespace와 현재 사용중인 Roll back Segment는 Off-Line 시킬 수 없다는 것을 의미한다.
TABLESPACE_NAME FILE_NAME
-------------------- ------------------------------------------------------------
USERS /export/home/oracle/app/oracle/oradata/orcl/users01.dbf
SYSAUX /export/home/oracle/app/oracle/oradata/orcl/sysaux01.dbf
UNDOTBS1 /export/home/oracle/app/oracle/oradata/orcl/undotbs01.dbf
SYSTEM /export/home/oracle/app/oracle/oradata/orcl/system01.dbf
SQL> alter tablespace users offline normal;
Tablespace altered.
SQL> !
$ cp /export/home/oracle/app/oracle/oradata/orcl/users01.dbf bkup/.
$ exit
SQL> alter tablespace users online;
Tablespace altered.
SQL>
4. Control File Backup
Oracle DB를 설치하면 CREATE DATABASE 문에 의해 기본적으로 생성되는 File들이 있는데, Redo Log File, SYSTEM Data File, UNDO Data File, TEMP Data File등의 경로와 파일명을 설정한다. 정상적으로 실행되면 Control File이 생성된다
자동으로 생성된는 Control File에는 CREATE DATABASE 문에 의해 정의된 File의 모든 정보가 기록된다. DB가 MOUNT 단계가 되면 Control File의 정보를 읽어 DB의 모든 상태를 점검한다. 이때 Control File을 읽을 수 없으면 DB를 사용할 수 없다. 따라서 Control File을 잘 관리해야 한다. DB를 설치하면 기본적으로 3개의 Control File이 생성되는데 첫 번째 File이 원본 Control File 이고, 나머지 두 개의 File 은 원본에 대한 Mirroring File로 원본 Control File에 문제가 발생하면 Mirroring로 복구할 수 있다.
현재 DB에서 사용하고 있는 Control File의 위치와 이름은 v$controlfile View를 참조하여 확인할 수 있다.
STATUS NAME IS_
------- ---------------------------------------------------------- ---
/export/home/oracle/app/oracle/oradata/orcl/control01.ctl NO
/export/home/oracle/app/oracle/oradata/orcl/control02.ctl NO
/export/home/oracle/app/oracle/oradata/orcl/control03.ctl NO
SQL>
1) Control File을 Backup 하는 세가지 방법
방법 1) Control File Backup
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> !
$ cp /export/home/oracle/app/oracle/oradata/orcl/*.ctl bkup/.
$
$ ls dbs/*.ora
dbs/init.ora dbs/initdw.ora dbs/spfileorcl.ora
☜ initDB명.ore 파일에 복사된 Control File을 추가 한다.
...
CONTROL_FILES=(control01.ctl,..,control04.ctl)
...
$ exit
SQL> startup
ORACLE instance started.
Total System Global Area 289406976 bytes
Fixed Size 778796 bytes
Variable Size 99360212 bytes
Database Buffers 188743680 bytes
Redo Buffers 524288 bytes
Database mounted.
Database opened.
SQL>
방법 2) spfile을 사용한 Control File Backup
'/export/home/oracle/app/oracle/oradata/orcl/control01.ctl',
'/export/home/oracle/app/oracle/oradata/orcl/control02.ctl',
'/export/home/oracle/app/oracle/oradata/orcl/control03.ctl', SCOPE=SPFILE;
SQL> SHUTDOWN
SQL> !
# cp control01.ctl control04.ctl
# exit
SQL> STARTUP
방법 3) ALTER DATABASE 명령을 사용한 방법
ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
alter database 명령을 실행하여 Control File 을 Backup 하면 생성된 복사본은 Binary File로 생성되는 대신 Text 형식으로 Backup File을 저장한다. 만일 원본 Control File과 복사본 Control File 모두를 사용할 수 없다면, 이 File을 사용하여 모든 Control File을 재생성 할 수 있다.
백업된 File은 <initDB명.ora> file의 user_dump_dest 매개변수가 지정하는 경로에 *.trc 확장자로 생성된다. 이렇게 백업된 *.trc Control로 부터 Control File 을 다시 복구하는 방법은 이곳에 있다. 다음과 같은 경우 alter database 명령문을 실행하여 Control File에 대한 trc File을 생성하는 것이 좋다.
- ALTER DATABASE 명령어에 의해 db의 구조가 변경될 때
- CREATE TABLESACE 명령어에 의해 Tablespace가 추가 되거나 변경될 때
- DROP TABLESPACE 명령어를 사용하여 Tablespace가 삭제될 때
Database altered.
SQL> show parameter user_dump_dest;
NAME TYPE VALUE
----------------- ----------- ------------------------------------------------
user_dump_dest string /export/home/oracle/app/oracle/admin/orcl/udump
SQL>
'Database > Oracle' 카테고리의 다른 글
| Oracle 점검 Scripts (0) | 2010/03/02 |
|---|---|
| Oracle 10g Client Installation (0) | 2009/03/24 |
| Oracle Backup (0) | 2009/01/29 |