ソース管理からデータベースをどのように構築すべきですか?
データベースオブジェクトをバージョン管理する必要があるかどうかについて、SOコミュニティwikiでいくつかの議論がありました。ただし、データベースオブジェクトのビルド自動化プロセスを作成するためのベストプラクティスについてはあまり説明していません。 特に、開発者とDBAは、データベース展開への自動化アプローチのメリットとリスクを評価するときに、異なる目標、アプローチ、および懸念を抱くことが多いため、これは私のチームにとって議論の的となっています。 SOコミュニティから、現実の世界でどのような実践が効果的であったかについて、いくつかのアイデアを聞きたいと思います。 どのプラクティスが本当に最良であるかはやや主観的であると私は理解していますが、私は多くの人々にとってどのような仕事が役立つかについての良い対話を考えています。 ここでは、このトピックで懸念される領域に関するティーザーの質問をいくつか示します。これらは完全なリストではなく、人々が私が探しているものを理解するための出発点です。 テスト環境と本番環境の両方をソース管理から構築する必要がありますか? 両方とも自動化を使用して構築する必要がありますか、それとも、安定した最終的なテスト環境からオブジェクトをコピーすることによって本番環境で構築すべきですか? 展開スクリプトのテスト環境と本番環境の潜在的な違いにどのように対処しますか? 展開スクリプトがテストと同じように本番環境に対して効果的に機能することをどのようにテストしますか? どのタイプのオブジェクトをバージョン管理する必要がありますか? ちょうどコード(手順、パッケージ、トリガー、Javaなど)? インデックス? 制約? テーブル定義? テーブル変更スクリプト?(例:ALTERスクリプト) 全部? バージョン管理すべきではないオブジェクトのタイプはどれですか? シーケンス? 助成金? ユーザーアカウント? SCMリポジトリでデータベースオブジェクトをどのように編成する必要がありますか? 変換スクリプトやALTERスクリプトなど、一度きりのものにどのように対処しますか? データベースからオブジェクトを廃棄する方法を教えてください。 オブジェクトを開発からテストレベルに昇格させるのはだれですか。 複数の開発者による変更をどのように調整しますか? 複数のシステムで使用されるデータベースオブジェクトの分岐をどのように処理しますか? このプロセスに妥当な例外があれば、どのような例外がありますか? セキュリティ上の問題? 匿名化の懸念があるデータ? 完全に自動化できないスクリプト? どのようにしてプロセスに回復力と強制力を持たせることができますか? 開発者のエラーに? 予期せぬ環境問題へ? 災害復旧のために? DB-SCMのメリットがコストを正当化するものであると意思決定者にどのように説得しますか? 事例証拠? 業界調査? 業界のベストプラクティスの推奨事項? 認められた当局に訴えますか? 費用便益分析? このモデルで誰がデータベースオブジェクトを「所有」する必要がありますか? 開発者? DBA? データアナリスト? 複数の?