簡介
SQL Server 2012新增的Contained Database是為了解決數據庫在不同SQL Server實例之間遷移的問題。在以往的情況下,數據庫本身並不包含一些實例級別的配置參數(比如:數據庫的一些metadata和登錄名之類的)將數據庫從一台服務器遷移到另一台服務器使用備份和恢復(或分離和附加)使得需要額外工作來設置這些數據庫實例級別的metadata,而使用Contained Database,可以將這類信息包含在數據庫中,從而大大減少這類工作的工作量。
下面我們從配置Contained Database開始。
配置Contained Database
在開始使用Contained Database之前,首先要通過Sp_config或SSMS來配置實例級別的參數開啟Contained Database.如代碼1和圖1所示。
--開啟允許配置Contained database sp_configure 'show advanced options',1 reconfigure go sp_configure 'contained database authentication',1 reconfigure go
代碼1.通過sp_configure開啟Contained Database
圖1.通過SSMS開啟Contained Database
在實例級別開啟允許使用Contained Database后,通過對希望變為Contained Database的數據庫在SSMS中進行設置。如圖2所示。
圖2.Contained Database在數據庫級別的設置
下面我們在數據庫級別設置用戶,如圖3所示.
圖3.在數據庫級別添加用戶
同時我們為用戶在成員身份中指定到db_owner組。現在,我們就能通過SSMS連接到這個Contained Database了。如圖4所示。
圖4.使用剛剛在數據庫級別創建的用戶進行登錄
用我們剛剛創建的用戶登錄,在選項中指定連接數據庫為剛才設置為Contained Database的數據庫,如圖5所示。
圖5.指定設置為Contained Database的數據庫(Test數據庫)
連接成功后,我們可以看到,作為數據庫級別設置的用戶,是無法訪問實例中的其它數據庫的。而在圖6中我們可以看到,實例不不包含剛剛創建的登錄名的,而是包含在數據庫級別。
圖6.兩種連接方式對比
備份和恢復Contained Database
當然,Contained Database最大的作用是在備份和恢復時的便利性。下面,我們將剛才的Contained Database進行備份,然后在另一個實例中進行恢復。如圖7和圖8所示。
圖7.備份數據庫
圖8.在另一個實例中恢復數據庫
這里要注意的是,在另一個實例必須也是sql server 2012並且在實例級別開啟了”啟用包含數據庫”選項。我們嘗試登錄另一台服務器后,可以看到Contained Database,如圖9所示。
總結
本文簡單講述了Contained Database,使用Contained Database大大減少數據庫在實例之間的遷移工作。但Contained Database真正的強大之處是和AlwaysOn結合使用,我將在后續文章中講到。