Di chuyển hội đồng CLR


7

Tôi đang di chuyển cơ sở dữ liệu SQL Server 2008R2 sang một máy chủ mới. (cũng 2008R2)

Có một số hội đồng CLR trên máy chủ. Chúng sẽ tự động di chuyển với cơ sở dữ liệu hay tôi sẽ phải tự viết kịch bản chúng?

Cảm ơn!

Câu trả lời:


7

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_SETsố SAFEthì 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_SETtrong hai EXTERNAL_ACCESShoặc UNSAFEsau đó bạn sẽ cần thực hiện thêm một số bước:

  1. Nếu bạn đang sử dụng phương pháp không ưu tiên nhưng dễ dàng hơn và do đó phổ biến hơn để đặt thuộc tính cơ sở dữ liệu TRUSTWORTHYthành ON, thì bạn sẽ cần đảm bảo rằng nó được đặt thành ONtrê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.
  2. Nếu bạn đang sử dụng phương pháp ưa thích để có Đăng nhập dựa trên khóa không đối xứng, thì những phần đó nằm trong [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:
    1. Đảm bảo rằng tất cả các Khóa không đối xứng (được sử dụng cho bảo mật CLR) tồn tại ở [master]đích
    2. Đảm bảo rằng tất cả các Thông tin đăng nhập dựa trên các Khóa không đối xứng đó tồn tại ở [master]đích
    3. Đảm bảo rằng các Đăng nhập đó có cùng cấp quyền máy chủ ở đích: GRANT EXTERNAL ACCESS ASSEMBLYvà / hoặcGRANT UNSAFE ASSEMBLY
  3. Bất kể tùy chọn nào trong hai tùy chọn được ghi chú ở trên bạn đang sử dụng, hãy đảm bảo rằng SID của chủ sở hữu cơ sở dữ liệu khớp với giữa những gì được hiển thị trong thuộc tính cơ sở dữ liệu và những gì được ghi trong [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.
  4. Tôi không chắc chắn của cái này như tôi đã không gặp nó trong một vài năm, nhưng nếu chủ sở hữu DB SID không thay đổi, sau đó cho bất kỳ Assemblies rằng có một PERMISSION_SETcủa một trong hai EXTERNAL_ACCESShoặ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 để SAFEvà 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.


3

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.


2
Ví dụ mới sẽ cần exec sp_configure 'clr enabled',1trước khi nó thực sự thực thi các hội đồng trong câu hỏi.
Max Vernon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.