rman 增量備份
一、準(zhǔn)備工作
查看是否處在歸檔模式
SQL> archive log list;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 28
Current log sequence 30
如果是"No Archive Mode"
修改為歸檔模式
首先要關(guān)閉數(shù)據(jù)庫(kù),啟動(dòng)到mount狀態(tài)。
SQL> shutdown immediate;
SQL> startup mount;
修改為歸檔模式
SQL>alter database archivelog;
驗(yàn)證修改結(jié)果
SQL> select log_mode from v$database;
LOG_MODE
------------
ARCHIVELOG
打開(kāi)數(shù)據(jù)庫(kù)
SQL> alter database open;
二、RMAN Catalog 配置
創(chuàng)建 RMAN Calalog表空間
SQL>create tablespace RMAN_TS datafile '/opt/oracle/oradata/orcl/RMAN_TS01.dbf' size 500M;
--創(chuàng)建用戶rman/rman 默認(rèn)表空間味RMAN_TS允許自由使用
SQL> create user rman identified by rman default tablespace RMAN_TS quota unlimited on RMAN_TS;
用戶授權(quán)
SQL>grant connect, resource,recovery_catalog_owner to rman;
創(chuàng)建恢復(fù)目錄
在命令終端
[oracle@localhost ~]$rman catalog rman/rman
RMAN> CREATE CATALOG;
連接,注冊(cè)目標(biāo)數(shù)據(jù)庫(kù),同步catalog和控制文件
[oracle@localhost ~]$rman target sys/wxbwer catalog rman/rman
連接成功出現(xiàn)下面的信息
connected to target database: ORCL (DBID=1325399111)
connected to recovery catalog database
RMAN> REGISTER DATABASE;
RMAN> RESYNC CATALOG;
下面是否有注冊(cè)信息即可
RMAN>LIST INCARNATION;
List of Database Incarnations
DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time
------- ------- -------- ---------------- --- ---------- ----------
2 36 ORCL 1325399111 PARENT 1 13-AUG-09
2 4 ORCL 1325399111 CURRENT 754488 25-OCT-12
三、創(chuàng)建RMAN備份腳本
來(lái)自:http://blog.csdn.net/robinson_0612/article/details/8029245
##===========================================================
## db_bak_rman.sh
## created by Robinson
## 2011/11/07
## usage: db_bak_rman.sh <$ORACLE_SID> <$BACKUP_LEVEL>
## BACKUP_LEVEL:
## F: full backup
## 0: level 0
## 1: level 1
##============================================================
#!/bin/bash
# User specific environment and startup programs
if [ -f ~/.bash_profile ];
then
. ~/.bash_profile
fi
ORACLE_SID=${1}; export ORACLE_SID
RMAN_LEVEL=${2}; export RMAN_LEVEL
TIMESTAMP=`date +%Y%m%d%H%M`; export TIMESTAMP
DATE=`date +%Y%m%d`; export DATE
#RMAN_DIR=/u02/database/${ORACLE_SID}/backup/rman; export RMAN_DIR
#RMAN_DATA=${RMAN_DIR}/${DATE}; export RMAN_DATA
#RMAN_LOG=/u02/database/${ORACLE_SID}/backup/rman/log export RMAN_LOG
RMAN_DIR=/opt/oracle/oradata/backup/rman; export RMAN_DIR
RMAN_DATA=${RMAN_DIR}/${DATE}; export RMAN_DATA
RMAN_LOG=${RMAN_DIR}/log export RMAN_LOG
# Check rman level
#======================================================================
if [ "$RMAN_LEVEL" == "F" ];
then unset INCR_LVL
BACKUP_TYPE=full
else
INCR_LVL="INCREMENTAL LEVEL ${RMAN_LEVEL}"
BACKUP_TYPE=lev${RMAN_LEVEL}
fi
RMAN_FILE=${RMAN_DATA}/${ORACLE_SID}_${BACKUP_TYPE}_${TIMESTAMP}; export RMAN_FILE
SSH_LOG=${RMAN_LOG}/${ORACLE_SID}_${BACKUP_TYPE}_${TIMESTAMP}.log; export SSH_LOG
MAXPIECESIZE=4G; export MAXPIECESIZE
#Check RMAN Backup Path
#=========================================================================
if ! test -d ${RMAN_DATA}
then
mkdir -p ${RMAN_DATA}
fi
echo "---------------------------------" >>${SSH_LOG}
echo " " >>${SSH_LOG}
echo "Rman Begin to Working ........." >>${SSH_LOG}
echo "Begin time at:" `date` --`date +%Y%m%d%H%M` >>${SSH_LOG}
#Startup rman to backup
#=============================================================================
$ORACLE_HOME/bin/rman log=${RMAN_FILE}.log <<EOF
connect target /
run {
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS;
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '${RMAN_FILE}_%F';
ALLOCATE CHANNEL 'ch1' TYPE DISK maxpiecesize=${MAXPIECESIZE};
ALLOCATE CHANNEL 'ch2' TYPE DISK maxpiecesize=${MAXPIECESIZE};
set limit channel ch1 readrate=10240;
set limit channel ch1 kbytes=4096000;
set limit channel ch2 readrate=10240;
set limit channel ch2 kbytes=4096000;
CROSSCHECK ARCHIVELOG ALL;
DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;
BACKUP
#AS COMPRESSED BACKUPSET
${INCR_LVL}
DATABASE FORMAT '${RMAN_FILE}_%U' TAG '${ORACLE_SID}_${BACKUP_TYPE}_${TIMESTAMP}';
SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
BACKUP ARCHIVELOG ALL FORMAT '${RMAN_FILE}_arc_%U' TAG '${ORACLE_SID}_arc_${TIMESTAMP}'
DELETE INPUT;
DELETE NOPROMPT OBSOLETE;
RELEASE CHANNEL ch1;
RELEASE CHANNEL ch2;
}
sql "alter database backup controlfile to ''${RMAN_DATA}/cntl_${BACKUP_TYPE}.bak''";
exit;
EOF
RC=$?
cat ${RMAN_FILE}.log >>${SSH_LOG}
echo "Rman Stop working @ time:"`date` `date +%Y%m%d%H%M` >>${SSH_LOG}
echo >>${SSH_LOG}
echo "------------------------" >>${SSH_LOG}
echo "------ Disk Space ------" >>${SSH_LOG}
df -h >>${SSH_LOG}
echo >>${SSH_LOG}
if [ $RC -ne "0" ]; then
echo "------ error ------" >>${SSH_LOG}
else
echo "------ no error found during RMAN backup peroid------" >>${SSH_LOG}
rm -rf ${RMAN_FILE}.log
fi
#Remove old backup than 3 days
#============================================================================
RMDIR=${RMAN_DIR}/`/bin/date +%Y%m%d -d "3 days ago"`; export RMDIR
echo >>${SSH_LOG}
echo -e "------Remove old backup than 3 days ------\n" >>${SSH_LOG}
if test -d ${RMDIR}
then
rm -rf ${RMDIR}
RC=$?
fi
echo >>${SSH_LOG}
if [ $RC -ne "0" ]; then
echo -e "------ Remove old backup exception------ \n" >>${SSH_LOG}
else
echo -e "------ no error found during remove old backup set peroid------ \n" >>${SSH_LOG}
fi
exit
[oracle@localhost backup]$ pwd
/opt/oracle/oradata/backup
[oracle@localhost backup]$vi db_bak_rman.sh
將上面腳本復(fù)制進(jìn)去,并保存,且設(shè)置權(quán)限
[oracle@localhost backup]$ chmod 755 db_bak_rman.sh
測(cè)試腳本
orcl 為 SID
0: 代表0級(jí)備份
[oracle@localhost backup]$ ./db_bak_rman.sh orcl 0
四、crontab 定時(shí)任務(wù) 以 oralce用戶登錄
[oracle@localhost backup]$crontab -e
45 23 * * 0 /opt/oracle/oradata/backup/db_bak_rman.sh orcl 0
45 23 * * 1-3 /opt/oracle/oradata/backup/db_bak_rman.sh orcl 2
45 23 * * 4 /opt/oracle/oradata/backup/db_bak_rman.sh orcl 1
45 23 * * 5-6 /opt/oracle/oradata/backup/db_bak_rman.sh orcl 2
以root用戶登錄
[root@localhost backup]$/etc/init.d/crond restart
Stopping crond: [ OK ]
Starting crond: [ OK ]
腳本的增量備份策略: 周日0級(jí)備份,周四1級(jí)備份,其他2級(jí)備份
差異備份有3個(gè)級(jí)別:
0級(jí):相當(dāng)于全備,不同的是0級(jí)可用于增量備份,全備不行。
1級(jí):備份自上次0級(jí)備份以來(lái)的數(shù)據(jù)
2級(jí):備份自上次備份依賴的數(shù)據(jù)
查看是否處在歸檔模式
SQL> archive log list;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 28
Current log sequence 30
如果是"No Archive Mode"
修改為歸檔模式
首先要關(guān)閉數(shù)據(jù)庫(kù),啟動(dòng)到mount狀態(tài)。
SQL> shutdown immediate;
SQL> startup mount;
修改為歸檔模式
SQL>alter database archivelog;
驗(yàn)證修改結(jié)果
SQL> select log_mode from v$database;
LOG_MODE
------------
ARCHIVELOG
打開(kāi)數(shù)據(jù)庫(kù)
SQL> alter database open;
二、RMAN Catalog 配置
創(chuàng)建 RMAN Calalog表空間
SQL>create tablespace RMAN_TS datafile '/opt/oracle/oradata/orcl/RMAN_TS01.dbf' size 500M;
--創(chuàng)建用戶rman/rman 默認(rèn)表空間味RMAN_TS允許自由使用
SQL> create user rman identified by rman default tablespace RMAN_TS quota unlimited on RMAN_TS;
用戶授權(quán)
SQL>grant connect, resource,recovery_catalog_owner to rman;
創(chuàng)建恢復(fù)目錄
在命令終端
[oracle@localhost ~]$rman catalog rman/rman
RMAN> CREATE CATALOG;
連接,注冊(cè)目標(biāo)數(shù)據(jù)庫(kù),同步catalog和控制文件
[oracle@localhost ~]$rman target sys/wxbwer catalog rman/rman
連接成功出現(xiàn)下面的信息
connected to target database: ORCL (DBID=1325399111)
connected to recovery catalog database
RMAN> REGISTER DATABASE;
RMAN> RESYNC CATALOG;
下面是否有注冊(cè)信息即可
RMAN>LIST INCARNATION;
List of Database Incarnations
DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time
------- ------- -------- ---------------- --- ---------- ----------
2 36 ORCL 1325399111 PARENT 1 13-AUG-09
2 4 ORCL 1325399111 CURRENT 754488 25-OCT-12
三、創(chuàng)建RMAN備份腳本
來(lái)自:http://blog.csdn.net/robinson_0612/article/details/8029245
##===========================================================
## db_bak_rman.sh
## created by Robinson
## 2011/11/07
## usage: db_bak_rman.sh <$ORACLE_SID> <$BACKUP_LEVEL>
## BACKUP_LEVEL:
## F: full backup
## 0: level 0
## 1: level 1
##============================================================
#!/bin/bash
# User specific environment and startup programs
if [ -f ~/.bash_profile ];
then
. ~/.bash_profile
fi
ORACLE_SID=${1}; export ORACLE_SID
RMAN_LEVEL=${2}; export RMAN_LEVEL
TIMESTAMP=`date +%Y%m%d%H%M`; export TIMESTAMP
DATE=`date +%Y%m%d`; export DATE
#RMAN_DIR=/u02/database/${ORACLE_SID}/backup/rman; export RMAN_DIR
#RMAN_DATA=${RMAN_DIR}/${DATE}; export RMAN_DATA
#RMAN_LOG=/u02/database/${ORACLE_SID}/backup/rman/log export RMAN_LOG
RMAN_DIR=/opt/oracle/oradata/backup/rman; export RMAN_DIR
RMAN_DATA=${RMAN_DIR}/${DATE}; export RMAN_DATA
RMAN_LOG=${RMAN_DIR}/log export RMAN_LOG
# Check rman level
#======================================================================
if [ "$RMAN_LEVEL" == "F" ];
then unset INCR_LVL
BACKUP_TYPE=full
else
INCR_LVL="INCREMENTAL LEVEL ${RMAN_LEVEL}"
BACKUP_TYPE=lev${RMAN_LEVEL}
fi
RMAN_FILE=${RMAN_DATA}/${ORACLE_SID}_${BACKUP_TYPE}_${TIMESTAMP}; export RMAN_FILE
SSH_LOG=${RMAN_LOG}/${ORACLE_SID}_${BACKUP_TYPE}_${TIMESTAMP}.log; export SSH_LOG
MAXPIECESIZE=4G; export MAXPIECESIZE
#Check RMAN Backup Path
#=========================================================================
if ! test -d ${RMAN_DATA}
then
mkdir -p ${RMAN_DATA}
fi
echo "---------------------------------" >>${SSH_LOG}
echo " " >>${SSH_LOG}
echo "Rman Begin to Working ........." >>${SSH_LOG}
echo "Begin time at:" `date` --`date +%Y%m%d%H%M` >>${SSH_LOG}
#Startup rman to backup
#=============================================================================
$ORACLE_HOME/bin/rman log=${RMAN_FILE}.log <<EOF
connect target /
connect catalog rman/rman
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS;
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '${RMAN_FILE}_%F';
ALLOCATE CHANNEL 'ch1' TYPE DISK maxpiecesize=${MAXPIECESIZE};
ALLOCATE CHANNEL 'ch2' TYPE DISK maxpiecesize=${MAXPIECESIZE};
set limit channel ch1 readrate=10240;
set limit channel ch1 kbytes=4096000;
set limit channel ch2 readrate=10240;
set limit channel ch2 kbytes=4096000;
CROSSCHECK ARCHIVELOG ALL;
DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;
BACKUP
#AS COMPRESSED BACKUPSET
${INCR_LVL}
DATABASE FORMAT '${RMAN_FILE}_%U' TAG '${ORACLE_SID}_${BACKUP_TYPE}_${TIMESTAMP}';
SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
BACKUP ARCHIVELOG ALL FORMAT '${RMAN_FILE}_arc_%U' TAG '${ORACLE_SID}_arc_${TIMESTAMP}'
DELETE INPUT;
DELETE NOPROMPT OBSOLETE;
RELEASE CHANNEL ch1;
RELEASE CHANNEL ch2;
}
sql "alter database backup controlfile to ''${RMAN_DATA}/cntl_${BACKUP_TYPE}.bak''";
exit;
EOF
RC=$?
cat ${RMAN_FILE}.log >>${SSH_LOG}
echo "Rman Stop working @ time:"`date` `date +%Y%m%d%H%M` >>${SSH_LOG}
echo >>${SSH_LOG}
echo "------------------------" >>${SSH_LOG}
echo "------ Disk Space ------" >>${SSH_LOG}
df -h >>${SSH_LOG}
echo >>${SSH_LOG}
if [ $RC -ne "0" ]; then
echo "------ error ------" >>${SSH_LOG}
else
echo "------ no error found during RMAN backup peroid------" >>${SSH_LOG}
rm -rf ${RMAN_FILE}.log
fi
#Remove old backup than 3 days
#============================================================================
RMDIR=${RMAN_DIR}/`/bin/date +%Y%m%d -d "3 days ago"`; export RMDIR
echo >>${SSH_LOG}
echo -e "------Remove old backup than 3 days ------\n" >>${SSH_LOG}
if test -d ${RMDIR}
then
rm -rf ${RMDIR}
RC=$?
fi
echo >>${SSH_LOG}
if [ $RC -ne "0" ]; then
echo -e "------ Remove old backup exception------ \n" >>${SSH_LOG}
else
echo -e "------ no error found during remove old backup set peroid------ \n" >>${SSH_LOG}
fi
exit
[oracle@localhost backup]$ pwd
/opt/oracle/oradata/backup
[oracle@localhost backup]$vi db_bak_rman.sh
將上面腳本復(fù)制進(jìn)去,并保存,且設(shè)置權(quán)限
[oracle@localhost backup]$ chmod 755 db_bak_rman.sh
測(cè)試腳本
orcl 為 SID
0: 代表0級(jí)備份
[oracle@localhost backup]$ ./db_bak_rman.sh orcl 0
四、crontab 定時(shí)任務(wù) 以 oralce用戶登錄
[oracle@localhost backup]$crontab -e
45 23 * * 0 /opt/oracle/oradata/backup/db_bak_rman.sh orcl 0
45 23 * * 1-3 /opt/oracle/oradata/backup/db_bak_rman.sh orcl 2
45 23 * * 4 /opt/oracle/oradata/backup/db_bak_rman.sh orcl 1
45 23 * * 5-6 /opt/oracle/oradata/backup/db_bak_rman.sh orcl 2
以root用戶登錄
[root@localhost backup]$/etc/init.d/crond restart
Stopping crond: [ OK ]
Starting crond: [ OK ]
腳本的增量備份策略: 周日0級(jí)備份,周四1級(jí)備份,其他2級(jí)備份
差異備份有3個(gè)級(jí)別:
0級(jí):相當(dāng)于全備,不同的是0級(jí)可用于增量備份,全備不行。
1級(jí):備份自上次0級(jí)備份以來(lái)的數(shù)據(jù)
2級(jí):備份自上次備份依賴的數(shù)據(jù)
posted on 2012-10-28 22:37 gdufo 閱讀(857) 評(píng)論(0) 編輯 收藏 所屬分類: Database (oracle, sqlser,MYSQL)