LinuxではOracleを別サーバーへ丸ごと移行する際、データベースを安全に停止した後、OSユーザー/グループを作り、環境変数を書き換え、$ORACLE_BASE 以下をコピーすれば再起動できる。Windowsでも同様に「OS再インストール後に最小手順で復旧」できるか検証した。
前提条件
- OS再インストール前に
D:\OracleBase以下のディレクトリは丸ごと残してある - バージョンは 11gR2 (11.2.0)
- SID は
ZEN
1. 環境変数の追加
システム環境変数を GUI または setx で設定する。
setx ORACLE_HOME D:\OracleBase\product\11.2.0\dbhome_1 /M
setx PATH "%ORACLE_HOME%\bin;%PATH%" /M
setx ORACLE_SID ZEN /M
2. OS 認証用グルグループの作成
ローカルグループ ORA_DBA を作成し、Administrator と SYSTEM を追加する。
net localgroup ORA_DBA /add
net localgroup ORA_DBA Administrator /add
net localgroup ORA_DBA SYSTEM /add
3. SQL*Plus での接続確認
sqlnet.ora が %ORACLE_HOME%\network\admin に存在し、次の内容になっていることを確認する。
SQLNET.AUTHENTICATION_SERVICES = (NTS)
NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT)
コマンドプロンプトを起動し、OS 認証で接続。
sqlplus / as sysdba
SQL> startup
4. サービス化までの落とし穴
手動起動は問題ないが、毎回 startup を実行するのは面倒。そこで oradim でサービスを作成しようとしたところ、次のエラーが発生した。
oradim -NEW -SID ZEN -STARTMODE manual -SPFILE
DIM-00019: create service error
O/S-Error: (OS 2) The system cannot find the file specified.
原因と対処
- レジストリ不足
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb11g_home1以下にORACLE_HOMEなどが存在していなかったため、手動でキーを作成した。 - サービスパス不一致
oradimが内部的に参照するパスが%ORACLE_HOME%ではなくorant\binになっていた。レジストリ値を修正後、再度実行するとサービス作成成功。 - 自動起動設定
作成されたサービスは起動してもインスタンスがNOMOUNTのままだった。
レジストリ値ORA_ZEN_AUTOSTARTをtrueに変更すると、サービス起動時にOPENまで自動で遷移した。
5. まとめ
Windows でも Linux と同様に「環境変数+レジストリ+グループ」の3要素さえ整えれば、データベースファイルを丸ごっと移動して最小手順で復旧できる。面倒な GUI インストーラを再実行する必要はない。