--1. 查看归档文件位置,默认为 flash recovery area
show parameter db_recovery_file_dest
--查看asm文件大小,注意oracle按磁盘比例分配数据,比如一个disk_group中的两个磁盘分别为10g,20g,现分配3g数据文件,则10g分配1g,20g的分配2g
select name,failgroup,path,total_mb,free_mb,free_mb/total_mb from v$asm_disk;
--2.更改flash recovery areas 配置
alter system set db_recovery_file_dest_size=4g scope=both;
--更改归档路径到本地,注意两个路径不能相同
alter system set log_archive_dest='location=/u01/arch1' scope=spfile;
alter system set log_archive_dest_1='location=/u01/arch2' scope=spfile;
--更改归档路径为默认,既把相应的路径设置为空
alter system set log_archive_dest='' scope=spfile;
alter system set log_archive_dest_1='' scope=spfile;
alter system set log_archive_dest_2='' scope=spfile;
--闪回恢复目录
select name,SPACE_LIMIT,SPACE_USED from v$recovery_file_dest;
--归档目录
SELECT * FROM v$archive_dest;
--3. 配置恢复目录
--创建恢复目录表空间和用户
create tablespace catalog_ts datafile size 50m;
create user catalog identified by catalog default tablespace catalog_ts;
grant recovery_catalog_owner to catalog;
select * from dba_sys_privs where grantee='RECOVERY_CATALOG_OWNER';
rman target / catalog catalog/catalog
--在rman中创建恢复目录
create catalog tablespace catalog_ts;
--drop catalog;
--drop catalog;
--create catalog tablespace catalog_ts;
--注册数据库
register database;
--4.rman配置参数更改
--控制文件自动备份
configure controlfile autobackup on;
--备份并行度为2
configure device type disk parallelism 2;
--打开备份优化,能不备就不备了
CONFIGURE BACKUP OPTIMIZATION ON;
--备份文件保存数设置为5份
configure retention policy to redundancy 5;
--备份文件保存天数设置为35天
configure retention policy to recovery window of 35 days;
--5.自动备份脚本
###周日0级备份,周四1级备份,其他2级备份
########################################################################
## incremental_hot_database_backup.sh ##
## created by rudy gao ##
## 2014-06-03 ##
#########################################################################
#!/bin/ksh
export LANG=en_US
BACKUP_DATE=`date +%d`
#get absolute path of file
RMAN_LOG_FILE=`pwd`/`basename ${0}`_`date +%a`.out
TODAY=`date`
USER=`id|cut -d "(" -f2|cut -d ")" -f1`
echo "-----------------$TODAY-------------------">$RMAN_LOG_FILE
ORACLE_HOME=/u01/app/product/db
export ORACLE_HOME
RMAN=$ORACLE_HOME/bin/rman
export RMAN
ORACLE_SID=orcl
export ORACLE_SID
ORACLE_USER=oracle
export ORACLE_USER
echo "ORACLE_SID: $ORACLE_SID">>$RMAN_LOG_FILE
echo "ORACLE_HOME:$ORACLE_HOME">>$RMAN_LOG_FILE
echo "ORACLE_USER:$ORACLE_USER">>$RMAN_LOG_FILE
echo "==========================================">>$RMAN_LOG_FILE
echo "BACKUP DATABASE BEGIN......">>$RMAN_LOG_FILE
echo " ">>$RMAN_LOG_FILE
chmod 666 $RMAN_LOG_FILE
WEEK_DAILY=`date +%a`
case "$WEEK_DAILY" in
"Mon")
BAK_LEVEL=2
;;
"Tue")
BAK_LEVEL=2
;;
"Wed")
BAK_LEVEL=2
;;
"Thu")
BAK_LEVEL=1
;;
"Fri")
BAK_LEVEL=2
;;
"Sat")
BAK_LEVEL=2
;;
"Sun")
BAK_LEVEL=0
;;
"*")
BAK_LEVEL=error
;;
esac
#BAK_LEVEL=0
export BAK_LEVEL=$BAK_LEVEL
echo "Today is : $WEEK_DAILY incremental level= $BAK_LEVEL">>$RMAN_LOG_FILE
RUN_STR="
BAK_LEVEL=$BAK_LEVEL
export BAK_LEVEL
ORACLE_HOME=$ORACLE_HOME
export ORACLE_HOME
ORACLE_SID=$ORACLE_SID
export ORACLE_SID
$RMAN TARGET / CATALOG catalog/catalog msglog $RMAN_LOG_FILE << EOF
run
{
allocate channel c1 type disk;
allocate channel c2 type disk;
backup incremental level= $BAK_LEVEL skip inaccessible filesperset 3 database tag='orcl_lev"$BAK_LEVEL"' ;
sql 'alter system archive log current';
backup archivelog all tag='back_arc' skip inaccessible filesperset 3 not backed up 1 times delete input;
backup current controlfile tag='bak_ctlfile' ;
backup spfile tag='bak_spfile';
release channel c2;
release channel c1;
}
report obsolete;
delete noprompt obsolete;
crosscheck backup;
delete noprompt expired backup;
list backup summary;
resync catalog;
EOF
"
# Initiate the command string
if [ "$CUSER" = "root" ]
then
echo "Root Command String: $RUN_STR" >> $RMAN_LOG_FILE
su - $ORACLE_USER -c "$RUN_STR" >> $RMAN_LOG_FILE
RSTAT=$?
else
echo "User Command String: $RUN_STR" >> $RMAN_LOG_FILE
/bin/sh -c "$RUN_STR" >> $RMAN_LOG_FILE
RSTAT=$?
fi
# ---------------------------------------------------------------------------
# Log the completion of this script.
# ---------------------------------------------------------------------------
if [ "$RSTAT" = "0" ]
then
LOGMSG="ended successfully"
else
LOGMSG="ended in error"
fi
echo >> $RMAN_LOG_FILE
echo Script $0 >> $RMAN_LOG_FILE
echo ==== $LOGMSG on `date` ==== >> $RMAN_LOG_FILE
echo >> $RMAN_LOG_FILE
exit $RSTAT
--6.备份脚本设置
chmod u+x incremental_hotbackup.sh
crontab -e
00 1 * * * /u01/scripts/incremental_hotbackup.sh
crontab -l
--7.相关视图
--查看备份进度,注意备份时间超过6秒,才能在此视图中看到进度
SELECT SID,OPNAME, SERIAL#, CONTEXT, SOFAR, TOTALWORK,
ROUND(SOFAR/TOTALWORK*100,2) "%_COMPLETE"
FROM V$SESSION_LONGOPS
WHERE OPNAME LIKE 'RMAN%'
AND OPNAME NOT LIKE '%aggregate%'
AND TOTALWORK != 0
AND SOFAR <> TOTALWORK
order by "%_COMPLETE"
desc
--备份结果的详细信息
--BACKUP_TYPE列标记该备份集中包含的文件类型,有下列几个值:
--L:表示包含归档重做日志文件;
--D:表示数据文件完全备份;
--I:表示增量备份。
SELECT * FROM V$BACKUP_SET;
--当前创建的备份集信息
SELECT * FROM V$BACKUP_PIECE;
--记录了备份集中发现的损坏的数据块
SELECT * FROM v$backup_corruption;
--更多的备份信息,请查看v$backup_*视图
--8.如果有必要,删除oem中的备份job
show parameter db_recovery_file_dest
--查看asm文件大小,注意oracle按磁盘比例分配数据,比如一个disk_group中的两个磁盘分别为10g,20g,现分配3g数据文件,则10g分配1g,20g的分配2g
select name,failgroup,path,total_mb,free_mb,free_mb/total_mb from v$asm_disk;
--2.更改flash recovery areas 配置
alter system set db_recovery_file_dest_size=4g scope=both;
--更改归档路径到本地,注意两个路径不能相同
alter system set log_archive_dest='location=/u01/arch1' scope=spfile;
alter system set log_archive_dest_1='location=/u01/arch2' scope=spfile;
--更改归档路径为默认,既把相应的路径设置为空
alter system set log_archive_dest='' scope=spfile;
alter system set log_archive_dest_1='' scope=spfile;
alter system set log_archive_dest_2='' scope=spfile;
--闪回恢复目录
select name,SPACE_LIMIT,SPACE_USED from v$recovery_file_dest;
--归档目录
SELECT * FROM v$archive_dest;
--3. 配置恢复目录
--创建恢复目录表空间和用户
create tablespace catalog_ts datafile size 50m;
create user catalog identified by catalog default tablespace catalog_ts;
grant recovery_catalog_owner to catalog;
select * from dba_sys_privs where grantee='RECOVERY_CATALOG_OWNER';
rman target / catalog catalog/catalog
--在rman中创建恢复目录
create catalog tablespace catalog_ts;
--drop catalog;
--drop catalog;
--create catalog tablespace catalog_ts;
--注册数据库
register database;
--4.rman配置参数更改
--控制文件自动备份
configure controlfile autobackup on;
--备份并行度为2
configure device type disk parallelism 2;
--打开备份优化,能不备就不备了
CONFIGURE BACKUP OPTIMIZATION ON;
--备份文件保存数设置为5份
configure retention policy to redundancy 5;
--备份文件保存天数设置为35天
configure retention policy to recovery window of 35 days;
--5.自动备份脚本
###周日0级备份,周四1级备份,其他2级备份
########################################################################
## incremental_hot_database_backup.sh ##
## created by rudy gao ##
## 2014-06-03 ##
#########################################################################
#!/bin/ksh
export LANG=en_US
BACKUP_DATE=`date +%d`
#get absolute path of file
RMAN_LOG_FILE=`pwd`/`basename ${0}`_`date +%a`.out
TODAY=`date`
USER=`id|cut -d "(" -f2|cut -d ")" -f1`
echo "-----------------$TODAY-------------------">$RMAN_LOG_FILE
ORACLE_HOME=/u01/app/product/db
export ORACLE_HOME
RMAN=$ORACLE_HOME/bin/rman
export RMAN
ORACLE_SID=orcl
export ORACLE_SID
ORACLE_USER=oracle
export ORACLE_USER
echo "ORACLE_SID: $ORACLE_SID">>$RMAN_LOG_FILE
echo "ORACLE_HOME:$ORACLE_HOME">>$RMAN_LOG_FILE
echo "ORACLE_USER:$ORACLE_USER">>$RMAN_LOG_FILE
echo "==========================================">>$RMAN_LOG_FILE
echo "BACKUP DATABASE BEGIN......">>$RMAN_LOG_FILE
echo " ">>$RMAN_LOG_FILE
chmod 666 $RMAN_LOG_FILE
WEEK_DAILY=`date +%a`
case "$WEEK_DAILY" in
"Mon")
BAK_LEVEL=2
;;
"Tue")
BAK_LEVEL=2
;;
"Wed")
BAK_LEVEL=2
;;
"Thu")
BAK_LEVEL=1
;;
"Fri")
BAK_LEVEL=2
;;
"Sat")
BAK_LEVEL=2
;;
"Sun")
BAK_LEVEL=0
;;
"*")
BAK_LEVEL=error
;;
esac
#BAK_LEVEL=0
export BAK_LEVEL=$BAK_LEVEL
echo "Today is : $WEEK_DAILY incremental level= $BAK_LEVEL">>$RMAN_LOG_FILE
RUN_STR="
BAK_LEVEL=$BAK_LEVEL
export BAK_LEVEL
ORACLE_HOME=$ORACLE_HOME
export ORACLE_HOME
ORACLE_SID=$ORACLE_SID
export ORACLE_SID
$RMAN TARGET / CATALOG catalog/catalog msglog $RMAN_LOG_FILE << EOF
run
{
allocate channel c1 type disk;
allocate channel c2 type disk;
backup incremental level= $BAK_LEVEL skip inaccessible filesperset 3 database tag='orcl_lev"$BAK_LEVEL"' ;
sql 'alter system archive log current';
backup archivelog all tag='back_arc' skip inaccessible filesperset 3 not backed up 1 times delete input;
backup current controlfile tag='bak_ctlfile' ;
backup spfile tag='bak_spfile';
release channel c2;
release channel c1;
}
report obsolete;
delete noprompt obsolete;
crosscheck backup;
delete noprompt expired backup;
list backup summary;
resync catalog;
EOF
"
# Initiate the command string
if [ "$CUSER" = "root" ]
then
echo "Root Command String: $RUN_STR" >> $RMAN_LOG_FILE
su - $ORACLE_USER -c "$RUN_STR" >> $RMAN_LOG_FILE
RSTAT=$?
else
echo "User Command String: $RUN_STR" >> $RMAN_LOG_FILE
/bin/sh -c "$RUN_STR" >> $RMAN_LOG_FILE
RSTAT=$?
fi
# ---------------------------------------------------------------------------
# Log the completion of this script.
# ---------------------------------------------------------------------------
if [ "$RSTAT" = "0" ]
then
LOGMSG="ended successfully"
else
LOGMSG="ended in error"
fi
echo >> $RMAN_LOG_FILE
echo Script $0 >> $RMAN_LOG_FILE
echo ==== $LOGMSG on `date` ==== >> $RMAN_LOG_FILE
echo >> $RMAN_LOG_FILE
exit $RSTAT
--6.备份脚本设置
chmod u+x incremental_hotbackup.sh
crontab -e
00 1 * * * /u01/scripts/incremental_hotbackup.sh
crontab -l
--7.相关视图
--查看备份进度,注意备份时间超过6秒,才能在此视图中看到进度
SELECT SID,OPNAME, SERIAL#, CONTEXT, SOFAR, TOTALWORK,
ROUND(SOFAR/TOTALWORK*100,2) "%_COMPLETE"
FROM V$SESSION_LONGOPS
WHERE OPNAME LIKE 'RMAN%'
AND OPNAME NOT LIKE '%aggregate%'
AND TOTALWORK != 0
AND SOFAR <> TOTALWORK
order by "%_COMPLETE"
desc
--备份结果的详细信息
--BACKUP_TYPE列标记该备份集中包含的文件类型,有下列几个值:
--L:表示包含归档重做日志文件;
--D:表示数据文件完全备份;
--I:表示增量备份。
SELECT * FROM V$BACKUP_SET;
--当前创建的备份集信息
SELECT * FROM V$BACKUP_PIECE;
--记录了备份集中发现的损坏的数据块
SELECT * FROM v$backup_corruption;
--更多的备份信息,请查看v$backup_*视图
--8.如果有必要,删除oem中的备份job