こんにちは。山内です。
この前、Oracle12Cを開発用にPCへインストールしたのですが、インストールした翌日にPCを起動して開発を始めたところ、データベースに接続できない状態が発生いたしました。調査したところ、Oracle12Cのプラガブル・データベース(以下:PDB)は デフォルトではサーバーやPC起動時には自動で起動するようになっていないため、サーバーやPC起動時に手動で起動を行うか自動で起動するように設定が必要であることが判明しました。
同じようなことで困った人もいるかと思いますので、サーバーやPC起動時にPDBが自動で起動するように設定した方法を以下に記載いたします。
環境
- Oracle12.1.0.2
- Windows7
Oracle12.1.0.2とOSはWindowsを使用することを前提に説明を行います。
PDBについて
Oracle Database 12cで機能追加されたのが、「マルチテナント・アーキテクチャ」です。マルチテナント・アーキテクチャは、マルチテナント・コンテナ・データベース(以下:CDB)というデータベースに含まれる1つ以上のPDBによって構成されます。スキーマや表領域やデータなどがセットになったものがPDBです。アップグレードやパッチ適用はCDBに適用を行うことでCDBに複数のPDBを構成している場合は1度の適用のみで済むことや必要なPDBのみ起動することができるのでリソース使用量の削減が可能です。ただし、OSの再起動時にはPDBは自動的に起動する設定になっていないので自動起動設定を行うためには以下で説明する設定などが必要になります。Oracle12Cのバージョンによって設定方法が異なりますのでバージョンごとの設定方法を以下で説明いたします。
Oracle12.1.0.2での設定方法
Oracle12.1.0.2以降では以下の設定でサーバーやPC起動時にPDBを自動起動することが可能です。
1. sysdbaでsqlplusにログイン
sqlplus ユーザ名/PASS as sysdba;
2. 設定を行うPDBに接続先を変更
alter session set container = PDB名;
接続するPDBを変更します。
show con_name;
※show con_nameコマンドで接続先のPDBを確認することができます。
3.PDBを開く
alter pluggable database PDB名 open;
PDBを起動します。
4.PDBの自動起動設定
3の設定でPDBが起動されている状態で以下のコマンドを実行します。
alter pluggable database PDB名 save state;
上記の設定を行うことにより、サーバーやPCの起動時にPDBが起動されるようになります。
Oracle12.1.0.1での設定方法
Oracle12.1.0.1では自動起動する設定を行うことができないため、 以下の方法でサーバーやPCの起動時にタスクスケジューラーのトリガーをシステム起動時にバッチを実行することで対応を行いました。
1.PDBを起動するコマンドを作成
alter pluggable database PDB名 open; quit;
2.起動バッチ作成
1で作成したSQLを呼び出すバッチを作成します。
sqlplus ユーザ名/PASS as sysdba @c:\oracle\PDBOPEN.sql
3.タスクスケジューラーの設定
タスクスケジューラーから(2)で作成したバッチファイルをシステム起動時に開始する設定を行います。
※「操作」タブで新規タクスを作成します。
※トリガーの編集でバッチ起動の時間をシステム起動時間から遅らせることができる遅延時間を設定することができます。システムの起動時にPDBの起動を行うとOracleDBが起動していない状態でPDBの起動処理を実行してしまうことがあります。遅延時間に数分を設定することによりOracleDB起動後にPDBの起動処理を行うことができます。もし、上記の設定でPDBが起動しないときは遅延時間を調整してみてください。
まとめ
Oracle12Cで新しく登場したPDBですが、PCやサーバーの再起動時に自動で起動するためには、ご使用のバージョンによって今回説明させていただいた内容を参考にしていただければと思います。