Oracle Databaseにおいて、データベースを稼働させたままバックアップを取得する手法をホットバックアップ(オンライン・バックアップ)と呼びます。本来はRMAN(Recovery Manager)の使用が推奨されますが、環境上の制約などでOSコマンドによる手動取得が必要なケースもあります。
この記事では、元記事の全手順を省略せず、19c環境に即した正しいOracle ホットバックアップの手順を詳細に解説します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
結論:ホットバックアップの全体フロー(7ステップ)
ホットバックアップは、以下の順序で全ての要素(データファイル、制御ファイル、ログ等)を漏れなく取得します。
- モード確認:
ARCHIVELOGモードであることを確認。 - ログ切替:
ALTER SYSTEM ARCHIVE LOG CURRENT;を実行。 - 宣言:
ALTER TABLESPACE <表領域名> BEGIN BACKUP;を実行。 - コピー: OSコマンド(
cpやcopy)でデータファイルを複製。 - 終了:
ALTER TABLESPACE <表領域名> END BACKUP;を実行。 - 制御等: 制御ファイル、パラメータファイル、パスワードファイルをバックアップ。
- 再切替: 再度ログを切り替えてアーカイブログをコピー。
前提条件:アーカイブログモードの確認と設定
ホットバックアップを取得するには、データベースが アーカイブログモード(ARCHIVELOGモード) である必要があります。
現在のモードを確認する
以下のSQLを実行して、現在の設定を確認してください。
SELECT LOG_MODE FROM V$DATABASE;
- ARCHIVELOG: ホットバックアップ可能です。
- NOARCHIVELOG: ホットバックアップ不可です。以下の手順でモードを変更してください。
アーカイブログモードへの変更手順
-- 1. データベースをマウントモードで起動
SHUTDOWN IMMEDIATE
STARTUP MOUNT
-- 2. アーカイブログモードに変更
ALTER DATABASE ARCHIVELOG;
-- 3. データベースをオープン
ALTER DATABASE OPEN;
-- 4. 設定の再確認
SELECT LOG_MODE FROM V$DATABASE;
手順・実装:ホットバックアップの完全実行プロセス
元記事で紹介されている全ステップを、コマンドを省略せずに解説します。
1. アーカイブログのスイッチ
現在のメモリ上のREDOログをディスクへ強制的にアーカイブします。
ALTER SYSTEM ARCHIVE LOG CURRENT;
2. データベースをホットバックアップモードに変更
バックアップ対象の表領域をバックアップモードに移行させます。
ALTER TABLESPACE <表領域名> BEGIN BACKUP;
3. データファイルのコピー
表領域がバックアップモードの間に、OSコマンドでファイルをコピーします。 ファイルのパスを確認するSQL:
SELECT FILE_NAME FROM DBA_DATA_FILES;
コピー実行例(Linuxの場合):
cp /u01/app/oracle/oradata/ORCL/users01.dbf /backup/users01.dbf
4. バックアップモードを終了
コピー完了後、速やかにバックアップモードを解除します。解除を忘れるとREDOログが大量に生成され続けます。
ALTER TABLESPACE <表領域名> END BACKUP;
5. 制御ファイルのバックアップ
制御ファイルは BEGIN BACKUP の対象外のため、SQLコマンドで個別にバックアップします。
-- バイナリ形式で取得
ALTER DATABASE BACKUP CONTROLFILE TO '/backup/control01.ctl';
-- トレースファイル(テキスト)形式で取得する場合
ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
6. アーカイブログのスイッチとバックアップ
バックアップ期間中のログを確定させるため、再度スイッチを行います。
ALTER SYSTEM ARCHIVE LOG CURRENT;
その後、OSコマンドでアーカイブファイルをコピーします。 パスを確認するSQL: SHOW PARAMETER log_archive_dest コピー実行例:
cp /u01/app/oracle/archivelog/* /backup/archivelog/
7. 初期化パラメータとパスワードファイルのバックアップ
インスタンスの構成情報も忘れずに保護します。
- SPFILEのバックアップ:
CREATE PFILE='/backup/initORCL.ora' FROM SPFILE; - PFILEのコピー(Linux例):
cp $ORACLE_HOME/dbs/initORCL.ora /backup/initORCL.ora - パスワードファイルのコピー(Linux例):
cp $ORACLE_HOME/dbs/orapwORCL /backup/orapwORCL
ホットバックアップのリストア・リカバリ方法
取得したファイルを使用して復旧する際の流れです。
- ファイルの配置: バックアップしたデータファイルと制御ファイルを元の場所に戻します。Bash
cp /backup/users01.dbf /u01/app/oracle/oradata/ORCL/users01.dbf cp /backup/control01.ctl /u01/app/oracle/oradata/ORCL/control01.ctl - マウント: データベースをマウント状態で起動します。
STARTUP MOUNT - リカバリ実行: アーカイブログを適用して一貫性を確保します。
RECOVER DATABASE; -- 指示に従いアーカイブログを適用 - オープン: 完了後、データベースをオープンします。
ALTER DATABASE OPEN;
運用上の注意:メリットと落とし穴
- 注意点:
BEGIN BACKUP状態の表領域は、ブロック全体がREDOログに書き込まれるため、通常よりログ生成量が大幅に増えます。 - リスク: 手動操作が多いため、
END BACKUPの漏れやコピーミスが起きやすいのが欠点です。 - 推奨: 特別な理由がない限り、これらの複雑な手順を自動化・簡略化できる RMANの使用 を強く推奨します。
FAQ:よくある質問
Q1. BEGIN BACKUP を忘れて OS コピーしたファイルは使えますか?
いいえ、使えません。稼働中のファイルはコピー中に内容が書き換わっており、そのままでは「分割ブロック」が含まれ、リストアしても起動できません。
Q2. 全ての表領域を一度に BEGIN BACKUP しても良いですか?
文法上は可能(ALTER DATABASE BEGIN BACKUP;)ですが、REDOログの書き込み負荷が一点に集中するため、運用中のシステムでは表領域ごとに順次行うのが安全です。
Q3. リカバリ時に「ログが必要」と言われたら?
バックアップ終了後に取得したアーカイブログを適用する必要があります。ステップ6で取得したファイルを指定してください。
まとめ
- ホットバックアップには ARCHIVELOGモード が必須。
BEGIN BACKUP~END BACKUPの間に OSコピー を実施。- 制御ファイル、SPFILE、アーカイブログ もセットでバックアップ。
- 手順ミスを防ぐため、可能な限り RMANへの移行 を検討。
本記事は Oracle Database 19c を対象に解説します(他バージョンは画面や既定値が異なる場合があります)。
[参考]
Oracle Database バックアップおよびリカバリ・ユーザーズ・ガイド 19c
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?



コメント