2009년 3월 22일 일요일

백업방법

백업방법

http://radiocom.kunsan.ac.kr
--------------------------------------------------------------------------------
오라클 DB 백업은 1)물리적 백업(physical backup)과, 2)논리적 백업(Logical backup)의 두가지 방법이 있다.

--------------------------------------------------------------------------------
물리적 백업
물리적인 백업은 데이터베이스 파일(데이터 파일, 컨트롤 파일)을 백업하는 것을 뜻하며, DB가 아카이브 모드에서 수행중인 경우에는 아카이브 리두 로그 파일이 자동적으로 생성되므로 데이터 파일, 컨트롤 파일, 아카이브 리두 로그 파일이 백업된다.
물리적 백업은 다음과 같이 두 가지가 가능하다.


• 오프라인 백업
• 온라인 백업


--------------------------------------------------------------------------------
오프라인 백업
Off-line backup은 테이블스페이스나 데이터 파일이 오프라인일 때 실행되는 백업으로, 가장 수행하기 쉬운 백업방법중의 하나이다. 오프라인 백업은 DB를 종료하고, Db와 관련된 모든 물리적인 파일(데이터 파일, 컨트롤 파일, 매개변수 파일)을 운영체제 명령어를 이용하여 복사한다.
이 백업은 데이터 파일의 크기가 매우 큰 경우, 많은 시간이 소요될 수 도 있다. 그래서 오프라인 백업을 whole-backup 또는 cold-backup이라 한다.


$ sqlplus system/manager as sysdba ☜ DBA로 접속

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 ☜ root 권한에서 빠져나옴
$ 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>


--------------------------------------------------------------------------------
자동으로 오프라인 백업실행하기
오프라인 백업은 데이터 파일의 크기가 작은 경우 쉽고, 간단하게 실행할 수 있지만, 데이터 파일이 큰 경우는 많은 시간이 소요되므로 스크립트를 사용하여 운영체제의 스케듈러에 의해 백업이 자동으로 실행되도록 할 수 있다.

다음과 같이 오프라인 자동 백업 스크립트를 작성하여 실행한다.

1단계 : 오라클 인스턴스 종료
$ORACLE_HOME/bin/sqlplus system/manager as sysdba
SHUTDOWN IMMEDIATE
EXIT

