Database OracleDB インフラ

ShellからRMANを実行し、Shell変数を引数渡しする方法

2018年4月30日

こんにちは!シミダイ(@shimidai2100)です。

RMANをバックアップコマンドをスクリプト化して、Shellから呼び出すことはあると思います。

その際にRMANスクリプトに引数として値を渡す方法を紹介します。

この方法を使用することで「RMANスクリプト1つだけ開発し、様々なDBに配布して使いまわす」ことができます。


サンプルのShellスクリプト

今回のサンプルスクリプトになります。

引数として渡す値は、「DBの接続ユーザ」、「パスワード」、「接続識別子」の3つになります。

Shell変数をRMANの引数に渡す時には、シングルクォーテーションで括った後に、さらにダブルクォーテーションで括る必要があります。

下の例をよく確認してみてください。

#!/bin/sh

# Logfile name
LOG_FILENAME=rman.log

# Set Oracle env
export ORACLE_SID="orcl"
export ORACLE_HOME="/u01/app/oracle/product/12.1.0/dbhome_1"
export USERNAME="SYS"
export PASSWORD="password"
export TNSNAME="ORCL"

# Start RMAN Script
${ORACLE_HOME}/bin/rman @"fullbackup.rman" USING \
                        "'${USERNAME}'" \
                        "'${PASSWORD}'" \
                        "'${TNSNAME}'" \ >> ${LOG_FILENAME} 2>&1

exit 0;

サンプルのRMANスクリプト

今回のRMANスクリプトになります。

  • &1」に接続DBユーザ
  • &2」にパスワード
  • &3」に接続識別子

が引数として渡されます。

connect target &1/&2@&3;

run {
  # Full backupset into spfile and archivelog
  backup incremental level 0 as backupset database
  spfile plus archivelog delete all input;
}

exit;

TIPS:引数を分かりやすくしておく

RMANでは&1、&2....と引数名を指定することが出来ず、番号で引数を管理するしかありません。

そんな時はRMANスクリプトのヘッダーに各引数が何が渡ってくるか書くことをオススメします。

# Arguments
# &1:USERNAME
# &2:PASSWORD
# &3:TNSNAME

# Connect
CONNECT TARGET &1/&2@&3;

~以下略~

関連記事

-Database, OracleDB, インフラ

Copyright© shimidai2100 , 2020 All Rights Reserved.