天天看點

【RMAN】RMAN腳本中使用替換變量

【RMAN】RMAN腳本中使用替換變量--windows 下rman全備腳本

<a href="http://s3.51cto.com/wyfs02/M00/6D/7C/wKioL1VlboGgC2fHAADTBOERqBg393.jpg"></a>

各位技術愛好者,看完本文後,你可以掌握如下的技能,也可以學到一些其它你所不知道的知識,~O(∩_∩)O~:

① windows 下rman全備腳本的寫法(重點)

② 11g rman中run塊中采用變量(亮點)

本文如有錯誤或不完善的地方請大家多多指正,ITPUB留言或QQ皆可,您的批評指正是我寫作的最大動力。

目标庫:11.2.0.1 windows XP

RMAN 備份恢複系列

<a>【TSPITR】RMAN表空間基于時間點的自動恢複</a>

<a>http://blog.itpub.net/26736162/viewspace-1671741/</a>

【推薦】 【RMAN】rm -rf 誤操作的恢複過程

http://blog.itpub.net/26736162/viewspace-1623938/

【推薦】 【RMAN】利用備份片還原資料庫(中)-附加

http://blog.itpub.net/26736162/viewspace-1621938/

【推薦】 【RMAN】利用備份片還原資料庫(下)

http://blog.itpub.net/26736162/viewspace-1621672/

【推薦】 【RMAN】利用備份片還原資料庫(中)

http://blog.itpub.net/26736162/viewspace-1621661/

【推薦】 【RMAN】利用備份片還原資料庫(上)

http://blog.itpub.net/26736162/viewspace-1621581/

【推薦】 【RMAN】RMAN跨版本恢複(下)

http://blog.itpub.net/26736162/viewspace-1562583/

【推薦】  Oracle 元件 系列 小結

http://blog.itpub.net/26736162/viewspace-1562441/

【推薦】 【RMAN】RMAN跨版本恢複(中)

http://blog.itpub.net/26736162/viewspace-1561352/

【推薦】 【RMAN】RMAN跨版本恢複(上)

http://blog.itpub.net/26736162/viewspace-1561185/

【推薦】  關于在不同版本和平台之間進行還原或複制的常見問題

http://blog.itpub.net/26736162/viewspace-1549041/

【推薦】 undo表空間檔案丢失恢複(4)--無備份無recover的情況下恢複

http://blog.itpub.net/26736162/viewspace-1458787/

【推薦】 undo表空間檔案丢失恢複(3)--無備份無redo的情況下恢複

http://blog.itpub.net/26736162/viewspace-1458750/

【推薦】 undo表空間檔案丢失恢複(2)--無備份有redo的情況下恢複

http://blog.itpub.net/26736162/viewspace-1458663/

【推薦】 undo表空間檔案丢失恢複(1)--有備份

http://blog.itpub.net/26736162/viewspace-1458654/

【推薦】 ORACLE 資料泵之NETWORK_LINK

http://blog.itpub.net/26736162/viewspace-1432591/

【推薦】 oracle控制檔案在缺失歸檔日志的情況下的恢複

http://blog.itpub.net/26736162/viewspace-1426552/

【推薦】 ORACLE 隻讀資料檔案備份與恢複

http://blog.itpub.net/26736162/viewspace-1425283/

【推薦】 熱備下的測試庫搭建

http://blog.itpub.net/26736162/viewspace-1405324/

【推薦】 oracle 異構平台遷移之傳輸表空間一例

http://blog.itpub.net/26736162/viewspace-1391913/

【推薦】 oracle 傳輸表空間一例

http://blog.itpub.net/26736162/viewspace-1375260/

【推薦】 利用rman來實作linux平台資料庫複制到windows平台資料庫

http://blog.itpub.net/26736162/viewspace-1352436/

【推薦】 直接複制資料檔案實作linux平台資料庫複制到windows平台資料庫

http://blog.itpub.net/26736162/viewspace-1352243/

【推薦】 使用OEM複制資料庫

