はじめに
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>
コマンド実行後,停止まで10数秒待ち時間がある.
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>
CreateDB.batを実行する.
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>
30分ほどしたら完了した.
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を起動する
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>
TNSリスナーを起動する.
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>
scottユーザは無い.
変更後の文字コードを確認する
インストーラを使ってインストールするとUTF8(AL32UTF8)だったが,SJISに変更作業したので,実際変更されているか確認する.
SQL> select value from nls_database_parameters where parameter='NLS_CHARACTERSET';
VALUE -------------------------------------------------------------------------------- JA16SJIS
SQL>
文字コードがSJIS(JA16SJIS)に変更されていることが確認できた.