如何建立和使用呼叫包含替換變數的命令檔案的動態shell指令碼
- 建立使用替換變數的 RMAN 命令檔案: quarterly_backup.cmd
# quarterly_backup.cmd
CONNECT TARGET /
RUN
{
ALLOCATE CHANNEL c1
DEVICE TYPE sbt
PARMS 'ENV=(OB_MEDIA_FAMILY=&1)';
BACKUP DATABASE
TAG &2
FORMAT '/disk2/bck/&1%U.bck'
KEEP FOREVER
RESTORE POINT &3;
}
EXIT;
- 建立一個 shell 指令碼,可用於執行上一步中建立的 RMAN 命令檔案。
以下示例建立一個名為 的 shell 指令碼runbackup.sh。該示例為格式和還原點名稱建立 shell 變數,並接受這些變數的值作為指令碼的命令列引數。
#!/bin/tcsh
# name: runbackup.sh
# usage: use the tag name and number of copies as arguments
set media_family = $argv[1]
set format = $argv[2]
set restore_point = $argv[3]
rman @'/disk1/scripts/quarterly_backup.cmd' USING $media_family $format $restore_point
解析:
set 命令用於定義變數:
media_family:從指令碼的第一個引數獲取值。
format:從第二個引數獲取值。
restore_point:從第三個引數獲取值。
$argv 是一個特殊變數,用於儲存傳遞給指令碼的命令列引數。
RMAN命令:
@'/disk1/scripts/quarterly_backup.cmd':指定要執行的 RMAN 指令碼檔案路徑。
USING:後面的引數將被傳遞給 quarterly_backup.cmd 指令碼,通常在該指令碼中會引用這些引數。
- 執行建立的 shell 指令碼,並在命令列上指定所需的引數。
% runbackup.sh archival_backup bck0906 FY06Q3
檢查 RMAN 語法
參考:Oracle Database Backup and Recovery Reference
- 檢查命令列的語法
% rman CHECKSYNTAX
RMAN> run [ backup database; ]
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00558: error encountered while parsing input commands
RMAN-01006: error signaled during parse
RMAN-02001: unrecognized punctuation symbol "["
RMAN> run { backup database; }
The command has no syntax errors
RMAN>
- 檢查命令檔案的語法
建立語法正確一個檔案/tmp/goodcmdfile:
# command file with legal syntax
RESTORE DATABASE;
RECOVER DATABASE;