LoginSignup
0
0

More than 3 years have passed since last update.

表領域作成を簡略化するスクリプト

Last updated at Posted at 2020-05-20

目的

毎回create tablespace文を1から作るのは面倒なので、create tablespace文の可変部分のみを変数として指定するスクリプトを作成しました。
検証環境等で複数の表領域を作成するときに使用すると便利です。

create_tbs.sql

set ver off echo off feed off
create tablespace &1 datafile '&2' size &3;
exit

<置き換え変数の用途>
&1:表領域名
&2:データファイルのフルパスファイル名
&3:データファイルのサイズ以降の情報(サイズの指定以外は省略可)

実行例

[oracle@test ~]$ sqlplus -s / as sysdba @create_tbs.sql test $ORACLE_BASE/oradata/test/test.dbf '1m reuse autoextend on'
[oracle@test ~]$ 
[oracle@test ~]$ sqlplus -s  / as sysdba
select tablespace_name from dba_tablespaces;

TABLESPACE_NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS
TEST <==追加された
SMALL
BIG

8行が選択されました。

応用

シェルスクリプトの使用

シェルスクリプトを使用すれば、リストファイルに記載した表領域をまとめて作成することができます。

用意する資材

1.create_tbs.sh ・・・メインシェル。dbf.lstを読み込み、create_tbs.sqlとselect_tbs.sqlに引数として渡す。
2.create_tbs.sql・・・表領域作成SQL
3.select_tbs.sql・・・表領域作成状況の確認SQL
4.dbf.lst ・・・作成する表領域一覧

create_tbs.sh

#!/bin/bash

echo "表領域の作成を開始します。"
ERR_CNT=0

while read LINE
do
#各種変数
TBS=`echo $LINE | cut -d " " -f 1`
FILE=`echo $LINE | cut -d " " -f 2`

#既存データ重複判定
CNT1=`sqlplus -s / as sysdba @select_tbs.sql $TBS $FILE`
if [ $CNT1 -ge 1  ]; then
  echo -e "表領域名またはデータファイル名が重複しています。\n表領域:$TBS\nデータファイル:$FILE)"
  ERR_CNT=`expr $ERR_CNT + 1`
 else
  #表領域作成
  sqlplus -s / as sysdba @create_tbs.sql $LINE
  CNT2=`sqlplus -s / as sysdba @select_tbs.sql $TBS $FILE`

  #表領域作成後の状態判定
  if [ $CNT2 -eq 1 ]; then
    echo "表領域:$TBSを作成しました。(データファイル:$FILE)"
   else
    echo "表領域:$TBSの作成に失敗しました。(データファイル:$FILE)"
    ERR_CNT=`expr $ERR_CNT + 1`
  fi
fi
done < $1

#シェル自体の状態判定
if [ $ERR_CNT -eq 0 ] ;
then
  echo "すべての表領域が正常に作成されました。"
  exit_code=0
else
  echo "作成に失敗した表領域があります。"
  exit_code=1
fi

exit $exit_code

<実行方法>
./create_tbs.sh [リストファイル(dbf.lst)]

create_tbs.sql

(既出のため省略)

select_tbs.sql

set lines 100 pages 1000 echo off feed off ver off head off

select count(1) from dba_data_files where tablespace_name = lower('&1') or tablespace_name = upper('&&1') or file_name='&2';

exit

<実行方法>
select_tbs.sql [表領域名] [データファイルのフルパスファイル名]

dbf.lst

test1 /u01/app/oracle/oradata/test/test1.dbf '1m reuse'
test2 /u01/app/oracle/oradata/test/test2.dbf '1m reuse'
test3 /u01/app/oracle/oradata/test/test3.dbf '1m reuse'

<ファイルフォーマット>
[表領域名] [データファイルのフルパスファイル名] '[サイズ以降の項目(サイズは必須)]'

実行例

[oracle@test ~]$ . create_tbs.sh dbf.lst
表領域の作成を開始します。
表領域:test1を作成しました。(データファイル:/u01/app/oracle/oradata/test/test1.dbf)
表領域:test2を作成しました。(データファイル:/u01/app/oracle/oradata/test/test2.dbf)
表領域:test3を作成しました。(データファイル:/u01/app/oracle/oradata/test/test3.dbf)
すべての表領域が正常に作成されました。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0