久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Linux平臺下如何實現RMAN 全備和增量備份shell腳本

143次閱讀
沒有評論

共計 10568 個字符,預計需要花費 27 分鐘才能閱讀完成。

這篇文章主要介紹了 Linux 平臺下如何實現 RMAN 全備和增量備份 shell 腳本,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。

全備腳本

以  nocatalog  模式為例:

Shell  腳本:

########################################################################

## hot_database_backup.sh ##

## created by Tianlesoftware ##

## 2010-7-16 ##

#########################################################################

#!/bin/sh 

# ————————————————————————— 

# Determine the user which is executing this script. 

# ————————————————————————— 

CUSER=`id |cut -d ( -f2 | cut -d )  -f1` 

# ————————————————————————— 

# Put output in  this file name .out. Change as desired. 

# Note: output directory requires write permission. 

# ————————————————————————— 

RMAN_LOG_FILE=${0}.out 

# ————————————————————————— 

# You may want to delete the output file so that backup information does 

# not accumulate. If not, delete the following lines. 

# ————————————————————————— 

if [ -f  $RMAN_LOG_FILE  ] 

then 

rm -f  $RMAN_LOG_FILE  

fi 

# —————————————————————– 

# Initialize the log file. 

# —————————————————————– 

echo   $RMAN_LOG_FILE 

chmod 666 $RMAN_LOG_FILE 

# ————————————————————————— 

# Log the start of this script. 

# ————————————————————————— 

echo Script $0   $RMAN_LOG_FILE 

echo ==== started on `date` ====   $RMAN_LOG_FILE 

echo   $RMAN_LOG_FILE 

# ————————————————————————— 

# Oracle home path. 

# ————————————————————————— 

ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1 

export ORACLE_HOME 

# ————————————————————————— 

# the Oracle SID of the target database. 

# ————————————————————————— 

ORACLE_SID=orcl 

export ORACLE_SID 

# ————————————————————————— 

# The Oracle DBA user id (account). 

# ————————————————————————— 

ORACLE_USER=oracle 

export ORACLE_USER 

# ————————————————————————— 

# Set the Oracle Recovery Manager name. 

# ————————————————————————— 

RMAN=$ORACLE_HOME/bin/rman 

# ————————————————————————— 

# Print out the value of the variables set by this script. 

# ————————————————————————— 

echo   $RMAN_LOG_FILE 

echo  RMAN: $RMAN    $RMAN_LOG_FILE 

echo  ORACLE_SID: $ORACLE_SID    $RMAN_LOG_FILE 

echo  ORACLE_USER: $ORACLE_USER    $RMAN_LOG_FILE 

echo  ORACLE_HOME: $ORACLE_HOME    $RMAN_LOG_FILE 

# ————————————————————————— 

# Print out the value of the variables set by bphdb. 

# ————————————————————————— 

#echo   $RMAN_LOG_FILE 

#echo  NB_ORA_FULL: $NB_ORA_FULL    $RMAN_LOG_FILE 

#echo  NB_ORA_INCR: $NB_ORA_INCR    $RMAN_LOG_FILE 

#echo  NB_ORA_CINC: $NB_ORA_CINC    $RMAN_LOG_FILE 

#echo  NB_ORA_SERV: $NB_ORA_SERV    $RMAN_LOG_FILE 

#echo  NB_ORA_POLICY: $NB_ORA_POLICY    $RMAN_LOG_FILE 

# ————————————————————————— 

# NOTE: This script assumes that the database is properly opened. If desired, 

# this would be the place to verify that. 

# ————————————————————————— 

echo   $RMAN_LOG_FILE 

# ————————————————————————— 

# ————————————————————————— 

# Call Recovery Manager to initiate the backup. 

# ————————————————————————— 

CMD_STR=  

ORACLE_HOME=$ORACLE_HOME 

export ORACLE_HOME 

ORACLE_SID=$ORACLE_SID 

export ORACLE_SID 

$RMAN nocatalog target sys/admin msglog $RMAN_LOG_FILE append   EOF 

RUN { 

allocate channel c1 type disk;

allocate channel c2 type disk;

BACKUP FORMAT  /u01/backup/orcl_%U_%T  skip inaccessible filesperset 5 DATABASE TAG orcl_hot_db_bk; 

sql  alter system archive log current

BACKUP FORMAT  /u01/backup/arch_%U_%T  skip inaccessible filesperset 5 ARCHIVELOG ALL DELETE INPUT; 

backup current controlfile tag= bak_ctlfile  format= /u01/backup/ctl_file_%U_%T

backup spfile tag= spfile  format= /u01/backup/ORCL_spfile_%U_%T

release channel c2;

release channel c1;

}

report obsolete; 

delete noprompt obsolete; 

crosscheck backup; 

delete noprompt expired backup;

list backup summary; 

#EOF 

 

# Initiate the command string 

if [  $CUSER  =  root  ] 

then 

 echo  Root Command String: $CMD_STR    $RMAN_LOG_FILE 

 su – $ORACLE_USER -c  $CMD_STR    $RMAN_LOG_FILE 

 RSTAT=$? 

else 

 echo  User Command String: $CMD_STR    $RMAN_LOG_FILE 

 /bin/sh -c  $CMD_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 

/bin/mailx -s  RMAN Backup SID   daimm@sf-express.com   $RMAN_LOG_FILE 

exit $RSTAT 

三.  增量備份

