2009-05-29 55 views
6

Làm cách nào để đính kèm cơ sở dữ liệu mà không có tệp LDF trong SQL Server?Cách đính kèm cơ sở dữ liệu không có tệp LDF?

+1

Chỉ cần thêm rằng bạn có thể nhận được một cơ sở dữ liệu không nhất quán bằng cách thực hiện việc này. Nó là tốt hơn nhiều để đính kèm nó với LDF ban đầu. Xem https://blogs.msdn.com/sqlserverstorageengine/archive/2006/06/15/632398.aspx –

Trả lời

8

Bạn có thể sử dụng sp_attach_single_file_db để đính kèm cơ sở dữ liệu thiếu tệp nhật ký của nó.

+0

Lỗi này cho biết: Không thể mở cơ sở dữ liệu mới 'SharedCS'. CREATE DATABASE bị hủy bỏ. Lỗi kích hoạt thiết bị. Tên tệp vật lý 'd: \ Program Files \ Microsoft SQL Server \ MSSQL \ data \ dummy_Log.LDF' có thể không chính xác. – Ricardo

+0

Đừng cố đính kèm một bản ghi giả. Bạn có thể đăng lệnh sp_attach_single_file_db bạn đang chạy không? –

+1

Điều này chỉ hoạt động nếu tệp nhật ký có thể được tạo lại ở nơi .mdf cho biết. – Joshua

1

Bạn có thể "chỉ cần làm điều đó" nó sẽ ném một cảnh báo rằng nó không thể tìm thấy .ldf, nhưng nó vẫn sẽ đính kèm db.

+0

Nó đưa ra một lỗi và cơ sở dữ liệu không được đính kèm. – Ricardo

3

Bạn có thể thử những gì được đăng here bởi MohammedU. Về cơ bản, những gì anh ta sử dụng lệnh DBCC REBUILD_LOG. Nó sẽ hoạt động tùy thuộc vào phiên bản máy chủ của bạn.

Dưới đây là các bước (không có thêm chi tiết):

  1. Đổi tên file MDF hiện có để .mdf_old
  2. Create a new database với cùng MDF và file .LDF như cũ.
  3. Dừng máy chủ sql
  4. Rename MDF và .LDF file của db mới để .mdf_old và .ldf_old
  5. Rename .mdf_old để MDF
  6. Bắt đầu máy chủ sql
  7. Bạn sẽ thấy db trong chế độ nghi ngờ
  8. Thay đổi bối cảnh cơ sở dữ liệu thành Master và cho phép cập nhật bảng hệ thống
  9. Đặt cơ sở dữ liệu ở chế độ Emergency (bypass recovery).
  10. Dừng và khởi động lại máy chủ SQL.
  11. Tạo lại nhật ký.
  12. Đặt cơ sở dữ liệu ở chế độ một người dùng và chạy DBCC CHECKDB để xác thực tính nhất quán của vật lý.
  13. Tắt các bản cập nhật cho các bảng hệ thống.
+1

Làm cách nào để thực hiện các bước từ 8 đến 13? –

1

Nếu bạn gặp sự cố, hãy xác minh rằng tệp mdf không phải là chỉ đọc.

0
EXEC sp_attach_single_file_db @dbname = 'DBNAME',@physname = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\DBNAME_Data.mdf'; 

Tôi đã thử và đã hoạt động ... Hy vọng điều này sẽ hữu ích.

3

Hãy thử bước này thông qua SQL Server Management Studio

  1. mở SSMS và thực hiện một click chuột phải trên cơ sở dữ liệu.
  2. Chọn Đính kèm tùy chọn
  3. Sau đó nhấp vào thêm để đính kèm tệp MDF.
  4. Chọn tập tin từ danh sách và click vào Ok
  5. Bây giờ màn hình hiển thị tập tin MDF và LDF Tệp (Không tìm thấy)
  6. Chọn File LDF và click vào Remove tùy chọn.
  7. Sau khi xóa tệp LDF, hãy nhấp vào OK.
  8. tệp MDF được đính kèm thành công trong danh sách cơ sở dữ liệu.
+0

Điều này không hiệu quả đối với tôi. Bạn có thể đề xuất giải pháp khác không? –

+0

đây là một bài viết tuyệt vời về [cách đính kèm mdf mà không có ldf] (http: //www.sqlserverlogexplorer.com/how-to-attach-mdf-file-without-ldf-file /) –

3

Cố gắng đính kèm nó bằng cách thêm tệp MDF vào hộp thoại Đính kèm cơ sở dữ liệu. Bạn sẽ lưu ý rằng hộp thoại sẽ báo cáo tệp LDF bị thiếu.Thực hiện theo các bước như trên hình ảnh:

enter image description here

+1

Trong SQL Server 2012, nó sẽ không hoạt động. Tôi đã thử. –

+0

Nó hoạt động cho tôi vào năm 2012 thể hiện – Juan

1

Dưới đây là Code Snippets để programaticaly tạo .LDF file

Sau đây là 3 phương pháp.

Phương pháp -1

Trong trường hợp của tôi, tôi có cơ sở dữ liệu của tôi trong thư mục DATA.

Bạn có thể lấy đường dẫn đầy đủ đến cơ sở dữ liệu của bạn bằng cách nhấp chuột phải và sau đó sẽ tính sau đó bạn có thể sao chép đường dẫn đầy đủ đến cơ sở dữ liệu

của bạn như trong trường hợp của tôi con đường là như sau.

C: \ Program Files \ Microsoft SQL Server \ MSSQL11.DRIBBLEE \ MSSQL \ Data

Bây giờ ở đây là phương pháp đầu tiên bằng cách sử dụng thủ tục lưu trữ (sp_attach_single_file_db) và đi qua nó đối số (tên cơ sở dữ liệu và đường dẫn vật lý)

USE [master] 
GO 

EXECUTE sp_attach_single_file_db 
@dbname='AdventureWorksDW_2012', 
@physname=N'C:\ProgramFiles\MicrosoftSQLServer\MSSQL11.DRIBBLEE\MSSQL\DATA\AdventureWorksDW2012_Data.mdf' 

GO 

thực thi mã mà bạn sau khi thực thi mã, chuyển đến thư mục cơ sở dữ liệu của bạn nơi nó cư trú, bạn sẽ thấy tệp .ldf được tạo ở đằng kia.

Tuy nhiên bạn sẽ nhận được thông báo sau trong

The physical file name "C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\AdventureWorksDW2012_log.ldf" may be incorrect. 
New log file 'C:\Program Files\Microsoft SQL Server\MSSQL11.DRIBBLEE\MSSQL\DATA\AdventureWorksDW_2012_log.ldf' was created. 

Bây giờ bạn có thể đính kèm cơ sở dữ liệu của bạn của bạn và sau Gắn Cơ sở dữ liệu click chuột phải vào tên máy chủ của bạn trong Object Explorer và làm mới.

Method-2

NẾU cơ sở dữ liệu của bạn có một hoặc nhiều file log mất tích, bạn có thể sử dụng sau

CREATE DATABASE db_namehere ON 
(
    FILENAME=N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\db_namehere.mdf') 

FOR ATTACH_REBUILD_LOG 
GO 

Phương-3

Nếu bạn sở dữ liệu chỉ có một bản ghi tệp missig bạn có thể sử dụng số này

CREATE DATABASE db_name ON 
(FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\TestDb.mdf') 
FOR ATTACH 
GO 

Bạn có thể đọc thêm trong BOOKs Online để biết thêm thông tin.

Các vấn đề liên quan