時(shí)間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評論(0)
在SQL Server 7.0中,微軟推出了sp_attach_db和sp_attach_single_file_db系統(tǒng)存儲過程。它對于SQL Server數(shù)據(jù)庫管理員執(zhí)行下面的任務(wù)是非常方便的:
使用sp_attach_db系統(tǒng)存儲過程直接將.MDF和.LDF文件附加到服務(wù)器。
使用sp_attach_single_file_db系統(tǒng)存儲過程只附加.MDF文件。
使用sp_detach_db將數(shù)據(jù)庫從一個服務(wù)器分離,復(fù)制.MDF文件到另一個服務(wù)器上,然后使用sp_attach_db系統(tǒng)存儲過程重新附加這些文件到兩個服務(wù)器上。
盡管它對于SQL Server數(shù)據(jù)庫管理員是很有用的,但是在使用這兩個存儲過程時(shí)是有一些限制的。限制如下:
你不能附加多個日志文件
你不能附加16個以上的文件
在SQL Server 2008中,微軟宣布上面的系統(tǒng)存儲過程將在未來的版本中被廢棄。而他們在"Create Database"SQL語句中添加了一個從句"For Attach"。
這篇文章將介紹使用"For Attach"從句的多種方法,以克服在使用sp_attach_db和sp_attach_single_file_db時(shí)要面臨的限制。
假設(shè)我們有一個數(shù)據(jù)庫叫"MyDB1",它有一個.MDF文件和一個.LDF文件。使用下面的事務(wù)SQL語句創(chuàng)建這個數(shù)據(jù)庫。再假設(shè).MDF文件和.LDF文件的位置是"C:Program FilesMicrosoft SQL ServerMSSQL10.SQL2008MSSQLDATASummary Database DataData File for Monthly ArchiveMicrosoft SQL Server 2008 Data File"。
- Use?Master? ?
- go? ?
- CREATE?DATABASE?MyDB1? ?
- ON? ?
- (?NAME?=?MyDB1_dat,? ?
- FILENAME?=?'C:Program?Files? ?
- Microsoft?SQL?ServerMSSQL10.SQL2008MSSQLDATA? ?
- Summary?Database?DataData?File?for?Monthly?Archive? ?
- Microsoft?SQL?Server?2008?Data?FileMyDB1.mdf',? ?
- SIZE?=?10,? ?
- MAXSIZE?=?50,? ?
- FILEGROWTH?=?5?)? ?
- LOG?ON? ?
- (?NAME?=?MyDB1_log,? ?
- FILENAME?=?'C:Program?Files? ?
- Microsoft?SQL?ServerMSSQL10.SQL2008MSSQLDATA? ?
- Summary?Database?DataData?File?for?Monthly?Archive? ?
- Microsoft?SQL?Server?2008?Data?FileMyDB1.ldf',? ?
- SIZE?=?5MB,? ?
- MAXSIZE?=?25MB,? ?
- FILEGROWTH?=?5MB?)? ?
- GO??
現(xiàn)在,讓我們分離該數(shù)據(jù)庫,并嘗試使用sp_detach_db和 sp_attach_db將它重新附加。執(zhí)行下面的事務(wù)SQL語句。
- use?master? ?
- go? ?
- sp_detach_db?'MyDB1'? ?
- go? ?
- sp_attach_db?'MyDb1',? ?
- 'C:Program?FilesMicrosoft?SQL?ServerMSSQL10.SQL2008MSSQLDATASummary?Database?Data? ?
- Data?File?for?Monthly?ArchiveMicrosoft?SQL?Server?2008?Data?FileMyDB1.mdf',? ?
- 'C:Program?FilesMicrosoft?SQL?ServerMSSQL10.SQL2008MSSQLDATASummary?Database?Data? ?
- Data?File?for?Monthly?ArchiveMicrosoft?SQL?Server?2008?Data?FileMyDB1.ldf'? ?
- GO? ?
- 你可以使用具有"For?Attach"從句的"Create?database"命令附加上相同的數(shù)據(jù)庫文件,如下所示。? ?
- use?master? ?
- go? ?
- sp_detach_db?'MyDB1'? ?
- go? ?
- CREATE?DATABASE?MyDB1? ?
- ON? ?
- (? ?
- FILENAME?=?'C:Program?FilesMicrosoft?SQL?ServerMSSQL10.SQL2008MSSQLDATASummary?Database?Data? ?
- Data?File?for?Monthly?ArchiveMicrosoft?SQL?Server?2008?Data?FileMyDB1.mdf'? ?
- ),? ?
- (? ?
- FILENAME?=?'C:Program?FilesMicrosoft?SQL?ServerMSSQL10.SQL2008MSSQLDATASummary?Database?Data? ?
- Data?File?for?Monthly?ArchiveMicrosoft?SQL?Server?2008?Data?FileMyDB1.ldf'? ?
- )?for?Attach? ?
- go??
現(xiàn)在,讓我們分離數(shù)據(jù)庫MyDB1,然后刪除.ldf文件,再然后使用sp_attach_single_file_db系統(tǒng)存儲過程通過執(zhí)行下面的TSQL命令將它重新附加上。
- use?master? ?
- go? ?
- sp_detach_db?'MyDB1'? ?
- go? ?
- exec?master..xp_cmdshell?'del?"C:Program?FilesMicrosoft?SQL?ServerMSSQL10.SQL2008MSSQLDATASummary?Database?Data? ?
- Data?File?for?Monthly?ArchiveMicrosoft?SQL?Server?2008?Data?FileMyDB1.ldf"'? ?
- go??
注意:我使用xp_cmdshell來刪除.ldf文件。如果xp_cmdshell沒有激活,那么你將得到下面的錯誤。
錯誤:
- Msg?15281,?Level?16,?State?1,?Procedure?xp_cmdshell,?Line?1? ?
- SQL?Server?blocked?access?to?procedure?'sys.xp_cmdshell'?of?component?'xp_cmdshe
關(guān)鍵詞標(biāo)簽:SQL Server 2008
相關(guān)閱讀
熱門文章 淺談JSP JDBC來連接SQL Server 2005的方法 SqlServer2005對現(xiàn)有數(shù)據(jù)進(jìn)行分區(qū)具體步驟 sql server系統(tǒng)表損壞的解決方法 MS-SQL2005服務(wù)器登錄名、角色、數(shù)據(jù)庫用戶、角色、架構(gòu)的關(guān)系
人氣排行 配置和注冊O(shè)DBC數(shù)據(jù)源-odbc數(shù)據(jù)源配置教程 如何遠(yuǎn)程備份(還原)SQL2000數(shù)據(jù)庫 SQL2000數(shù)據(jù)庫遠(yuǎn)程導(dǎo)入(導(dǎo)出)數(shù)據(jù) SQL2000和SQL2005數(shù)據(jù)庫服務(wù)端口查看或修改 修改Sql Server唯一約束教程 SQL Server 2005降級到2000的正確操作步驟 sql server系統(tǒng)表損壞的解決方法 淺談JSP JDBC來連接SQL Server 2005的方法