Oracle Database 10g XE(Windows版)の文字コードを変換する方法

Oracle Database 10gの無償版であるOracle Database 10g XE (Express Edition) をインストールした場合、データベースのデフォルトの文字コードは「AL32UTF8」となっている。有償版であれば「alter database」コマンドを使用することで文字コードを変更できるが、無償版ではコマンドを使用して文字コードを変更することはできない。
Oracle Database 10g XEで文字コードを変更したい場合は、インスタンスを新規に作成しなければならない。インスタンス作成の過程で文字コードを指定することになる。

■注意
新規に作成したインスタンスに対してはoracleの管理画面(http://127.0.0.1:8080/apex/)にアクセスできない。新規に作成したインスタンスに、別途Application Expressをインストールするとアクセスできるようになるらしい。

インスタンスの作成手順
1.文字コードを一時的にSJISに設定する。Oracleからの標準出力を見るため。

  > set NLS_LANG=JAPANESE_JAPAN.JA16SJISTILDE

2.Oracleを停止
Oracle Database 10g XE ではインスタンスは同時に一つしか起動できないため、デフォルトのインスタンスXEを停止する。

  > oradim -SHUTDOWN -SID XE -SHUTTYPE SRVC,INST -SHUTMODE ABORT

3.新規Oracleインスタンスの作成
(1)データベース格納用ディレクトリの作成
コマンドプロンプトを起動し、下記をコマンドを実行する。

mkdir C:\oraclexe\app\oracle\admin\ORCL\adump
mkdir C:\oraclexe\app\oracle\admin\ORCL\bdump
mkdir C:\oraclexe\app\oracle\admin\ORCL\cdump
mkdir C:\oraclexe\app\oracle\admin\ORCL\dpdump
mkdir C:\oraclexe\app\oracle\admin\ORCL\pfile
mkdir C:\oraclexe\app\oracle\admin\ORCL\udump
mkdir C:\oraclexe\oradata\ORCL


(2)初期化パラメータ・ファイルを作成
initORCL.oraというファイル名で下記場所に作成する。
C:\oraclexe\app\oracle\product\10.2.0\server\database\initORCL.ora
下記の内容で作成する。

java_pool_size=0
large_pool_size=4194304
shared_pool_size=62914560
streams_pool_size=0
audit_file_dest='C:\oraclexe\app\oracle\admin\ORCL\adump'
background_dump_dest='C:\oraclexe\app\oracle\admin\ORCL\bdump'
compatible='10.2.0.1.0'
control_files='C:\oraclexe\oradata\ORCL\control.dbf'
core_dump_dest='C:\oraclexe\app\oracle\admin\ORCL\cdump'
db_name='ORCL'
dispatchers='(PROTOCOL=TCP) (SERVICE=XEXDB)'
job_queue_processes=2
open_cursors=300
os_authent_prefix=''
pga_aggregate_target=40M
remote_login_passwordfile='EXCLUSIVE'
sessions=20
sga_target=140M
shared_servers=1
undo_management='AUTO'
undo_tablespace='UNDO'
user_dump_dest='C:\oraclexe\app\oracle\admin\ORCL\udump'

(3)Windowsのサービスを作成

    > set ORACLE_SID=ORCL
    > oradim -NEW -SID ORCL -INTPWD nandi -PFILE C:\oraclexe\app\oracle\product\10.2.0\server\database\initORCL.ora -startmode auto

(4)ORACLE インスタンスを起動

    > sqlplus / as sysdba
    SQL> startup nomount

(5)データベース作成
以下の内容をコピー&ペーストして、Enterキーを押す。(30秒くらいかかる。)

create database ORCL
logfile group 1 ('C:\oraclexe\oradata\ORCL\redo1.dbf') size 32M,
group 2 ('C:\oraclexe\oradata\ORCL\redo2.dbf') size 32M,
group 3 ('C:\oraclexe\oradata\ORCL\redo3.dbf') size 32M
character set JA16EUCTILDE
national character set utf8
datafile 'C:\oraclexe\oradata\ORCL\system.dbf'
size 240M
autoextend on
next 16M maxsize unlimited
extent management local
sysaux datafile 'C:\oraclexe\oradata\ORCL\sysaux.dbf'
size 48M
autoextend on
next 8M
maxsize unlimited
undo tablespace undo
datafile 'C:\oraclexe\oradata\ORCL\undo.dbf'
size 48M
autoextend on
default temporary tablespace temp
tempfile 'C:\oraclexe\oradata\ORCL\temp.dbf'
size 8M
autoextend on;

(6)スクリプトの実行
ユーザsys, systemで必要なスクリプト(カタログの作成など)を実行する。
エラーが結構出るが無視してよい。エラー原因は存在しないテーブルをdropしようとしてる処理など。

SQL> @C:\oraclexe\app\oracle\product\10.2.0\server\RDBMS\ADMIN\catalog.sql  (1分くらいかかる。)
SQL> @C:\oraclexe\app\oracle\product\10.2.0\server\RDBMS\ADMIN\catproc.sql  (5分くらいかかる。)
SQL> connect system/manager
SQL> @C:\oraclexe\app\oracle\product\10.2.0\server\sqlplus\admin\pupbld.sql
SQL> quit

(7)Windows環境変数ORACLE_SIDを登録する。
変数:ORACLE_SID
値:ORCL

(8)サービスを自動起動に設定する。
[スタート] -> [ファイル名を指定して実行]をクリックし、名前欄に「services.msc」を入力する。
OracleServiceORCLを右クリック -> プロパティをクリックする。スタートアップの種類を自動に設定し、
「OK」をクリックする。

Oracle Textのインストール

> sqlplus sys/manager as sysdba
SQL> @?\ctx\admin\catctx manager SYSAUX TEMP NOLOCK

SQL> connect CTXSYS/manager
SQL> @?\ctx\admin\defaults\drdefja.sql
SQL> quit

■確認
sqlplusコマンドを実行しログインできるかどうか確認する。初期ユーザはsystem、パスワードはmanagerである。

>sqlplus system/manager
SQL>

インスタンスの切り替え方法
UTF-8ベースのXEとShift-JISベースのORCLを使い分けることができる。

・XEを停止してORCLを起動

C:\>oradim -SHUTDOWN -SID XE -SHUTTYPE SRVC,INST -SHUTMODE ABORT
C:\>oradim -STARTUP -SID ORCL

・ORCLを停止してXEを起動

C:\>oradim -SHUTDOWN -SID ORCL -SHUTTYPE SRVC,INST -SHUTMODE ABORT
C:\>oradim -STARTUP -SID XE

■参照サイト
http://www.fourmeisters.com/blog/hisama2/2007/07/shift_jis_on_oracle_xe.html