2014년 11월 6일 목요일

[Database] RMAN Command

RMAN


$ rman TARGET /


[ CONFIGURE ]

http://cafe.daum.net/_c21_/bbs_search_read?grpid=1Njrd&fldid=FrKk&datanum=10&docid=1NjrdFrKk1020110816154200

RMAN> SHOW ALL;

# 보유정책(retention policy)
RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS; # recovery window 옵션을 사용하는 보유정책(retention policy)의 설정: 3일이상 지난 RMAM 백업은 데이터베이스 복구를 위해 저장 해야 한다는 것을 의미한다
RMAN> CONFIGURE RETENTION POLICY TO REDUNDANCY 7; # redundancy 옵션을 사용하는 보유정책(retention policy)의 설정: 7일이상 지난 RMAN 백업은 더이상 저장할 필요가 없다
RMAN> REPORT OBSOLETE; # 보유정책 확인
RMAN> DELETE OBSOLETE; # 보유정책 위반 하는 백업제거
RMAN> CONFIGURE RETENTION POLICY CLEAR; # 기존에 설정된 보유정책 제거
RMAN> CONFIGURE BACKUP OPTIMAIZATION ON; # 이미백업한 파일이 존재할경우 백업하지 않는다



[ BACKUP ]

RMAN> BACKUP AS BACKUPSET FULL DATABASE PLUS ARCHIVELOG TAG 'SIDM_RCU';
RMAN> BACKUP CURRENT CONTROLFILE TAG 'SIDM_RCU';



[ RESTORE / RECOVERY ]

RMAN> STARTUP FORCE MOUNT; # MOUNT 단계
RMAN> VALIDATE DATABASE;   # 데이터베이스의 유효성 검사
RMAN> REPORT SCHEMA;   # 데이터베이스 파일의 확인
RMAN> RESTORE DATABASE PREVIEW SUMMARY;   # 복구 준비
RMAN> RESTORE DATABASE;   # 전체 백업 데이터를 대상 데이터베이스로 복사
RMAN> RECOVER DATABASE;   # 복사된 백업 데이터를 복구함
RMAN> ALTER DATABASE OPEN RESETLOGS;

RMAN> LIST BACKUP SUMMARY;
RMAN> LIST BACKUPSET;
RMAN> LIST BACKUPSET OF CONTROLFILE;
RMAN> LIST BACKUP OF DATABASE BY BACKUP;
RMAN> DELETE BACKUPSET <숫자>; # Delete BackupSet
RMAN> DELETE BACKUPSET TAG=''; # Delete BackupSet by TAG
delete expired backupset;
delete noprompt expired backupset;
delete noprompt ARCHIVELOG UNTIL TIME 'SYSDATE-1'


RMAN> CROSSCHECK BACKUPSET; 전체 backupset 과 target 서버에 저장된 backupset의 정보 비교하기


RMAN> RESTORE CONTROLFILE;


*******************************************************************************************
DB 생성 후 다음과 같이 하지 않으면 backupset이 Filesystem에 저장되어 Restore 시에 문제 발생.
SQL> ALTER SYSTEM SET DB_CREATE_FILE_DEST='+DATA_KRV2' SID='*';
SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=100G SID='*';
SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='+RECO_KRV2' SID='*';

---------------

http://radiocom.kunsan.ac.kr/lecture/oracle/backup_restore/rman.html

백업카피 파일을 사용한 데이터베이스 복구
http://radiocom.kunsan.ac.kr/lecture/oracle/backup_restore/backup_as_copy_restore.html

1) 백업카피가 저장되어질 위치를 변경한다.
RMAN> configure channel device type disk format '/export/home0/oracle/backup/bk_%t_%s';
+DATA_KRV2/sidm

2) disk backup type을 기본적으로 copy로 설정한다.
RMAN> configure device type disk backup type to copy;

3) parallelism 옵션을 1보다 크게 설정한다.
RMAN> configure device type disk parallelism 3;

4) backup 명령을 사용하여 백업카피를 생성하는 과정을 수행한다.
RMAN> BACKUP AS COPY database;

5) switch database to copy 명령의 실행
RMAN> shutdown immediate
RMAN> startup mount
RMAN> switch database to copy;


[ DROP DATABASE ]

RMAN> CONNECT TARGET /
RMAN> STARTUP FORCE MOUNT
RMAN> SQL 'ALTER SYSTEM ENABLE RESTRICTED SESSION';
RMAN> DROP DATABASE INCLUDING BACKUPS NOPROMPT;

------------------------

http://ss64.com/ora/rman_backup.html

RMAN Backup Clause

Back up database files, archive logs, backups, or copies.

Syntax:

   BACKUP FULL Options
   BACKUP FULL AS (COPY | BACKUPSET) Options
   BACKUP INCREMENTAL LEVEL [=] integer Options
   BACKUP INCREMENTAL LEVEL [=] integer AS (COPY | BACKUPSET) Options
   BACKUP AS (COPY | BACKUPSET) Options
   BACKUP AS (COPY | BACKUPSET) (FULL | INCREMENTAL LEVEL [=] integer) Options

