質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.83%

  • SQL

    2168questions

    SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

  • Server

    75questions

【緊急】SQLSERVER2008R2の復元方法

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 253

namiki_syou

score 1

【緊急】
SQLSERVER2008R2環境で間違えてUPDATEを実行してしまい、テーブルのキーがすべて更新されてしまいました。
SSMSでクエリを実行し、既にコミットも完了しております。

DBのバックアップはとっておらず、復旧モデルは「完全」のDBになっております。

UPDATEを実行してしまったのが、3時間ほど前なのでそこまで戻せればよいなと考えております。

よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+2

トランザクション ログが残っていれば復元は可能です。

以下参考。
SQL Server データベースを特定の時点に復元する方法 (完全復旧モデル)
特定の時点まで復元する方法 (SQL Server Management Studio)

追記

ちょっと心配になって追記。
傷を深くしないように、バックアップは必ず取ってから行ってください。

追記2

トランザクションログの情報のみを使用し、内容を解析して元情報を洗い出す。
※但しトランザクションログの構成を理解した上で行うことが前提なので、敷居は高いと思います。

トランザクションログのバックアップからログレコードの内容を確認
SQL Server トランザクション ログのアーキテクチャと管理ガイド

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/02 22:12

    回答ありがとうございます。

    現状はトランザクションログのバックアップ等もとっておらず、mdfファイルとlog_ldfファイルがあるままとなっております。
    参考となっているURLを見て再度検討したいと思います。
    ありがとうございました。

    キャンセル

  • 2018/05/02 22:17

    「トランザクションログのバックアップ」ではなく「トランザクションログ」です。
    現時点でfullバックアップ(トランザクションログ含む)の取得をお奨めします。
    他の方の紹介されているツールも結局はトランザクションログを利用していると思われます。

    キャンセル

  • 2018/05/02 22:18

    ありがとうございます。1人で焦ってしまい涙ながらに色々調べを進めています。
    バックアップの重要性が身にしみました。

    ちなみにトランザクションログファイルというのは間違えたUPDATEをした後にとった場合でも
    それ以前に戻すことは可能なのでしょうか

    キャンセル

  • 2018/05/02 22:20

    手間は掛かりますが、fullバックアップのデータを別環境に構築して復元し、そのデータ利用して本環境へ適用するなどの方法も考えられますので。

    キャンセル

  • 2018/05/02 22:22

    トランザクションログはどのような変更を行ったかの情報が記録されるので、updateに限らず変更前の状態に戻すことが可能です。

    キャンセル

  • 2018/05/02 22:22

    取り敢えず現状のバックアップを取っていなくてもあるポイントまでの復元が可能と知ってほっとしました。

    手間はかけてもよいのでFULLバックアップをローカル環境へ展開してみるやり方についても調べてみようと思います、。

    キャンセル

  • 2018/05/02 22:28

    トランザクションログは無限に蓄積されるわけではないので、準備に時間が掛かって、いざやろうとしたらその時点のログは破棄されていることもあり得ます。

    夜間中に大量のバッチが実行されたり、日中に大量の利用が発生して、ログが押し出されて残っていないという事も考えられます。

    なので、早急にfullバックアップ(くれぐれもトランザクションログ付きで)を取得された方が良いと思います。

    キャンセル

  • 2018/05/02 22:35

    なるほど、なるほど。。。
    ログが消えてしまう前にバックアップを取得いたしました。
    データベース右クリック=>タスク=>バックアップ=>データベースのバックアップ画面が開かれます。
    バックアップの種類を完全にしてバックアップをCドライブ内に作成しました。(.bak形式)

    トランザクションログつきというのはこのままでよいのでしょうか?
    それとも上記の肯定とは別でバックアップの種類をトランザクションログとして同じ.bakファイルにうわが区感じでよいのでしょうか。

    キャンセル

  • 2018/05/02 23:11

    1.完全バックアップを作成(.bak)
    2.トランザクションログバックアップを作成(1と同じ.bak)
    3.そのバックアップファイルをローカル環境へ復元(復元可能な最新の状態)
    4.再度復元を実行(特定の日時と時刻)
    !!!エラー発生!!!
    復元に失敗しました。ロールフォワードできる状態のファイルがないので、ログまたは差分バックアップは復元できません。と表示されます。

    キャンセル

  • 2018/05/02 23:32

    復旧時のオプションが違うのではないでしょうか
    http://d.hatena.ne.jp/matu_tak/20091220/1261315987

    キャンセル

  • 2018/05/03 00:14

    遅い時間まで回答本当にありがとう御座います。
    復旧状態がどれにせよ上で書いたエラーが発生してしまい復元が失敗してしまいます。

    一度整理させていただくと
    1.バックアップを一切とっていなかったDBで間違えてUPDATEを実行してしまいコミットまで実行済み(5/2 19時頃)
    2.DBの完全バックアップを作成(トランザクションログのバックアップも同時に作成(.bak形式))
    3.ローカルPCに2の.bakファイルを復元(1の間違えてUPDATEした状態のテーブルが存在します。)
    4..bakファイルからある特定のポイント(時間指定したい)までDBの復元させようとして、エラーが発生。

    というような状況になっております。
    間違えて流してしまったUPDATE文で更新されたデータは1000行近くありますが、更新してしまったのは1つのカラムのみなので、ログから解析なんてことも出来るかな...?と思ったのですがフリーソフトを入れてやってみましたがログを取得できず断念...


    やはり特定の日時までログファイルから戻せればよいのですが...

    木になっていることは今までバックアップをとっていないのに過去の状態に戻せるのかが心配になってきています。。。

    キャンセル

  • 2018/05/03 05:07

    未だに復元出来ずじまいです。。。

    キャンセル

  • 2018/05/03 06:24

    どうしてもダメなら1000人のお客様にゴメンナサイのメール送るとか、政治的に問題の解決を図るのも手ですよ。上司と相談してください。

    キャンセル

  • 2018/05/03 07:09

    お返事ありがとうございます。
    既にお客様には謝罪のメールを入れました...

    たった一回のクエリがここまで問題になってしまうなんて...
    今後気をつけたいと思います。

    問題は未だに解決していませんので、知恵を貸していただける方がいれば幸いです。

    キャンセル

  • 2018/05/03 08:09

    やっぱり障害発生後に取得したバックアップから前の状態に戻せないっぽいですね・・・

    色々調べてみても直近の完全バックアップに対して、ログを反映させていくような使い方が多く解説されております。

    キャンセル

  • 2018/05/03 10:13

    お疲れさまです。
    復元は、「起点となるバックアップ+起点以降のトランザクション」なので、
    「前回のバックアップ+今回のトランザクションログ」になります。
    トランザクションのみでリバースして復元というのはできないので、一度もバックアップを取っていない場合は無理ですが。。。

    キャンセル

  • 2018/05/03 10:40

    おはようございます。返信ありがとうございます。

    やはり起点となるバックアップが存在しないとトランザクションログがあっても復元は不可能ということですね。。。

    無理やりにでも直せるのかなとLSNを無理やり上書きを行って過去分のトランザクションログの反映が出来るのかなーと思いましたが、かなり複雑で難航しております。。。。

    復元という形ではなく別の方法でもいいので、何かヒントをいただけたらと思います。

    キャンセル

+1

特定の時点にデータを戻すための有償ツールも、いくつかあるようです。
(おそらく内部的にはsaziさんの回答にあるような方法でデータを戻していると思われます)
試用もできるっぽいです(私は試していませんが)。

https://www.apexsql.com/sql_tools_log.aspx
http://www.vivouac.co.jp/sarasa/index.html

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/02 22:11

    ツールがあるということでその辺もいくつか調べてみようと思います。ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.83%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • SQL

    2168questions

    SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

  • Server

    75questions