オラクル

ORACLE 無償版 XE-21c SPFILEからPFILEへの変更

オラクル

こんにちは! 健史です。

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環境が壊れたら、アンインストール・再インストールすれば初期状態に戻ります。

職場でも使用したい!という方は、許可を得て職場のパソコンに導入してみてはいかがでしょうか。


参考にして頂ければと思います。

オラクル
スポンサーリンク
- 面白かったらシェアお願いします! -
健史をフォローする
自分で改善

コメント