【expdp/impdp】バックアップを取得して安全にデータベース運用

Oracleに限らずデータベースを使用されている企業さんは多いと思いますが、データベース利用とセットになるのが「バックアップ」。万が一災害などでデータが吹き飛んでしまったら、超大問題です。業務が続けられなくなるだけでなく、信頼を失ってしまうかもしれません。そんなときにバックアップをしっかり取っておけば、大切に積み上げてきたデータを守ることができ、リスクを抑えられる可能性が高まります。

 
そんな大事なバックアップ処理。自動化されているケースも多いかと思いますが、先日Oracleデータベースにおいて手動でバックアップ&リストアをする機会がありましたので、その方法について今回はお話してみようと思います。

Exportでデータを取り出す

まずは、データベースに登録されているデータを「expdp」コマンドを使用して取り出します。基本的な情報(ユーザー名やパスワード)に加えて、オプションを使用することで条件を追加してエクスポートすることが可能です。今回は特定のテーブルを、特定の場所に、特定の名前でエクスポートしてみようと思います。

expdp user/password tables=test_table directory=test_directory dumpfile=test_table.dmp

 

上記のコマンドをコマンドプロンプトで実行すると、[test_table]というテーブルのデータが、[test_directory]という場所に[test_table.dmp]ファイルとして出力されます。

DIRECTORY(ディレクトリ)の指定

ディレクトリというのは、とても簡単に噛み砕いて言うと、「フォルダ」のようなもの(厳密に言うと違うようですが・・)。しかし、上記コマンドの「directory=test_directory」ではパソコン上のフォルダそのものを直接指定することができません。データベース上にDIRECTORY(ディレクトリ)を別途作成しておく必要があります。以下のSQL文を実行することで簡単に作成することができます。

CREATE DIRECTORY test_directory AS 'C:\test\dump';

 

AS以降の部分でフォルダの場所を指定し、[test_directory]という名前で登録しています。実際のフォルダ名とDIRECTORY名は異なっていても問題ありません。エクスポートする前に作成しておかなければならない、というのが初心者的には困惑するポイントだなと思いました。最初はよくわからないまま直接フォルダのパスを記載していましたが、完全にエラーになります。

Importでデータを戻す

うまくデータを取り出すことが出来たら、再度データベースへ取り込んでみましょう。こちらもコマンド自体は簡単です。

impdp user/password tables=test_table dirctory=test_directory table_exists_action=truncate dumpfile=test_data.dmp

 

インポートの際のDIRECTORY指定は、DUMPFILEが入っている場所を指定します。今回の設定だと[dump]フォルダ内に[test_data.dmp]ファイルを入れておかないとエラーになります。また、「table_exists_action=truncate」はすでに同じ名前のテーブルがあった際の挙動を指定しています。TRUNCATEは削除してから読み込む、という設定です。

エクスポートもインポートも、コマンド自体は案外シンプルで、それほど難しくありません。必要に応じてオプションを追加すると、細かい条件に合わせて処理してくれるので、非常に便利ですね。DIRECTORYの設定も知ってさえいればやり方は簡単です。

 
バックアップを取ること自体はどのデータベースでも、おそらくそれほど難しくはないことでしょう。あとは自動化するのか?どんな頻度で実行するのか?どの場所に置いておくのか?など、運用方法を考えることが大切になりそうです。

 

私もスマホが壊れて思い出の写真がすべて消し飛んだ経験があるので、バックアップの大切さは身に染みて知っています。現在は自動でクラウド上にアップロードされるようにしているので、本体が壊れてもとりあえずは安心です。しかしデータを本体に戻すときに失敗した経験もあるので・・・バックアップを取るだけでなく、有事の際にどのように処理を進めるべきなのか、というところもしっかり考える必要があるのかなと思います。

author:

フォーム

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です