Oracle Database 12cインストール
免責
先に謝っておきますが、Chefはかじった程度です。
今回はChefに重きを置いてないので、べた書きでChefっぽさはないです。
なんなら、シェルでもいいんじゃない?くらいです。
一応やった順に書いているつもりですが、途中であれこれやりながら書いているので、このままでは動かないかもしれません。
この手順でいかなる損害を被ったとしても筆者は責を負いません。
自己責任、自己解決でお願いします。
やること
- Chef Soloを使ってOracle12c環境の事前準備をする。
- Oracle12cをサイレントインストールする。
1. CentOSインストール
新規VMを作成。この時、OSは後からインストールするようにする。
VMWare Playerのウィザードみたいなのだと、minimalはうまく入らないみたい。
VM作成後に、CentOSのISOファイルを光学ドライブにアタッチしてVMを起動しインストール。
インストールはデフォルト。
swap領域は、今回のように4GBメモリを割り当てていると同じくらい取ってくれるけど、少なくする場合はOracleの要件を下回らないよう注意。
インストールしたら、とりあえずyumでパッケージを最新化しておく。
# yum -y update
これ以降の設定やパッケージ導入はChefを使ってやる。
基本的に、全部rootで作業する。
2. Chefのインストール
インストール
OpsCodeのインストール手順に倣ってChefを入れる。
# curl -L https://www.opscode.com/chef/install.sh | bash
Knife Soloも入れておく。
# /opt/chef/embedded/bin/gem install knife-solo --no-ri --no-rdoc
Chef Solo設定の作成
# mkdir /etc/chef
# vi /etc/chef/solo.rb file_cache_path "/tmp/chef-solo" # ファイルキャッシュのパス。適当に cookbook_path "/root/chef-repo/cookbooks" #クックブックを置くディレクトリ role_path "/root/chef-repos/roles" #ロールファイルを置くディレクトリ log_level :info
3.Oracle 12cインストールの準備
下記を参考にOracle 12cのインストール環境を整える。
http://www.oracle.com/technetwork/jp/database/enterprise-edition/documentation/db121linux-x64-ja-v10-1984264-ja.pdf
以降はChefリポジトリ(今回はchef-repo)に移動して作業。
Oracle 12c用のレシピを作成
# knife cookbook create oracle12c -o cookbooks
今回はfilesとrecipeディレクトリしか使わないので、他は消してしまってもよい。
「3.2.1 ソフトウェア要件」のパッケージ追加
パッケージをインストールするためにレシピに追記。
# vi cookbooks/oracle12c/recipes/default.rb # Install required packages pkgs = [ \ "binutils" \ , "compat-libcap1" \ , "compat-libstdc++-33" \ , "gcc" \ , "gcc-c++" \ , "glibc" \ , "glibc-devel" \ , "ksh" \ , "libgcc" \ , "libstdc++" \ , "libstdc++-devel" \ , "libaio" \ , "libaio-devel" \ , "libXext" \ , "libXtst" \ , "libX11" \ , "libXau" \ , "libxcb" \ , "libXi" \ , "make" \ , "sysstat" \ ] pkgs.each do |pkg| package pkg do action :install end end
レシピ実行ホスト情報を作成。
# vi nodes/localhost.json { "run_list" : [ "recipe[oracle12c]" ] }
Chef Soloの動作確認もかねて、ここらで一度動かしてみる。
無事にパッケージがインストールされたら、Chefも構成できているということで。
# chef-solo -j nodes/localhost.json
「3.2.2 カーネル・パラメータの設定」追加
カーネルパラメータは/etc/sysctl.confに書かれるので、デフォルトファイルをコピーして、必要事項を追加する。
# cp /etc/sysctl.conf cookbooks/oracle12c/files/default/
kernel.shmallとkernel.shmmaxはデフォルトで要件値より大きいのでそのままにしておく。
それ以外は要件値より小さいので変更。
下の3つは多分不要なので削除。(残してたら何かエラー出た)
net.bridge.bridge-nf-call-ip6tables = 0 net.bridge.bridge-nf-call-iptables = 0 net.bridge.bridge-nf-call-arptables = 0
# vi cookbooks/oracle12c/files/default/sysctl.conf (略) # Controls the maximum shared segment size, in bytes kernel.shmmax = 68719476736 # Controls the maximum number of shared memory segments, in pages kernel.shmall = 4294967296 ########################## # Oracle 12c Requirements. # Semaphore semmsl semmns semopm semmni kernel.sem = 250 32000 100 128 # Max file handles fs.file-max = 6815744 # Max asynchronous I/O fs.aio-max-nr = 1048576 # Local port range net.ipv4.ip_local_port_range = 9000 65500 # Socket buffer net.core.rmem_default = 262144 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 1048576
この設定反映をレシピに追加。
ファイル反映のcookbook_fileが実行されたら、notifiesで即時にexecute “sysctl-p”を実行して設定を有効化。
# vi cookbooks/oracle12c/recipes/default.rb # Configure kernel parameter cookbook_file "/etc/sysctl.conf" do mode 00644 notifies :run, "execute[sysctl-p]", :immediately end execute "sysctl-p" do command "/sbin/sysctl -p" action :nothing end
「3.3.1 OSグループの作成」に従ってOSグループを作成
Hashにしといてグルグル回して作成。
# vi cookbooks/oracle12c/recipes/default.rb # Create OS groups groups = { \ "oinstall" => "54321" \ , "dba" => "54322" \ , "backupdba" => "54323" \ , "oper" => "54324" \ , "dgdba" => "54325" \ , "kmdba" => "54326" \ } groups.each do |name, gid| group name do gid gid end end
「3.3.2 Oracle Database用OSユーザの作成」に従ってOSユーザを作成
サブグループの設定はuserリソースでできないので、ユーザ作成後にgourpのmodifyで設定。
# vi cookbooks/oracle12c/recipes/default.rb # Create OS user user "oracle" do uid 1200 gid "oinstall" supports :manage_home => true home "/home/oracle" end groups.each_key do |name| group name do members "oracle" action :modify end end
「3.3.3 インストールディレクトリの作成」に従ってディレクトリを作成
最下層だけ指定すると、「mkdir -p」っぽく作ってくれるけれど、上位には権限やオーナーが設定されないみたいなので、上から順に作成。
# vi cookbooks/oracle12c/recipes/default.rb # Create directory dirs = [ \ "/u01" \ , "/u01/app" \ , "/u01/app/oracle" \ ] dirs.each do |dir| directory dir do mode 00775 owner "oracle" group "oinstall" end end
「3.4.2 リソース制限の設定」に従って制限を追加
/etc/security/limits.d/91-oracle.confとしてファイルを作成することにする。
limits.d下のファイルは、数字の順に読まれるみたいなので、デフォルトの90-noproc.confより後に読まれるように、91-oracle.confとする。
ドキュメントにはないが、何かの時のためにcoreファイルは吐けるようにしておく。
# vi cookbooks/oracle12c/files/default/91-oracle.conf # oracle user ulimit oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 oracle soft stack 10240 oracle hard stack 32768 oracle soft core unlimited oracle hard core unlimited
# vi cookbooks/oracle12c/recipes/default.rb # Add ulimit cookbook_file "/etc/security/limits.d/91-oracle.conf" do mode 00644 end
「16.環境変数の設定」追加
デフォルトの.bash_profieに追記。
# vi cookbooks/oracle12c/files/default/.bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs # Oracle umask 022 export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1 export ORACLE_SID=orcl export PATH=$ORACLE_HOME/bin:$PATH export LANG=ja_JP.UTF-8 export NLS_LANG=Japanese_Japan.AL32UTF8
# vi cookbooks/oracle12c/recipes/default.rb # Add environment variables cookbook_file "/home/oracle/.bash_profile" do mode 00644 owner "oracle" group "oinstall" end
tmpfsの増加
メモリ4GBのうちOracleに2GBを割り当てようとしたが、デフォルトだとtmpfsが1.9GBしか取られておらずエラーに見舞われたので3GBまで増やす。
# cp /etc/fstab cookbooks/oracle12c/files/default/ # vi cookbooks/oracle12c/files/default/fstab (省略) tmpfs /dev/shm tmpfs defaults,size=3G 0 0 (省略)
増やしたらremountする。
# vi cookbooks/oracle12c/recipes/default.rb # Increase tmpfs size cookbook_file "/etc/fstab" do mode 00644 notifies :run, "execute[remount-tmpfs]" end execute "remount-tmpfs" do command "mount -o remount tmpfs" action :nothing end
その他ネットワーク設定や必要なパッケージのインストール
要件ではないけど必要なので入れておく。
- zip/unzip -- インストールモジュールの解凍
- ntp -- サーバの時刻同期
Oracleの要件とは別なのでcookbookを分ける。
# knife cookbook create common -o cookbooks
レシピを記載。
# vi cookbooks/common/recipes/default.rb # Network configuration cookbook_file "/etc/sysconfig/network-scripts/ifcfg-eth0" do mode 00644 end cookbook_file "/etc/resolv.conf" do mode 00644 end cookbook_file "/etc/hosts" do mode 00644 end pkgs = [ \ "zip" \ , "unzip" \ , "ntp" \ ] pkgs.each do |pkg| package pkg do action :install end end # Setup ntpd cookbook_file "/etc/ntp.conf" do mode 00644 notifies :restart, "service[ntpd]" end service "ntpd" do action [:enable, :start] end
NTP設定は参考まで。
tinker panic 0 driftfile /var/lib/ntp/drift restrict default kod nomodify notrap nopeer noquery restrict -6 default kod nomodify notrap nopeer noquery restrict 127.0.0.1 restrict -6 ::1 server ntp.nict.jp
nodesにレシピ適用を追加。
# vi nodes/localhost.json { "run_list" : [ "recipe[common]" , "recipe[oracle12c]" ] }
サイレントインストールの準備
サイレントインストールしたくない人のためにクックブックを分ける。
# knife cookbook create oracle12c-silent -o cookbooks
レスポンスファイル(サイレントインストールに使用)の配置。
書き方はGoogle先生を参考にどうぞ。
# vi cookbooks/oracle12c-silent/recipes/default.rb # Copy response file cookbook_file "/home/oracle/db_install.rsp" do mode 00644 owner "oracle" group "oinstall" end cookbook_file "/home/oracle/dbca.rsp" do mode 00644 owner "oracle" group "oinstall" end
localhost.jsonに追加して実行。
{ "run_list" : [ "recipe[common]" , "recipe[oracle12c]" , "recipe[oracle12c-silent]" ] }
# chef-solo -j nodes/localhost.json
これでインストール準備完了。
4.Oracle 12cのインストール
インストーラの実行
oracleユーザでインストーラを実行。
$ ./runInstaller -silent -responseFile ~/db_install.rsp
しばらくするとプロンプトが返ってくるけどそのまま放置。
「[WARNING] [INS-13001] 環境が、最低要件を満たしていません。」というのが出るが、特に問題ないようなので、インストールログをtailして観察。
$ tail -f /u01/app/oraInventory/logs/installActionsyyyy-mm-dd_HH-MM-SS.log … 情報: Exit Status is 0 情報: Shutdown Oracle Database 12cリリース1インストーラ
で正常終了したらOK。
インストール後作業
rootユーザで下記を実行するように指示されるので従う。
# /u01/app/oraInventory/orainstRoot.sh # /u01/app/oracle/product/12.1.0/dbhome_1/root.sh
oracleユーザで下記を実行するように指示されるので従う。
$ /u01/app/oracle/product/12.1.0/dbhome_1/cfgtoollogs/configToolAllCommands RESPONSE_FILE=./db_install.rsp
listener.oraが作成される模様。ポートが1521でなければ修正。
$ vi /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = centos64-12c)(PORT = 1521)) ) )
リスナーを停止させておく。
$ lsnrctl stop
DBCAでデータベースインスタンス作成
最初のインストールのレスポンスファイルにもSID等を書いているので、それで作成されるのかと思っていたけどされなかったのでDBCAで作成する。DBCAもレスポンスファイル。
$ dbca -silent -createDatabase -responseFile dbca.rsp
レスポンスファイルの不備と思うが、「PDBADMINユーザ・パスワードを入力してください」と出るのでパスワードを入力。
リスナーを起動。
$ lsnrctl start
「4.3.1 コンテナ・データベースとプラガブル・データベースの接続確認」
プラガブルデータベースが、READ WRITEになっていることを確認。
$ sqlplus system/Oracle12c@localhost:1521/orcl SQL> alter session set container=pdb1; セッションが変更されました。 SQL> show con_name CON_NAME ------------------------------ PDB1 SQL> select name, open_mode from v$pdbs; NAME OPEN_MODE ------------------------------ ---------- PDB1 READ WRITE
tnsnames.oraを作成
$ vi /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/tnsnames.ora ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = centos64-12c)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) ) pdb1 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = centos64-12c)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = pdb1) ) )
以上でOracle 12cに接続できるところまで完成。
今後の課題
- そもそも、プラガブルデータベースってなんやろ。
- 新機能とか試したいなぁ。
参考
Chefのレシピはやらレスポンスファイルやらは下記。
ただし、今後リファクタリングとかで変更される可能性あり、本文の内容とは一致しない可能性大。
https://github.com/nobrooklyn/chef-repo