以 catalog 模式為例:

在存放 catalog 的實例上創建 catalog  目錄:

1. 創建 Catalog 所需要的表空間

SQL create tablespace catalog_ts datafile  D:/APP/ADMINISTRATOR/ORADATA/ORCL/catalog_ts1.dbf  size 20M;

2. 創建 RMAN 用戶并授權

SQL create user catalog identified by catalog default tablespace catalog_ts;

SQL grant recovery_catalog_owner to catalog; 

查看角色所擁有的權限: 

select * from dba_sys_privs where grantee= RECOVERY_CATALOG_OWNER

3. 創建恢復目錄

[oracle@db1 scripts]$ rman target / catalog catalog/catalog@catalog1;

Recovery Manager: Release 10.2.0.1.0 – Production on Thu Jul 15 12:03:16 2010

Copyright (c) 1982, 2005, Oracle. All rights reserved.

connected to target database: ORCL (DBID=1248423599)

connected to recovery catalog database

RMAN  create catalog tablespace catalog_ts;

recovery catalog created

如果此處報錯:

ORACLE error from recovery catalog database: ORA-00955: name is already used by an existing object

可以用命令刪除 catalog,在創建:

RMAN  drop catalog;

recovery catalog owner is CATALOG

enter DROP CATALOG command again to confirm catalog removal

RMAN  drop catalog

recovery catalog dropped

RMAN  register database;

database registered in recovery catalog

starting full resync of recovery catalog

full resync complete

RMAN

差異備份有 3 個級別: 

0 級:相當于全備,不同的是 0 級可用于增量備份,全備不行。

1 級:備份自上次 0 級備份以來的數據

2 級:備份自上次備份依賴的數據

腳本的增量備份策略:  周日 0 級備份,周四 1 級備份,其他 2 級備份

Shell  腳本:

########################################################################

## incremental_hot_database_backup.sh ##

## created by Tianlesoftware ##

## 2010-7-16 ##

#########################################################################

#!/bin/ksh 

export LANG=en_US

BACKUP_DATE=`date +%d`

RMAN_LOG_FILE=${0}.out

TODAY=`date`

USER=`id|cut -d  ( -f2|cut -d )  -f1`

echo  —————–$TODAY——————- $RMAN_LOG_FILE

ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1

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

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 sys/admin CATALOG catalog/catalog@catalog1 msglog $RMAN_LOG_FILE append  EOF

run

{

allocate channel c1 type disk;

allocate channel c2 type disk;

backup incremental level= $BAK_LEVEL skip inaccessible filesperset 5 Database format= /u01/backup/orcl_lev $BAK_LEVEL _%U_%T  tag= orcl_lev $BAK_LEVEL  ;

sql  alter system archive log current

backup archivelog all tag= arc_bak  format= /u01/backup/arch_%U_%T  skip inaccessible filesperset 5 not backed up 1 times delete input;

backup current controlfile tag= bak_ctlfile  format= /u01/backup/ctl_file_%U_%T

backup spfile tag= spfile  format= /u01/backup/ORCL_spfile_%U_%T

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 

/bin/mailx -s  RMAN Backup SID   daimm@sf-express.com   $RMAN_LOG_FILE 

exit $RSTAT 

將該備份腳本添加到 crontab,  然后定時執行:

[oracle@db1 u01]$ crontab -l

00 1 * * * /u01/scripts/incremental_hotbackup.sh

Unix crontab  命令詳解

http://blog.csdn.net/tianlesoftware/archive/2010/02/22/5315039.aspx

在測試的時候,我們可以手工的修改,然后查看腳本的執行情況即可:

[root@db1 ~]# date –set  2010-7-16 11:11:11

——————————2010 年 8 月 23 日補充 ————————–

  用這個腳本的時候發現一個問題,備份集可以通過設定保存粗略定期刪除,但是備份的歸檔文件無法刪除。

  所以還需要定期的刪除備份的歸檔文件。一般保存 15 天。shell 腳本如下。添加到 crontab 里定時執行就可以了。

del_archive_backup.sh

#!/bin/ksh
# ##################################################################
#
# delete archvivelog backup file.sh
#  tianlesoftware
#
# ##################################################################
PATH=/usr/bin:/usr/ucb:/etc:.:/usr/X/bin:/bin
export PATH
find /u01/incremental_hotbackup -mtime +15 -name arch_* -exec rm {} /;

說明,這里的路徑寫你自己的就可以了。

感謝你能夠認真閱讀完這篇文章,希望丸趣 TV 小編分享的“Linux 平臺下如何實現 RMAN 全備和增量備份 shell 腳本”這篇文章對大家有幫助,同時也希望大家多多支持丸趣 TV,關注丸趣 TV 行業資訊頻道,更多相關知識等著你來學習!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-20發表,共計10568字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 蒲江县| 永修县| 青铜峡市| 桐乡市| 凌云县| 襄垣县| 蒙自县| 商丘市| 吴忠市| 仙游县| 大洼县| 元谋县| 罗田县| 常州市| 修文县| 三门县| 洱源县| 襄汾县| 梁平县| 汾西县| 乡城县| 曲沃县| 抚松县| 大关县| 柳河县| 宿迁市| 诏安县| 清镇市| 恩平市| 宣威市| 思茅市| 庄浪县| 富蕴县| 股票| 沙田区| 扶风县| 饶平县| 平江县| 泰来县| 化隆| 灵山县|