前回の記事でCSALTERを使用したキャラクタセットの変更方法を記載しましたが、サブセットのキャラクタセットからスーパセットへの変更のみ可能でした。
この記事では、データベースを再構築するキャラクタセットの変更方法を記載していきます。
データベースを再構築する方法では全てのキャラクタセットへ変更できます。
キャラクタセットの変更手順
Oracle Expressでは1つのデータベースしか作成できないので、キャラクタセットを変更するには既存のデータベースを再作成する必要があります。
Oracle Express以外の場合はDBCAなどで新規のデータベースを作成する際にキャラクタセットを指定してください。
変更手順は以下の流れで実施します。
- インスタンスの削除
- 不要ファイルの削除
- 初期化パラメータファイルの作成
- インスタンスの作成
- インスタンスの起動
- データベースの作成
- ユーザ表領域の作成
環境
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