1. データベース作成用スクリプト
  2. 各パラメータについて
  3. トラブル
  4. 参考

    データベース作成用スクリプト

    • データベース作成用スクリプト

    • データベース作成時に使用するpfileに、以下のようなUNDO表領域の名前指定などがある場合、 データベース作成用スクリプトは、pfileの設定を考慮する必要があります。

      *.undo_tablespace='UNDOTBS1'
      今回使用するpfileはデフォルトのsfileから作成した以下になります。
      XE.__db_cache_size=117440512
      XE.__java_pool_size=4194304
      XE.__large_pool_size=4194304
      XE.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
      XE.__pga_aggregate_target=167772160
      XE.__sga_target=251658240
      XE.__shared_io_pool_size=0
      XE.__shared_pool_size=117440512
      XE.__streams_pool_size=0
      *.audit_file_dest='/u01/app/oracle/admin/XE/adump'
      *.compatible='11.2.0.0.0'
      *.control_files='/u01/app/oracle/oradata/XE/control.dbf'
      *.db_name='XE'
      *.DB_RECOVERY_FILE_DEST='/u01/app/oracle/fast_recovery_area'
      *.DB_RECOVERY_FILE_DEST_SIZE=10G
      *.diagnostic_dest='/u01/app/oracle'
      *.dispatchers='(PROTOCOL=TCP) (SERVICE=XEXDB)'
      *.job_queue_processes=4
      *.memory_target=417333248
      *.open_cursors=300
      *.remote_login_passwordfile='EXCLUSIVE'
      *.sessions=20
      *.shared_servers=4
      *.undo_management='AUTO'
      *.undo_tablespace='UNDOTBS1'

      このpfileと以下のページを参考にデータベース作成用スクリプトを作成します。

      上記ページのサンプル(以下)を修正してシフトJISのデータベースを作成してみました。
      CREATE DATABASE mynewdb
         USER SYS IDENTIFIED BY sys_password
         USER SYSTEM IDENTIFIED BY system_password
         LOGFILE GROUP 1 ('/u01/logs/my/redo01a.log','/u02/logs/my/redo01b.log') SIZE 100M BLOCKSIZE 512,
                 GROUP 2 ('/u01/logs/my/redo02a.log','/u02/logs/my/redo02b.log') SIZE 100M BLOCKSIZE 512,
                 GROUP 3 ('/u01/logs/my/redo03a.log','/u02/logs/my/redo03b.log') SIZE 100M BLOCKSIZE 512
         MAXLOGFILES 5
         MAXLOGMEMBERS 5
         MAXLOGHISTORY 1
         MAXDATAFILES 100
         CHARACTER SET AL32UTF8
         NATIONAL CHARACTER SET AL16UTF16
         EXTENT MANAGEMENT LOCAL
         DATAFILE '/u01/app/oracle/oradata/mynewdb/system01.dbf' SIZE 325M REUSE
         SYSAUX DATAFILE '/u01/app/oracle/oradata/mynewdb/sysaux01.dbf' SIZE 325M REUSE
         DEFAULT TABLESPACE users
            DATAFILE '/u01/app/oracle/oradata/mynewdb/users01.dbf'
            SIZE 500M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
         DEFAULT TEMPORARY TABLESPACE tempts1
            TEMPFILE '/u01/app/oracle/oradata/mynewdb/temp01.dbf'
            SIZE 20M REUSE
         UNDO TABLESPACE undotbs
            DATAFILE '/u01/app/oracle/oradata/mynewdb/undotbs01.dbf'
            SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;

      シフトJISに修正したものが以下になります。キャラクタセット以外にもpfileの設定に合わせてファイル名や、 サイズ指定の部分を変更しています。

      CREATE DATABASE XE
         LOGFILE GROUP 1 ('/u01/app/oracle/oradata/XE/redo01a.log') SIZE 100M BLOCKSIZE 512,
                 GROUP 2 ('/u01/app/oracle/oradata/XE/redo02a.log') SIZE 100M BLOCKSIZE 512,
                 GROUP 3 ('/u01/app/oracle/oradata/XE/redo03a.log') SIZE 100M BLOCKSIZE 512
         MAXLOGFILES 5
         MAXLOGMEMBERS 5
         MAXLOGHISTORY 1
         MAXDATAFILES 100
         CHARACTER SET JA16SJIS
         NATIONAL CHARACTER SET UTF8
         EXTENT MANAGEMENT LOCAL
         DATAFILE '/u01/app/oracle/oradata/XE/system01.dbf'
            SIZE 325M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
         SYSAUX DATAFILE '/u01/app/oracle/oradata/XE/sysaux01.dbf'
            SIZE 325M REUSE  AUTOEXTEND ON MAXSIZE UNLIMITED
         DEFAULT TABLESPACE users
            DATAFILE '/u01/app/oracle/oradata/XE/users01.dbf'
            SIZE 500M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
         DEFAULT TEMPORARY TABLESPACE temp
            TEMPFILE '/u01/app/oracle/oradata/XE/temp01.dbf'
            SIZE 20M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
         UNDO TABLESPACE undotbs1
            DATAFILE '/u01/app/oracle/oradata/XE/undo01.dbf'
            SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;

      実行するとデータベースが作成されます。

      SQL> @createdb.sql
      
      データベースが作成されました。

    各パラメータについて

    • データベース・キャラクタセット

    • データベースを作成する場合にキャラクタセットを指定しますが、11g XEのデフォルトのキャラクタセットはAL32UTF8になっていました。 シフトJISにする場合はJA16SJISを指定します。

    • NATIONAL CHARACTER SET

    • ネットで調べるとUTF8を指定しているものが多く見つかりますが、 デフォルトではAL16UTF16になっていました。 どちらが良いのか分からなかったため、いろいろと調べてみました。すると以下のページが見つかりました。 これによるとOracle 11gのNATIONAL CHARACTER SET(各国語キャラクタ・セット)に使用できるUnicodeは、 UTF8AL16UTF16ということなので、UTF8のままにしておきました。

    • サイズ

    • SYSTEM表領域(DATAFILE)、SYSAUX表領域(SYSAUX DATAFILE)、デフォルト永続表領域(DEFAULT TABLESPACE)、 デフォルト一時表領域(DEFAULT TEMPORARY TABLESPACE)、UNDO表領域(UNDO TABLESPACE)の サイズはサンプルと同じにしましたが、レコードが少ない簡単なテスト用では、もっと小さくした方が良いかもしれません。

      サンプルから作成したデータベース作成用スクリプトでデータベースを作成すると、 以下のようにファイルが作成されていました。

      # ls -alh /u01/app/oracle/oradata/XE
      合計 1.7G
      drwxr-xr-x 2 oracle dba 4.0K  9月  8 13:09 2014 .
      drwxr-x--- 3 oracle dba 4.0K  9月  8 12:50 2014 ..
      -rw-r----- 1 oracle dba 9.1M  9月 20 06:13 2014 control.dbf
      -rw-r----- 1 oracle dba 101M  9月 20 06:12 2014 redo01a.log
      -rw-r----- 1 oracle dba 101M  9月 19 23:29 2014 redo02a.log
      -rw-r----- 1 oracle dba 101M  9月 19 23:29 2014 redo03a.log
      -rw-r----- 1 oracle dba 326M  9月 20 06:00 2014 sysaux01.dbf
      -rw-r----- 1 oracle dba 326M  9月 20 06:10 2014 system01.dbf
      -rw-r----- 1 oracle dba  21M  9月 20 06:00 2014 temp01.dbf
      -rw-r----- 1 oracle dba 201M  9月 20 06:10 2014 undo01.dbf
      -rw-r----- 1 oracle dba 501M  9月 19 23:29 2014 users01.dbf
      サイズが比較的大きいSYSAUX表領域(sysaux01.dbf)、SYSTEM表領域(system01.dbf)、デフォルト永続表領域( users01.dbf)などの 値を小さくするのが良さそうです。

      ネットで調べると、以下のような例がありました。

      • REDOログ(redo01a.log, redo02a.log, redo03a.log): 32M
      • SYSAUX表領域(sysaux01.dbf): 48M
      • SYSTEM表領域(system01.dbf): 240M
      • デフォルト一時表領域(temp01.dbf): 8M
      • UNDO表領域(undo01.dbf): 48M

      参考

      これらを参考にしてサイズを小さくしたスクリプト(createdb.sql)を作成してみました。

      CREATE DATABASE XE
         LOGFILE GROUP 1 ('/u01/app/oracle/oradata/XE/redo01a.log') SIZE 32M BLOCKSIZE 512,
                 GROUP 2 ('/u01/app/oracle/oradata/XE/redo02a.log') SIZE 32M BLOCKSIZE 512,
                 GROUP 3 ('/u01/app/oracle/oradata/XE/redo03a.log') SIZE 32M BLOCKSIZE 512
         MAXLOGFILES 5
         MAXLOGMEMBERS 5
         MAXLOGHISTORY 1
         MAXDATAFILES 100
         CHARACTER SET JA16SJIS
         NATIONAL CHARACTER SET UTF8
         EXTENT MANAGEMENT LOCAL
         DATAFILE '/u01/app/oracle/oradata/XE/system01.dbf'
            SIZE 240M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
         SYSAUX DATAFILE '/u01/app/oracle/oradata/XE/sysaux01.dbf'
            SIZE 48M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
         DEFAULT TABLESPACE users
            DATAFILE '/u01/app/oracle/oradata/XE/users01.dbf'
            SIZE 250M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
         DEFAULT TEMPORARY TABLESPACE temp
            TEMPFILE '/u01/app/oracle/oradata/XE/temp01.dbf'
            SIZE 20M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
         UNDO TABLESPACE undotbs1
            DATAFILE '/u01/app/oracle/oradata/XE/undo01.dbf'
            SIZE 48M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;

    トラブル

    • UNDO表領域の名前間違い

    • pfileでUNDO表領域の名前が以下のようになっていましたが、データベース作成用スクリプトの名前がこれと違っていたため データベース作成でエラーが発生し、復旧できなくなりました。 結局どうにもならなかったので、Oracleをrpmで削除、インストールして復旧しました。

      *.undo_tablespace='UNDOTBS1'

      間違ったスクリプトを実行してデータベースを作成しようとした場合

      SQL> @createdb.sql
      CREATE DATABASE XE
      *
      行1でエラーが発生しました。:
      ORA-01092: ORACLE instance terminated. Disconnection forced
      ORA-01501: CREATE DATABASE failed
      ORA-01519: error while processing file '?/rdbms/admin/dtxnspc.bsq' near line 5
      ORA-00604: error occurred at recursive SQL level 1
      ORA-30012: undo tablespace 'UNDOTBS1' does not exist or of wrong type
      プロセスID: 1734
      セッションID: 1、シリアル番号: 7
      
      
      SQL>

      作成したデータベース作成用スクリプトcreatedb.sqlで、エラーになった部分

      ・・・
         UNDO TABLESPACE undotbs    # この名前をpfileのundo_tablespaceと同じ"UNDOTBS1"にするのが正解
            DATAFILE '/u01/app/oracle/oradata/XE/undotbs01.dbf'
      ・・・

      上記の名前を修正してスクリプトを実行しましたが、エラーになりました。 また、データベースを削除しようとしてもエラーになりました。

      SQL> shutdown immediate
      ORA-01507: データベースがマウントされていません。
      
      
      ORACLEインスタンスがシャットダウンされました。
      SQL> startup restrict mount
      ORACLEインスタンスが起動しました。
      
      Total System Global Area  417546240 bytes
      Fixed Size                  2227080 bytes
      Variable Size             293602424 bytes
      Database Buffers          117440512 bytes
      Redo Buffers                4276224 bytes
      ORA-01079: Oracle??????????????????????????????

      いろいろ試してみましたが解決方法が見つからなかったので、Oracleを削除して、再インストールしました。。。

    参考