Options:
   [backupOperand [backupOperand]…]
      backupSpec [backupSpec]…
        [PLUS ARCHIVELOG [backupSpecOperand [backupSpecOperand]…]];

backupOperand::=
   { FORMAT [=] 'format_string' [, 'format_string']…
   | CHANNEL ['] channel_id [']
   | CUMULATIVE
   | MAXSETSIZE [=] integer [ K | M | G ]
   | TAG [=] ['] tag_name [']
   | keepOption
   | SKIP { OFFLINE | READONLY | INACCESSIBLE }
   | VALIDATE
   | NOT BACKED UP [SINCE TIME [=] 'date_string']
   | COPIES [=] integer
   | DEVICE TYPE deviceSpecifier
   .
   .
   .
   }

backupSpec::=
   [(]
   { BACKUPSET
     { {ALL | completedTimeSpec }
     | primary_key) [, primary_key]…
     }
   | COPY OF { DATABASE
             | TABLESPACE ['] tablespace_name ['] [, ['] tablespace_name
   [']]…
             | DATAFILE datafileSpec [, datafileSpec]…
             }
   | DATAFILE datafileSpec [, datafileSpec]…
   | DATAFILECOPY 'filename' [, 'filename']…
   | DATAFILECOPY FROM TAG [=] ['] tag_name ['] [, ['] tag_name [']]…
   | DATAFILECOPY { ALL | LIKE 'string_pattern' }
   | TABLESPACE ['] tablespace_name ['] [, ['] tablespace_name [']]…
   | DATABASE
   | archivelogRecordSpecifier
   | CURRENT CONTROLFILE [FOR STANDBY]
   | CONTROLFILECOPY 'filename'
   | SPFILE
   }
   [backupSpecOperand [backupSpecOperand]…]

backupSpecOperand::=
   { FORMAT [=] 'format_string' [, 'format_string']…
   | CHANNEL ['] channel_id [']
   | CUMULATIVE
   | MAXSETSIZE [=] integer [ K | M | G ]
   | TAG [=] ['] tag_name [']
   | keepOption
   | SKIP { OFFLINE | READONLY | INACCESSIBLE }
   | NOT BACKED UP [ SINCE TIME [=] 'date_string'
                   | integer TIMES
                   ]
   | DELETE [ALL] INPUT
   .
   .
   .
   }
   .

You should configure default devices and channels in advance of running RMAN Backup.

Examples

Back up the database, and then the control file:
 (which contains a record of the backup)
 RMAN> BACKUP DATABASE;
 RMAN> BACKUP CURRENT CONTROLFILE;

Backup datafiles:
 RMAN> BACKUP AS BACKUPSET DATAFILE
        'ORACLE_HOME/oradata/trgt/users01.dbf',
        'ORACLE_HOME/oradata/trgt/tools01.dbf';

Backup all datafiles in the database:
  (bit-for-bit copies, created on disk)
 RMAN> BACKUP AS COPY DATABASE;

Backup archive logs:
 RMAN> BACKUP ARCHIVELOG COMPLETION TIME BETWEEN  'SYSDATE-28' AND 'SYSDATE-7';

Backup tablespace:
 RMAN> BACKUP TABLESPACE system, users, tools;

Backup controlfile:
 RMAN> BACKUP CURRENT CONTROLFILE TO '/backup/cntrlfile.copy';

Backup parameter file:
 RMAN> BACKUP SPFILE;

Backup everything:
 RMAN> BACKUP BACKUPSET ALL;

Create a consistent backup and keep the backup for 1 year:
 (exempt from the retention policy)
 RMAN> SHUTDOWN;
 RMAN> STARTUP MOUNT;
 RMAN> BACKUP DATABASE UNTIL 'SYSDATE+365' NOLOGS;

Backup Validation confirms that a backup could be run, by confirming that all database files exist and are free of physical and logical corruption, this does not generate any output.
Example:

 RMAN> BACKUP VALIDATE DATABASE ARCHIVELOG ALL;

"It's a very sobering feeling to be up in space and realize that one's safety factor was determined by the lowest bidder on a government contract" - Alan Shepherd

-------------
cd $ORACLE_HOME/oui/bin
./runInstaller -silent -detachHome ORACLE_HOME="/u01/DBMS/EIDM/product/11.2.0" ORACLE_HOME_NAME="OraDb11g_home2"

------------------------------------------------------

INCREMENTAL MERGE BACKUP & RECOVERY
=====================================

1) 개요

RMAN을 이용하여 database의 Image copy를 Backup하고 그 Backup에 retention policy만큼의 Incremental Backup을 적용하여서 복구의 시간을 단축한 Backup의 방법입니다.
즉 retention policy에 설정되어있는 시간 전의 최후의 시간까지 Image Copy를 보장하는 방법이며 Disk Space는 Incremental Backup만 사용하는 방법보다는 Image Copy를 사용하는 것임으로 많이 소요됩니다.
물론 Backup & Recovery 정책에 따라서 Retention Policy를 Recovery Window나 Redundancy 2이상으로 설정할 수 있으나, Incremental Merge Backup & Recovery의 장점을 극대화 하기 위해서는 Redundancy 1 (Default)로 설정하는 것을 권해드립니다.


2) 장점

- Recovery 시에 최근 Incremental Backup의 정보들이 적용이 되어있기 때문에 최소한의 시간으로 Recovery 작업을 진행하실 수 있습니다. 물론 장점을 극대화 하시기 위해서는 Retention Policy를 redundancy 1로 설정해 주시길 권해드립니다.
- Datafile들의 Destination을 Backup된 Image Copy가 있는 곳으로 Switch 하여 Restore하는 시간을 단축하셔서 Recovery를 진행하실 수도 있으나 Recovery 후의 관리의 용이성을 위해 부득히한 경우를 재외하고는 권장하지 않습니다.

3) Syntax

