官术网_书友最值得收藏!

6.2 分離和附加數據庫

如果要將數據庫更改到同一計算機的不同SQL Server實例或要移動數據庫,分離和附加數據庫會很有用。用戶可以分離數據庫的數據和事務日志文件,然后將它們重新附加到同一或其他SQL Server實例。

在64位和32位環境中,SQL Server磁盤存儲格式均相同。因此,可以將32位環境中的數據庫附加到64位環境中,反之亦然。從運行在某個環境中的服務器實例上分離的數據庫可以附加到運行在另一個環境中的服務器實例。

建議不要從未知源或不可信源附加或還原數據庫。此類數據庫可能包含執行非預期T-SQL代碼的惡意代碼,或通過修改架構或物理數據庫結構導致錯誤。在使用未知源或不可信源中的數據庫之前,請在非生產服務器中對數據庫運行DBCC CHECKDB,同時檢查數據庫中的代碼。

6.2.1 分離數據庫

分離數據庫是指將數據庫從SQL Server實例中刪除,但使數據庫在其數據文件和事務日志文件中保持不變。之后,就可以使用這些文件將數據庫附加到任何SQL Server實例,包括分離該數據庫的服務器。如果存在下列任何情況,就不能分離數據庫。

(1)已復制并發布的數據庫。如果進行復制,數據庫就必須是未發布的。必須通過運行sp_replicationdboption禁用發布后,才能分離數據庫。

(2)數據庫中存在數據庫快照。必須首先刪除所有數據庫快照,然后才能分離數據庫。

(3)該數據庫正在某個數據庫鏡像會話中進行鏡像。除非終止該會話,否則無法分離該數據庫。

(4)數據庫處于可疑狀態。

(5)該數據庫是系統數據庫。

確定了能夠分離數據庫后,用戶可以通過SQL Server Management Studio進行分離,其具體操作步驟如下。

步驟01 在SQL Server Management Studio對象資源管理器中連接到SQL Server數據庫引擎的實例,然后展開該實例。

步驟02 展開【數據庫】,并選擇要分離的用戶數據庫的名稱。

步驟03 右擊數據庫名稱,單擊【任務】|【分離】菜單項,如圖6.3所示。

圖6.3 分離數據庫

步驟04 將出現【分離數據庫】對話框,如圖6.4所示。

圖6.4 【分離數據庫】對話框

步驟05 分離數據庫準備就緒后,單擊【確定】按鈕。

6.2.2 附加數據庫

通過SQL Server Management Studio,用戶同樣可以附加復制的或分離的SQL Server數據庫。例如,當將包含全文目錄文件的SQL Server 2005數據庫附加到SQL Server 2016服務器實例上時,系統會將目錄文件從其以前的位置與其他數據庫文件一起附加,這與在SQL Server 2005中的情況相同。

附加數據庫時,該數據庫必須已分離且所有數據文件(MDF文件和NDF文件)都必須可用。

附加日志文件的要求在某些方面取決于數據庫是讀寫的還是只讀的。如果讀寫數據庫具有單個日志文件,并且沒有為該日志文件指定新位置,附加操作將在舊位置中查找該文件。如果找到了舊日志文件,無論數據庫上次是否完全關閉,都將使用該文件。但是,若未找到舊文件日志,數據庫上次是完全關閉且現在沒有活動日志鏈,則附加操作將嘗試為數據庫創建新的日志文件。

反之,若附加的主數據文件是只讀的,則數據庫引擎假定數據庫也是只讀的。對于只讀數據庫,日志文件在數據庫主文件中指定的位置上必須可用。因為SQL Server 2016無法更新主文件中存儲的日志位置,所以無法生成新的日志文件。

從上述內容可以看出,用戶試圖附加SQL Server 2016數據庫前,必須具備一定的先決條件,具體如下:

(1)必須首先分離數據庫。任何嘗試附加未分離的數據庫都將返回錯誤。

(2)附加數據庫時,所有數據文件(MDF文件和LDF文件)都必須可用。若任何數據文件的路徑不同于首次創建數據庫或上次附加數據庫時的路徑,則必須指定文件的當前路徑。

(3)在附加數據庫時,如果MDF和LDF文件位于不同目錄并且其中一條路徑包含\\?\GlobalRoot,該操作將失敗。

具備了如上先決條件后,用戶就可以開始附加數據庫到指定目標上了,其具體操作步驟如下:

步驟01 在SQL Server Management Studio對象資源管理器中連接到SQL Server數據庫引擎的實例,然后展開該實例。

步驟02 右擊【數據庫】菜單,然后單擊【附加】菜單項。

步驟03 在【附加數據庫】對話框中,若要指定要附加的數據庫,可以單擊【添加】按鈕,如圖6.5所示,然后在【定位數據庫文件】對話框中選擇數據庫所在的磁盤驅動器并展開目錄樹,以查找并選擇數據庫的.MDF數據文件。

圖6.5 附加數據庫

主站蜘蛛池模板: 文昌市| 江安县| 麻城市| 木里| 井研县| 新干县| 出国| 大城县| 栖霞市| 卫辉市| 乡城县| 石柱| 临高县| 潮州市| 绥江县| 萨嘎县| 大关县| 资中县| 涪陵区| 汾阳市| 贡嘎县| 凤冈县| 南漳县| 开化县| 望谟县| 兴仁县| 康保县| 玛纳斯县| 齐河县| 洛宁县| 兴城市| 聂拉木县| 西充县| 乌兰察布市| 互助| 兴文县| 南皮县| 格尔木市| 石嘴山市| 甘南县| 明溪县|