0

私たちが構築しているWebアプリに継続的配信の概念を適用しようとしていますが、偶発的な誤ったコミットからデータベースを保護するための解決策があるかどうか疑問に思っています. たとえば、単一のレコードではなくテーブル全体を消去するバグ。

この問題の影響は、アプリケーションがインフラストラクチャのセグメントに徐々に展開される継続的デリバリーのドクトリンに従って、どのように制限できますか?

何か案は?

4

3 に答える 3

1

あなたの懸念は、データベースに発生する不良データです。解決策は、必要なトランザクションを取り消すことができるように、すべてのトランザクションの完全なログを使用することです。これは通常、完全バックアップ/増分バックアップ/完全ログのコンテキストで使用されます。

たとえば、SQL Server では、完全なログがあると仮定して、特定の時点 (http://msdn.microsoft.com/en-us/library/ms190982(v=sql.105).aspx) に復元できます。

テーブルを作成して削除する場合、ログに必要なスペースの点で、これは高価なソリューションになる可能性があります。ただし、開発のニーズを満たす場合があります。

このようなアプリケーションでは、完全なロギングはコストがかかりすぎることに気付くかもしれません。その場合、定期的なバックアップを作成し (毎日? この目的のために、LightSpeed は高速で効率的なバックアップに適した製品であることがわかりました。

于 2012-05-29T18:33:42.777 に答える
1

まず、何が悪い SQL ステートメントかを見ただけではわかりません。テーブルの内容全体を削除したい場合があります。したがって、意図を検出する自動化ツールを持つことは物理的に不可能です。

したがって、データベースを保護するには、まず完全復旧 (単純ではない) モードであることを確認し、夜間に完全バックアップを作成し、トランザクション ログ バックアップを 15 分ごとに作成します。これで、プロセスがどれほどひどく壊れても、多くの情報を失うことはありません。データベース管理者は、特定の時点に回復できるようにトレーニングする必要があります。データベース管理者がいない場合、データを保護するためにできる最善の方法は、データベース管理者を雇うことです。これは、重要なデータベース環境では交渉の余地がなく、データがビジネスにとって重要である場合、訓練された経験豊富な DBA がいないことは非常に危険です。

次に、SQL を他のコードと同じように扱う必要があります。SQL はスクリプトのソース管理にある必要があります。偶発的な削除が心配な場合は、削除用のスクリプトを作成して、すべての削除をステージング テーブルにコピーし、ステージング テーブルのコンテンツを週に 1 回ほど削除します。コードレビューでこの規則を実施してください。または、トリガーを介して実行される監査プロセスを設定することをお勧めします。すべてのレコードが監査されると、データベースを復元しなくても、150 件の誤った削除を簡単に取り戻すことができます。監査なしでエンタープライズ アプリケーションを使用することは考えられません。

例外のないすべての SQL スクリプトは、他のコードと同様にコード レビューする必要があります。すべての SQL スクリプトは、製品に移行する前に QA でテストし、合格する必要があります。これにより、エラーの可能性が大幅に減少します。開発者は本番環境への書き込み権限を持つべきではなく、DBA のみが持つ必要があります。したがって、各スクリプトは実行できるように作成する必要があります。一度に 1 つのチャンクを実行すると、誤って where 句を強調表示するのを忘れてしまう可能性があります。スクリプトでもトランザクションを正しく使用できるように、開発者をトレーニングしてください。

于 2012-05-29T19:02:19.633 に答える
0

一般的に採用されている戦略の 1 つは、集合的なスキーマ生成ではなく、増分 SQL ステートメントをログに記録することです。これにより、より細かいレベルで変更を制御できます。

ex: 
change 1:
UP:
Add column
DOWN:
Remove column

change 2:
UP:
Add trigger
DOWN:
Remove trigger

このように変更が段階的にキャプチャされると、変更が発生することを心配することなく、任意のバージョンから任意のバージョンにアップグレード (UP) するためのシンプルで効率的なスクリプトを作成できます。変更 # をビルドにリンクすると、さらに効果的です。ビルドを展開すると、データベースも自動的にその特定のビルドにアップグレード (UP) またはダウングレード (DOWN) されます。

CloudMunch には、それを行うパイプライン アプリがあります。

于 2014-04-16T10:40:33.880 に答える