0

私はリーンスタートアップを運営しています。ハードウェア障害に対する安全性は良好ですが、多くの場合、ライブデータベースでSQLクエリを直接実行して顧客データを操作する必要があります。間違いを犯すのはとても簡単です(実際にライブデータベースで直接クエリを実行しているときに、テストデータベースで削除クエリを実行していると考えるなど)。データベースに対して実行されるすべてのSQLクエリに対して「元に戻す」機能を作成するために何かできることがあるかどうか疑問に思っています(誰かがPSQLを介して直接接続している場合も同様です)。安全なデータが私の唯一の関心事であるため、パフォーマンスもストレージスペースも気にしません。

UNDO機能がトランザクションログ内の特定のトランザクションを元に戻さない可能性がある場合は優れているため、逆方向に進むと、新規顧客のサインアップなどの正しいトランザクションが妨げられることはありません。このようなトランザクションの量は非常に少ないため、問題なく手動で確認できます。

4

1 に答える 1

1

ええと、唯一の選択肢は履歴テーブルを作成することだと思います。私はトリガーの助けを借りてこれを行いました。

更新のたびに、変更された値ごとに 1 つの行を挿入します。

私の履歴テーブルは次のようになります(MySql):

CREATE  TABLE IF NOT EXISTS `history` (
  `id_history` INT NOT NULL AUTO_INCREMENT ,      
  `event` ENUM('INSERT', 'UPDATE', 'DELETE') NOT NULL ,
  `table` VARCHAR(255) NOT NULL ,
  `id` INT NOT NULL ,
  `field` VARCHAR(255) NULL ,
  `old_value` TEXT NULL ,
  `datetime` DATETIME NOT NULL ,
PRIMARY KEY (`id_history`);

そしてトリガー:

    CREATE TRIGGER test_table_update BEFORE UPDATE ON test_table
    FOR EACH ROW
    BEGIN
        IF OLD.value1 != NEW.value1 THEN
            INSERT INTO history VALUES(NULL, 'UPDATE', 'test_table', OLD.id_test_table, 'value1', OLD.value1, NOW());
        END IF;

        ...

    END; //

この情報を使用して、すべての変更を元に戻したり、特定の日付に戻すこともできます。

于 2013-01-04T14:14:17.880 に答える