搜尋本站文章

2010-02-15

系統重建交易記錄檔案(*.ldf),以正常卸離情況為例。錯誤訊息:訊息 5120,層級 16,狀態 101 ... 無法開啟實體檔案


這邊所指的正常卸離狀況,例如:
1. 卸離此資料庫。
2. 離線此資料庫。
3. 關閉 SQL Server 服務後。
等。



但是附加的方式,則需要改變,若仍是採取一般方式來附加資料庫時,但因為沒有交易記錄檔,將遇到以下的錯誤訊息:

訊息 5120,層級 16,狀態 101,行 1
無法開啟實體檔案 "C:\myAdmin\DB\DBLog_log.ldf"。作業系統錯誤 2: "2(系統找不到指定的檔案。)"。





若僅複製其資料檔案,但不包含交易記錄檔案(*.ldf)。
符合上述的情境,可以在沒有包含交易記錄檔案(*.ldf)情況下,僅是附加資料檔案,系統可以自動重新建立交易記錄檔案(*.ldf)。



重建交易記錄檔案(*.ldf),以正常卸離情況為例:

適用版本:
SQL Server 2005 與 2008


方法1:使用 Transact-SQL 語法:

--01 建立範例資料庫:DBLog
USE [master]
GO
IF  EXISTS (SELECT name FROM sys.databases WHERE name = N'DBLog')
DROP DATABASE [DBLog]
GO
CREATE DATABASE [DBLog] ON  PRIMARY
( NAME = N'DBLog', FILENAME = N'C:\myAdmin\DB\DBLog.mdf' , SIZE = 3072KB , FILEGROWTH = 1024KB ),
FILEGROUP [G1]
( NAME = N'DBLogG1F1', FILENAME = N'C:\myAdmin\DB\DBLogG1F1.ndf' , SIZE = 3072KB , FILEGROWTH = 1024KB )
LOG ON
( NAME = N'DBLog_log', FILENAME = N'C:\myAdmin\DB\DBLog_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%)
GO

--
USE DBLog
GO
-- 查詢資料庫檔案的磁碟使用空間與資料實際使用空間
SELECT name N'邏輯名稱' , size/128.0 N'使用的磁碟空間(MB)' ,  CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)/128.0 N'資料實際上使用的空間(MB)'
,size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)/128.0 N'剩餘的可用空間(MB)'
FROM sys.database_files;

/*=========================================================*/
--02 卸離此資料庫,請手動修改交易記錄檔案(*.ldf)的檔名。
USE [master]
GO
ALTER DATABASE [DBLog] SET  SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
USE [master]
GO
EXEC master.dbo.sp_detach_db @dbname = N'DBLog'
GO

/*=========================================================*/
--03 重新附加此資料庫:僅是附加資料檔案,系統可以自動重新建立交易記錄檔案(*.ldf)。
USE [master]
GO
CREATE DATABASE [DBLog] ON
( FILENAME = N'C:\myAdmin\DB\DBLog.mdf' ),
( FILENAME = N'C:\myAdmin\DB\DBLogG1F1.ndf' )
FOR ATTACH
GO

/* 顯示的訊息:
檔案啟動錯誤。實體檔案名稱 "C:\myAdmin\DB\DBLog_log.ldf" 可能不正確。
已建立新記錄檔 'C:\myAdmin\DB\DBLog_log.LDF'。
*/






方法2:使用 SSMS 管理工具,重建交易記錄檔案(*.ldf)的方式:
步驟01. 使用 SSMS 管理工具,「附加」此資料庫。
步驟02. 在「附加資料庫」視窗,在右下方的窗格內,選取指定的「記錄檔」之資料列,在「訊息」區域,也會被標示為「找不到」。
步驟03. 點選下方的「移除」,刪除此「記錄檔」。
步驟04. 再點選「確定」,進行附加資料庫作業。



原本建立資料庫時的交易記錄檔,改名為:DBLog_log.ldf_qq,預設初始化的大小約:3,072(KB)。

僅是附加資料檔案,系統自動重新建立交易記錄檔案(*.ldf):DBLog_log.LDF,大小約:504(KB) 。


參考資料:
卸離和附加資料庫
http://msdn.microsoft.com/zh-tw/library/ms190794.aspx
保護資料和記錄檔
http://msdn.microsoft.com/zh-tw/library/ms189128.aspx