Database

[Oracle]データベースを再構築してOracle Expressのキャラクタセットを変更する

oracle Database
スポンサーリンク

前回の記事でCSALTERを使用したキャラクタセットの変更方法を記載しましたが、サブセットのキャラクタセットからスーパセットへの変更のみ可能でした。

この記事では、データベースを再構築するキャラクタセットの変更方法を記載していきます。
データベースを再構築する方法では全てのキャラクタセットへ変更できます。

キャラクタセットの変更手順

Oracle Expressでは1つのデータベースしか作成できないので、キャラクタセットを変更するには既存のデータベースを再作成する必要があります。
Oracle Express以外の場合はDBCAなどで新規のデータベースを作成する際にキャラクタセットを指定してください。

変更手順は以下の流れで実施します。

  1. インスタンスの削除
  2. 不要ファイルの削除
  3. 初期化パラメータファイルの作成
  4. インスタンスの作成
  5. インスタンスの起動
  6. データベースの作成
  7. ユーザ表領域の作成

環境

Oracle Database Express Edition 11g Release 2

キャラクタセットの調べ方

変更手順には含まれませんが、変更前に現在のキャラクタセットを確認します。
sqlplusなどで以下のコマンドを実行します。

SELECT NLS_CHARSET_NAME(NLS_CHARSET_ID('CHAR_CS')) FROM DUAL;

NLS_CHARSET_NAME
----------------
AL32UTF8

インスタンスの削除

データベースの停止とインスタンスの削除を行います。
コマンドプロンプトで以下のコマンドを実行します。

cleanup.bat

不要ファイルの削除

削除したインスタンス関連のファイルを削除します。

cd $ORACLE_BASE
del /f /s /q del /f /s /q oradata\XE\*
del /f /s /q del /f /s /q product\11.2.0\server\dbs\*
del /f /s /q del /f /s /q product\11.2.0\server\database\*.dat *.ora *.log

初期化パラメータファイルの作成

初期化パラメータファイルを$ORACLE_HOME/database/initXE.oraとして作成します。
インストールディレクトリを変更している場合はパスを修正してください。

db_name='XE'
java_pool_size=4194304
large_pool_size=4194304
shared_pool_size=201326592
streams_pool_size=0
audit_file_dest='C:\oraclexe\app\oracle\admin\XE\adump'
control_files='C:\oraclexe\app\oracle\oradata\XE\control.dbf'
compatible='11.2.0.1.0'
diagnostic_dest='C:\oraclexe\app\oracle'
dispatchers='(PROTOCOL=TCP) (SERVICE=XEXDB)'
job_queue_processes=12
open_cursors=300
os_authent_prefix=''
remote_login_passwordfile='EXCLUSIVE'
sessions=24
pga_aggregate_target=256M
sga_target=768M
shared_servers=1   # shared_servers=4
undo_management='AUTO'
undo_tablespace='UNDO'

インスタンスの作成

ORADIMユーティリティを使用してインスタンスを作成する。

cd $ORACLE_HOME
ORADIM -NEW -SID XE -SYSPWD manager -PFILE database\initXE.ora

インスタンスの起動 

作成したインスタンスを起動します。

set ORACLE_SID=XE
cd $ORACLE_HOME
sqlplus sys/manager as sysdba

startup nomount pfile=database\initXE.ora

データベースの作成

キャラクタセットとナショナルキャラクタセットを指定してデータベースを作成します。

cd $ORACLE_HOME
sqlplus sys/manager as sysdba

-- character set:JA16SJISTILDE, national character set:AL16UTF16
create database XE
logfile group 1 ('C:\oraclexe\app\oracle\oradata\XE\redo1.dbf') size 32M,
group 2 ('C:\oraclexe\app\oracle\oradata\XE\redo2.dbf') size 32M,
group 3 ('C:\oraclexe\app\oracle\oradata\XE\redo3.dbf') size 32M
character set JA16SJISTILDE      -- キャラクタセット
national character set AL16UTF16 -- ナショナルキャラクタセット
datafile 'C:\oraclexe\app\oracle\oradata\XE\system.dbf'
size 240M
autoextend on
next 16M maxsize unlimited
extent management local
sysaux datafile 'C:\oraclexe\app\oracle\oradata\XE\sysaux.dbf'
size 48M
autoextend on
next 8M
maxsize unlimited
undo tablespace undo
datafile 'C:\oraclexe\app\oracle\oradata\XE\undo.dbf'
size 48M
autoextend on
default temporary tablespace temp
tempfile 'C:\oraclexe\app\oracle\oradata\XE\temp.dbf'
size 8M
autoextend on;

@rdbms\admin\catalog.sql
@rdbms\admin\catproc.sql
connect system/manager
@sqlplus\admin\pupbld.sql

ユーザ表領域の作成

ユーザ表領域を再作成します。

sqlplus sys/manager as sysdba

create tablespace users
datafile 'C:\oraclexe\app\oracle\oradata\XE\USERS.dbf'
size 1024M autoextend on maxsize 4096M
extent management local
segment space management auto;

キャラクタセットの確認

データベースの作成時に指定したキャラクタセットになっているか確認します。

sqlplus sys/manager as sysdba

-- キャラクタセット
SELECT NLS_CHARSET_NAME(NLS_CHARSET_ID('CHAR_CS')) FROM DUAL;

NLS_CHARSET_N
-------------
JA16SJISTILDE

-- ナショナルキャラクタセット
SELECT NLS_CHARSET_NAME(NLS_CHARSET_ID('NCHAR_CS')) FROM DUAL;

NLS_CHARS
---------
AL16UTF16
タイトルとURLをコピーしました