データベース作成用スクリプト
-
データベース作成用スクリプト
データベース作成時に使用する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 データベースが作成されました。
各パラメータについて
-
データベース・キャラクタセット
-
NATIONAL CHARACTER SET
-
サイズ
データベースを作成する場合にキャラクタセットを指定しますが、11g XEのデフォルトのキャラクタセットはAL32UTF8になっていました。 シフトJISにする場合はJA16SJISを指定します。
ネットで調べるとUTF8を指定しているものが多く見つかりますが、 デフォルトではAL16UTF16になっていました。 どちらが良いのか分からなかったため、いろいろと調べてみました。すると以下のページが見つかりました。 これによるとOracle 11gのNATIONAL CHARACTER SET(各国語キャラクタ・セット)に使用できるUnicodeは、 UTF8とAL16UTF16ということなので、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を削除して、再インストールしました。。。