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
[Oracle]OracleからWebサービスを利用する方法

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

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

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

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

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

oracle
Oracle 11g XEへのデータ移行方法を検討してみる

Oracleのデータ移行時は移行元と移行先の文字コードに注意する必要があります。 Windows環境のOracleでは「JA16SJIS」や「JA16SJIST …

sqlserer
[SQL Server]IDENTITYの値を初期化する

ID値の初期化(リセット)方法 IDENTITYプロパティを設定した列のID値を初期化(リセット)する方法を記載します。 現在のID値を確認する ID値を確認す …

oracle
[Oracle]Data Pumpを使用したデータベースのバックアップ

Data Pump機能のexpdp/impdpコマンドを使用するとデータベース全体、スキーマ単位、表単位など対象範囲を指定したバックアップやリストアを行うことが …

sqlserer
[SQL Server]クロス集計の方法

PIVOTを使ってクロス集計する SQL ServerでExcelのピボットテーブルのようなクロス集計をするには、PIVOT関係演算子を使って集計することができ …

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

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

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

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

oracle
ODP.NETをNuGetからインストールする

ODP.NETのインストール手順 Oracle 12cから公式のODP.NETがNuGetに追加されました。 この記事ではODP.NETをNuGetからインスト …