搜尋本站文章

2009-10-29

附加(attach)包含 FILESTREAM 的資料庫,以 AdventureWorks2008 範例資料庫為例


在 AdventureWorks2008 範例資料庫內包含了 FILESTREAM 資料類型。
若使用 SSMS 管理工具,直接採取卸離(Detach),再附加(attach) 資料庫的作法,可能在執行附加(attach)作業時,遇到以下的錯誤訊息:

訊息 5120,層級 16,狀態 105,行 1
無法開啟實體檔案 "C:\SQLDB\AdventureWorks2008_2.Documents"。作業系統錯誤 2: "2(系統找不到指定的檔案。)"。
訊息 5105,層級 16,狀態 14,行 1
發生檔案啟動錯誤。實體檔案名稱 'C:\SQLDB\AdventureWorks2008_2.Documents' 可能不正確。請診斷並校正其他錯誤,然後重試一次作業。
訊息 1813,層級 16,狀態 2,行 1
無法開啟新資料庫 'AdventureWorks2008'。CREATE DATABASE 已經中止。







這可能是因為,目前 SSMS 管理工具尚未提供附加包含 FILESTREAM 的資料庫的功能,但您可以利用以下的範例碼來執行附加(attach)作業:

/*
1. 在  FILEGROUP [DocumentFileStreamGroup] CONTAINS FILESTREAM  DEFAULT 這句話的意思是指:
設定用來存放 FILESTREAM 的預設檔案群組:[DocumentFileStreamGroup]

2. ( NAME = N'FileStreamDocuments', FILENAME = N'C:\SQLDB\AdventureWorks2008_2.Documents' ), 這句話是指:
NAME :是設定包含 FILESTREAM 的邏輯檔案名稱。
FILENAME :設定包含 FILESTREAM 的實體資料夾之路徑。
--
CONTAINS FILESTREAM
指定檔案群組會將 FILESTREAM 二進位大型物件 (BLOB) 儲存在檔案系統中。

DEFAULT
指定具名的檔案群組必須是資料庫中的預設檔案群組。
--
在本範例中,是將資料庫的實體檔案存放在:C:\SQLDB 資料夾。
包含 FILESTREAM 的實體資料夾之路徑,則是為於:C:\SQLDB\AdventureWorks2008_2.Documents 資料夾。
*/
USE [master]
GO
CREATE DATABASE [AdventureWorks2008] ON
( FILENAME = N'C:\SQLDB\AdventureWorks2008.mdf' ),
FILEGROUP [DocumentFileStreamGroup] CONTAINS FILESTREAM  DEFAULT
( NAME = N'FileStreamDocuments', FILENAME = N'C:\SQLDB\AdventureWorks2008_2.Documents' ),
( FILENAME = N'C:\SQLDB\AdventureWorks2008_1.ldf' )
FOR ATTACH
GO


參考資料:
啟用 Enable FILESTREAM ,下載安裝 AdventureWorks2008 範例資料庫(Installing Sample Databases)
http://sharedderrick.blogspot.com/2009/06/enable-filestream-adventureworks2008.html

SQL Server 2008 線上叢書 (2009 年 7 月) CREATE DATABASE (Transact-SQL)
http://technet.microsoft.com/zh-tw/library/ms176061.aspx