OracleXEでJA16SJISの利用 Ubuntu環境編
Oracle Express Edition をインストールした場合、データベースのキャラクタセットが「AL32UTF8」となっており、従来の「JA16SJIS」などを使用したい場合にデータベースの変更が「alter database」ではできない。
データベースのキャラクタセットとして「JA16SJIS」or「JA16SJISTILDE」などを使用したい場合は、インスタンスの再作成を行うこととなる。
Express Editionではライセンス上の制約から複数インスタンスを同一のホストで稼動させることができない(複数のインスタンスを起動すると「USER: terminating instance due to error 44410」ORA-44410 XE edition single instance violation error.となり起動できない。)ため、以下のような対応を取ることとなる。
(1)初期データベース(XE)を削除して再作成する。
(2)別のインスタンスを作成して、交互に切り替えて利用する。
デフォルト(初期)データベースの削除手順
デフォルトのデータベースとして1GB程度のディスク領域を使用しているので、不要な場合は以下の手順で削除する。
データベースの削除
Oracleのインスタンスを停止して、drop databaseを行う。
sqlplus /nolog
connect / as sysdba
shutdown abort
startup restrict mount
drop database;
不要なファイルの削除
drop databaseにより以下のファイルが削除される
(1)デフォルトのインスタンスのspfile
$ORACLE_HOME/dbs/spfileXE.ora
(2)デフォルトのインスタンスの制御ファイル、データファイル、undoなど
/usr/lib/oracle/xe/oradata/XE/*
/usr/lib/oracle/xe/app/oracle/admin/XEの下のダンプ用ディレクトリ中のファイルは削除されないので不要であれば、削除する。
新規Oracleインスタンスの作成
新規に以下のようなデータベース環境を作成する
SID ORCL
キャラクタセット JA16SJISTILD
ディレクトリ体系 /oradata/orcl
CONF 構成情報(initORCL.ora)
DBF データベースファイル(*.dbf)
DUMP ダンプ類
データベース格納用ディレクトリの作成
必要なディレクトリを作成する。
sudo mkdir /oradata
sudo chown dbadmin.dbadmin /oradata
mkdir /oradata/orcl
mkdir /oradata/orcl/conf
mkdir /oradata/orcl/dbf
mkdir /oradata/orcl/dump
mkdir /oradata/orcl/dump/adump
mkdir /oradata/orcl/dump/bdump
mkdir /oradata/orcl/dump/cdump
mkdir /oradata/orcl/dump/udump
chmod ?R 775 /oradata
pfileの作成
テキスエディタなどでpfileを作成して格納する
例)/oradata/orcl/conf/initORCL.ora
db_name='ORCL'
control_files=/oradata/orcl/dbf/control.dbf'
user_dump_dest=/oradata/orcl/dump/udump
audit_file_dest=/oradata/orcl/dump/adump
background_dump_dest=/oradata/orcl/dump/bdump
core_dump_dest=/oradata/orcl/dump/cdump
shared_pool_size=128M
undo_management='AUTO'
undo_tablespace='UNDO'
インスタンスの起動
ORACLE_SID=ORCL
sqlplus / as sysdba
startup nomount ?pfile=/oradata/orcl/conf/initORCL.ora
データベース作成
create database ORCL
logfile group 1 (‘/oradata/orcl/dbf/redo1.dbf') size 32M,
group 2 (‘/oradata/orcl/dbf/redo2.dbf') size 32M,
group 3 (‘/oradata/orcl/dbf/redo3.dbf') size 32M
character set JA16SJISTILDE
national character set utf8
datafile ‘/oradata/orcl/dbf/system.dbf'
size 240M autoextend on
next 16M maxsize unlimited
extent management local
sysaux datafile ‘/oradata/orcl/dbf/sysaux.dbf'
size 48M autoextend on
next 8M maxsize unlimited
undo tablespace undo
datafile ‘/oradata/orcl/dbf/undo.dbf'
size 48M autoextend on
default temporary tablespace temp
tempfile ‘/oradata/orcl/dbf/temp.dbf'
size 8M autoextend on;
必要なスクリプトを実行
ユーザsys, systemで必要なスクリプト(カタログの作成など)を実行する。
@?/rdbms/admin/catalog.sql
@?/rdbms/admin/catproc.sqlconnect system/manager
@?/sqlplus/admin/pupbld.sq
l
ユーザ用環境構築
ユーザ用のテーブルスペース(users)、ユーザ(dbadmin)を作成する。
create tablespace users
datafile /oradata/orcl/dbf/user.dbf'
size 300M autoextend on maxsize 1024M
extent management local
segment space management auto;
create user dbadmin identified by dbadmin
default tablespace users
temporary tablespace temp
quota unlimited on users;
grant connect, resource, dba to dbadmin;
インスタンスの切り替え
listener.oraの編集
XE, ORCLの2つのインスタンスとの接続ができるようリスナーの設定を行う。
/usr/lib/oracle/xe/app/oracle/product/10.2.0/server /network/adminにある「listener.ora」ファイルのSID_LIST_LISTENER のSID_LIST中に以下のようにXE, ORCLのSIDを追加する。
(SID_DESC =
(SID_NAME = XE)
(ORACLE_HOME = /usr/lib/oracle/xe/app/oracle/product/10.2.0/server)
(SERVICE_NAME = XE)
)
(SID_DESC =
(SID_NAME = ORCL)
(ORACLE_HOME = /usr/lib/oracle/xe/app/oracle/product/10.2.0/server)
(SERVICE_NAME = ORCL)
)
データベースの開始のシェルの作成
XEのインスタンスの起動用のシェルと同様に、ORCL用の起動バッチを作成し、スタートメニューに追加する。
$ORACLE_HOME/config/scripts/startdb.shの16行目のORACLE_SIDを修正する。
ORACLE_HOME=・・・
ORACLE_SID=ORCL
LSNR=・・・
データベースの停止シェルの編集
メニュー「データベースの停止」から起動されるバッチファイルを編集する。インスタンスORCLを停止するため、サービスの停止を追加する。
$ORACLE_HOME/config/scripts/stopdb.sh の17行目のORACLE_SIDを修正する。
ORACLE_HOME=・・・
ORACLE_SID=ORCL
SQLPLUS=・・・
SQL*Plus実行用のシェルの作成
$ORACLE_HOME/config/scripts/runsqlplus.shから呼び出されているsqlplus.sh の8行目のORACLE_SID、10行目のNLS_LANGを修正する。
export ORACLE_HOME
ORACLE_SID=ORCL
export ORACLE_SID
NLS_LANG=JAPANESE_JAPAN.AL32UTF8