15

MS SQL Server 2005 で作成されたデータベース用の MDF ファイルがあり、LDF ファイルはありません。MDF ファイルを別の SQL Server に添付しようとすると、次のエラー メッセージが表示されます。

The log cannot be rebuilt because there were open transactions/users when the database was shutdown, no checkpoint occurred to the database, or the database was read-only. This error could occur if the transaction log file was manually deleted or lost due to a hardware or environment failure.

次のオプションのいずれかを達成したいと思います。

  1. データを失うことなくデータベースをアタッチします (可能性は低いですが、時間を節約できます)。
  2. データベースを接続すると、データが失われます (開いていたトランザクションはすべて失われます)。
  3. MDF ファイルからスキーマのみ (データなし) を回復します。

データベースを再び動作させるには、どの SQL コマンドを試すことができますか?

4

8 に答える 8

21

Experts Exchangeで次のドキュメントを見つけました。

patikt: データが失われますが、それは可能です。

1. データベースを切り離し、mdf を保存場所に移動します。
2. 同じ名前、同じファイル、同じファイルの場所、同じファイル サイズの新しいデータベースを作成します。
3. SQL サーバーを停止します。
4. 作成したばかりの DB の mdf ファイルを保存したものに交換します。
5. SQL を開始します。DBは疑わしいでしょう。
6. ALTER DATABASE yourdbSET EMERGENCY
7.ALTER DATABASE yourdbSET SINGLE_USER
8. DBCC CHECKDB ( yourdb, REPAIR_ALLOW_DATA_LOSS)
9. ALTER DATABASE yourdbSET MULTI_USER
10. ALTER DATABASE yourdbSET ONLINE
于 2009-04-21T15:27:49.370 に答える
11

MDF ファイルが破損している場合に発生する可能性があるログの再作成が機能しない場合の、パート 2) および 3) をカバーする詳細を以下に示します。

バイナリデータとして書き込まれたものをデコードできるサードパーティのツールを使用して MDF ファイルを読み取るだけで、データと構造を回復できますが、そのようなツールを使用しても、常に完全に機能するとは限りません。

そのような場合は、ApexSQL Recoverを試すことができます。私が知っている限り、これはこの種の作業を行うことができる唯一のツールですが、非常に高価です。

古いバックアップがある場合は、そこから復元することをお勧めします。

于 2013-05-28T09:33:01.990 に答える
9

FROM a post at SQL Server Forums Attaching MDF without LDF:

If you want to attach a MDF without LDF you can follow the steps below It is tested and working fine

  1. Create a new database with the same name and same MDF and LDF files

  2. Stop sql server and rename the existing MDF to a new one and copy the original MDF to this location and delete the LDF files.

  3. Start SQL Server

  4. Now your database will be marked suspect 5. Update the sysdatabases to update to Emergency mode. This will not use LOG files in start up

Sp_configure "allow updates", 1
go
Reconfigure with override
GO
Update sysdatabases set status = 32768 where name = "BadDbName"
go
Sp_configure "allow updates", 0
go
Reconfigure with override
GO
  1. Restart sql server. now the database will be in emergency mode

  2. Now execute the undocumented DBCC to create a log file

DBCC REBUILD_LOG(dbname,'c:\dbname.ldf') -- Undocumented step to create a new log file.

(replace the dbname and log file name based on ur requirement)

  1. Execute sp_resetstatus

  2. Restart SQL server and see the database is online.

UPDATE: DBCC REBUILD_LOG does not existing SQL2005 and above. This should work:

USE [master]
GO
CREATE DATABASE [Test] ON 
    (FILENAME = N'C:\MSSQL\Data\Test.mdf')
    FOR ATTACH_REBUILD_LOG
GO
于 2009-04-21T15:11:20.970 に答える
2

ここを参照してください:マスターを再構築し、完全なディスク障害からシステムデータベースを復元します。これには非常に優れた説明があります

于 2009-04-21T16:52:52.770 に答える
1

自分でこの問題を抱えていましたが、上記の答えはどれもうまくいきませんでした。

しかし、代わりに、私はこれがうまく機能することを発見したので、他の人のためにこれを共有すると思いました:

http://www.kodyaz.com/articles/sql-server-attach-database-mdf-file.aspx

于 2012-01-16T10:46:12.563 に答える
1

完全に機能する別の方法を見つけました:

  1. デフォルトのデータベースの場所と同じ名前で新しいデータベースを作成します。
  2. SQL サーバーを停止します。
  3. 古い mdf ファイルをコピーして、新しく作成された mdf ファイルを上書きし、新しい ldf ファイルを削除します
  4. SQL Server を起動すると、データベースは緊急モードになります
  5. 緊急モード データベースを切り離す
  6. 元の ldf ファイルをデフォルトのデータベースの場所にコピーします (新しい LDF ファイルは、上記の手順 3 で作成および削除されます)。
  7. データベース MDF ファイルを添付します。

上記のすべてを試した後、動作するデータベースを取得しましたが、失敗しました。

于 2010-09-13T14:29:08.590 に答える