OracleDatabase12cで地道にDBインスタンスの作成

前回の記事でOracle Database 12cをインストールしました。 quotto.hatenablog.com

まだインストールしただけで、使えるDBインスタンスがありません。
ということで今回はDBインスタンスの作成手順をまとめます。

インスタンスを作る場合はDBCAで実施するのが主流だと思われますが、本記事ではCREATE DATABSE文を使ってゴリゴリ手作りしていきます!!

ちなみにDBCAでもレスポンスファイルを作り、サイレントに作成することができるためCUI環境しかなければそちらの方が簡単な気がします。

環境

  • CentOS release 6.5
  • OracleDatabase 12.1.0.2.0 EnterpriseEdition

なお本記事は公式の管理者ガイドからポイントをピックアップした内容です。
これに従っておけば問題ないはずです。
Oracle Databaseの作成および構成

インスタンス識別子を決める

OracleDBの中で一意の値となるように、インスタンス識別子(SID)を決めましょう。

決めたら環境変数ORACLE_SID」に設定します。

$ export ORACLE_SID=mydb

初期化パラメータファイル・サーバパラメータファイルの作成

Oracleではインスタンス起動時にバイナリ形式の「サーバパラメータファイル」(SPFILE)が優先的に利用されますが、インスタンス作成時は最初にテキスト編集可能な「初期化パラメータファイル」(PFILE)を作成しそれを基にSPFILEを生成します。

PFILEは「initORACLE_SID.ora」

レスポンスファイルの時と同様に、初期化パラメータファイルもインストール時にテンプレートが付いています。
$ORACLE_HOME/dbs/init.ora」がそれです。 このファイルをコピーします。

このとき名称は「initORACLE_SID.ora」となるようにしましょう。
例えばORACLE_SIDがmydbであれば「initmydb.ora」です。
この命名規則に従うことで、サーバパラメータファイル作成時にデフォルトでこのPFILEが使われます。

PFILEの編集内容

いくつか設定項目がありますが、公式ガイドで最低限設定が必要となっているのは次の3つです。

  • DB_NAME:CREATE DATABASE文で指定するデータベース識別子
  • CONTROL_FILES:制御ファイルのパス。未指定の場合初期化パラメータファイルと同じ場所に作成される。
  • MEMORY_TARGET:指定するとOracleが自動でメモリを管理してくれる。

私はこんな感じで修正しました。

db_name='mydb'
memory_target=536M
processes = 150
audit_file_dest='/opt/app/oracle/admin/mydb/adump'
audit_trail ='db'
db_block_size=8192
db_domain=''
db_recovery_file_dest='/opt/app/oracle/fast_recovery_area'
db_recovery_file_dest_size=2G
diagnostic_dest='/opt/app/oracle/diag'
dispatchers='(PROTOCOL=TCP) (SERVICE=ORCLXDB)'
open_cursors=300 
remote_login_passwordfile='EXCLUSIVE'
undo_tablespace='undotbs'
control_files = (ora_control1, ora_control2)
compatible ='12.1.0'

サーバパラメータファイルの作成

OSDBAユーザにて、SYSDBA権限でログインします。
その後「CREATE SPFILE」文で先ほど作った初期化パラメータファイルを基にサーバパラメータファイルを生成します。

$ su - oracle
$ sqlplsu / as sysdba

Connected to an idle instance.

SQL> CREATE SPFILE FROM PFILE;

File created.

これで初期化パラメータファイルと同じ場所にサーバパラメータファイルが作成されます。

$ ls -la $ORACLE_HOME/dbs
total 19132
drwxr-xr-x  2 oracle oinstall    4096 Aug 22 22:02 .
drwxr-xr-x 71 oracle oinstall    4096 Aug 12 23:05 ..
-rw-rw----  1 oracle oinstall    1544 Aug 20 01:34 hc_mydb.dat
-rw-r--r--  1 oracle oinstall    3004 Aug 15 22:04 initmydb.ora
-rw-r--r--  1 oracle oinstall    2992 Feb  3  2012 init.ora
-rw-r-----  1 oracle oinstall      24 Aug 12 23:04 lkMYDB
-rw-r-----  1 oracle oinstall 9781248 Aug 20 01:34 ora_control1
-rw-r-----  1 oracle oinstall 9781248 Aug 20 01:34 ora_control2
-rw-r-----  1 oracle oinstall    1536 Aug 20 22:02 spfilemydb.ora  #これ

デフォルトの名称は「spfileORACLE_SID.ora」となり、この命名規則によりインスタンス起動時に自動でこのサーバパラメータファイルが読み込まれます。

ちなみにサーバパラメータファイルの作成時には、「CREATE SPFILE='$ORACLE_HOME/spfilemydb.ora' FROM PFILE='$ORACLE_HOME/dbs/initmydb.ora'」のように明示的に入力・出力パスを指定することも可能です。

インスタンスの起動

