web-dev-qa-db-ja.com

SQLプロジェクトに大量の構成データを含める最良の方法は何ですか?

さまざまなサーバー(SQL2016)に動的に公開するデータベースを備えたBIDS SQL Server Database Projectがあります。最初は空白で始まり、すべてがパラメータ化されています。すべてがAzure DevOpsにあり、場所にデプロイされます。

(ほとんど静的な)構成にインクルード/パックしたいdataいくつかのテーブル。最初はスクリプトウィザードを使用してテーブルをスクリプト化し、そのスクリプトテキストを展開後のファイル(InitConfigs.PostDeployment1.sql)に挿入しました。

スクリプト化すると、1つの構成テーブルに遭遇しましたが、これはほぼ600 MBのスクリプトです。サイズは問題ではありません、それをプロジェクトに埋め込むための適切な/より良い方法がなければならないようです。

私が試したいくつかのこと:

  • フラットファイルにエクスポートし、何らかの方法で埋め込みます。 -散らかっているようですが、展開後のスクリプトにインポートする方法を理解する必要があります
  • 単一のテーブルbacpacをエクスポート-データベース全体を含めようとするため、動作しないようです
  • スクリプトウィザードを使用して、巨大な*.sqlファイルを生成します。 -プロジェクトに追加して、SQLCMD :rで参照できます。奇妙に思えます。

すべてをうまくラップして簡単にインポートできる、ある種のデータパッケージdacpac/bacpacスタイルファイルはありますか?おそらく圧縮もされているのでしょうか?

1
Alex K

あなたの直感はここにあります-ソース管理のSSDTプロジェクトの一部として600 MBのSQLスクリプトを持つことは一般的ではありません。

特に、gitなどの分散バージョン管理システムの世界では、さまざまなマシン上でそのファイルの潜在的に多数のコピーについて話し、その履歴を詳細に追跡していることになります。

ただし、気づいたように、デプロイ後のスクリプト以外に静的データを処理する「組み込み」の方法はありません。

SQL SSDTデータベースプロジェクト:ソース管理参照データ

1つの解決策は、使い捨てのSSDTプロジェクトを作成することです。このプロジェクトに含まれるのは、構成データスクリプトだけです。次に、そこからdacpacファイル(実際には単なる圧縮フォルダー)を作成し、メインプロジェクトでそのdacpacを「参照」できます。

このアプローチの利点は、圧縮されたデプロイスクリプトを取得できることですが、それは既存のデプロイパイプラインに簡単に適合する形式です(単に投げるのではなく)スクリプトファイルを.Zipアーカイブに)。

これは次のようになります。

私は、AdventureWorksサンプルデータベーススキーマを含むSSDTプロジェクトを持っています。結果のdacpacは80 KBです。

enter image description here

2つ目のプロジェクトを作成します。このプロジェクトに含まれるのは、静的構成データスクリプトを参照する配置後スクリプトです。

enter image description here

  • Post_Person.ContactType.sqlは、一連の挿入ステートメントを含む10 MBのスクリプトファイルです。
  • 「ビルドアクション」=「なし」および「出力ディレクトリにコピー」=「コピーしない」として構成されています

これにより、34 KBのdacpacファイルが生成されます。

データに大きく依存するその圧縮率に基づいて、600 MBは2 MBまで小さくなる可能性があります(このようなスクリプトには多くの繰り返しがあり、適切な圧縮に役立ちます)。

次に、メインSSDTプロジェクトで「データベース参照」としてdacpacを追加できます。

enter image description here

この時点で、「InitScripts」プロジェクトを破棄できます。または、dacpacを更新して再生成する必要が生じた場合に備えて、それを別のスタンドアロンリポジトリに保存することもできます。

最後に、ビルド/デプロイプロセスでは、両方のdacpacファイルをデプロイする必要があることに注意してください-「メイン」ファイルと「InitScripts」ファイルの両方を、初期セットアップ時にのみ(または毎回デプロイして、initスクリプトを用意することができます)アクションを実行する前に既存のデータを確認してください)。

enter image description here

1
Josh Darnell