一、前言 今天公司要切換資料庫伺服器,資料庫文件大於2G,結果再附加到另一伺服器的資料庫裡面,就產生了一個問題。如下: 二、解決方案 在網上找了很多方法,最後在CSDN上找到了相關的解決方式,經測試可用。 網上看到的整理了一下。 在SQL Server 7.0中,微軟推出了 和`sp_attach_ ...
一、前言
今天公司要切換資料庫伺服器,資料庫文件大於2G,結果再附加到另一伺服器的資料庫裡面,就產生了一個問題。如下:
標題:Microsoft SQL Server Management Studio
------------------------------
無法為此請求檢索數據。(Microsoft.SqlServer.SmoEnum)
------------------------------
其他信息:
執行 Transact-SQL 語句或批處理時發生了異常。(Microsoft.SqlServer.ConnectionInfo)
------------------------------
E:\DATA\資料庫名.mdf 不是主資料庫文件。(Microsoft SQL Server,錯誤:5171)
二、解決方案
在網上找了很多方法,最後在CSDN上找到了相關的解決方式,經測試可用。
use master
go
sp_detach_db '資料庫名' -- 分離資料庫
go
sp_attach_db '資料庫名','E:\資料庫名.mdf','E:\資料庫名.ldf' -- 附加資料庫文件
go
網上看到的整理了一下。
在SQL Server 7.0中,微軟推出了sp_attach_db
和sp_attach_single_file_db
系統存儲過程。
它對於SQL Server資料庫管理員執行下麵的任務是非常方便的:
sp_attach_db
:直接將.MDF和.LDF文件附加到伺服器。sp_attach_single_file_db
:只附加.MDF文件。sp_detach_db
:將資料庫從一個伺服器分離。複製.MDF文件到另一個伺服器上,然後使用sp_attach_db
系統存儲過程重新附加這些文件到兩個伺服器上。
儘管它對於SQL Server資料庫管理員是很有用的,但是在使用這兩個存儲過程時是有一些限制的。限制如下:
- 不能附加多個日誌文件。
- 不能附加16個以上的文件。
在SQL Server 2008中,微軟宣佈上面的系統存儲過程將在未來的版本中被廢棄。而他們在"Create Database"
SQL語句中添加了一個從句"For Attach"。
下麵介紹使用"For Attach"從句的多種方法,以剋服在使用sp_attach_db和sp_attach_single_file_db時要面臨的限制。
三、案例
-- 創建測試資料庫
use master
go
CREATE DATABASE TestDB
ON
(
NAME = TestDB,
FILENAME = 'D:\TestDB.mdf',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5,
)
LOG ON
(
NAME = TestDB_log,
FILENAME = 'D"\TestDB_log.ldf',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB
)
GO
-- 現在,讓我們分離該資料庫,並嘗試使用sp_detach_db和sp_attach_db將它重新附加。
-- 執行下麵的事務SQL語句。
use master
go
sp_detach_db 'TestDB'
go
sp_attach_db 'TestDB', 'D:\TestDB.mdf', 'D:\TestDB_log.ldf'
go
-- 你也可以使用具有"For Attach"從句的"Create database"命令附加相同的資料庫文件,如下所示。
use master
go
sp_detach_db 'TestDB'
go
CREATE DATABASE TestDB
ON
(FILENAME = 'D:\TestDB.mdf'),
(FILENAME = 'D:\TestDB_log.ldf')
For Attach
go
-- 現在,讓我們分離資料庫TestDB,然後刪除.ldf文件,再然後使用sp_attach_single_file_db
-- 系統存儲過程通過,執行下麵的T-SQL命令將它重新附加上。
use master
go
sp_detach_db 'TestDB'
go
exec master..xp_cmdshell 'del "D:\TestDB_log.ldf"'
go
-- 你可以使用下麵的事務SQL語句來激活xp_cmdshell
use master
go
sp_configure 'show advanced options',1
go
reconfigure with override
go
sp_configure 'xp_cmdshell',1
go
reconfigure with override
go
-- 或者,你可以在MS-DOS命令提示符中使用Windows資源管理器的"Del"命令來刪除.ldf文件。
-- 現在,讓我們只使用sp_attach_single_file_db來附加.MDF文件。執行下麵所示的命令。
use master
go
sp_attach_single_file_db 'TestDB','D:\TestDB.mdf'
go
-- 你可以只通過使用帶有"For ATTACH_REBUILD_LOG"從句的"Create database"命令來附加
-- 相同的資料庫.MDF文件,如下所示。
use master
go
sp_detach_db 'TestDB'
go
exec master..xp_cmdshell 'del "D:\TestDB_log.ldf"'
go
-- 註意:當日誌文件被重新創建時,SQL Server自動對日誌文件名稱添加尾碼"_log"。
CREATE DATABASE TestDB
ON
(
FILENAME = 'D:\TestDB.mdf'
)
For ATTACH_REBUILD_LOG