Câu trả lời:
Làm thế nào bạn di chuyển cơ sở dữ liệu? Sao chép cơ sở dữ liệu sang máy chủ khác thông qua Sao lưu / Khôi phục hoặc Tách / Đính kèm sẽ bao gồm các Đối tượng lắp ráp cũng như các đối tượng trình bao bọc T-SQL trỏ đến mã trong Tập hợp. Sử dụng một công cụ cho phép bạn chọn các loại đối tượng có thể yêu cầu bạn ít nhất xác minh rằng các Hội đồng đã được chọn để di chuyển.
Nếu tất cả các Assemblies của bạn có một PERMISSION_SET
số SAFE
thì bạn nên được tốt với không có các bước bổ sung (bên ngoài rõ ràng cho phép của CLR Integration như đã đề cập trong câu trả lời khác).
Nếu bất kỳ Hội đồng nào có một PERMISSION_SET
trong hai EXTERNAL_ACCESS
hoặc UNSAFE
sau đó bạn sẽ cần thực hiện thêm một số bước:
TRUSTWORTHY
thành ON
, thì bạn sẽ cần đảm bảo rằng nó được đặt thành ON
trên máy chủ mới. Tôi hy vọng phương thức Sao lưu / Khôi phục sẽ thực hiện cài đặt này một cách chính xác, nhưng các phương thức khác có thể không, đặc biệt là nếu chúng tạo cơ sở dữ liệu mới trên đích.[master]
cơ sở dữ liệu và bạn cần đảm bảo rằng chúng được sao chép hoặc tạo lại ở đích:
[master]
đích[master]
đíchGRANT EXTERNAL ACCESS ASSEMBLY
và / hoặcGRANT UNSAFE ASSEMBLY
[master]
dữ liệu meta của cơ sở dữ liệu. Đây thường không phải là vấn đề nếu tạo DB đích và sau đó sao chép các đối tượng vào nó, nhưng nếu sử dụng Sao lưu / Khôi phục thì có thể có sự không khớp trong SID của chủ sở hữu DB và điều đó sẽ ngăn mã CLR chạy.PERMISSION_SET
của một trong hai EXTERNAL_ACCESS
hoặc UNSAFE
, bạn có thể cần phải thiết lập lại ít nhất là tài sản PERMISSION_SET để SAFE
và sau đó trở lại với những gì ban đầu. Nếu điều đó không có ích thì bạn có thể cần DROP và sắp xếp lại các Hội đồng và các đối tượng trình bao bọc T-SQL có liên quan.Nó cũng là một ý tưởng tốt để đảm bảo rằng bất kỳ phiên bản tiền 4.0 nào của khung .Net tồn tại trên máy chủ hiện tại / nguồn cũng tồn tại trên máy chủ đích. Sẽ không có vấn đề gì nếu các phiên bản khung bổ sung tồn tại ở đích đến, nhưng nó sẽ giúp quá trình chuyển đổi suôn sẻ hơn nếu không có gì thiếu. Mặc dù SQL Server 2005 - 2008 R2 được liên kết tĩnh với chuỗi .Net 2.0 (2012 và 2014 được liên kết tĩnh với chuỗi 4.0), có thể Hội đồng có thể yêu cầu 3.0 hoặc 3.5. Nếu điều đó xảy ra và các phiên bản khung đó chưa được tải thì bạn sẽ nhận được một thông điệp khó hiểu sẽ không ngụ ý rằng phiên bản khung .Net bị thiếu. Nhưng bất kỳ phiên bản nào không có trên máy chủ nguồn rõ ràng là không cần thiết nếu các đối tượng CLR hiện đang hoạt động.
Mà phụ thuộc.
Nếu các tập hợp được tạo và sống trong cơ sở dữ liệu đang được di chuyển, thì chúng sẽ đi cùng với cơ sở dữ liệu vì chúng đã là các đối tượng bên trong nó.
Nếu các tập hợp đã được tạo trong các cơ sở dữ liệu khác không được di chuyển thì chúng sẽ cần phải được tạo lại trong trường hợp nguồn ở đâu đó. Ví dụ: nếu việc lắp ráp được thực hiện trong cơ sở dữ liệu chủ thì nó không phải là một phần của cơ sở dữ liệu người dùng mà bạn đang di chuyển và sẽ cần phải được tạo thành chủ trên máy chủ đích.
Vì bạn đang di chuyển từ và sang cùng một phiên bản SQL Server, tôi không thấy đây là một vấn đề. Tuy nhiên, để tham khảo trong tương lai, khi hình thức di chuyển cho biết năm 2005 đến 2012 có khả năng xảy ra một số vấn đề với việc thực thi các hội đồng khi chúng được tạo trong một phiên bản khác của .net và có các lớp khác nhau được coi là an toàn.
exec sp_configure 'clr enabled',1
trước khi nó thực sự thực thi các hội đồng trong câu hỏi.