• ベストアンサー

データベースのバックアップ

過去に同じ内容の質問があったのですが、そちらの回答ではまだ理解ができなかったので、 どなたかご存知でしたら教えてください。 条件 Oracle9iデータベースのバックアップ OS:windows2000server タスクでスケジュール化して、深夜にコールドバックアップを行うバッチファイルを作成。 同時に、必要ならばアーカイブファイルモードでのバックアップすることも可能。 データベースの容量は30G程度を予定。 バックアップ場所は、外付けHDD。 任された私は、これが初めてのデータベース管理者。 色々なページを参考にさせていただいて、何となく手動でのバックアップ手順は分かったのですが、 これを自動化する仕方がさっぱりわかりません。 SQLPLUSコマンドの select name from v$datafile select name form v$control_file select bytes, name from v$tempfile で表示されるファイルのバックアップ(コピー)をとれば、完全なリカバリは可能でしょうか? 初心者な考え方かもしれませんが、oracle\フォルダ以下、全てをコピーする方法と、 このようにデータファイルや制御ファイル等、フォルダ名を指定してバックアップをとる方法は どう違うのでしょうか。 容量のことよりも、とにかく万が一の時に確実にリカバリできるようにしたいのです。 また、この二番目のselect name form v$control_fileのセレクト文では何も選択されません。 これは私のOracleのインストール方法が悪かったのでしょうか? これをもしbatファイル等で自動化したとき、select文の結果をどう指定すればバックアップできるのでしょうか。 内容がまとまっておらず、大変分かりにくい質問になってしまいましたが、 どうかよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • guchi32
  • ベストアンサー率100% (10/10)
回答No.2

コールドバックアップ前提ということで。 ■バックアップ対象について 最低限の対象としては、上記+オンラインREDOログのバックアップが必要です。 select member from v$logfile; などで参照してください。 ただし、PFILE、SPFILE、LISTENERファイルなど関連するものをすべてバックアップ取ることが確実なリカバリへ繋がります。したがって、$ORACLE_BASE以下のディレクトリ構造もバックアップするべきです。 ※$ORACLE_HOME/dbsにパスワードファイルやPFILEなど重要なファイルが存在します。また、bdumpやcdumpなどディレクトリがなければ、起動時にエラーになる場合もあります。 ■フォルダ名を指定してバックアップをとる方法との違い データベース運用ポリシーによって異なります。 例えば、HDD容量が不足し、データベース用に外付けHDDを追加した場合、フォルダ名の指定をしていれば、新たにバックアップ対象に追加してやる必要があります。 これを上記されたように、SQLで動的に毎回チェックしていれば、このような追加HDDを意識する必要はありません。 「データファイルは既存のフォルダ以外に追加しない」「万が一増設ディスクに入れることになれば、バックアップシェルを修正する」というポリシーであれば、フォルダ一括の方が簡単で確実かもしれません。 実は私はWindowsはあまりわかっていないのですが、SolarisやLinuxの場合はアプリケーションをかぶせてコピー(リカバリ)しても問題ありませんが、Windowsの場合レジストリとの関連があるので、どうなんでしょう? ■アーカイブログについて アーカイブログモードになっているのであれば、アーカイブログディレクトリもバックアップしましょう。 コールドバックアップ後に障害が発生した場合、「どこまで最新の状態に戻せるか」という質問が必ず来るでしょう。そのとき、アーカイブログとオンラインREDOログがなければ、「コールドバックアップを取った時点まで」としか言えません。 オンラインREDOとアーカイブがあれば、障害が起きる直前までリカバリを行うことができます。(ポイントインタイムリカバリ:時間指定も可能) ■コントロールファイルの結果が表示されない これはわかりませんねぇ。ちなみに「v$contorl_file」ではなく「v$controlfile」です。 どうしても・・・というなら、「select value from v$parameter where name = 'control_files'」などで代替できますが・・・。 コントロールファイルは肝です。問題があればデータベースに大きな影響が出るか、その要因をはらんでいます。運用開始していないのであれば、今のうちにデータベース再作成するなり、安心できる状態にしておいた方いいのではないでしょうか。 ちなみに問題があるとすれば、OracleのインストールではなくCreateDatabaseの作業過程の方が怪しいと思いますよ。 ■バックアップの自動化について これは、どのようにバッチスクリプトを作成すれば良いですか、という質問でしょうか? シェルスクリプトならわかるのですが、Windowsは自信がありません。

help3hoimi
質問者

お礼

お礼が遅くなり申し訳ありません。 全てバックアップしてしまっても問題ないのでしたら、 そちらのほうが安心できていいですね。 oracle以下全ファイルを取得する方向で進めていくことにします! ありがとうございました!!

その他の回答 (2)

回答No.3

私の勤めている会社ではデータ用、制御用、REDO用・・・・と機能別にフォルダを作成してフォルダをまとめてコピーしています。この方法だとバッチファイルに直接ファイル名やフォルダ名を記述するのでselect文の内容を反映させる必要がありません。毎日コピーしていますが、上書コピーでなく日付フォルダを作成しその中にコピーしています。 保存期間はバックアップポリシーにもよりますが古いフォルダから削除されたらよろしいかと。 あと本題とは直接関係ありませんが、エクスポートもバックアップ作業項目に入れておいた方が良いと思います。

help3hoimi
質問者

お礼

バックアップと一言でいっても、色々とあるんですね。 日付別フォルダの作成や、エクスポートもバックアップに入れるなど、大変参考になりました。 ありがとうございました。

回答No.1

やりたいことが不明瞭なのですが.. コールドバックアップがしたいのであれば、 (1)データベースの停止(正常な状態で停止させる) (2)関連するモノ全部セーブ (3)データベースの開始 とすれば良いでしょう。 正常に停止したデータベースをセーブするのであれば、 そこまでのアーカイブログの保存は特に必要がありません。 このあたりは、マニュアルのバックアップガイドに書いてありますので 一度は目を通した方が良いと思います。

help3hoimi
質問者

お礼

お礼が遅くなり申し訳ありませんでした。 アーカイブログの保存をしないと上の者に報告したところ、却下されてしまいました(涙)。 ですが、アドバイスありがとうございました。

関連するQ&A