0

実行ごとにデータベースに数百行を挿入することになっているプログラムに取り組んでいます。

問題は、挿入されたデータが間違っている場合、その実行からどのように回復できるかということです。現在、生データが挿入されたことを記録するログファイル(フォーマットを作成しました)しかありません(メタデータも主キーもありません)。データベースが理解できるログを作成する方法はありますか?挿入を元に戻したい場合は、そのログ ファイルをデータベースにフィードします。

または、プログラムから操作を元に戻す代替メカニズムがある場合は、親切にお知らせください。

4

2 に答える 2

1

これが数百行しかないという事実は、すべての元に戻すメカニズムの曾祖母に影響されやすいものにします。

  • importruns実行する各実行の行を含むテーブルを用意します。整数の自動インクリメント PK があると仮定します
  • インポート実行の PK を運ぶことを識別するフィールドをデータ テーブルに追加します。
  • 挿入のみの実行の場合、必要なのはDELETE FROM sometable WHERE importid=$whatever

置換/更新インポートもある場合は、さらに一歩進んでください

  • 各データテーブルには対応するテーブルがあり、1 つ以上のフィールドがあります。superseededby
  • 更新/置換する行ごとに、行の元のコピーをこのテーブルに配置し、インポート ID をsuperseededby
  • 元に戻すには、追加する必要がありますINSERT INTO originaltable SELECT * FROM superseededtable WHERE superseededby=$whatever

既知の正常なインポートをクリーンアップsuperseededtableして、ストレージが無制限に拡張されないようにすることができます。

于 2012-10-22T23:19:20.547 に答える
0

いくつかのオプションがあります。エラーにいつ気付くかによって異なります。データにエラーがあることがわかっている場合は、トランザクション API を使用して、現在のトランザクションの変更にロールバックできます。

後でエラーがあったことがわかった場合は、独自のログを作成できます。トランザクションを識別するインデックスを作成し、その ID が挿入される関連テーブルにフィールドを追加します。これにより、それがどのトランザクションから来たのかを正確に特定できます。指定されたトランザクション ID に従って行を削除するストアド プロシージャを作成することもできます。

于 2012-10-22T23:13:53.537 に答える