Oracle 11g XEのキャラクタセットはUTF-8ですが、古いシステムだとシフトJISで使用しているところがあります。 今まで2回だけOracleを使用しているところでの仕事がありましたが、どちらもシフトJISでした。 そのため、データベースのキャラクタセットをシフトJISに変更してみます。 ただし、無料版は同時にインスタンスが1つしか使えないため、デフォルトのデータベースとの共存ができないそうです。 そこで、一旦UTF-8のデータベースを削除して、シフトJISに変更したデータベースを作成します。
データベース削除前の準備
initXE.oraの作成
自分でpfileを作成できる人は必要ないですが、Oracleが良く分かってない場合は デフォルトのspfileからpfileを作成するのが簡単かと思います。 そのためデータベースを削除する前に、デフォルトのspfileからinitXE.oraを作成しておきます。 デフォルトのspfileは以下になります。
/u01/app/oracle/product/11.2.0/xe/dbs/spfileXE.ora
作成は、spfileXE.oraがあるディレクトリに移動後、sysdbaで接続して"create pfile"コマンドで行います。
$ cd /u01/app/oracle/product/11.2.0/xe/dbs $ sqlplus / as sysdba SQL> create pfile = 'initXE.ora' from spfile = 'spfileXE.ora';
作成されたinitXE.oraファイルの中身は以下になります。
XE.__db_cache_size=117440512 XE.__java_pool_size=4194304 XE.__large_pool_size=4194304 XE.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment XE.__pga_aggregate_target=167772160 XE.__sga_target=251658240 XE.__shared_io_pool_size=0 XE.__shared_pool_size=117440512 XE.__streams_pool_size=0 *.audit_file_dest='/u01/app/oracle/admin/XE/adump' *.compatible='11.2.0.0.0' *.control_files='/u01/app/oracle/oradata/XE/control.dbf' *.db_name='XE' *.DB_RECOVERY_FILE_DEST='/u01/app/oracle/fast_recovery_area' *.DB_RECOVERY_FILE_DEST_SIZE=10G *.diagnostic_dest='/u01/app/oracle' *.dispatchers='(PROTOCOL=TCP) (SERVICE=XEXDB)' *.job_queue_processes=4 *.memory_target=417333248 *.open_cursors=300 *.remote_login_passwordfile='EXCLUSIVE' *.sessions=20 *.shared_servers=4 *.undo_management='AUTO' *.undo_tablespace='UNDOTBS1'
データベース削除
データベースの停止・削除
sysdbaで接続してシャットダウンを実施します。
# su - oracle $ sqlplus / as sysdba SQL*Plus: Release 11.2.0.2.0 Production on 金 9月 5 15:28:29 2014 Copyright (c) 1982, 2011, Oracle. All rights reserved. Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production に接続されました。 SQL> shutdown immediate データベースがクローズされました。 データベースがディスマウントされました。 ORACLEインスタンスがシャットダウンされました。
データベースを削除するときは以下のようにrestrictを指定して起動します。
SQL> startup restrict mount ORACLEインスタンスが起動しました。 Total System Global Area 417546240 bytes Fixed Size 2227080 bytes Variable Size 306185336 bytes Database Buffers 104857600 bytes Redo Buffers 4276224 bytes データベースがマウントされました。
その後、データベースを削除してsqlplusを一旦終了します。
SQL> drop database; データベースが削除されました。 Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Productionとの接 続が切断されました。 SQL> quit $
シフトJISのデータベース作成
11g. EXでデフォルトのデータベースを削除したので、新規データベースの作成が可能になります。 データベース作成では、最初に作成用のスクリプトを作成しておきます。 いろいろなパラメータを決めたスクリプトができたら、sqlplusから実行してデータベースを作成します。
データベース作成用スクリプト
シフトJIS用データベースを作成するファイルを作成します。 今回のは、Oracleのドキュメントページにあったものを参考にして作成しました。
/u01/app/oracle/product/11.2.0/xe/dbs/createdb.sql
CREATE DATABASE XE
LOGFILE GROUP 1 ('/u01/app/oracle/oradata/XE/redo01a.log') SIZE 100M BLOCKSIZE 512,
GROUP 2 ('/u01/app/oracle/oradata/XE/redo02a.log') SIZE 100M BLOCKSIZE 512,
GROUP 3 ('/u01/app/oracle/oradata/XE/redo03a.log') SIZE 100M BLOCKSIZE 512
MAXLOGFILES 5
MAXLOGMEMBERS 5
MAXLOGHISTORY 1
MAXDATAFILES 100
CHARACTER SET JA16SJIS
NATIONAL CHARACTER SET UTF8
EXTENT MANAGEMENT LOCAL
DATAFILE '/u01/app/oracle/oradata/XE/system01.dbf'
SIZE 325M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
SYSAUX DATAFILE '/u01/app/oracle/oradata/XE/sysaux01.dbf'
SIZE 325M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
DEFAULT TABLESPACE users
DATAFILE '/u01/app/oracle/oradata/XE/users01.dbf'
SIZE 500M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
DEFAULT TEMPORARY TABLESPACE temp
TEMPFILE '/u01/app/oracle/oradata/XE/temp01.dbf'
SIZE 20M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
UNDO TABLESPACE undotbs1
DATAFILE '/u01/app/oracle/oradata/XE/undo01.dbf'
SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
注. ディスクのセクタサイズが4Kの場合は、BLOCKSIZEを4096に変更します。
参考
今回は簡単なテスト用なので、使用するディスク容量を少なくしたいと思い、あとからディスク容量を減らしたスクリプトに変更しました。
インスタンス起動とデータベース作成
データベース作成用スクリプトが用意できたらsysdba権限で接続して、データベース削除前に作成した以下のpfileを指定してインスタンスを起動させます。
/u01/app/oracle/product/11.2.0/xe/dbs/initXE.ora
インスタンスの起動では、マウントせずにpfileを指定します。
SQL> startup nomount pfile=initXE.ora
実行例は以下のようになります。
$ cd /u01/app/oracle/product/11.2.0/xe/dbs/ $ sqlplus / as sysdba SQL> startup nomount pfile=initXE.ora ORACLEインスタンスが起動しました。 Total System Global Area 417546240 bytes Fixed Size 2227080 bytes Variable Size 293602424 bytes Database Buffers 117440512 bytes Redo Buffers 4276224 bytes
次にシフトJIS用データベース作成スクリプトを実行してデータベースを作成します。
SQL> @createdb.sql データベースが作成されました。 表領域が作成されました。 データベースが変更されました。
データベース作成後に実行するスクリプト
sysdba権限で以下の2つのスクリプトを実行して必要な機能をインストールします。
/u01/app/oracle/product/11.2.0/xe/rdbms/admin/catalog.sql /u01/app/oracle/product/11.2.0/xe/rdbms/admin/catproc.sql
実行例
SQL> @/u01/app/oracle/product/11.2.0/xe/rdbms/admin/catalog.sql ・・・ PL/SQLプロシージャが正常に完了しました。 TIMESTAMP -------------------------------------------------------------------------------- COMP_TIMESTAMP CATALOG 2014-09-16 13:20:52 SQL> @/u01/app/oracle/product/11.2.0/xe/rdbms/admin/catproc.sql ・・・ TIMESTAMP -------------------------------------------------------------------------------- COMP_TIMESTAMP CATPROC 2014-09-16 13:27:49 1行が選択されました。 SQL> SQL> SET SERVEROUTPUT OFF
PRODUCT_USER_PROFILE表の再作成
データベースを手動で作成した場合、PRODUCT_USER_PROFILE表の再作成が必要になります。
参考
systemで接続して、以下のスクリプトでPRODUCT_USER_PROFILE表を再作成します。
/u01/app/oracle/product/11.2.0/xe/sqlplus/admin/pupbld.sql実行例
SQL> connect system/manager 接続されました。 SQL> @/u01/app/oracle/product/11.2.0/xe/sqlplus/admin/pupbld.sql SQL> -- SQL> -- Copyright (c) Oracle Corporation 1988, 2003. All Rights Reserved. SQL> -- SQL> -- NAME SQL> -- pupbld.sql SQL> -- SQL> -- DESCRIPTION SQL> -- Script to install the SQL*Plus PRODUCT_USER_PROFILE tables. These SQL> -- tables allow SQL*Plus to disable commands per user. The tables SQL> -- are used only by SQL*Plus and do not affect other client tools SQL> -- that access the database. Refer to the SQL*Plus manual for table SQL> -- usage information. SQL> -- SQL> -- This script should be run on every database that SQL*Plus connects SQL> -- to, even if the tables are not used to restrict commands. SQL> SQL> -- USAGE SQL> -- sqlplus system/<system_password> @pupbld SQL> -- SQL> -- Connect as SYSTEM before running this script SQL> SQL> SQL> -- If PRODUCT_USER_PROFILE exists, use its values and drop it ・・・ ・・・ SQL> CREATE PUBLIC SYNONYM PRODUCT_USER_PROFILE FOR SYSTEM.PRODUCT_PRIVS; シノニムが作成されました。 SQL> SQL> -- End of pupbld.sql
確認
キャラクタセットの確認
データベースのキャラクタセットがシフトJISになっていることを確認します。
SQL> SELECT PARAMETER, VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER LIKE '%CHARACTERSET%';
PARAMETER
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
NLS_CHARACTERSET
JA16SJIS
NLS_NCHAR_CHARACTERSET
UTF8
NLS_CHARACTERSETが JA16SJIS になっていたらOKです。