如何解決在 SQL Server 中附加 ldf-less 數據庫時出現以下錯誤?
在您寫下沒有備份等的危險之前,請保留判斷……也許我只是繼承了這個問題?
我有一個 .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/