http://blog.itpub.net/26736162/viewspace-1224865/

【推薦】 采用DUPLICATE 把asm資料庫複制到檔案系統

http://blog.itpub.net/26736162/viewspace-1224861/

Duplicating a Database Without Recovery Catalog or Target Connection

http://blog.itpub.net/26736162/viewspace-1223253/

【推薦】 Duplicating an Active Database

http://blog.itpub.net/26736162/viewspace-1223247/

Oracle 11g出了一個新特性,在RMAN腳本中使用替換變量,這是一個非常有用的特點,找到這麼一篇文章:

Creating Dynamic Command Files 

Problem 

You want to create dynamic command files that can be used for multiple jobs by passing substitution variables. 

Solution 

You can create dynamic shell scripts by using substitution variables in the RMAN command 

files inside the shell scripts. You can specify values for use in substitution variables through 

the new using clause when calling an RMAN command file. You use the &amp;integer syntax (&amp;1, 

&amp;2, and so on) to indicate to which variable your substitution values should be assigned, just 

as in SQL*Plus. 

Let’s review an example that shows how to create a dynamic backup shell script. 

1. Create the RMAN command file that uses two substitution variables: 

#backup.cmd 

connect target sys/&lt;sys_password&gt;@prod1 

run { 

backup database 

tag &amp;1 

format &amp;2 

exit; 

The command file shown here will back up the database using two substitution variables (&amp;1 and &amp;2), one for the backup tag and the other for the string value in the 

format specification. 

2. Create the shell script to run the backup command file you created in step 1: 

#!/bin/tcsh 

# script name: nightly_backup.sh 

set tag=$argv(1) 

set format=$argv[2] 

rman @backup.cmd using $tag $format 

3. Now that you have created a dynamic shell script, you can specify the arguments for 

the tag and format variables on the command line, thus being able to modify them for 

different jobs. Here’s an example: 

$ nightly_backup.sh longterm_backup back0420 

The example shows how to execute the shell script nightly_backup.sh with two dynamic 

parameters, longterm_backup (tag) and back0420 (format string).

How It Works 

The ability to use substitution variables in RMAN scripts is new in Oracle Database 11g. The 

use of substitution variables in RMAN scripts is similar to the way you specify substitution 

variables in operating system and SQL*Plus scripts. Specifying substitution variables lets you 

use the same command file by modifying it appropriately for different backup tasks, thus 

making the command file dynamic.

都是很基礎的内容,沒啥說的,直接貼我的腳本:

Windows 下RMAN備份腳本,比較簡單。

1、建立檔案 call_full_backup.sql ,内容如下

run{

        CONFIGURE CONTROLFILE AUTOBACKUP ON;

        CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'e:\rman_backup\ctlfile_autoback_%d_%F.bak';

CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 14 DAYS;

allocate channel c1 type disk;   

allocate channel c2 type disk; 

backup as compressed backupset skip inaccessible filesperset 5  full database  format 'e:\rman_backup\datafile_full_%d_%I_%U_%T.bak'  Database tag='bk_df_full_&amp;1' ; 

sql 'alter system archive log current';  

backup archivelog all format 'e:\rman_backup\arch_%d_%I_%e_%U_%T.bak'  tag='bk_arc_&amp;1'  skip inaccessible not  backed up 1 times  delete all input;  

backup current controlfile format 'e:\rman_backup\ctlfile_%d_%I_%U_%T.bak'  tag='bk_ctlfile_&amp;1' ;

backup spfile  format='e:\rman_backup\spfile_%d_%I_%U_%T.bak' tag='bk_spfile_&amp;1';

release channel c1;  

release channel c2; 

report obsolete;

crosscheck copy;

crosscheck archivelog all;

delete noprompt obsolete;

crosscheck backup;

delete noprompt expired backup;

}

2、建立bat檔案full_backup.bat,内容如下:

SET ORACLE_SID=ORA11G

SET ORACLE_HOME=F:\app\oracle\product

SET PATH=%ORACLE_HOME%\BIN

set MYDATE=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%

SET NLS_DATE_FORMAT=YYYY-MM-DD HH24:mi:ss

rman target / cmdfile='f:\rman_backup\call_full_backup.sql' log='e:\rman_backup\log\rman_full_backup_%MYDATE%.log' using %MYDATE%

3、把上述建立的兩個檔案存放在相對應的路徑,然後在系統建立計劃任務執行full_backup.bat檔案即可。

4、windows下建立定時任務

XP下在:

<a href="http://s3.51cto.com/wyfs02/M01/6D/7C/wKioL1VlboKweI9KAAM3vlTsvwI948.jpg"></a>

<a href="http://s3.51cto.com/wyfs02/M02/6D/7C/wKioL1VlboLBfOXeAAFyYY2Uc3U283.jpg"></a>

下邊設定時間即可,需要啟用如下服務方可,不然可能報錯:

選用任務計劃,添加任務計劃,下一步,選擇程式,下一步,執行任務的周期,下一步,下一步,輸入密碼,下一步,完成。問題就出在這裡,它彈出一個對話框“已建立新任務,但可能不能運作,因為無法設定賬戶資訊,指定的錯誤是:0x80041315:任務計劃程式服務沒有運作”

我的電腦-&gt;右鍵-&gt;屬性-&gt;管理-&gt;服務和應用程式-&gt;服務-&gt;Task Scheduler-&gt;啟用該服務然後應該就可以添加任務計劃了吧!

<a href="http://s3.51cto.com/wyfs02/M02/6D/80/wKiom1VlbPPwM4GIAAIYD6aMGFs323.jpg"></a>

安裝上邊的腳本部署好之後,等到約定的時間點就可以運作了,運作結果如下:

恢複管理器: Release 11.2.0.1.0 - Production on 星期三 5月 27 12:43:05 2015

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

連接配接到目标資料庫: ORA11G (DBID=4275029574)

RMAN&gt; run{

2&gt;         CONFIGURE CONTROLFILE AUTOBACKUP ON;

3&gt;         CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'e:\rman_backup\ctlfile_autoback_%d_%F.bak';

4&gt; CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 14 DAYS;

5&gt; allocate channel c1 type disk;   

6&gt; allocate channel c2 type disk; 

7&gt; backup as compressed backupset skip inaccessible filesperset 5  full database  format 'e:\rman_backup\datafile_full_%d_%I_%U_%T.bak'  Database tag='bk_df_full_20150527' ; 

8&gt; sql 'alter system archive log current';  

9&gt; backup archivelog all format 'e:\rman_backup\arch_%d_%I_%e_%U_%T.bak'  tag='bk_arc_20150527'  skip inaccessible not  backed up 1 times  delete all input;  

10&gt; backup current controlfile format 'e:\rman_backup\ctlfile_%d_%I_%U_%T.bak'  tag='bk_ctlfile_20150527' ;

11&gt; backup spfile  format='e:\rman_backup\spfile_%d_%I_%U_%T.bak' tag='bk_spfile_20150527';

12&gt; release channel c1;  

13&gt; release channel c2; 

14&gt; report obsolete;

15&gt; crosscheck copy;

16&gt; crosscheck archivelog all;

17&gt; delete noprompt obsolete;

18&gt; crosscheck backup;

19&gt; delete noprompt expired backup;

20&gt;  }

21&gt;

使用目标資料庫控制檔案替代恢複目錄

舊的 RMAN 配置參數:

CONFIGURE CONTROLFILE AUTOBACKUP ON;

新的 RMAN 配置參數:

已成功存儲新的 RMAN 配置參數

CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'e:\rman_backup\ctlfile_autoback_%d_%F.bak';

配置設定的通道: c1

通道 c1: SID=40 裝置類型=DISK

配置設定的通道: c2

通道 c2: SID=1 裝置類型=DISK

啟動 backup 于 2015-05-27 12:43:08

通道 c1: 正在啟動壓縮的全部資料檔案備份集

通道 c1: 正在指定備份集内的資料檔案

輸入資料檔案: 檔案号=00001 名稱=F:\APP\ORACLE\ORADATA\ORA11G\SYSTEM01.DBF

輸入資料檔案: 檔案号=00004 名稱=F:\APP\ORACLE\ORADATA\ORA11G\USERS01.DBF

通道 c1: 正在啟動段 1 于 2015-05-27 12:43:09

通道 c2: 正在啟動壓縮的全部資料檔案備份集

通道 c2: 正在指定備份集内的資料檔案

通道 c2: 正在啟動段 1 于 2015-05-27 12:43:10

通道 c1: 已完成段 1 于 2015-05-27 12:44:05

段句柄=E:\RMAN_BACKUP\DATAFILE_FULL_ORA11G_4275029574_1QQ803ET_1_1_20150527.BAK 标記=TAG20150527T124309 注釋=NONE

通道 c1: 備份集已完成, 經過時間:00:00:56

輸入資料檔案: 檔案号=00002 名稱=F:\APP\ORACLE\ORADATA\ORA11G\SYSAUX01.DBF

輸入資料檔案: 檔案号=00005 名稱=F:\APP\ORACLE\ORADATA\ORA11G\EXAMPLE01.DBF

輸入資料檔案: 檔案号=00003 名稱=F:\APP\ORACLE\ORADATA\ORA11G\UNDOTBS01.DBF

通道 c1: 正在啟動段 1 于 2015-05-27 12:44:05

通道 c2: 已完成段 1 于 2015-05-27 12:44:05

段句柄=F:\APP\ORACLE\FLASH_RECOVERY_AREA\ORA11G\BACKUPSET\2015_05_27\O1_MF_NNNDF_BK_DF_FULL_20150527_BPBLV0NV_.BKP 标記=BK_DF_FULL_20150527 注釋=NONE

通道 c2: 備份集已完成, 經過時間:00:00:55

通道 c2: 正在啟動段 1 于 2015-05-27 12:44:08

通道 c1: 已完成段 1 于 2015-05-27 12:44:34

段句柄=E:\RMAN_BACKUP\DATAFILE_FULL_ORA11G_4275029574_1SQ803GL_1_1_20150527.BAK 标記=TAG20150527T124309 注釋=NONE

通道 c1: 備份集已完成, 經過時間:00:00:29

通道 c2: 已完成段 1 于 2015-05-27 12:44:44

段句柄=F:\APP\ORACLE\FLASH_RECOVERY_AREA\ORA11G\BACKUPSET\2015_05_27\O1_MF_NNNDF_BK_DF_FULL_20150527_BPBLWWT7_.BKP 标記=BK_DF_FULL_20150527 注釋=NONE

通道 c2: 備份集已完成, 經過時間:00:00:36

完成 backup 于 2015-05-27 12:44:44

啟動 Control File and SPFILE Autobackup 于 2015-05-27 12:44:45

段 handle=E:\RMAN_BACKUP\CTLFILE_AUTOBACK_ORA11G_C-4275029574-20150527-05.BAK comment=NONE

完成 Control File and SPFILE Autobackup 于 2015-05-27 12:44:48

sql 語句: alter system archive log current

啟動 backup 于 2015-05-27 12:44:49

目前日志已存檔

通道 c1: 正在啟動歸檔日志備份集

通道 c1: 正在指定備份集内的歸檔日志

輸入歸檔日志線程=1 序列=14 RECID=9 STAMP=880807489

通道 c1: 正在啟動段 1 于 2015-05-27 12:44:49

通道 c2: 正在啟動歸檔日志備份集

通道 c2: 正在指定備份集内的歸檔日志

輸入歸檔日志線程=1 序列=15 RECID=10 STAMP=880807489

通道 c2: 正在啟動段 1 于 2015-05-27 12:44:49

通道 c1: 已完成段 1 于 2015-05-27 12:44:50

段句柄=E:\RMAN_BACKUP\ARCH_ORA11G_4275029574_14_1VQ803I1_1_1_20150527.BAK 标記=BK_ARC_20150527 注釋=NONE

通道 c1: 備份集已完成, 經過時間:00:00:01

通道 c1: 正在删除歸檔日志

歸檔日志檔案名=F:\APP\ORACLE\FLASH_RECOVERY_AREA\ORA11G\ARCHIVELOG\2015_05_27\O1_MF_1_14_BPBLY194_.ARC RECID=9 STAMP=880807489

通道 c2: 已完成段 1 于 2015-05-27 12:44:50

段句柄=E:\RMAN_BACKUP\ARCH_ORA11G_4275029574_15_20Q803I1_1_1_20150527.BAK 标記=BK_ARC_20150527 注釋=NONE

通道 c2: 備份集已完成, 經過時間:00:00:01

通道 c2: 正在删除歸檔日志

歸檔日志檔案名=F:\APP\ORACLE\FLASH_RECOVERY_AREA\ORA11G\ARCHIVELOG\2015_05_27\O1_MF_1_15_BPBLY1HZ_.ARC RECID=10 STAMP=880807489

完成 backup 于 2015-05-27 12:44:51

啟動 backup 于 2015-05-27 12:44:52

通道 c1: 正在啟動全部資料檔案備份集

備份集内包括目前控制檔案

通道 c1: 正在啟動段 1 于 2015-05-27 12:44:53

通道 c1: 已完成段 1 于 2015-05-27 12:44:54

段句柄=E:\RMAN_BACKUP\CTLFILE_ORA11G_4275029574_21Q803I4_1_1_20150527.BAK 标記=BK_CTLFILE_20150527 注釋=NONE

完成 backup 于 2015-05-27 12:44:54

啟動 backup 于 2015-05-27 12:44:54

備份集内包括目前的 SPFILE

通道 c1: 正在啟動段 1 于 2015-05-27 12:44:54

通道 c1: 已完成段 1 于 2015-05-27 12:44:55

段句柄=E:\RMAN_BACKUP\SPFILE_ORA11G_4275029574_22Q803I6_1_1_20150527.BAK 标記=BK_SPFILE_20150527 注釋=NONE

完成 backup 于 2015-05-27 12:44:55

啟動 Control File and SPFILE Autobackup 于 2015-05-27 12:44:55

段 handle=E:\RMAN_BACKUP\CTLFILE_AUTOBACK_ORA11G_C-4275029574-20150527-06.BAK comment=NONE

完成 Control File and SPFILE Autobackup 于 2015-05-27 12:44:59

釋放的通道: c1

釋放的通道: c2

RMAN 保留政策将應用于該指令

将 RMAN 保留政策設定為 14 天的恢複視窗

未找到已廢棄的備份

配置設定的通道: ORA_DISK_1

通道 ORA_DISK_1: SID=40 裝置類型=DISK

說明與資料檔案庫中的任何資料檔案副本都不比對

說明與資料檔案庫中的任何控制檔案副本都不比對

說明與資料檔案庫中的任何歸檔日志都不比對

釋放的通道: ORA_DISK_1

使用通道 ORA_DISK_1

交叉校驗備份片段: 找到為 'AVAILABLE'

備份片段句柄=E:\RMAN_BACKUP\DATAFILE_FULL_ORA11GXX_1GQ802IQ_1_1_20150527.BAK RECID=43 STAMP=880806490

備份片段句柄=F:\APP\ORACLE\FLASH_RECOVERY_AREA\ORA11G\BACKUPSET\2015_05_27\O1_MF_NNNDF_BK_DF_FULL_20150527_BPBKYWLF_.BKP RECID=44 STAMP=880806492

備份片段句柄=E:\RMAN_BACKUP\DATAFILE_FULL_ORA11GXX_1IQ802KI_1_1_20150527.BAK RECID=45 STAMP=880806547

備份片段句柄=F:\APP\ORACLE\FLASH_RECOVERY_AREA\ORA11G\BACKUPSET\2015_05_27\O1_MF_NNNDF_BK_DF_FULL_20150527_BPBL0T75_.BKP RECID=46 STAMP=880806551

備份片段句柄=E:\RMAN_BACKUP\CTLFILE_AUTOBACK_ORA11G_C-4275029574-20150527-03.BAK RECID=47 STAMP=880806585

備份片段句柄=E:\RMAN_BACKUP\ARCH_ORA11GXX_1LQ802LT_1_1_20150527.BAK RECID=48 STAMP=880806589

備份片段句柄=E:\RMAN_BACKUP\ARCH_ORA11GXX_1MQ802LT_1_1_20150527.BAK RECID=49 STAMP=880806589

備份片段句柄=E:\RMAN_BACKUP\CTLFILE_ORA11GXX_1NQ802LV_1_1_20150527.BAK RECID=50 STAMP=880806592

備份片段句柄=E:\RMAN_BACKUP\SPFILE_ORA11GXX_1OQ802M1_1_1_20150527.BAK RECID=51 STAMP=880806593

備份片段句柄=E:\RMAN_BACKUP\CTLFILE_AUTOBACK_ORA11G_C-4275029574-20150527-04.BAK RECID=52 STAMP=880806595

備份片段句柄=E:\RMAN_BACKUP\DATAFILE_FULL_ORA11G_4275029574_1QQ803ET_1_1_20150527.BAK RECID=53 STAMP=880807390

備份片段句柄=F:\APP\ORACLE\FLASH_RECOVERY_AREA\ORA11G\BACKUPSET\2015_05_27\O1_MF_NNNDF_BK_DF_FULL_20150527_BPBLV0NV_.BKP RECID=54 STAMP=880807392

備份片段句柄=E:\RMAN_BACKUP\DATAFILE_FULL_ORA11G_4275029574_1SQ803GL_1_1_20150527.BAK RECID=55 STAMP=880807446

備份片段句柄=F:\APP\ORACLE\FLASH_RECOVERY_AREA\ORA11G\BACKUPSET\2015_05_27\O1_MF_NNNDF_BK_DF_FULL_20150527_BPBLWWT7_.BKP RECID=56 STAMP=880807452

備份片段句柄=E:\RMAN_BACKUP\CTLFILE_AUTOBACK_ORA11G_C-4275029574-20150527-05.BAK RECID=57 STAMP=880807485

備份片段句柄=E:\RMAN_BACKUP\ARCH_ORA11G_4275029574_14_1VQ803I1_1_1_20150527.BAK RECID=58 STAMP=880807489

備份片段句柄=E:\RMAN_BACKUP\ARCH_ORA11G_4275029574_15_20Q803I1_1_1_20150527.BAK RECID=59 STAMP=880807489

備份片段句柄=E:\RMAN_BACKUP\CTLFILE_ORA11G_4275029574_21Q803I4_1_1_20150527.BAK RECID=60 STAMP=880807493

備份片段句柄=E:\RMAN_BACKUP\SPFILE_ORA11G_4275029574_22Q803I6_1_1_20150527.BAK RECID=61 STAMP=880807494

備份片段句柄=E:\RMAN_BACKUP\CTLFILE_AUTOBACK_ORA11G_C-4275029574-20150527-06.BAK RECID=62 STAMP=880807496

已交叉檢驗的 20 對象

說明與資料檔案庫中的任何備份都不比對

恢複管理器完成。

到此windows環境下的全備腳本已經處理完畢,至于linux環境的全備腳本的寫法稍微有點不同,但是不同的場景處理方式有很多種,比如,若資料庫比較大的話我們就應該采用增量備份了,是以應該學會靈活變通。

...........................................................................................................................................................................................

     本文轉自lhrbest 51CTO部落格,原文連結:http://blog.51cto.com/lhrbest/1655648,如需轉載請自行聯系原作者