Oracle11gXEをインストールすると、自動的にXEというインスタンスでデータベースが作成されるが、 独自にインスタンスを作成することも可能のよう。ただしOracleから保障はされていないので自己責任で。
Oracle11gXEのインストール後、以下の手順で作成可能。勉強も兼ねているので不明点もあり…(わかり次第修正)。 ちなみに自分の環境はWindows(Vista Ultimate 32bit)。 (Windows7 Ultimate 64bitでも確認済み)
■1.インスタンスのwindowsサービスの作成
まずインスタンス名を自分で決める(ORACLE_SIDというやつ)。サンプルで「orcl」にしてみる(ちなみに最大12文字までだが、一般的にはデータベース名と同じにするのを推奨しているらしい。データベース名は最大8文字までと決まりがあるので、それに合わせるとなると、8文字までが理想のよう)。
次に、そのインスタンスのWindowsサービスを作成。WindowsではインスタンスのWindowsサービスが起動されていないと、データベースのインスタンス起動ができない為。
インスタンスのサービスを作成するにはoradim.exeを使用。
コマンドプロンプトを起動後、以下を実行。
>oradim -NEW -SID orcl
今はひとまず最低限の引数で実行。後でサービスをOS起動時auto設定にしたいなどの場合は、このサービスを消去して作り直す。
なお、oradim.exeに管理者権限をつけないと、うまく実行できないので注意。面倒なときはコマンドプロンプトを起動する時、右クリックで「管理者として実行」を選べば勝手に管理者としてoradim.exeを起動してくれる。
(ちなみにoradim.exeの場所は、C:\oraclexe\app\oracle\product\11.2.0\server\bin)
サービス作成直後、サービスは起動中になる。ひとまずこの状態のままにしておく。
■2.adumpとdpdumpフォルダの作成
標準で持っているXEインスタンスは、C:\oraclexe\app\oracle\admin\XE 直下にadump,dpdumpフォルダが作成されているので、新しく作るインスタンスも似たようなフォルダ構成で作ってみる。
(ちなみにadumpはaudit_file_dest用、dpdumpはdata pump用のフォルダ。10gだとudump,bdump,cdumpとかあったけど、11gだとdiagに纏められ自動的に管理されるので意識しない)
C:\oraclexe\app\oracle\admin直下に、orcl\adump, orcl\dpdumpというフォルダを作成。
■3.DBF(データベースファイル)置き場の作成
標準で持っているXEインスタンスのDBFファイルは、C:\oraclexe\app\oracle\oradata\XE 直下に配置されるので、新しく作るインスタンスも似たようなフォルダ構成で作ってみる。
C:\oraclexe\app\oracle\oradata直下に、orcl というフォルダを作成。
■4.initファイル(パラメータファイル)の作成
標準で持っているXEインスタンスの場合、initファイルはC:\oraclexe\app\oracle\product\11.2.0\server\databaseに置かれており、インスタンス起動した時にまずこの場所を覗きにいくよう。(ただし、initXE.oraの中身を覗くと、さらにdbsフォルダを見にいくように転送パスが書かれているので、実際はC:\oraclexe\app\oracle\product\11.2.0\server\dbsまで見に行ってるが、転送パスまで真似するのが面倒なので無視)。
ということで、新しいインスタンスのinitファイルもこの場所に配置。
initファイル名は、init<インスタンス名>.oraで作成。(今ならinitorcl.ora)
肝心のinitファイルの中身については、XEのパラメータファイル(PFILE)をカスタマイズするのが楽。しかしXEはインスタンス起動には最初からサーバーパラメータファイル(SPFILE)を参照するようになっているので、事前にSPFILEからPFILEへ変換してみた。
以下がXEのPFILE。
xe.__db_cache_size=331350016
xe.__java_pool_size=4194304
xe.__large_pool_size=8388608
xe.__oracle_base='C:\oraclexe\app\oracle'#ORACLE_BASE set from environment
xe.__pga_aggregate_target=432013312
xe.__sga_target=641728512
xe.__shared_io_pool_size=109051904
xe.__shared_pool_size=180355072
xe.__streams_pool_size=0
*.audit_file_dest='C:\oraclexe\app\oracle\admin\XE\adump'
*.compatible='11.2.0.0.0'
*.control_files='C:\oraclexe\app\oracle\oradata\XE\control.dbf'
*.db_name='XE'
*.DB_RECOVERY_FILE_DEST_SIZE=10G
*.DB_RECOVERY_FILE_DEST='C:\oraclexe\app\oracle\fast_recovery_area'
*.diagnostic_dest='C:\oraclexe\app\oracle\.'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=XEXDB)'
*.job_queue_processes=4
*.memory_target=1024M
*.open_cursors=300
*.remote_login_passwordfile='EXCLUSIVE'
*.sessions=20
*.shared_servers=4
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
上記をコピペして作成。
ここで最低限変更しなくてはならないのは、以下ぐらい?
【db_name】
後述で作成するデータベースと同じ名前にする。インスタンス名と同じにすることを推奨されているのでXE→orclにする。また、service_names(インスタンスを特定するパラメータ)をPFILEに明確に指定してやらない場合は、db_nameから自動的に引用される。
【audit_file】
XE→orcl に変更
【control_files】
XE→orcl に変更
多重化がいいんだろうけど。ところで拡張子ってctlじゃなくてdbfなのかい…?
【dispatchers】
XEXDB→ORCLXDB orclに変更 共有サーバー云々の前に、特に意識して変えなくても…。 service_namesに合わせる必要がある。上記だとパラメータで指定していない為(=db_nameから引用される為)、db_nameと同じorclに合わせる必要がある。もしくは (SERVICE=XEXDB)の部分を消去するでも良い(その場合はtnsnames.oraで指定したservice_nameを元に一致するservice_namesを探してくれるから)。
もっとも共有サーバーで使用しない場合、特に意識して変える必要は無い。 1~9行目のxeはorclに直しても直さなくてもよさげな感じだった。
1~9行目はXEインスタンスがその時点(create pfileする時点)で使用しているメモリ使用状況をオラクル側が動的に反映したもの(select component,current_size from v$memory_dynamic_componentsで取得されるcurrent_size値)だそう。インスタンス作成に影響を与えない値なので、消去してしまって構わない。
■5.インスタンスの起動
インスタンスを起動。(ちなみに事前にインスタンスのWindowsサービスを起動してなくてはならないが、今はサービスを作成した直後で起動中だと思うので、割愛)
コマンドプロンプトを起動。
ORACLE_SIDを実行したいインスタンス名に変更。今の場合ならインスタンス名がorclなので以下を実行。
>set ORACLE_SID=orcl
また、制御ファイルを読み込まない状態だとエラーメッセージが文字化けするので、一時的に文字コードはローカルPCの環境変数を優先して見るようNLS_LANGを設定。
>set NLS_LANG=AMERICAN_AMERICA.JA16SJIS
sqlplusを管理者権限で実行。
>sqlplus / as sysdba
次に、nomount状態でデータベースを起動。
SQL>startup nomount
■6.データベースの作成
無事にnomount状態に持っていけたら、次はデータベースを作成。
とりあえず下記にサンプルをつけてみる。最低限の表領域(SYSTEM、SYSAUX、UNDO、TEMP)とREDOログを生成。
データベース名はinitファイルのdb_nameと合わす。
あとはフォルダ名に気をつけて自由にカスタマイズ。(下のサンプルはcharacterをSJISにしている)
SQL>create database orcl
logfile
group 1 ('C:\oraclexe\app\oracle\oradata\orcl\redo1.log') size 32M,
group 2 ('C:\oraclexe\app\oracle\oradata\orcl\redo2.log') size 32M,
group 3 ('C:\oraclexe\app\oracle\oradata\orcl\redo3.log') size 32M
character set JA16SJIS
national character set utf8
datafile 'C:\oraclexe\app\oracle\oradata\orcl\system.dbf'
size 240M autoextend on
next 16M maxsize unlimited
extent management local
sysaux datafile 'C:\oraclexe\app\oracle\oradata\orcl\sysaux.dbf'
size 48M autoextend on
next 8M maxsize unlimited
undo tablespace undotbs1
datafile 'C:\oraclexe\app\oracle\oradata\orcl\undotbs1.dbf'
size 48M autoextend on
default temporary tablespace temp
tempfile 'C:\oraclexe\app\oracle\oradata\orcl\temp.dbf'
size 8M autoextend on;
なお、DB作成直後は自動的にDBのステータスがopenになる模様。(select status from v$instanceで確認する限り) openの状態のままで、以下のsqlを流して、DBの管理用テーブル(ディクショナリ等)・プロシージャを作成。
SQL>@C:\oraclexe\app\oracle\product\11.2.0\server\rdbms\admin\catalog.sql
SQL>@C:\oraclexe\app\oracle\product\11.2.0\server\rdbms\admin\catblock.sql
SQL>@C:\oraclexe\app\oracle\product\11.2.0\server\rdbms\admin\catproc.sql
SQL>@C:\oraclexe\app\oracle\product\11.2.0\server\rdbms\admin\catoctk.sql
正常に実行されてるかどうか確認したい場合は実行前にspoolをおススメ。が、結局諸所でエラーが発生してしまう。おそらく正規版ではないので使用不可な機能に関するオブジェクトでのエラーだと思う…(多分)、とりあえず無視。
ちなみに3番目のSQLが結構実行時間が長い。CPUも食うので私の環境ではファンがうなる(~-~;;)。
正規版のdbca(Database configuation assistant)では、この後OracleWorkspaceManager(表のバージョン管理機能)の為にowminst.plbというSQLを流すようだが、このSQLはインストールされていないので無視。
上記実行後、systemユーザに接続して以下のSQLを実行。
SQL>conn system/manager
SQL>@C:\oraclexe\app\oracle\product\11.2.0\server\sqlplus\admin\pupbld.sql
SQL>@C:\oraclexe\app\oracle\product\11.2.0\server\sqlplus\admin\help\hlpbld.sql helpus.sql
1番目のSQLはsqlplusを使用する際に実行必要と言われるらしいが、いまいち良くわからず。 SQLPLUS_PRODUCT_PROFILEテーブル(製品ユーザープロファイル情報)を作成するSQL。このテーブルに書かれたユーザは一部のSQL文、ロール付与等ができなくなるらしい(要はsqlplusレベルでセキュリティを行うイメージ)。このテーブルが無いと「製品ユーザープロファイル情報がロードされてない」というエラーが出ることがあるため、作成するようだ。
2番目のSQLはsqlplusのコマンドライン・ヘルプをロードするために実行しておくSQL。
■7.サーバーパラメータ(SPFILE)の作成
ここまでできたら、今のパラメータファイル(initファイル)をサーバーパラメータファイルに写す。 再びsysユーザに接続してから実行。
SQL>conn sys/change_on_install as sysdba;
SQL>create spfile from pfile;
C:\oraclexe\app\oracle\product\11.2.0\server\database直下にSPFILE<インスタンス名>.oraが作成される。
次回からはインスタンス起動時に初期化パラメータはSPFILE<インスタンス名>.oraを優先して読み込む。
■8.パスワードファイルの作成
sysdba権限用パスワードの作成。
orapwd.exeコマンドで作成。(oradimと同様、管理者権限で実行するので注意)
DB接続している場合は、一旦sqlplusをexitして以下を実行。
SQL>exit
>orapwd file=PWD<インスタンス名>.ora entries=10
パスワードファイルはPWD<インスタンス名>.ora が標準のファイル名のようで、このファイル名を見てパスワードを確認しているよう。(v$pwfile_usersで見る限り)
entriesはsysdbaとして接続できる人数を入力。
上記実行後、入力パスワードを聞いてくるので任意のパスワードを入力。
パスワードファイルはorapwdコマンドを実行した時の階層に作成されるので、このファイルをC:\oraclexe\app\oracle\product\11.2.0\server\database直下に配置
■9.静的リスナーサービスへの追加
静的リスナー(SID_LIST_LISTENER)に、新しく作成したインスタンスを追加(ちなみにリスナーサービス自体はXEインストールした時のリスナーサービスを使いまわす)。この追加をしてリスナー起動していると、DBクローズされていてもリモート経由でアイドルインスタンスに接続できる(つまりリモートでデータベースの「起動」が行える)。
DB接続している場合は一旦DBをexitして、リスナーを停止。
SQL>exit
>lsnrctl stop
listener.ora(場所はC:\oraclexe\app\oracle\product\11.2.0\server\network\ADMIN)を開き、
SID_LIST句に以下を追加
(SID_LIST =
(SID_DESC =
(SID_NAME = orcl)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
(SERVICE_NAME = orcl)
)
リスナーを起動。
>lsnrctl start
ちなみにリスナーを起動したまま上記設定を追加して、lsnrctlでreloadコマンド(lisner.oraの再読込)を実行しても良い。
■10.インスタンスサービス起動・停止バッチの作成
インスタンスのサービス、リスナー起動・停止等を行うバッチを作成。
全て手動で行いたい場合には必要ないバッチ。
XEをインストールした時に付属しているサービス起動・停止用バッチがあるが、それをコピペして使う。
(元ネタ起動バッチ:C:\oraclexe\app\oracle\product\11.2.0\server\bin\StartDB.bat
停止バッチ:C:\oraclexe\app\oracle\product\11.2.0\server\bin\StopDB.bat)
起動バッチファイルを作成。適当にoracle_service_startorcl.batと言うファイル名にしてみる。
中身は以下の通り
@echo off
net start OracleXETNSListener 2>nul
net start OracleServiceorcl 2>nul
@oradim -startup -sid orcl -starttype inst > nul 2>&1
2行目はリスナーのサービス起動だが、lsnrctlコマンドからでも行える。
4行目はDB起動を行うコマンド。省いた場合はsqlplusでアイドルインスタンス接続してから、startupコマンドでDB起動するでもOK。
停止バッチファイルを作成。適当にoracle_service_stoporcl.batと言うファイル名にしてみる。
中身は以下の通り
net stop OracleServiceorcl
net stop OracleXETNSListener
2行目はStopDB.batには無いが、リスナー停止を付け加えてみた。lsnrctlコマンドでも行える。
■11.表領域の作成
ユーザーが使用する為の基本的な表領域が無いので、作成。
サンプルでusersという一般的なローカル管理の表領域を作成。
SQL>create tablespace users
datafile 'C:\oraclexe\app\oracle\oradata\orcl\user.dbf'size 300M autoextend on maxsize 1024M
extent management local
segment space management auto;
■12.ユーザーの作成
汎用的にDB接続する一般的なユーザーを作成。
サンプルでtestというスキーマを作成。(パスワードはtest)
11.で作成した表領域を最大限使用可能で、ごく最小の権限を持つユーザ。
SQL>create user test identified by test
default tablespace users
temporary tablespace temp
quota unlimited on users;
SQL>grant connect,resource to test;
いちおう基礎的な作成はこの辺りぐらい?
ちなみにXEは、データベースをGUIで管理する(OEMとは異なる)独自のツールを持っているが、こちらについてもOracle Application Expressをインストールすることで使えるよう。手順が複雑そうなので整理出来たら載せてみたいところ…。
■補足(expdb, impdp)
上記でデータベースを作成した場合、data pump機能(expdp,impdp)が使用不可能だが(メタデータ処理が出来ない旨のエラーが出る)、下記を実行してやると可能になる。
・正規版の11gR2でインストールされる$ORACEL_HOME\rdbms\xml\xslフォルダを丸ごとコピーして、C:\oraclexe\app\oracle\product\11.2.0\server\rdbms\xml直下に置く。
・kupostdt.xslというxmlファイルを作成し、上記xslフォルダに置く(合計180ファイルになる)
kupostdt.xslファイルの中身については…ネットで探す(というか、某オラクル掲示板に載ってた…)。 このあたりを参照に…(https://forums.oracle.com/forums/thread.jspa?messageID=9958876)
・sysユーザで下記を実行する。
SQL>execute dbms_metadata_util.load_stylesheets
汎用性がありそうなので、機能を追加しておくと便利かも。 (一度正規版をインストールするのが面倒だけど…) なお、ディレクトリを指定しないでexpdb,impdbを実行した場合、2.で作成したdpdumpフォルダを使用している。
初めまして。
Oracle11gXEでキャラクタセットを変更したくて、こちらの
記事にたどり着きました。
データベース作成等正常に終了したのですが、CreateDatabase文で指定した
「character set JA16SJISTILDE」が反映されませんでした。
JA16SJISは正常に変更されましたでしょうか?
よろしければ結果をお教え下さい。
>通りすがりさん
はじめまして、こんばんは。
nls_database_parametersのnls_charactersetを見る限り、反映されていると思います。
JA16SJISTILDEについてもDB作成してみましたが、反映されているようです。
試しに全角チルダ「~」をそれぞれJA16SJISとJA16SJISTILDEのテーブルにインサート後、
sqldeveloperでデータ確認すると、JA16SJISはウェーブダッシュ、JA16SJISTILDEは全角チルダ
で返ってきてる(表示されている)ので、問題無さそうに見えます。
お返事ありがとうございます。
こちらの間違いで途中からorclに対してしなければならないところをXEに対して行っていたようで、再度作成し直したところ正常にJA16SJISTILDEのデータベースの作成ができました。
検証までしていただきありがとうございました。