インスタンスを起動します。
ただしDBはまだありませんので、NOMOUNTオプションを忘れずに。

SQL> STARTUP NOMOUNT
ORACLE instance started.

Total System Global Area  562036736 bytes
Fixed Size          2926760 bytes
Variable Size         465569624 bytes
Database Buffers       88080384 bytes
Redo Buffers            5459968 bytes

データベースの作成

いよいよメインです。

ディレクトリの作成

ログファイル、DBファイルを格納するためのディレクトリはあらかじめ作っておきます。

$ mkdir -p $ORACLE_HOME/oradata/mydb

CREATE DATABASE文の発行

詳細は省きます!!公式ガイドを思う存分参照してくれたまえ!

SQL>CREATE DATABASE mynewdb
   USER SYS IDENTIFIED BY sys_password
   USER SYSTEM IDENTIFIED BY system_password
   LOGFILE GROUP 1 ('/opt/app/oracle/product/12.1.0/dbhome_1/oradata/mydb/redo01.log') SIZE 100M,
           GROUP 2 ('/opt/app/oracle/product/12.1.0/dbhome_1/oradata/mydb/redo02.log') SIZE 100M,
           GROUP 3 ('/opt/app/oracle/product/12.1.0/dbhome_1/oradata/mydb/redo03.log') SIZE 100M
   MAXLOGHISTORY 1
   MAXLOGFILES 16
   MAXLOGMEMBERS 3
   MAXDATAFILES 1024
   CHARACTER SET AL32UTF8
   NATIONAL CHARACTER SET AL16UTF16
   EXTENT MANAGEMENT LOCAL
   DATAFILE '/opt/app/oracle/product/12.1.0/dbhome_1/oradata/mydb/system01.dbf'
     SIZE 700M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
   SYSAUX DATAFILE '/u01/app/oracle/oradata/mydb/sysaux01.dbf'
     SIZE 550M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
   DEFAULT TABLESPACE users
      DATAFILE '/opt/app/oracle/product/12.1.0/dbhome_1/oradata/mydb/users01.dbf'
      SIZE 500M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
   DEFAULT TEMPORARY TABLESPACE tempts1
      TEMPFILE '/opt/app/oracle/product/12.1.0/dbhome_1/oradata/mydb/temp01.dbf'
      SIZE 20M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED
   UNDO TABLESPACE undotbs1
      DATAFILE '/opt/app/oracle/product/12.1.0/dbhome_1/oradata/mydb/undotbs01.dbf'
      SIZE 200M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED
   USER_DATA TABLESPACE usertbs
      DATAFILE '/opt/app/oracle/product/12.1.0/dbhome_1/oradata/mydb/usertbs01.dbf'
      SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;

アプリケーション用の表領域作成

前述のCREATA DATABASEでは、インスタンスに必要となる表領域だけ作成しています。 アプリケーションように別途表領域の作成が必要です。

-- テーブル表領域
CREATE TABLESPACE apps_tbs LOGGING 
     DATAFILE '/opt/app/oracle/product/12.1.0/dbhome_1/oradata/mydb/apps01.dbf' 
     SIZE 500M REUSE AUTOEXTEND ON NEXT  1280K MAXSIZE UNLIMITED 
     EXTENT MANAGEMENT LOCAL;
-- インデックス表領域
CREATE TABLESPACE indx_tbs LOGGING 
     DATAFILE '/opt/app/oracle/product/12.1.0/dbhome_1/oradata/mydb/indx01.dbf' 
     SIZE 100M REUSE AUTOEXTEND ON NEXT  1280K MAXSIZE UNLIMITED 
     EXTENT MANAGEMENT LOCAL;

スクリプトの実行

この手順も忘れずに。

CREATE DATABASEを発行しただけではデータ・ディクショナリ、ビュー、シノニム、PL/SQLが使えません。
最後の仕上げにこれらを有効化するために3つのSQLスクリプトを実行します。

SQL>@$ORACLE_HOME/rdbms/admin/catalog.sql
SQL>@$ORACLE_HOME/rdbms/admin/catproc.sql
SQL>@$ORACLE_HOME/sqlplus/admin/pubbld.sql

スクリプトの実行はかなり時間がかかりましたのでご注意を。

これで完了

パラメータファイル作ったり、CREATE DATABASE文たくさん書いて、表領域作って、スクリプト実行してと色々とやらなければなりませんが、ひとつひとつは難しくはありません。

「いつもGUIでサクサクっとDB作っているよー」という方、裏で何が行われているのかを知る意味でも参考にしていただければ幸いです。

【オラクル認定資格試験対策書】ORACLE MASTER Bronze[12c SQL基礎](試験番号:1Z0-061)完全詳解+精選問題集(オラクルマスタースタディガイド)

【オラクル認定資格試験対策書】ORACLE MASTER Bronze[12c SQL基礎](試験番号:1Z0-061)完全詳解+精選問題集(オラクルマスタースタディガイド)