概要
Chefを利用してのOracle Data baseのサイレント・インストールを実施してみました。
-Chefを使ってOracle Databaseをサイレント・インストールしてみた
上記の投稿での記載しましたが、Oracle Databaseは導入した後にDatabase Configuration Assistant (DBCA)で構成を行う事でデータベースを利用する事が可能となります。
DBCAを使用したデータベースの作成
DBCAは対話型 (GUIによるウィザード形式)か、非対話型 (スクリプトによるバッチ形式)での実行が可能です。
対話型でのDBCAによる作業手順は、マニュアルの次の箇所にまとめられています。
一方で、非対話型 (サイレントモード) でのDBCAの使用方法は、次の場所に記載があります。
サイレント・モードでは、DBCAコマンドのパラメータとして、各種属性値を渡すか、レスポンスファイルとして事前に作成し、そのファイルをパラメータとして渡すかの実施方法があります。
実施は次のコマンドで実施します。
$ORACLE_HOME/bin/dbca -silent -responseFile /PATH/TO/DBCA-RESONSE-FILE.rsp
今回作成するRecipe
- DBCAで使用するレスポンスファイルを生成する
- DBCAをサイレント・モードで実行し、データベースを作成する
Recipe. DBCA用のレスポンスファイルの生成
以下の3種類のファイルを作成します。
- Recipe
- Template
- Attribute
レスポンスファイルを生成
テンプレートからレスポンスファイルを生成し、オーナー/グループ権限を設定します。
template node['database']['response_file_dbca'] do
source 'dbca_oracledb.rsp.erb'
owner node['database']['owner']
group node['database']['group']
mode '0644'
end
レスポンスファイルのひな型
インストールに最低限必要な属性値をパラメータ化しています。
パラメータ化している主な項目は以下のものです。
項目名 | 説明 |
---|---|
OPERATION_TYPE | 動作タイプ 以下の分類参照 |
- OPERATION_TYPE
コマンド | 説明 |
---|---|
createDatabase | データベースを作成 |
createTemplateFromDB | 既存のデータベースからデータベース・テンプレートを作成 |
createCloneTemplate | 既存のデータベースからクローン(シード)データベース・テンプレートを作成 |
deleteDatabase | データベースを削除 |
configureDatabase | データベースを構成 |
createPluggableDatabase | CDBにPDBを作成 |
unplugDatabase | CDBからPDBを切断 |
deletePluggableDatabase | PDBを削除 |
configurePluggableDatabase | PDBを構成 |
項目名 | 説明 |
---|---|
GDBNAME | グローバル・データベース名 database_name.domain_name形式 |
SID | データベース・システム識別子 |
CREATEASCONTAINERDATABASE | CDBの作成フラグ デフォルト:false (非CDB) |
NUMBEROFPDBS | 作成するPDBの数 デフォルト:0 |
PDBNAME | 各PDBの名前 NUMBEROFPDBSが1より大きい場合はそれぞれの名前に番号が付与 |
PDBADMINPASSWORD | PDBのローカル管理者のパスワード |
TEMPLATENAME | デフォルトの場所の既存のテンプレートの名前 |
SYSPASSWORD | 新しいデータベースのSYSユーザー・パスワード |
SYSTEMPASSWORD | 新しいデータベースのSYSTEMユーザー・パスワード |
CHARACTERSET | データベースのキャラクタ・セット |
NATIONALCHARACTERSET | データベースの各国語キャラクタ・セット |
以下、Templateファイルより抜粋
OPERATION_TYPE = "<%= node['database']['operation_type'] %>"
GDBNAME = "<%= node['database']['gdbname'] %>"
SID = "<%= node['database']['sid'] %>"
CREATEASCONTAINERDATABASE = <%= node['database']['create_as_container_database'] %>
NUMBEROFPDBS = <%= node['database']['number_of_pdbs'] %>
PDBNAME = <%= node['database']['pdbname'] %>
PDBADMINPASSWORD = "<%= node['database']['pdb_admin_password'] %>"
TEMPLATENAME = "<%= node['database']['template_name'] %>"
SYSPASSWORD = "<%= node['database']['sys_password'] %>"
SYSTEMPASSWORD = "<%= node['database']['system_password'] %>"
CHARACTERSET = "<%= node['database']['characterset'] %>"
NATIONALCHARACTERSET = "<%= node['database']['national_characterset'] %>"
デフォルト値の設定
パラメータ化している属性値のデフォルト値を設定します。
今回はパスワードは平文でハードコードしていますが、実際はData Bagを使用して暗号化するとよいです。
default['database']['operation_type'] = 'createDatabase'
default['database']['gdbname'] = 'orcl'
default['database']['sid'] = 'orcl'
default['database']['create_as_container_database'] = 'true'
default['database']['number_of_pdbs'] = '2'
default['database']['pdbname'] = 'pdb'
default['database']['pdb_admin_password'] = <平文パスワードのハードコード>
default['database']['template_name'] = 'General_Purpose.dbc'
default['database']['sys_password'] = <平文パスワードのハードコード>
default['database']['system_password'] = <平文パスワードのハードコード>
default['database']['characterset'] = 'AL32UTF8'
default['database']['national_characterset'] = 'AL16UTF16'
DBCAサイレント・モードによるデータベースの生成
executeリソースによりdbcaコマンドをインストール・ユーザ(この例ではoracle)で実行します。
execute "dbca oracle database" do
user node['database']['user']
group node['database']['group']
command "#{node['database']['oracle_home']}/bin/dbca -silent -responseFile #{node['database']['response_file_dbca']}"
not_if { Dir.exist?("#{node['database']['oracle_base']}/oradata") }
end
Chefの実行イメージ
まとめ
Chefを利用してOracle Databaseの基本的な構成を用意する事が自動で行えるようになりました。
このようなChefによる基本構成のCookbookがあれば、これをベースとした様々な構成を組む事も容易にできるようになります。
-
今回のレシピ:https://github.com/shinyay/chef-oracle-database/tree/publish_20160629
- Oracle Databaseをインストール&作成するためのCookbookです。