SQL Server 2008R2データベースを新しいサーバーに移行しています。 (2008R2も)
サーバーには多数のCLRアセンブリがあります。これらはデータベースとともに自動的に移行しますか、それとも手動でスクリプト化する必要がありますか?
ありがとう!
データベースをどのように移行しますか?バックアップ/復元またはデタッチ/アタッチを介してデータベースを別のサーバーにコピーすると、アセンブリと、アセンブリ内のコードを指すT-SQLラッパーオブジェクトが含まれます。オブジェクトタイプを選択できるツールを使用するには、少なくとも、移行するアセンブリが選択されていることを確認する必要があります。
アセンブリのallにSAFE
のPERMISSION_SET
がある場合、追加の手順なしでshouldで問題ありません(他で説明されているように、CLR統合を有効にすることは明らかですが、回答)。
アセンブリのanyにPERMISSION_SET
がEXTERNAL_ACCESS
またはUNSAFE
のいずれかである場合、いくつかの追加手順を実行する必要があります。
TRUSTWORTHY
のデータベースプロパティをON
に設定するための非推奨ですが、より簡単で、より一般的な方法を使用している場合は、新しいサーバーでON
に設定されていることを確認する必要があります。 Backup/Restoreメソッドがこの設定を正しく引き継ぐことを期待しますが、他のメソッドは、特に宛先で新しいデータベースを作成する場合は、そうでない場合があります。[master]
データベースに存在し、宛先にコピーまたは再作成されていることを確認する必要があります:[master]
に存在することを確認してください[master]
に存在することを確認してくださいGRANT EXTERNAL ACCESS Assembly
またはGRANT UNSAFE Assembly
[master]
データベースメタデータに記録されているものとの間で一致していることを確認してください。これは通常、宛先DBを作成してそこにオブジェクトをコピーする場合は問題になりませんが、バックアップ/復元を使用する場合は、DB所有者SIDに不一致があり、CLRコードの実行が妨げられます。PERMISSION_SET
がEXTERNAL_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オブジェクトが現在機能している場合、ソースサーバーにないバージョンは明らかに不要です。
場合によります。
アセンブリが作成され、移行中のデータベースに存在する場合、それらは既にデータベース内のオブジェクトであるため、データベースと共に移動します。
移行されていない他のデータベースでアセンブリが作成された場合、それらはソースインスタンスのどこかに再作成する必要があります。たとえば、アセンブリがマスターデータベースで作成された場合、それは移行するユーザーデータベースの一部ではないため、移行先サーバーのマスターに作成する必要があります。
同じバージョンのSQL Serverとの間で移行しているので、これが問題になることはないと思います。ただし、将来の参考のために、フォームを2005から2012に移行すると、アセンブリが異なるバージョンの.netで作成され、安全と見なされた異なるクラスがあったため、アセンブリの実行に問題が発生する可能性があります。