当社には専任の DBA は雇用されていませんが、DBA 機能を実行する厳選された開発者がいます。開発サイクル中にデータベースを頻繁に更新し、さまざまな更新を含むリリース スクリプトを用意しています。db スキーマとオブジェクトを Visual Studio のデータベース プロジェクトに保持します。
ただし、多くの場合、時間のかかる手動介入を引き起こす 2 つの障害が発生します。
データを含む既存のテーブルに NOT NULL フィールドを追加した場合、データベースへの VS のデプロイ プロセスは「テスト」データだけを自動的に挿入するほどスマートではないため、開発者は常にデータベース プロジェクトからローカル データベースに同期できるとは限りません。フィールドをテーブルに取得します (これがどこかで設定されていない限り?)。もちろん、可能であれば、フィールドに実際のデータを入力するスクリプトを使用してこれをフォローアップしますが、展開が失敗するためできません。
開発者は、過去のランダムな日付からバックアップを復元することがあります。どのデータベース更新がこのデータベースに適用されたかを正確に知る方法がないため、どのスクリプトを適用し始めるかわかりません。この場合、各スクリプトを時系列でチェックして、そのスクリプトからの変更がデータベースに適用されているかどうかを確認します。その場合は、次に実行するスクリプトに進みます。繰り返す。
これまで説明してきた方法の 1 つは、データベースに 1 フィールド、1 行の「データベース更新レベル」テーブルを作成する可能性があることです。データベースが更新されたレベルを維持します。たとえば、最初のスクリプトが実行されるときに、レベルを 2 に更新します。各 db スクリプトでは、次のようなチェックでステートメントをラップします。
IF Database_Update_Level < 2 THEN ここでいくつかのことを行います
UPDATE Database_Update_Level SET Database_Update_Level = 2 END IF
個々のステートメントは特定のレベル以下では実行されないため、db スクリプトは任意のデータベースで実行できます。
これは、開発者がローカルで開発することを許可するすべての開発ショップが遭遇する共通の問題に違いないため、何かが欠けているように感じます。
どんな洞察も大歓迎です。
ありがとう。