UJP - 技術情報1

Life is fun and easy!

不正IP報告数

Okan Sensor
 
メイン
ログイン
ブログ カテゴリ一覧

Oracle XEのデータベースをSJISで作り直す

Oracle XEのデータベースをSJISで作り直す


更新履歴

  • 初版 2016/05/24
  • 更新日 2017/12/04

はじめに

  • 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で設定されていることがわかる.

データベースを削除する

コマンドプロンプトを管理者権限で起動する

  • データベースを削除するにはファイルを削除する権限が必要なので,管理者権限でコマンドプロンプトを起動して実行する.
embedded image
  • Windowsロゴを右クリックしてメニューから[コマンド プロンプト(管理者)]を選択する.
embedded image
  • ウインドウの上部に管理者権限であることが確認できる.

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)に変更されていることが確認できた.

広告スペース
Google