web-dev-qa-db-ja.com

CLRアセンブリの移行

SQL Server 2008R2データベースを新しいサーバーに移行しています。 (2008R2も)

サーバーには多数のCLRアセンブリがあります。これらはデータベースとともに自動的に移行しますか、それとも手動でスクリプト化する必要がありますか?

ありがとう!

7
K09

データベースをどのように移行しますか?バックアップ/復元またはデタッチ/アタッチを介してデータベースを別のサーバーにコピーすると、アセンブリと、アセンブリ内のコードを指すT-SQLラッパーオブジェクトが含まれます。オブジェクトタイプを選択できるツールを使用するには、少なくとも、移行するアセンブリが選択されていることを確認する必要があります。

アセンブリのallSAFEPERMISSION_SETがある場合、追加の手順なしでshouldで問題ありません(他で説明されているように、CLR統合を有効にすることは明らかですが、回答)。

アセンブリのanyPERMISSION_SETEXTERNAL_ACCESSまたはUNSAFEのいずれかである場合、いくつかの追加手順を実行する必要があります。

  1. TRUSTWORTHYのデータベースプロパティをONに設定するための非推奨ですが、より簡単で、より一般的な方法を使用している場合は、新しいサーバーでONに設定されていることを確認する必要があります。 Backup/Restoreメソッドがこの設定を正しく引き継ぐことを期待しますが、他のメソッドは、特に宛先で新しいデータベースを作成する場合は、そうでない場合があります。
  2. 非対称キーベースのログインを使用する推奨の方法を使用している場合、それらの部分は[master]データベースに存在し、宛先にコピーまたは再作成されていることを確認する必要があります:
    1. すべての非対称キー(CLRセキュリティに使用される)が宛先の[master]に存在することを確認してください
    2. それらの非対称キーに基づくすべてのログインが宛先の[master]に存在することを確認してください
    3. それらのログインが宛先で同じサーバーレベルの権限を持っていることを確認してください:GRANT EXTERNAL ACCESS AssemblyまたはGRANT UNSAFE Assembly
  3. 上記の2つのオプションのどちらを使用しているかに関係なく、データベース所有者のSIDが、データベースプロパティに表示されているものと[master]データベースメタデータに記録されているものとの間で一致していることを確認してください。これは通常、宛先DBを作成してそこにオブジェクトをコピーする場合は問題になりませんが、バックアップ/復元を使用する場合は、DB所有者SIDに不一致があり、CLRコードの実行が妨げられます。
  4. 数年前に遭遇していないので、これについては確信が持てませんが、DB所有者SIDが変更された場合は、PERMISSION_SETEXTERNAL_ACCESSまたはUNSAFEのアセンブリに対して、少なくともPERMISSION_SETプロパティをSAFEにリセットしてから、元の状態に戻す必要がある場合があります。それでも問題が解決しない場合は、アセンブリと関連するT-SQLラッパーオブジェクトを削除して再作成する必要があります。

また、現在の/ソースサーバーに存在する.Netフレームワークの4.0より前のバージョンが宛先サーバーにも存在することを確認することもお勧めします。追加のフレームワークバージョンが宛先に存在するかどうかは関係ありませんが、少なくとも何も欠落していない場合、移行がよりスムーズになります。 SQL Server 2005-2008 R2は.Net 2.0シリーズに静的にリンクされていますが(2012および2014は4.0シリーズに静的にリンクされています)、アセンブリに3.0または3.5が必要な場合があります。それが発生し、それらのフレームワークのバージョンがロードされていない場合、.Netフレームワークのバージョンが欠落していることを意味しない不可解なメッセージが表示されます。ただし、CLRオブジェクトが現在機能している場合、ソースサーバーにないバージョンは明らかに不要です。

7
Solomon Rutzky

場合によります。

アセンブリが作成され、移行中のデータベースに存在する場合、それらは既にデータベース内のオブジェクトであるため、データベースと共に移動します。

移行されていない他のデータベースでアセンブリが作成された場合、それらはソースインスタンスのどこかに再作成する必要があります。たとえば、アセンブリがマスターデータベースで作成された場合、それは移行するユーザーデータベースの一部ではないため、移行先サーバーのマスターに作成する必要があります。

同じバージョンのSQL Serverとの間で移行しているので、これが問題になることはないと思います。ただし、将来の参考のために、フォームを2005から2012に移行すると、アセンブリが異なるバージョンの.netで作成され、安全と見なされた異なるクラスがあったため、アセンブリの実行に問題が発生する可能性があります。

3
Sean Gallardy