私はいくつかの自動化を行っており、10 ~ 15 個の古い風変わりなスクリプトを 1 つの単純なユニットに書き直している最中です。これにより、次のことが可能になります。
- 本番環境で MsSql2012 からデータベース スキームをエクスポートする
- 開発環境でデータベース スキームを Msql2012 にインポートする
私は、DACパックをエクスポート/インポートできるMicrosoft.SqlServer.Dacを使用してこれを行っています。
それはうまく機能します:)、しかし、すべてのTDDとテストを行った後、それは本当のことの時間であり、私の仕事に2つのドメインがあることを完全に見逃していたことがわかりました.
これは、開発環境で dacpac をインポートするとエラーが発生することを意味します。これは、2 つのドメインに完全な双方向の信頼がなく、もちろんデータベースに両方のドメインのユーザーが存在するためです。特に本番ドメインのユーザー。実行可能な解決策が 3 つあります。
- 環境間の完全な信頼を獲得します。しかし、私の職場では高レベルのセキュリティが適用されているため、これは実現しません。
- ユーザーなしで dacpac をインポートします。
- ユーザーなしで dacpac にエクスポートします。
2) または 3) を達成できる一連のオプションを見つけようとして、ドキュメント (もちろんあいまいです) を読みました。たくさんのコンボをテストしましたが、どれもうまくいきません。dac pac インポートはユーザーの作成を試行し続け、開発環境で実稼働ユーザーを検証できないため失敗します。
デプロイと抽出を使用してエクスポート/インポートしています。さまざまなオプションは次の場所にあります。
- 抽出: http://technet.microsoft.com/en-us/library/microsoft.sqlserver.dac.dacextractoptions.aspx
- デプロイ: http://technet.microsoft.com/en-us/library/microsoft.sqlserver.dac.dacdeployoptions.aspx
私が見つけた組み合わせはなく、DacPac のバグであることを示唆する投稿を読んだことさえあります。確信はないけど。私が現在検討している最後のオプションは、GenerateScript メソッドを使用することです。これは、ユーザー/ログインを強制的に除外できることを願っていますが、うまくいかないのではないかと心配しています。( http://technet.microsoft.com/en-us/library/hh753526.aspx )を参照してください。
質問: エクスポートまたはインポートのいずれかで、dacpac からユーザー/ログインを除外するにはどうすればよいですか?
アップデート
現在の抽出設定:
IgnoreUserLoginMappings = true,
VerifyExtraction = false,
現在のデプロイ設定:
CreateNewDatabase = true,
DeployDatabaseInSingleUserMode = true,
DisableAndReenableDdlTriggers = true,
IgnoreUserSettingsObjects = true,
アップデート
これまでのところ、すべてが 1 つの醜い解決策を示しています。
I can generate a deploy script using DacServices.
Then i can parse the script (Remove logins etc).
Then write the result to a file.
And then call SQLCMD in an external process given it the generated and parsed file.
Finally i must evaluate the result from the SQLCMD process.
SQLCMD を使用する理由は、生成されたスクリプトが明らかに純粋な tsql ではなく、私が知る限り、SQLCMD だけが処理できる ':setvar' としてものを使用するためです。さあ、MS...
繰り返しますが、C# でこれを行うためのより良い方法を知っている人、または DacPac アセンブリのバグ修正/更新を知っている人がいる場合は、共有してください。:)
アップデート
IgnorePartitionSchemes のようなものも機能しないことがわかりました。名前空間 Microsoft.SqlServer.Dac は、ほんの少しではなく、非常にバグがあるか、実装が欠けているようです。