Oracle 11g Express EditionでSJISを利用する
何回かやることがあったのでまとめてみました。
参考サイト:Tec Wiki
コマンドプロンプトは管理者として実行したほうがいいかも。
新規インスタンス用のディレクトリを作成
set SID=[SID名] set ORACLE_XE_DIR=D:\oraclexe set ORACLE_HOME=%ORACLE_XE_DIR%\app\oracle\product\11.2.0\server set PREFIX_DIR=%ORACLE_XE_DIR%\%SID% mkdir %PREFIX_DIR%\%SID% mkdir %PREFIX_DIR%\%SID%\conf mkdir %PREFIX_DIR%\%SID%\dbf mkdir %PREFIX_DIR%\%SID%\dump mkdir %PREFIX_DIR%\%SID%\dump\adump mkdir %PREFIX_DIR%\%SID%\dump\bdump mkdir %PREFIX_DIR%\%SID%\dump\cdump mkdir %PREFIX_DIR%\%SID%\dump\udump
pfileを作成
set CONF_FILE=%PREFIX_DIR%\conf\init%SID%.ora echo db_name='%SID%' > %CONF_FILE% echo control_files='%PREFIX_DIR%\dbf\control.dbf' >> %CONF_FILE% echo audit_file_dest='%PREFIX_DIR%\dump\adump' >> %CONF_FILE% echo core_dump_dest='%PREFIX_DIR%\dump\cdump' >> %CONF_FILE% echo undo_management='AUTO' >> %CONF_FILE% echo undo_tablespace='UNDO' >> %CONF_FILE%
サービスの作成
oradim -NEW -SID %SID% -SYSPWD manager -PFILE %CONF_FILE%
インスタンスの起動
set TEMP_FILE=%TEMP%\xe_startup.sql set ORACLE_SID=%SID% echo startup nomount pfile=%CONF_FILE% > %TEMP_FILE% echo exit > %TEMP_FILE% sqlplus / as sysdba @%TEMP_FILE% del %TEMP_FILE%
データベースの作成
set TEMP_FILE=%TEMP%\xe_create_db.sql echo create database %SID% > %TEMP_FILE% echo logfile group 1 ('%PREFIX_DIR%\dbf\redo1.dbf') size 32M, >> %TEMP_FILE% echo group 2 ('%PREFIX_DIR%\dbf\redo2.dbf') size 32M, >> %TEMP_FILE% echo group 3 ('%PREFIX_DIR%\dbf\redo3.dbf') size 32M >> %TEMP_FILE% echo character set JA16SJISTILDE >> %TEMP_FILE% echo national character set utf8 >> %TEMP_FILE% echo datafile '%PREFIX_DIR%\dbf\system.dbf' >> %TEMP_FILE% echo size 240M autoextend on >> %TEMP_FILE% echo next 16M maxsize unlimited >> %TEMP_FILE% echo extent management local >> %TEMP_FILE% echo sysaux datafile '%PREFIX_DIR%\dbf\sysaux.dbf' >> %TEMP_FILE% echo size 48M autoextend on >> %TEMP_FILE% echo next 8M maxsize unlimited >> %TEMP_FILE% echo undo tablespace undo >> %TEMP_FILE% echo datafile '%PREFIX_DIR%\dbf\undo.dbf' >> %TEMP_FILE% echo size 48M autoextend on >> %TEMP_FILE% echo default temporary tablespace temp >> %TEMP_FILE% echo tempfile '%PREFIX_DIR%\dbf\temp.dbf' >> %TEMP_FILE% echo size 8M autoextend on; >> %TEMP_FILE% echo exit >> %TEMP_FILE% sqlplus / as sysdba @%TEMP_FILE% del %TEMP_FILE%
必要なスクリプトの実行
set TEMP_FILE=%TEMP%\xe_additional_script1.sql echo @?\RDBMS\ADMIN\catalog.sql > %TEMP_FILE% echo @?\RDBMS\ADMIN\catproc.sql >> %TEMP_FILE% echo exit >> %TEMP_FILE% sqlplus / as sysdba @%TEMP_FILE% del %TEMP_FILE% set TEMP_FILE=%TEMP%\xe_additional_script2.sql echo @?\sqlplus\admin\pupbld.sql > %TEMP_FILE% echo exit >> %TEMP_FILE% sqlplus system/manager as sysdba @%TEMP_FILE% del %TEMP_FILE%
ユーザ用環境構築
set TEMP_FILE=%TEMP%\xe_create_user_tablespace.sql echo create tablespace users > %TEMP_FILE% echo datafile '%PREFIX_DIR%\DBF\user.dbf' >> %TEMP_FILE% echo size 300M >> %TEMP_FILE% echo autoextend on maxsize 1024M >> %TEMP_FILE% echo extent management local >> %TEMP_FILE% echo segment space management auto; >> %TEMP_FILE% echo create user dbadmin identified by dbadmin >> %TEMP_FILE% echo default tablespace users >> %TEMP_FILE% echo temporary tablespace temp >> %TEMP_FILE% echo quota unlimited on users; >> %TEMP_FILE% echo grant connect, resource, dba to dbadmin; >> %TEMP_FILE% echo exit >> %TEMP_FILE% sqlplus system/manager as sysdba @%TEMP_FILE% del %TEMP_FILE%
listener.ora
XEと、新規のインスタンスの2つと接続できるようにリスナーの設定を編集。
※管理者権限じゃないと編集できない。
変更前。
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = D:\oraclexe\app\oracle\product\11.2.0\server) (PROGRAM = extproc) ) (SID_DESC = (SID_NAME = CLRExtProc) (ORACLE_HOME = D:\oraclexe\app\oracle\product\11.2.0\server) (PROGRAM = extproc) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) (ADDRESS = (PROTOCOL = TCP)(HOST = plutow)(PORT = 1521)) ) ) DEFAULT_SERVICE_LISTENER = (XE)
変更後。
[]内は自分の環境に変更してください(ORACLE_HOMEとSERVICE_NAME)。
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = D:\oraclexe\app\oracle\product\11.2.0\server) (PROGRAM = extproc) ) (SID_DESC = (SID_NAME = CLRExtProc) (ORACLE_HOME = D:\oraclexe\app\oracle\product\11.2.0\server) (PROGRAM = extproc) ) (SID_DESC = (SID_NAME = XE) (ORACLE_HOME = [ORACLE_HOMEのパス]) (SERVICE_NAME = XE) ) (SID_DESC = (SID_NAME = ORCL) (ORACLE_HOME = [ORACLE_HOMEのパス]) (SERVICE_NAME = [新規インスタンス名]) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) (ADDRESS = (PROTOCOL = TCP)(HOST = plutow)(PORT = 1521)) ) ) DEFAULT_SERVICE_LISTENER = (XE)
データベース開始のバッチの編集
notepadを管理者権限で実行して、以下のファイルを開きます。
※%ORACLE_HOME%は自分で置換してください。
%ORACLE_HOME%\bin\StartDB.bat
変更前。
@echo off net start OracleXETNSListener 2>nul net start OracleServiceXE 2>nul @oradim -startup -sid XE -starttype inst > nul 2>&1
変更後。※%SID%は自分で置換してください。
@echo off net stop OracleService%SID% net start OracleXETNSListener 2>nul net start OracleServiceXE 2>nul @oradim -startup -sid XE -starttype inst > nul 2>&1
新規インスタンス用のデータベース開始のバッチを作成
新規インスタンス用のデータベース開始用のバッチを以下のファイル名で作成します。
※%ORACLE_HOME%、%SID%は自分で置換してください。
%ORACLE_HOME%\bin\StartDB%SID%.bat
以下の内容を記述します。
@echo off net stop OracleServiceXE 2>nul net start OracleXETNSListener 2>nul net start OracleService%SID% @oradim -startup -sid %SID% -starttype inst > nul 2>&1
作成したら、ショートカットを以下のフォルダに作成します。
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Oracle Database 11g Express Edition
作成したショートカットのプロパティを以下のように変更します。
- 名前を「データベースの起動(%SID%)」に変更します。
- アイコンをStartBD.ico(ファイル名が間違っている)に設定します。
- リンク先を「データベースの起動」と同じ形式にします。
- プロパティ画面の[ショートカット]タブの詳細設定」で「管理者として実行」にチェックします。
データベースの停止のバッチの編集
notepadを管理者権限で実行して、以下のファイルを開きます。
※%ORACLE_HOME%は自分で置換してください。
%ORACLE_HOME%\bin\StartDB.bat
変更前。
net stop OracleServiceXE
変更後。※%SID%は自分で置換してください。
net stop OracleServiceXE
net stop OracleService%SID%