Skill Note

平凡なエンジニアがメモ代わりにプログラミング, インフラ, ネットワークを書き綴るブログ

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

      2020/01/09

前回の記事で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

Google AdSense PC

Google AdSense PC

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  関連記事

oracle
Oracle12cのPDBを自動起動にする方法

Oracle12cのプラガブル・データベース(PDB)は初期設定のままでは、毎回、手動で起動させる必要があります。 この記事ではOS起動時やOracle再起動時 …

oracle
[Oracle]トリガーの実行順序を設定する方法

FOLLOWS句を使用して実行順序を設定する 1つの表に対して同レベル(タイミング)のトリガーを複数作成することはできますが、実行順序は保証されていません。 実 …

oracle
[Oracle]OracleからWebサービスを利用する方法

SOAPリクエストを送信してレスポンスを表示する 前回はOracleからWebサイトにアクセスする方法を記載しましたが、今回はOracleからSOAP形式のWe …

oracle
[Oracle]データベーストリガーの作成方法

DMLトリガーを作成する データベーストリガーの中でももっとも一般的なDMLトリガーの作成方法と簡単な使用方法を記載していきます。 トリガーとは? トリガーとは …

oracle
[Oracle]WEBサイトやWEB APIをOracleから呼び出す方法

WEBリクエストを送信してレスポンスを表示する OracleからWEBサイトやWEB APIなどのネットワークサービスを呼び出すには、UTL_HTTPパッケージ …

sqlserer
[SQLServer]日付文字列 + 時刻文字列をDATETIME型に変換する方法

SQLServerで日付文字列 + 時刻文字列をDATETIME型に変換する方法 日付と時刻を別のカラムに格納している場合に日時データとして扱いたい場合は CO …

oracle
[Oracle]Oracle Clientのアンインストール方法

Oracle Clientをレジストリを含め完全に削除することがありましたので、この記事では削除手順を記載します。 削除手順ではレジストリを変更しますので十分注 …

sqlserer
[SQLServer]形式指定で日付を取得する方法

SQLServerで形式を指定して日付を取得する 日付形式を指定するために、CONVERT関数、または、FORMAT関数を使用します。 CONVERT関数とFO …

oracle
[Oracle]ジョブをスケジューリングして定期実行する方法

DBMS_SCHEDULERパッケージを使用したジョブスケジューリング Oracleでジョブを定期実行するには、DBMS_SCHEDULERパッケージやDBMS …

db
[Database]データベースのバージョン/エディションを確認する方法

OracleとSQLServerのバージョン/エディションを確認 Oracle  SELECT * FROM V$VERSION SQLServer SELEC …