- Backup
RMAN> BACKUP INCREMENTAL LEVEL 1
FOR RECOVER OF COPY
WITH TAG WEEKLY DATABASE;

위 명령어를 사용하시면 WEEKLY라는 Tag로 생성된 Copy가 없을 시에는 Image Copy를 Weekly라는 Tag로 구분하여 Backup을 받게 됩니다.
* 여기서 Copy라 함은 FOR RECOVER OF COPY라는 구문을 사용하여서 만든 Image Copy를 뜻합니다.

RMAN> RECOVER COPY OF DATABASE WITH TAG WEEKLY;

위 명령어를 사용하시면 현재 받았던 Incremental Backup을 Weekly라는 Tag를 가지고 있는 Database Copy에 적용을 하게 됩니다.

RMAN> Delete Obsolete;

위 명령어를 사용하시면 현재의 Image Copy에 적용된 Incremental Backup을 재외한 나머지 Incremental Backup들이 Delete됩니다.

-Recovery

RMAN> switch database to copy;

문제가 발생하셨을 때 위 명령어를 사용하시면 모든 datafile의 pointer들은 image backup copy를 바라보게 됨으로 Restore의 시간을 절약할 수 있습니다.


4) Retention Policy에 따른 Syntax 변화

* 기본적으로 INCREMENTAL MERGE BACKUP & RECOVERY의 장점인 Recovery 시간을 극대화 하기 위해서는 Retention Policy를 redundancy 1(Default)로 설정하시는 것을 권장해드립니다.

하지만 User가 Backup & Recovery 계획을 변경하여 retention policy를 recovery window 또는 redundancy 1 이상으로 설정해 주시면 Obsolete한 Backupset을 Delete하는 부분과 Backupset을 적용시키는 부분을 수정해 주셔야합니다.

- Recovery Window of 2

Recovery Window를 2일로 설정해 놓으시면 Backup시에는 똑같은 Syntax를 사용하실 수 있으나 Recover copy of database 명령어는 아래와 같이 바뀌어야 합니다.

RMAN> BACKUP INCREMENTAL LEVEL 1
FOR RECOVER OF COPY
WITH TAG WEEKLY DATABASE;
RMAN> RECOVER COPY OF DATABASE WITH TAG WEEKLY until time 'sysdate-2';

왜냐하면 retention policy에 마춰서 image copy도 2일전의 상태로 보관되어야하며 그에 따라서 2일동안의 Backupset들도 보관되어야하기 때문입니다. 만약 until time을 사용하지 않으시면 incremental backup들이 obsolete 상태로 안변하게 됩니다.

- Redundancy 2 이상

Redundancy 2이상으로 설정해 주시면 2개 이상의 Tag를 보관하는 효과로서 역시 예상대로 Obsolete로 안 변하는 현상이 발생됩니다.

DAY 1)
RMAN> BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG DAILY DATABASE;

-위와 같이 실행하시면 한개의 Database Copy (Tag DAILY)가 생성됩니다.

DAY 2)
RMAN> BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG DAILY DATABASE;
RMAN> BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG WEEKLY DATABASE;

-위와 같이 실행하시면 한개의 Database Copy (Tag WEEKLY)와 한개의 Backupset (Tag DAILY)가 생성됩니다.

DAY 3)
RMAN> BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG DAILY DATABASE;
RMAN> BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG WEEKLY DATABASE;
RMAN> BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG MONTHLY DATABASE;

-위와 같이 실행하시면 한개의 Database Copy (Tag MONTHLY)와 두개의 Backupset (Tag DAILY, Tag WEEKLY)가 생성됩니다.

DAY 4)
RMAN> Delete Obsolete;

- 위와 같이 실행하시면 DAILY Tag와 관련된 부분이 Delete 됩니다. (최신 2개의 Tag관련 Backup만 보관)

RMAN> Delete Obsolete redundancy 1

- 위와 같이 실행하시면 DAYLY Tag와 WEEKLY Tag 관련된 부분이 Delete 됩니다. (Redundancy 1로 설정한 것과 똑같은 효과)

Reference:

Article-ID: Note 351455.1
Title: Oracle Suggested Strategy & Backup Retention

Article-ID: Note 303861.1
Title: Incrementally Updated Backup In 10G

--------------

13 Creating and Updating Duplicate Databases with RMAN
http://docs.oracle.com/cd/B19306_01/backup.102/b14191/rcmdupdb.htm#sthref943

댓글 없음:

댓글 쓰기