Sql-Server-2008

如何解決在 SQL Server 中附加 ldf-less 數據庫時出現以下錯誤?

  • October 23, 2019

在您寫下沒有備份等的危險之前,請保留判斷……也許我只是繼承了這個問題?

我有一個 .mdf,我試圖將它附加到 SQL Server 8。我嘗試了多種方法。

例如:

CREATE DATABASE [foo] ON ( FILENAME = N'D:\Microsoft SQL Server\YourDataPath\Data\foo.mdf' )
FOR ATTACH_REBUILD_LOG
GO

給我以下錯誤:“伺服器:消息 102,級別 15,狀態 1,行 2 ‘ATTACH REBUILD LOG’ 附近的語法不正確”

如果我只使用 ATTACH 執行查詢,則會由於缺少日誌文件而出錯。

此外,我嘗試通過管理控制台附加它。

我(通常)相當稱職,正如我所寫,我繼承了這個問題。

數據庫完全被淹沒了,我執行了緊急程序、CBCC CHECKDB 命令等,它似乎正在工作(零錯誤),但只是在只讀模式下。我認為這可能是日誌文件權限的問題,我讀到您可以將其分離並重新附加以啟動新的日誌文件,當我分離它時 - 我發現我無法重新附加它。

我頭疼。任何幫助都會導致嚴重的業力點。哈!??!

更新,我做了一件非常駭人聽聞的事情:我重命名了 mdf,創建了一個同名的數據庫,刪除了新的 mdf 和 ldf,然後重新啟動它。它是在“可疑”模式下被發現的。

所以我這樣做了:

USE [master]
GO

EXECUTE sp_configure 'allow updates',1
RECONFIGURE with OVERRIDE
GO

UPDATE sysdatabases 
SET status = 32768 
WHERE name = 'foo'
GO

然後這個:

USE [master]
DBCC CHECKDB('foo')
GO

最後這個:

USE [master]
GO

ALTER DATABASE [dbname] SET MULTI_USER
GO

UPDATE sysdatabases 
SET status = 0 
WHERE name = 'foo'
GO

EXECUTE sp_configure 'allow updates',0
RECONFIGURE with OVERRIDE
GO

它似乎重新聯機,我可以執行 SELECT 語句,並且數據庫似乎已重新連接,但是沒有 ldf 文件,如果我嘗試執行 INSERT 或 UPDATE,伺服器就會崩潰。

我試圖創建一個表,它說:

‘STUFF’ 表 - 無法創建表。

無效的交易狀態:

$$ Microsoft $$$$ ODBC SQL Server Driver $$$$ SQL Server $$無法在數據庫 ‘foo’ 中執行 BEGIN TRANSACTION,因為數據庫處於旁路恢復模式。 我跑了:

ALTER DATABASE foo SET MULTI_USER WITH ROLLBACK IMMEDIATE

還是沒有骰子。

編輯; 版本 8,真的嗎?那是SQL 2000?我擔心這太不支持了。

10 年前,我確實接到了一個關於 SQL 2000 中損壞的 ldf 文件的電話,並使用未記錄且不受支持的命令修復了它。

我不記得我使用了什麼命令,但看看這裡 https://blog.sqlauthority.com/2007/05/15/sql-server-dbcc-commands-list-documented-and-undocumented/

可能其中之一會做到這一點,你必須看看Google上是否還有任何東西。

 DBCC dbrecover (dbname [, IgnoreErrors])
 DBCC dbrepair (‘dbname’, DROPDB [, NOINIT])

對於更高版本:

   CREATE DATABASE TestDb ON
   (FILENAME = N'C:\Program Files\....\MSSQL\DATA\TestDb.mdf')
   FOR ATTACH_REBUILD_LOG

或者

   EXEC sp_attach_single_file_db @dbname='TestDb',
   @physname=N'C:\....\MSSQL\DATA\TestDb.mdf'

第三種方法

   CREATE DATABASE TestDb ON
   ( FILENAME = N'C:\Program Files\..R\MSSQL\DATA\TestDb.mdf')
   FOR ATTACH

並供將來參考,如果沒有完全關閉 https://sqlinthewild.co.za/index.php/2009/06/09/deleting-the-transaction-log/

引用自:https://dba.stackexchange.com/questions/251736