91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2021-11-12 09:40:43 來源:億速云 閱讀:181 作者:小新 欄目:關系型數據庫

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

全備腳本

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

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

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

元阳县| 高青县| 彰武县| 枣阳市| 英德市| 当阳市| 左权县| 吉隆县| 双柏县| 天台县| 望谟县| 桦甸市| 辛集市| 临朐县| 兴安盟| 漯河市| 新疆| 余姚市| 民乐县| 育儿| 合作市| 永靖县| 贡觉县| 蓝田县| 陕西省| 郁南县| 永新县| 长海县| 岐山县| 宁津县| 博湖县| 从化市| 通道| 余江县| 敦化市| 平利县| 永城市| 民和| 清河县| 高唐县| 弥勒县|