搜尋此網誌

2012/08/25

Oracle 11g R2 簡易資料庫備份設定


Oracle早期的版本,我大多是用「Alter tablespace xxxx bagin backup」的方式,後來RMAN變成基本功能後,現行的版本皆改以RMAN為基礎。在11g的Enterprise Manager(EM) 中,也是有以RMAN為備份的方式。以下說明為Oracle裝在Linux下時,二種RMAN的簡易備份設定方式。
在EM中設定備份

這是Oracle建議的方式,操作皆在GUI設定下就可完成。
  • 首先先確定參數fast_recovery_area的設定空間夠大,由於EM預設是放在db_recovery_file_dest參數指定的位置,要夠大才放得下。下方的例子是設成30G:
首先在EM中點擊選項「使用狀態」==>「排定備份」

  • 這邊要設定備份方式,是否用Oracle建議的備份,及下方需要輸入登入該資料庫主機作業系統的DBA帳號和密碼

  • 設定備份目的地。一般我都是備份到磁碟


  • 設定排程。由於這邊只是測試,直接選Oracle建議的排程。



  • 最後檢查:這邊可看出其最後的Script長得如何,按確定後即開始備份。


在EM設定備份是最簡單、快速的方式,不過我並沒有深入研究它最後是不是要EM活著才能跑,或是透過資料庫的排程來執行。EM有時如果掛掉,我都是直接重新安裝居多,不想在上面設定太多東西,故最後還是沒用EM設定資料庫備份。

手動設定備份工作

EM的設定雖然簡單,但是由於其是取決於 fast_recovery_area的設定,並且EM可能要正常運作的狀況下才能備份。這邊有遇過幾次EM不正常的狀況,最後都是重新安裝EM了事。我不確定最後EM是把備份丟到資料庫中的排程、還是自行存設定在資料表中運作,總之隔著一層介面,感覺就是怪怪的,尤其是如果真的要還原資料庫時,愈簡單的備份方式,前容易自行掌握。
另一方面如果備份到磁碟機上,通常備份放的位置都是效能較差、較便宜的磁碟空間,例如是主機內部的硬碟。而fast_recovery_area指定的位置通常是效能較佳、較貴的磁碟設備,純放備份的費用太高、太浪費。
於Linux下備份,大體上我的設定方式如下:


  • 定義備份Full backup的RMAN Script及Shell Script
  • 定義備份Archivelog的RMAN Script及Shell Script
  • 沒有定義Incremental backup。空間夠的話,個人不喜歡用incremental backup
  • 設定RMAN內部保留備份資料的份數(RETENTION POLICY)
  • 設定Linux的Cron job排程:每天1:00 AM執行完整備份、9:10及17:10另外多執行二次Archivelog備份、5:00AM時會清除8 天前的備份資料。
  • Script執行的備份記錄(log檔)每份皆留存。

Scripts的準備

定義備份Full backup的RMAN Script

以下的SCRIPT,請自行改為自己的路徑

用vi產生一文字檔,名為full_backup.rman,內容如下:
run {
  allocate channel c1 type disk;
  backup full format '/backup/sid/backup/db_full_%T_%u_%s_%p' database
  include current controlfile;
  sql 'alter system archive log current';
  backup format /backup/sid/backup/db_archive_%T_%u_%s_%p'
  archivelog all delete input;
  release channel c1;
}
定義備份Full backup的Shell Script
用vi產生一文字檔,名為full_backup.sh,內容如下:
#!/bin/bash
. /home/oracle/.bash_profile
logfilename= full_backup_`date +%F_%d%M%S`.log
rman target / cmdfile=/home/ oracle /batch/full_backup.rman log=/home/oracle /batch/log/$logfilename

存檔後,要設定一下該Script為可執行:
chmod u+x,g+x full_backup.sh

定義備份Archivelog的RMAN Script
用vi產生一文字檔,名為archive_backup.rman,內容如下:
run {
  allocate channel arcbak1 type disk;
  change archivelog all crosscheck;
  backup
  format '/backup/sid/backup/db_archive_%T_%u_%s_%p'
  (archivelog all delete input);
  release channel arcbak1;
}
定義備份Archivelog的Shell Script
用vi產生一文字檔,名為archive_backup.sh,內容如下:
#!/bin/bash
. /home/oracle/.bash_profile
logfilename= archive_backup_`date +%F_%d%M%S`.log
rman target / cmdfile=/home/ oracle /batch/archive_backup.rman log=/home/ oracle /batch/log/$logfilename

存檔後,要設定一下該Script為可執行:
chmod u+x,g+x archive_backup.sh

定義清除8天前備份的Shell Script
用vi產生一檔案,名為remove_old_backup.sh,針對備份目錄內的所有檔案,只留8天旳內容,Script如下:
#!/bin/bash
find /backup/sid/backup* -mtime +8 -exec rm {} \;
存檔後,要設定一下該Script為可執行:
chmod u+x,g+x remove_old_backup.sh

設定Cron job
Cron job設定如下(以下共三行),時間依照前面所提的設定方式。第一行是完整備份、第二是只備Archivelog、第三行是刪除8天前的舊備份
0 1 * * * /home/oracle/batch/full_backup.sh > /home/oracle/batch/full_backup.cron.log 2>/home/oracle/batch/full_backup.cron.err
10 9,17 * * * /home/oracle/batch/archive_backup.sh >/home/oracle/batch/archive_backup.cron.log 2>/home/oracle/batch/archive_backup.cron.err
0 5 * * * /home/oracle/batch/remove_old_backup.sh >/home/oracle/batch/remove_old_backup.cron.log 2>/home/oracle/batch/remove_old_backup.cron.err


設定RMAN中的RETENATION

執行以下指令,進入RMAN互動式設定頁,並輸入相關指令,指定RMAN保留7份備份。請注意這邊是留7份完整備份,不是7天。如果使用incremental的方式備,就不用留到這麼多份。
[oraXXX@wwwXXXyy01 backup]$ rman target /
Recovery Manager: Release 11.2.0.3.0 - Production on Thu Aug 23 10:26:24 2012

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to target database: XXX (DBID=851003480)

RMAN> show all;

using target database control file instead of recovery catalog
RMAN configuration parameters for database with db_unique_name XXX are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/oraXXX/software/11.3.0/dbs/snapcf_XXX.f'; # default
RMAN> configure retention policy to redundancy 7;

new RMAN configuration parameters:
CONFIGURE RETENTION POLICY TO REDUNDANCY 7;
new RMAN configuration parameters are successfully stored

RMAN> show all;

RMAN configuration parameters for database with db_unique_name XXX are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 7;
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/oraXXX/software/11.3.0/dbs/snapcf_XXX.f'; # default

RMAN> exit


Recovery Manager complete.
[oraXXX@wwwXXXyy01 backup]$

執行例子
備份前
[oracle@ wwwXXXyy01 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
.
.
/dev/mapper/mpath1p1  1.4T  147G  1.2T  11% /oracle/database
/dev/mapper/mpath2p1  138G   47G   85G  36% /oracle/archive
/dev/cciss/c0d2p1     2.5T   20G  2.3T   1% /backup

備份後
[ oracle@ wwwXXXyy01 ~ ]$ df -h
Filesystem            Size  Used Avail Use% Mounted on
.
.
/dev/mapper/mpath1p1  1.4T  147G  1.2T  11% /oracle/database
/dev/mapper/mpath2p1  138G  5.3G  126G   5% /oracle/archive
/dev/cciss/c0d2p1     2.5T   57G  2.3T   3% /backup

從上面可看到,在備份完後,放Archivelog路徑的可用空間已經變多了


沒有留言: