はじめに
- Oracle XEをインストールする際に文字コードなどを指定する部分がないので,Unicode(UTF-8)でインストールされてしまう.これをSJISに変更したい場合,データベースの作り直しが必要となる.このドキュメントでは,現在の文字コードを調べたあと,文字コードをSJISに変更する手順を説明する.
- なお,SJISのデータベースを作成する手順となっているが,UTF8のデータベースを作成する時も手順としては同じである.
現在の文字コードを確認する
- systemユーザでOracleに接続し,次のようなSQL文を実行する.
SQL> select value from nls_database_parameters where parameter='NLS_CHARACTERSET';
VALUE
------------------------------------------------------------------------------------
AL32UTF8
SQL>
- 文字コードがUTF8で設定されていることがわかる.
データベースを削除する
コマンドプロンプトを管理者権限で起動する
- データベースを削除するにはファイルを削除する権限が必要なので,管理者権限でコマンドプロンプトを起動して実行する.
- Windowsロゴを右クリックしてメニューから[コマンド プロンプト(管理者)]を選択する.
- ウインドウの上部に管理者権限であることが確認できる.
CleanUp.batを実行する
- データベースを削除するために,CleanUp.batが用意されている. ファイルの中身を確認する.
C:\Users\oratest>type C:\oraclexe\app\oracle\product\11.2.0\server\bin\CleanUp.bat
@echo off
C:\oraclexe\app\oracle\product\11.2.0\server\bin\lsnrctl stop LISTENER > nul 2>&1
C:\oraclexe\app\oracle\product\11.2.0\server\bin\oradim -SHUTDOWN -SID XE -SHUTTYPE SRVC,INST -SHUTMODE ABORT > nul 2>&1
C:\oraclexe\app\oracle\product\11.2.0\server\bin\oradim -DELETE -SID XE > nul 2>&1
C:\Users\oratest>
- リスナーとデータベースを停止して,SIDを削除している.SIDなどはWindowsの場合レジストリに登録されているので,それを削除している.(ハズ)
- 実行する.
C:\oraclexe\app\oracle\product\11.2.0\server\database>C:\oraclexe\app\oracle\product\11.2.0\server\bin\CleanUp.bat
C:\oraclexe\app\oracle\product\11.2.0\server\database>
残骸のファイルを削除
- データベースを論理削除してもファイルが残っているので,不要となったデータベースを削除する.
dbs
- dbsディレクトリにはインスタンスに関わる管理ファイルが設置されている.まずはディレクトリに何が入っているか確認する.
C:\Windows\system32>cd C:\oraclexe\app\oracle\product\11.2.0\server\dbs
C:\oraclexe\app\oracle\product\11.2.0\server\dbs>dir
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は E406-5F3A です
C:\oraclexe\app\oracle\product\11.2.0\server\dbs のディレクトリ
2016/04/26 00:40 <DIR> .
2016/04/26 00:40 <DIR> ..
2011/08/27 09:59 2,917 $RT6YM0E.ora
2016/04/25 23:29 2,560 SPFILEXE.ORA
2 個のファイル 5,477 バイト
2 個のディレクトリ 341,497,143,296 バイトの空き領域
C:\oraclexe\app\oracle\product\11.2.0\server\dbs>
- 管理ファイルが2つ設置してあるので,これらを消して,消えたことを確認する.
C:\oraclexe\app\oracle\product\11.2.0\server\dbs>del *
C:\oraclexe\app\oracle\product\11.2.0\server\dbs\*、よろしいですか (Y/N)? y
C:\oraclexe\app\oracle\product\11.2.0\server\dbs>dir
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は E406-5F3A です
C:\oraclexe\app\oracle\product\11.2.0\server\dbs のディレクトリ
2016/04/26 00:46 <DIR> .
2016/04/26 00:46 <DIR> ..
0 個のファイル 0 バイト
2 個のディレクトリ 341,497,151,488 バイトの空き領域
C:\oraclexe\app\oracle\product\11.2.0\server\dbs>
初期データベースを作成する
- Windows版のOracleでは,CreateDB.batを使って初期データベースを作成する.まずは,シェルを確認する.
C:\oraclexe\app\oracle\product\11.2.0\server\bin>dir CreateDB*
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は E406-5F3A です
C:\oraclexe\app\oracle\product\11.2.0\server\bin のディレクトリ
2011/08/27 09:58 19,849 CreateDB.bat
1 個のファイル 19,849 バイト
0 個のディレクトリ 338,888,560,640 バイトの空き領域
C:\oraclexe\app\oracle\product\11.2.0\server\bin>
C:\oraclexe\app\oracle\product\11.2.0\server\bin>CreateDB.bat -dbchar JA16SJIS
ORACLE_HOME must be set and %ORACLE_HOME%\database must be writeable
CreateDB.bat terminated unsucessfully.
C:\oraclexe\app\oracle\product\11.2.0\server\bin>
- ORACLE_HOME環境変数が設定されてないとエラーがでたので,設定する.
環境変数ORALCE_HOMEを設定する
- CreateDB.batを実行するためにはORACLE_HOMEが必要なので,実行する.
C:\oraclexe\app\oracle\product\11.2.0\server\bin>set ORACLE_HOME=C:\oraclexe\app\oracle\product\11.2.0\server
C:\oraclexe\app\oracle\product\11.2.0\server\bin>echo %ORACLE_HOME%
C:\oraclexe\app\oracle\product\11.2.0\server
C:\oraclexe\app\oracle\product\11.2.0\server\bin>
CreateDB.batを実行する
- CreateDB.batを実行する.この時,コマンドプロンプトは管理者権限で実行されていることを確認しておく.CreateDB.batを実行する際に,SJISとしてデータベースを作成するため,dbcharにJA16SJISというパラメータをつける.
C:\oraclexe\app\oracle\product\11.2.0\server>CreateDB.bat -dbchar JA16SJIS
ORACLE_HOME=C:\oraclexe\app\oracle\product\11.2.0\server
ORACLE_SID=XE
Existing database will be erased, hit ctrl-c to cancel.
続行するには何かキーを押してください . . .
インスタンスが作成されました。
SQL*Plus: Release 11.2.0.2.0 Production on 月 5月 23 22:55:14 2016
Copyright (c) 1982, 2010, Oracle. All rights reserved.
接続されました。
ORA-01081: ???????Oracle???????? - ???????????????
データベースが作成されました。
表領域が作成されました。
DOC>######################################################################
DOC>######################################################################
DOC> The following statement will cause an "ORA-01722: invalid number"
DOC> error and terminate the SQLPLUS session if the user is not SYS.
DOC> Disconnect and reconnect with AS SYSDBA.
DOC>######################################################################
DOC>######################################################################
DOC>#
- しばらく待つ.どれくらいしばらくかというとコンピュータのスペックによる.色々と表示されるが,最後は次のように表示される.
TIMESTAMP
--------------------------------------------------------------------------------
COMP_TIMESTAMP UTLRP_END 2016-05-23 23:22:53
DOC> The following query reports the number of objects that have compiled
DOC> with errors (objects that compile with errors have status set to 3 in
DOC> obj$). If the number is higher than expected, please examine the error
DOC> messages reported with each object (using SHOW ERRORS) to see if they
DOC> point to system misconfiguration or resource constraints that must be
DOC> fixed before attempting to recompile these objects.
DOC>#
OBJECTS WITH ERRORS
-------------------
0
DOC> The following query reports the number of errors caught during
DOC> recompilation. If this number is non-zero, please query the error
DOC> messages in the table UTL_RECOMP_ERRORS to see if any of these errors
DOC> are due to misconfiguration or resource constraints that must be
DOC> fixed before objects can compile successfully.
DOC>#
ERRORS DURING RECOMPILATION
---------------------------
0
ファンクションが作成されました。
PL/SQLプロシージャが正常に完了しました。
ファンクションが削除されました。
PL/SQLプロシージャが正常に完了しました。
Oracle Database 11g Express Edition Release 11.2.0.2.0 - Productionとの接続が切断されました。
C:\oraclexe\app\oracle\product\11.2.0\server>
Oracleが起動しているかtasklistコマンドで確認する.
C:\oraclexe\app\oracle\product\11.2.0\server>tasklist | find "oracle"
oracle.exe 5352 Services 0 211,100 K
C:\oraclexe\app\oracle\product\11.2.0\server>
TNS Listnerが起動しているか確認する
- データベースを削除する時に停止しているが,念のためリスナーのプロセスを確認する.
C:\oraclexe\app\oracle\product\11.2.0\server\bin>tasklist | find "TNSLSNR.EXE"
C:\oraclexe\app\oracle\product\11.2.0\server\bin>
TNS Listnerを起動する
C:\oraclexe\app\oracle\product\11.2.0\server>cd %ORACLE_HOME%/bin
C:\oraclexe\app\oracle\product\11.2.0\server\bin>dir LSNRCTL.EXE
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は E406-5F3A です
C:\oraclexe\app\oracle\product\11.2.0\server\bin のディレクトリ
2011/08/27 10:00 94,208 LSNRCTL.EXE
1 個のファイル 94,208 バイト
0 個のディレクトリ 338,020,982,784 バイトの空き領域
C:\oraclexe\app\oracle\product\11.2.0\server\bin>
C:\oraclexe\app\oracle\product\11.2.0\server\bin>lsnrctl.exe start
LSNRCTL for 32-bit Windows: Version 11.2.0.2.0 - Production on 24-5月 -2016 22:45:02
Copyright (c) 1991, 2010, Oracle. All rights reserved.
tnslsnrを起動しています。お待ちください...
TNSLSNR for 32-bit Windows: Version 11.2.0.2.0 - Production
System parameter file is C:\oraclexe\app\oracle\product\11.2.0\server\network\admin\listener.ora
Log messages written to C:\oraclexe\app\oracle\diag\tnslsnr\win8120160422\listener\alert\log.xml
リスニングしています: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))
リスニングしています: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=win8120160422)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))に接続中
リスナーのステータス
------------------------
別名 LISTENER
バージョン TNSLSNR for 32-bit Windows: Version 11.2.0.2.0 - Production
開始日 24-5月 -2016 22:45:06
稼働時間 0 日 0 時間 0 分 3 秒
トレース・レベル off
セキュリティ ON: Local OS Authentication
SNMP OFF
デフォルト・サービス XE
パラメータ・ファイル C:\oraclexe\app\oracle\product\11.2.0\server\network\admin\listener.ora
ログ・ファイル C:\oraclexe\app\oracle\diag\tnslsnr\win8120160422\listener\alert\log.xml
リスニング・エンドポイントのサマリー...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=win8120160422)(PORT=1521)))
サービスのサマリー...
サービス"CLRExtProc"には、1件のインスタンスがあります。
インスタンス"CLRExtProc"、状態UNKNOWNには、このサービスに対する1件のハンドラがあります...
サービス"PLSExtProc"には、1件のインスタンスがあります。
インスタンス"PLSExtProc"、状態UNKNOWNには、このサービスに対する1件のハンドラがあります...
コマンドは正常に終了しました。
C:\oraclexe\app\oracle\product\11.2.0\server\bin>
- TNS Listnerプロセスが起動したことを確認する.
C:\oraclexe\app\oracle\product\11.2.0\server\bin>tasklist | find "TNSLSNR.EXE"
TNSLSNR.EXE 1860 Services 0 39,612 K
C:\oraclexe\app\oracle\product\11.2.0\server\bin>
systemユーザのパスワードを設定する
- データベースを消しているので,systemユーザのパスワードが設定されていない.インストーラを使うと途中でsystemのパスワードを設定する画面も表示されるが,手動なので設定されていない.もしかして?とおもってchange_on_installを試してみたがそれもダメだった.
- 初期データベースでSQL*Plusに接続し,sysユーザでコネクトしてみる.
C:\oraclexe\app\oracle\product\11.2.0\server\bin>sqlplus /nolog
SQL*Plus: Release 11.2.0.2.0 Production on 火 5月 24 22:59:47 2016
Copyright (c) 1982, 2010, Oracle. All rights reserved.
SQL> connect sys as sysdba
パスワードを入力してください:
接続されました。
SQL>
- この時,パスワードは不要.空エンターで接続できた.そして,次のようにsystemユーザにパスワードmanagerをつける.
SQL> ALTER USER system IDENTIFIED BY manager
2 ;
ユーザーが変更されました。
SQL>
- SQL*Plusを切断し,systemユーザで接続しなおす.
SQL> exit
Oracle Database 11g Express Edition Release 11.2.0.2.0 - Productionとの接続が切断されました。
C:\oraclexe\app\oracle\product\11.2.0\server\bin>sqlplus system/manager@xe
SQL*Plus: Release 11.2.0.2.0 Production on 火 5月 24 23:05:03 2016
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Oracle Database 11g Express Edition Release 11.2.0.2.0 - Production
に接続されました。
SQL>
存在しているユーザを確認する
- この手順で作成されたORACLEのユーザを確認する.
SQL> select username from dba_users;
USERNAME
------------------------------------------------------------
OUTLN
SYS
SYSTEM
CTXSYS
ANONYMOUS
HR
MDSYS
DIP
ORACLE_OCM
XS$NULL
DBSNMP
USERNAME
------------------------------------------------------------
XDB
APPQOSSYS
13行が選択されました。
SQL>
変更後の文字コードを確認する
- インストーラを使ってインストールするとUTF8(AL32UTF8)だったが,SJISに変更作業したので,実際変更されているか確認する.
SQL> select value from nls_database_parameters where parameter='NLS_CHARACTERSET';
VALUE
--------------------------------------------------------------------------------
JA16SJIS
SQL>
- 文字コードがSJIS(JA16SJIS)に変更されていることが確認できた.