他のサーバーに存在しないProdのデータを修正する必要がある場合があります。これはバグだけでなく、クライアントが送信したファイルからのデータのインポートが原因である可能性があります。これは、システムにハッキングした誰かが原因の問題によるものです。または、不正なデータ入力によって引き起こされた問題から。データベースが大規模であるか、時間が重要な場合、最新のバックアップを復元してdevで修正する時間がありません。
最初の防御(およびエンタープライズデータベースなしではできないもの)は監査テーブルです。これらを使用して、不正なデータ変更をバックアウトできます。さらに、データを以前の状態に戻し、監査されたデータを元に戻す必要があるずっと前に他のサーバーでテストするスクリプトを作成できます。唯一のリスクは、元に戻す正しいレコードを特定したことです。
次に、本番環境でデータを変更するすべてのスクリプトには、次のものが含まれている必要があります。
それらは明示的なトランザクション内にあり、TRY Catchブロックを持っている必要があります。
変更前の状態を確認した後、変更をロールバックするために使用できるテストモードが必要です。変更が正しいことを確認するために、変更が行われる前から選択されたステートメントがあり、変更後に1つ実行される必要があります。スクリプトは、処理された行数が表示されることを確認する必要があります。この事前設定の一部は、断片を確実に完了させるテンプレートに設定されています。変更用のテンプレートは、修正を記述する時間を節約するのにも役立ちます。
変更または更新するデータが大量にある場合は、バッチごとにコミットするバッチで実行するスクリプトの作成を検討してください。100万件のレコードを修正している間、システム全体をロックアップしたくありません。修正するデータが大量にある場合は、実行前にDBAまたはパフォーマンスチューニングに慣れている人がスクリプトを確認し、可能な限り営業時間外に実行するようにしてください。
次に、本番環境で何かを変更するすべてのスクリプトがコードレビューされ、ソース管理に入れられます。それらのすべて-例外なく。
最後に、開発者はこれらのスクリプトを実行しないでください。これらは、dbasまたは構成管理グループによって実行される必要があります。どちらも持っていない場合、技術リード以上の人だけが製品を実行する権利を持つべきです。prodで物事を実行する人が少ないほど、問題の追跡が容易になります。スクリプトは、単純に実行されるように作成する必要があります。ハイライト部分はなく、一度に1ステップずつ実行します。where句を強調表示するのを忘れたときに、人々を困らせることが多い強調表示の要素です。