2단계 : 데이터베이스와 관련된 모든 물리적 파일 복사
cp /export/home/oracle/app/oracle/oradata/orcl/*.ctl backup/
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단계 : 데이터베이스 다시 시작
$ORACLE_HOME/bin/sqlplus system/manager as sysdba
STARTUP
EXIT
EOF


--------------------------------------------------------------------------------
온라인 백업
오프라인 백업이 DB가 종료한 상태에서 백업하는 것에 반해, 온라인 백업은 DB를 운영하는 도중에 백업을 실행하는 방법이다. 온라인 백업은 테이블스페이스 단위로 백업을 수행하며 ALTER TABLESPACE 명령으로 테이블스페이스를 백업모드로 설정하고, 데이터 파일을 운영체제에 복사한다.
온라인 백업을 hot backup 또는 open backup이라 한다. 온라인 백업은 오프라인 백업과 달리 모든 파일을 백업할 수 없고, 필요한 테이블스페이스만 백업할 수 있다.

$ sqlplus '/as sysdba'
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 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문을 실행하여 데이터파일에 저장되었던 변경된 데이터를 실제 데이터 파일에 반영한다.

Tablespace altered.

SQL>
SQL> ALTER SYSTEM SWITCH LOGFILE;
☜ 인위적으로 로그 스위치를 실행하여 모든 데이터 파일 헤더에 저장되어 있는 체크포인트 번호를 통합

System altered.

SQL>


--------------------------------------------------------------------------------
논리적 백업
논리적 백업은 DB내의 논리적 객체들을 백업하는 방법으로, EXPORT 유틸리티를 사용하여 백업하고, IMPORT 유틸리티를 사용하여 복구한다.
EXPORT와 IMPORT 유틸리티가 백업/복구 이외에 다른 기능은 다음과 같다.


• 특정 사용자의 객체를 다른 사용자의 공간으로 이동시킬 수 있다.
• 운영체제가 다른 DB 사이에 데이터를 이동시킬 수 있다.
• 테이블, 뷰,인덱스 등을 백업하고 다시 복구함으로써 객체들의 구조가 재생성되어
단편화(fragmentation)를 감소시킨다.

익스포트에서 사용 가능한 키워드는 EXP 유틸리티를 참조하고
또한 익스포트를 사용하여 논리적으로 DB를 백업하는 방법은 데이터 베이스 전체모드, 테이블스페이스 모드, 사용자모드, 테이블모드의 4 종류가 있다.
데이터베이스 전체모드
•모든 테이블의 데이터
•인덱스
•테이블의 제약조건
•트리거
•클러스트
•시퀀스
•스냅샷
•스토어드 프로시저
•시노늄
•뷰
•프로파일/롤
•audit •지정된 테이블스페이스의 테이블

테이블스페이스 모드
•테이블의 데이터
•인덱스
•테이블의 제약조건
•트리거
•클러스트
•시퀀스
•스냅샷
•스토어드 프로시저
•시노늄
•뷰
•프로파일/롤
•audit •정의된 사용자의 테이블

사용자 모드
•테이블의 데이터
•사용자의 권한
•사용자의 인덱스
•테이블의 제약조건
•테이블의 트리거
•클러스트
•데이터베이스 링크
•스냅샷
•스토어드 프로시저
•시노늄
•뷰

테이블 모드
•정의된 사용자의 테이블
•테이블의 데이터
•사용자의 권한
•사용자의 인덱스
•테이블의 제약조건
•트리거





--------------------------------------------------------------------------------
전체백업과 부분백업


--------------------------------------------------------------------------------
전체백업
모든 데이터 파일과 컨트롤 파일을 백업하는 방식으로, 가장 보편적인 방법이다. 전체 백업은 데이터베이스 모드에 관계없이 가능하지만, 아카이브 모드인 경우와 노아카이브 모드인 경우 전체 백업을 수행했을 때의 차이가 있다.
데이터베이스 전체에 대한 백업은 다음과 같은 방법으로 가능하다.

• 컨트롤 파일 뿐만 아니라 모든 데이터 파일을 복사하는 운영체제가 제공하는 유틸리티
• RMAN BACKUP DATABASE 명령어
• 데이터베이스 내의 각 데이터 파일에 대해 수행되는 RMAN COPY DATAFILE 명령어와
컨트롤 파일에 대해 실행되는 COPY CURRENT CONTROLFILE 명령어


--------------------------------------------------------------------------------
부분백업
전체 데이터베이스를 백업하는 대신 테이블스페이스나 컨트롤 파일과 같이 일부분만을 백업하는 방법이다. 부분 백업은 아카이브 모드에서만 가능하므로, 현재 DB가 아카이브 모드인지 확인해야 한다. 부분 백업에는 테이블스페이스 백업, 데이터 파일 백업, 컨트롤 파일 백업, 아카이브 리두 로그 파일 백업이 있다.
데이터 파일의 백업 상태는 v$backup 뷰로 확인이 가능하다.

SQL> select log_mode from v$database; ☜ 현제 DB의 아카이브 모드 확인
SQL> alter database archivelog; ☜ DB의 모드를 아카이브모드로 전환


--------------------------------------------------------------------------------
테이블스페이스 백업/ 데이터 파일 백업
1) 온라인 테이블스페이스 백업하기
테이블스페이스 백업은 테이블스페이스를 구성하는 데이터 파일을 백업하는 것으로, DB가 아카이브모드라면, 온라인 또는 오프라인 상태에서도 가능하다.


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; ☜ 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) 오프라인 테이블스페이스 백업하기
사용중인 테이블스페이스를 오프라인시켜 백업할 수 있다. 그러나 SYSTEM 테이블스페이스와 현재 사용중인 롤백 세그먼트는 오프라인 시킬 수 없다는 것을 의미한다.

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 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>


--------------------------------------------------------------------------------
컨트롤 파일 백업
오라클 DB를 설치하면 CREATE DATABASE 문에 의해 기본적으로 생성되는 파일들이 있는데, 리두 로그 파일, SYSTEM 데이터 파일, UNDO 데이터 파일, TEMP 데이터 파일등의 경로와 파일명을 설정한다. 정상적으로 실행되면 컨트롤 파일이 생성된다
자동으로 생성된는 컨트롤 파일에는 CREATE DATABASE 문에 의해 정의된 파일의 모든 정보가 기록된다. DB가 MOUNT 단계가 되면 컨트롤 파일의 정보를 읽어 DB의 모든 상태를 점검한다. 이때 컨트롤 파일을 읽을 수 없으면 DB를 사용할 수 없다. 따라서 컨트롤 파일을 잘 관리해야 한다. DB를 설치하면 기본적으로 3개의 컨트롤 파일이 생성되는데 첫 번째 파일이 원본 컨트롤 파일고, 나머지 두 개의 파일은 원본에 대한 미러링(mirroring) 파일로 원본 컨트롤 파일에 문제가 발생하면 미러링 파일로 복구할 수 있다.
현재 DB에서 사용하고 있는 컨트롤 파일의 위치와 이름은 v$controlfile 뷰를 참조하여 확인할 수 있다.

SQL> select * from v$controlfile;

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) 컨트롤 파일 백업
SQL> shutdown
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_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을 사용한 컨트롤 파일 백업
SQL> ALTER SYSTEM SET control_files=
'/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 명령을 실행하여 컨트롤 파일을 백업하면 생성된 복사본은 바이너리 파일로 생성되는 대신 텍스트 형식으로 백업 파일을 저장한다. 만일 원본 컨트롤 파일과 복사본 컨트롤 파일 모두를 사용할 수 없다면, 이 파일을 사용하여 모든 컨트롤 파일을 재생성할 수 있다.
백업된 파일은 initDB명.ora 파일의 user_dump_dest 매개변수가 지정하는 경로에 *.trc 확장자로 생성된다.
이렇게 백업된 *.trc 콘트럴 파일로부터 컨트롤 파일을 다시 복구하는 방법은 이곳에 있음
다음과 같은 경우 alter database 명령문을 실행하여 컨트롤 파일에 대한 trc 파일을 생성하는 것이 좋다.

• ALTER DATABASE 명령어에 의해 db의 구조가 변경될 때
• CREATE TABLESACE 명령어에 의해 테이블스페이스가 추가 되거나 변경될 때
• DROP TABLESPACE 명령어를 사용하여 테이블스페이스가 삭제될 때

SQL> alter database backup controlfile to trace;

Database altered.

SQL> show parameter user_dump_dest;

NAME TYPE VALUE
----------------- ----------- ------------------------------------------------
user_dump_dest string /export/home/oracle/app/oracle/admin/orcl/udump
SQL>

댓글 없음:

댓글 쓰기