Một tính năng thú vị trong MS SQL 2012

http://blogs.msdn.com/b/mvpawardprogram/archive/2012/07/16/cac-database-ch-a-trong-sql-server-2012.aspx

http://msdn.microsoft.com/en-us/library/ff929055.aspx

http://msdn.microsoft.com/en-us/library/ff929071.aspx

Cấu hình SQL của bạn trong Mgmt studio:

Mục đích chính của cơ sở dữ liệu chứa là giúp việc di chuyển cơ sở dữ liệu của bạn sang một máy chủ mới dễ dàng hơn mà không cần nhiều bảo vật xung quanh nó. Với điều đó trong tâm trí, tôi sẽ xử lý một số vấn đề tiềm năng có thể làm cho quá trình di chuyển này khó khăn hơn – và hầu hết xoay quanh việc cơ sở dữ liệu chứa chỉ được chứa một phần trong SQL Server 2012 (sự chứa chưa được áp dụng thực sự).

Chuỗi kết nối

Chuỗi kết nối đến một cơ sở dữ liệu chứa phải rõ ràng chỉ định cơ sở dữ liệu trong chuỗi kết nối. Bạn không thể chỉ dựa vào cơ sở dữ liệu mặc định của đăng nhập để thiết lập kết nối; nếu bạn không chỉ định một cơ sở dữ liệu, SQL Server sẽ không duyệt qua tất cả các cơ sở dữ liệu chứa và thử tìm bất kỳ cơ sở dữ liệu nào khớp với thông tin xác thực của bạn.

Truy vấn giữa các cơ sở dữ liệu

Ngay cả khi bạn tạo cùng một người dùng với cùng một mật khẩu trong hai cơ sở dữ liệu chứa khác nhau trên cùng một máy chủ, ứng dụng của bạn sẽ không thể thực hiện được truy vấn giữa các cơ sở dữ liệu. Tên người dùng và mật khẩu có thể giống nhau, nhưng chúng không phải là cùng một người dùng. Lý do cho điều này? Nếu bạn có các cơ sở dữ liệu chứa trên một máy chủ được lưu trữ, bạn không nên bị ngăn cản khỏi việc có cùng một người dùng chứa với ai đó khác đang sử dụng cùng một máy chủ được lưu trữ. Khi tính chất chứa đầy đủ xuất hiện (có thể xảy ra trong phiên bản sau SQL Server 2012), việc truy vấn giữa các cơ sở dữ liệu sẽ bị cấm hoàn toàn. Tôi rất, rất, rất, nhất định khuyến nghị bạn không tạo đăng nhập cấp server có cùng tên với người dùng cơ sở dữ liệu chứa, và cố gắng tránh tạo cùng tên người dùng chứa trong các cơ sở dữ liệu chứa.

Đồ đồng nghĩa

Hầu hết các tên có 3 hoặc 4 phần dễ xác định và hiển thị trong một DMV. Tuy nhiên, nếu bạn tạo một đồ đồng nghĩa trỏ đến một tên có 3 hoặc 4 phần, chúng sẽ không xuất hiện trong DMV. Vì vậy, nếu bạn sử dụng đồ đồng nghĩa một cách nhiều, có thể có trường hợp bạn bỏ qua một số phụ thuộc bên ngoài, và điều này có thể gây ra vấn đề khi bạn di chuyển cơ sở dữ liệu sang một máy chủ khác. Tôi đã phàn nàn về vấn đề này, nhưng nó được đóng lại với lời “theo thiết kế”. (Lưu ý rằng DMV cũng sẽ bỏ qua các tên có 3 hoặc 4 phần được xây dựng thông qua SQL linh hoạt.)

Chính sách mật khẩu

Nếu bạn đã tạo một người dùng cơ sở dữ liệu chứa trên một hệ thống không có chính sách mật khẩu, bạn có thể thấy khó khăn khi tạo cùng một người dùng trên một hệ thống khác có chính sách mật khẩu. Điều này là do cú pháp CREATE USER không hỗ trợ bỏ qua chính sách mật khẩu. Tôi đã gửi một lỗi về vấn đề này và nó vẫn chưa được giải quyết. Và điều lạ là trên một hệ thống có chính sách mật khẩu, bạn có thể tạo đăng nhập cấp server mà dễ dàng bỏ qua chính sách, nhưng bạn không thể tạo người dùng cơ sở dữ liệu làm như vậy – mặc dù người dùng này inherently ít rủi ro về bảo mật.

Thuật ngữ tổ chức

Khi không còn phụ thuộc vào thiết lập tổ chức của tempdb, bạn có thể cần thay đổi bất kỳ mã code nào hiện tại sử dụng tổ chức rõ ràng hoặc DATABASE_DEFAULT thành CATALOG_DEFAULT thay vào đó. Xem bài viết BOL này để biết một số vấn đề tiềm năng.

IntelliSense

Nếu bạn kết nối đến một cơ sở dữ liệu chứa với tư cách là người dùng chứa, SSMS sẽ không hỗ trợ hoàn toàn IntelliSense. Bạn chỉ nhìn thấy gạch chân cơ bản cho các lỗi cú pháp, nhưng không có danh sách hoàn thiện tự động hoặc gợi ý tooltip và các tính năng vui nhộn khác. Tôi đã gửi một lỗi về vấn đề này và nó vẫn chưa được giải quyết.

Các công cụ SQL Server Data Tools (SSDT)

Nếu bạn đang lên kế hoạch sử dụng SSDT cho phát triển cơ sở dữ liệu, hiện tại chưa có hỗ trợ đầy đủ cho các cơ sở dữ liệu chứa đựng (contained databases). Điều này chỉ đơn giản là việc xây dựng dự án sẽ không bị lỗi nếu bạn sử dụng một số tính năng hoặc cú pháp làm vỡ tính chất chứa đựng, vì SSDT hiện tại vẫn chưa biết tính chất đó là gì và điều gì có thể làm vỡ nó.

ALTER DATABASE

Khi chạy lệnh ALTER DATABASE từ trong ngữ cảnh của một cơ sở dữ liệu chứa đựng, thay vì dùng ALTER DATABASE foo, bạn sẽ cần sử dụng ALTER DATABASE CURRENT – điều này là để khi cơ sở dữ liệu được di chuyển, đổi tên, v.v. các lệnh này không cần biết gì về ngữ cảnh hoặc định danh bên ngoài của chúng.

Một số điều khác

Một số thứ mà bạn có thể không nên vẫn sử dụng nhưng vẫn nên đề cập trong danh sách các thứ không được hỗ trợ hoặc đã bị loại bỏ và không nên sử dụng trong các cơ sở dữ liệu chứa đựng:

  • Stored procedures được đánh số
  • Stored procedures tạm thời
  • Thay đổi phân vùng trong các đối tượng liên kết
  • Change data capture (gắn kết dữ liệu thay đổi)
  • Change tracking (theo dõi sự thay đổi)
  • Replication (sao chép)

Tất cả những gì đã nói, những điều này không nhất thiết là nhược điểm của việc sử dụng cơ sở dữ liệu chứa đựng, chỉ là những vấn đề bạn nên nhận thức và không được tiết lộ rõ ràng trong tài liệu chính thức.

Bạn cũng cần chắc chắn rằng nếu một cơ sở dữ liệu chứa đựng sẽ được chuyển đổi hoặc là một phần của một nhóm sẵn có hoặc đang được sao chép, tất cả các máy chủ đích có tùy chọn sp_configure contained database authentication được đặt thành 1.

Ngày đăng: 11/07/2023 được sửa đổi lần cuối cùng lúc 11/07/2023

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *