日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux 平台下 RMAN 全备 和 增量备份 shell 脚本

發布時間:2025/3/21 linux 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux 平台下 RMAN 全备 和 增量备份 shell 脚本 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

?

?

一.?一些準備知識

?

Oracle?分歸檔和非歸檔模式。?這兩者的區別就是對redo?log的處理。歸檔模式下,當一個redo?log?寫滿之后,就會把這個redo?log里的內容寫入歸檔文件,等寫完之后,這個redo?log?就可以繼續使用,如果是非歸檔模式下,redo?log?就直接覆蓋了。?恢復一般都需要歸檔文件,這里面記錄了對數據庫的操作,所以生產庫一般都運行在歸檔模式下。?關于歸檔模式和非歸檔模式的切換參考Blog

Oracle?歸檔與非歸檔的切換

http://blog.csdn.net/tianlesoftware/archive/2009/10/19/4693470.aspx

?

RMAN?備份的存放位置也有2種選擇,一種是直接備份到磁盤,另一種就是備份到磁帶。?現在的大公司,一般都使用Symnatec?Veritas?NetBackup?軟件來進行備份。?這款軟件擴展了RMAN的功能和優點,所有用起來比較方便。?08年剛工作的時候就遇到了一個安裝NetBackup的實戰機會,可惜那時剛接觸Oracle,連Oracle?都不了解,更不提NetBackup了,?轉眼2年過去了,在也沒有遇到這樣的機會,不知道什么時候才能玩玩NetBackup。?遺憾啊。?

?

使用RMAN?備份也分catalog?nocatalog,就是是否使用恢復目錄,如果不使用恢復目錄,那么就是用control?file作為catalog,每一次備份都要往控制文件里面寫好多備份信息,控制文件里面會有越來越多的備份信息。因此,當使用rman?nocatalog方式備份時,備份controlfile是非常重要的。?如果使用catalog模式,就需要句需要創建catalog目錄。?當庫比較多時,使用catalog也是比較方便的。?具體參考:

? RMAN?Catalog?和?Nocatalog?的區別

http://blog.csdn.net/tianlesoftware/archive/2010/06/02/5641763.aspx

?

RMAN的備份也分兩種,一種是全備,另一種增量備份。?全備適用與數據庫比較小的情況,如果庫大的話就需要使用增量備份了,因為這樣能減少備份的時間。?Window?下的備份腳本,參考Blog

WindowsRMAN備份腳本

http://blog.csdn.net/tianlesoftware/archive/2010/01/13/5181414.aspx

?

關于控制文件對于RMAN的重要性,可以參考下面blog中的第四節:

RMAN?系列(一)----?RMAN?體系結構概述

http://blog.csdn.net/tianlesoftware/archive/2010/06/09/5659701.aspx

?

修改控制文件的保存時間,從默認的7天改成14

? SQL>?show?parameter?control

SQL>?alter?system?set?control_file_record_keep_time=14?scope=both;?

?

開啟控制文件的自動備份,開啟之后在數據庫備份或者數據文件(比如添加數據文件)有修改的時候都會自動備份控制文件和spfile文件。

Configure?controlfile?autobackup?on;

?

?

當數據庫兼容性設置為大于等于10.0.0時,盡管在沒有0級備份情況做1級的增量備份實際上是一個全備,但是這個全備也是1級的,不能用作1級積累增量備份的基礎備份,這個是在設計備份策略的時候要注意的問題。

?

?

?

?

?

?

二.?全備腳本

?

以?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 {} /;

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

?

感謝jonkingwar?,你說的地方已經修改,至于#EOF ,估計是和平臺有關系。 我在調試的時候運行有錯誤,把這行注釋掉就可以運行了。 所以如果相同錯誤的,可以考慮這種方法。沒有更好。

?

?

?

?

?

?

?

?

?

?

?

?

------------------------------------------------------------------------------?

?

Blog:?http://blog.csdn.net/tianlesoftware?

網上資源:?http://tianlesoftware.download.csdn.net?

相關視頻:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx?

DBA1?群:62697716(滿);?DBA2?群:62697977

DBA3?群:63306533;?????聊天?群:40132017

轉載于:https://www.cnblogs.com/hibernate315/archive/2010/07/16/2399231.html

總結

以上是生活随笔為你收集整理的Linux 平台下 RMAN 全备 和 增量备份 shell 脚本的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。