始める前に
Windows 環境で Oracle データベースを検出して保護し、マウントする前に、次のことを確認してください。
データベース サーバーで次の設定を確認します。
Oracle データベースと Oracle リスナーが稼働している(Windows サービスを確認)。
SID という名前の tns エントリがあることを確認します。tnsnames.ora ファイルは
%ORACLE_HOME%\network\admin
次のコマンドを実行して、tns エントリが有効であることを確認します。
%ORACLE_HOME%\bin\tnsping <SID>
ログモードがアーカイブログ モードに設定されているかどうかを確認します。
sql> archive log list
データベースがアーカイブ ログ モードでない場合は、アーカイブ ログ モードに戻します。
sql> shutdown immediate; sql> startup mount; sql> alter database archivelog; sql> alter database open;
データベース変更ブロック トラッキングを有効にします。データベース BCT がオフの場合、増分バックアップ時間に影響します。変更ブロックのトラッキング機能は Oracle Enterprise Edition で使用できます。SQL クエリを実行して、変更ブロックのトラッキングが有効になっていることを確認します。クエリを実行します。
sqlplus / as sysdba sql> select * from v$block_change_tracking;
変更ブロック トラッキングを有効にするには:
sql> alter database enable block change tracking
using file '<Oracle home directory>\orcl.bct';
Windows 環境で Oracle データベースをバックアップする
Windows 環境で Oracle データベースをバックアップする手順は次のとおりです。
Oracle データベースのアプリケーションの詳細と設定を設定します。
バックアップ プランを適用してデータベースを保護します。
報告されている問題
Oracle 19c SQLPlus(sqlplus.exe)が、exit コマンドを実行するときに Windows でハングすることがあります(Doc ID 2820655.1)。このバグは Windows に固有のものです。Oracle は、この問題が SQLPlus バージョン 19.10、19.11、19.12 で発生することを確認しています。Oracle は次のソリューションを提供しました。
- SQL*Plus 21.1 以降を使用する(または)
- パッチ 31466370 を適用します。このパッチは 19.11 と 19.13 で利用できます。
アーカイブログがバックアップと DR で保護されていない場合、Windows 環境の Oracle データベースを RMAN を使用してスケジュールされたバックアップ ポイントに手動で復元する
Windows 環境で Oracle データベース全体を復元するには:
Oracle データベースを標準マウントとしてマウントするで説明されているように、バックアップと DR からデータベース バックアップ スナップショットを Oracle サーバーにマウントします。
バックアップと DR のマウントされたボリュームのパラメータ ファイルを使用して、データベース環境を設定し、マウントされていない状態でデータベースを起動します(E: にマウントされたデータベース ボリュームの場合など)。
sqlplus / as sysdba sql> startup nomount pfile='E:\<sid>___backup.ora';
pfile から spfile を作成します。
sql> create spfile='%ORACLE_HOME%\database\spfile<sid>.ora' from pfile='E:\<sid>___backup.ora';
spfile が
nomount
状態のデータベースを起動します。sql> shutdown immediate; sql> startup nomount;
バックアップと DR のマウントされたボリュームから RMAN を使用して制御ファイルを復元します。
rman target / rman> restore controlfile from 'E:\cf-D_<sid>-id_<id>.ctl';
データベースをマウントします。
rman> alter database mount;
バックアップと DR にマウントされたボリュームからデータファイルとアーカイブ ファイル フォルダを RMAN にカタログに登録します。
rman> run { catalog start with 'E:\datafile' noprompt; catalog start with 'E:\archivelog' noprompt; }
データベースを復元して復元します。
rman> run { restore database; recover database; }
ログをリセットするオプションを使用してデータベースを開きます。
rman> alter database open resetlogs;
バックアップと DR で保護されたアーカイブログのローリング フォワードを使用して、RMAN を使用して Windows 環境の Oracle データベースを手動でスケジュール設定されたバックアップ ポイントに復元する
ソース データベース サーバーからイメージをマウントして復元します。Oracle データベースを標準マウントとしてマウントするで説明されているように、バックアップと DR からバックアップ スナップショットを Oracle サーバーにマウントします。
バックアップと DR のマウントされたボリュームのパラメータ ファイルを使用して、データベース環境を設定し、マウントされていない状態でデータベースを起動します。この例では、データベースのバックアップ イメージは E:\ にマウントされ、保護されたアーカイブ ログは Z: にマウントされています。
sqlplus / as sysdba
startup nomount pfile='E:\<sid>___backup.ora';
pfile から spfile を作成します。
sql> create spfile='%ORACLE_HOME%\database\spfile<sid>.ora' from pfile='E:\<sid>___backup.ora';
spfile を nomount 状態でデータベースを起動します。
```sql shutdown immediate; startup nomount; ```
バックアップと DR にマウントされたアーカイブ ログ イメージから RMAN を使用して制御ファイルを復元します。
```rman rman target / rman> restore controlfile from 'Z:\cf-D_<sid>-id_<id>.ctl'; ```
データベースをマウントします。
```rman rman> alter database mount; ```
バックアップと DR にマウントされたデータベース イメージとアーカイブログ イメージから、データファイルとアーカイログ フォルダを RMAN にカタログに登録します。
```rman rman> run { catalog start with 'E:\datafile' noprompt; catalog start with 'E:\archivelog' noprompt; catalog start with 'Z:\archivelog' noprompt; } ```
データベースを復元して復元します。
```rman rman> run { restore database; recover database; } ```
特定の時点の復元の場合は、次のように recover コマンドを実行します。
```rman rman> run { restore database; recover database until time "to_date('<time stamp>','yyyymmddhh24mi')"; } ```
ログをリセットするオプションを使用してデータベースを開きます。
```rman rman> alter database open resetlogs; ```
データベースは読み取りと書き込みに使用できます。
データベース ボリュームのマウントを監視するウォッチ スクリプト
アプリケーション対応のマウントを作成する場合は、ウォッチ スクリプトを使用して、バックアップと DR からマウントされているボリュームと、実行中の Oracle プロセスを表示できます。アプリケーション認識型マウントについては、Oracle データベースを仮想アプリケーションとしてマウントするをご覧ください。
アプリケーション対応のマウントを実行する場合は、このウォッチ スクリプトを使用できます。スクリプトの場所は C:\Program Files\Backup and DR\scripts にする必要があります。Windows ホストで実行されるスクリプトは、.bat ファイルまたは .vbs ファイルである必要があります。
```Windows
@echo off
:loop
echo. > watchtemp
echo ------------------ >> watchtemp
echo Oracle Processes >> watchtemp
echo ------------------ >> watchtemp
tasklist /svc | findstr oracle >> watchtemp
echo. >> watchtemp
echo ------------------ >> watchtemp
echo Backup and DR Mounts >> watchtemp
echo ------------------ >> watchtemp
wmic volume get label, name | findstr Backup and DR >> watchtemp
echo. >> watchtemp
cls
type watchtemp
timeout 2 > null
goto loop
```
出力は次のようになります。
Oracle Processes
------------------
oracle.exe 1492 OracleServiceORCL
oracle.exe 3768 OracleServiceTestDB
oracle.exe 872 OracleServiceTestDB2
------------------
Backup and DR Mounts
------------------
Backup and DR-Backup-ORCL D:\mount_1