こんにちは! 健史です。
OracleXE-21C環境で、初期化パラメータファイルをSPFILLEからPFILEへ変更してみました。
OracleXE-21C以外のバージョンもいくつかインストールしたことがありますが、インストール直後はすべてSPFILEになります。
SPFILLEとPFILEの違いを簡単に説明します。
・SPFILE
バイナリ形式で、個々のパラメータの追加・変更はコマンドで行い、サービス再起動の必要はありません。
・PFILE
テキスト形式で、個々のパラメータの追加・変更はテキストを修正し、サービス再起動が必要です。
SPFILLEかPFILEの確認
まずは念のため、どちらのモードで実行しているのか確認します。
C:\>sqlplus sys/oraadmin as sysdba SQL*Plus: Release 21.0.0.0.0 - Production on 金 5月 5 13:26:03 2023 Version 21.3.0.0.0 Copyright (c) 1982, 2021, Oracle. All rights reserved. Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production Version 21.3.0.0.0 に接続されました。 SQL> select count(*) from v$spparameter where value is not null; COUNT(*) ---------- 19
上記SELECT文でCOUNT(*)が0件でなければ、SPFILEで動作しているとのことです。
PFILEをSPFILEから作成
SPFILEの格納場所を確認します。
SQL> select value from v$parameter where name = 'spfile'; VALUE ---------------------------------------------------------------------------------------------------- C:\ORACLE\DATABASE\SPFILEXE.ORA
データを格納しているフォルダ内にPFILEをファイル名[PFILE01.ora]で作成します。
SQL> CREATE PFILE='C:\oracle\oradata\XE\PFILE01.ora' FROM SPFILE='C:\ORACLE\DATABASE\SPFILEXE.ORA'; ファイルが作成されました。
SPFILEはバイナリなので一部が文字化けしていますが、
PFILEはテキスト形式なので、文字化けしていません。
SPFILEモードを無効化する
SPFILEモードを無効化するために、SPFILEモードで起動するファイルを所定の場所から無くします。
削除はせずに、退避用フォルダを作成し移動しておきます。
SPFILEモード関連のファイルを別フォルダへ移動するためには不要かもしれませんが、安全を考え、また後でサービスを再起動が必要であることもありサービスを停止します。
サービスを停止するバッチです。
echo off rem Oracleの各サービスをシャットダウンする rem 実行ディレクトリを取得 set current_dir=%~dp0 rem データベース を停止 sqlplus /nolog @%current_dir%shutdown.sql rem OracleSIDサービスを停止 sc stop OracleServiceXE rem リカバリサービスを停止 sc stop OracleOraDB21Home1MTSRecoveryService rem リスナー を停止 sc stop OracleOraDB21Home1TNSListener pause exit
shutdown.sqlです。
パスワードは[oraadmin]ですが、インストール時に設定したそれぞれの値に変更します。
connect sys/oraadmin as sysdba shutdown immediate exit
新たにフォルダを作成し、2つのファイルを移動します。
バックアップフォルダを作成し、
バックアップフォルダ内に[initXE.ora]、[SPFILE.ORA]を移動します。
PFILEでの起動バッチと確認
起動バッチを作成し、実行します。
echo off rem リスナー を起動 sc start OracleOraDB21Home1TNSListener :step01 rem サービスが停止されているかチェック sc query OracleOraDB21Home1TNSListener | findstr STATE | findstr RUNNING > null if not %ERRORLEVEL%==0 ( rem RUNNINGでなければ、2秒待ってチェックに戻る TIMEOUT /T 2 echo "Listener startupping " %ERRORLEVEL% goto step01 ) rem Oracleの各サービスを起動する sc start OracleServiceXE :step02 rem サービスが停止されているかチェック sc query OracleServiceXE | findstr STATE | findstr RUNNING > null if not %ERRORLEVEL%==0 ( rem RUNNINGでなければ、2秒待ってチェックに戻る TIMEOUT /T 2 echo "OracleServiceXE startupping " %ERRORLEVEL% goto step02 ) rem リカバリサービスを起動 sc start OracleOraDB21Home1MTSRecoveryService :step03 rem サービスが停止されているかチェック sc query OracleOraDB21Home1MTSRecoveryService | findstr STATE | findstr RUNNING > null if not %ERRORLEVEL%==0 ( rem RUNNINGでなければ、2秒待ってチェックに戻る TIMEOUT /T 2 echo "RecoveryService startupping " %ERRORLEVEL% goto step03 ) rem 実行ディレクトリを取得 set current_dir=%~dp0 rem データベース を起動 sqlplus /nolog @%current_dir%startup.sql pause exit
shutdown.sqlです。
パスワードは[oraadmin]ですが、インストール時に設定したそれぞれの値に変更します。
connect sys/oraadmin as sysdba startup PFILE='C:\oracle\oradata\XE\PFILE01.ora' exit
実行結果です。
C:\Oドライブ>echo off SERVICE_NAME: OracleOraDB21Home1TNSListener TYPE : 10 WIN32_OWN_PROCESS STATE : 2 START_PENDING (NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN) WIN32_EXIT_CODE : 0 (0x0) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x7d0 PID : 13204 FLAGS : SERVICE_NAME: OracleServiceXE TYPE : 10 WIN32_OWN_PROCESS STATE : 2 START_PENDING (NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN) WIN32_EXIT_CODE : 0 (0x0) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x7d0 PID : 9792 FLAGS : 0 秒待っています。続行するには何かキーを押してください ... "OracleServiceXE startupping " 1 SERVICE_NAME: OracleOraDB21Home1MTSRecoveryService TYPE : 10 WIN32_OWN_PROCESS STATE : 2 START_PENDING (NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN) WIN32_EXIT_CODE : 0 (0x0) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x1 WAIT_HINT : 0x1388 PID : 14272 FLAGS : 2 秒待っています。続行するには何かキーを押してください ... "RecoveryService startupping " 1 SQL*Plus: Release 21.0.0.0.0 - Production on 金 5月 5 14:10:33 2023 Version 21.3.0.0.0 Copyright (c) 1982, 2021, Oracle. All rights reserved. アイドル・インスタンスに接続しました。 ORACLEインスタンスが起動しました。 Total System Global Area 1610608752 bytes Fixed Size 9855088 bytes Variable Size 570425344 bytes Database Buffers 1023410176 bytes Redo Buffers 6918144 bytes データベースがマウントされました。 データベースがオープンされました。 Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production Version 21.3.0.0.0との接続が切断されました。 続行するには何かキーを押してください . . .
PFILEで動作していることを確認します。
C:\>sqlplus sys/oraadmin as sysdba SQL*Plus: Release 21.0.0.0.0 - Production on 金 5月 5 14:16:43 2023 Version 21.3.0.0.0 Copyright (c) 1982, 2021, Oracle. All rights reserved. Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production Version 21.3.0.0.0 に接続されました。 SQL> sele ct count(*) from v$spparameter where value is not null; COUNT(*) ---------- 0
上記SELECT文でCOUNT(*)が0件であれば、SPFILEではなくPFILEで動作しているとのことです。
この後、SQL-DEVELOPERで確認しましたが、接続し検索なども実行できることを確認しました。
最後に
オラクルDBインストールの目的が「SQL学習」のためだけであれば、SPFILEモードで十分です。
PFILEモードではパラメータ項目の追加や値を変更する場合に、オラクルサービスの再起動が必要です。
しかしテキスト形式なので、SPFILEモードよりは変更管理がしやすいと思います。
オラクルの環境回りに携わり始めた方は、テキストで学習するだけでは身に付きにくいです。
職場でオラクルを自由に触れる環境がない方、クラスタを始めとする大規模な環境ではありませんが、基本的なことは21c-XE環境で試せそうです。
もしいろいろ試している間に、マイパソコンの21c-XE環境が壊れたら、アンインストール・再インストールすれば初期状態に戻ります。
職場でも使用したい!という方は、許可を得て職場のパソコンに導入してみてはいかがでしょうか。
参考にして頂ければと思います。
コメント