2011-12-13 69 views
37

Tôi đã đọc rất nhiều bài đăng trên Google và câu hỏi StackOverflow về cách khôi phục cơ sở dữ liệu trong SQL Server từ tệp .bak.Mở tệp .bak của Máy chủ SQL (Không khôi phục!)

Nhưng không ai trong số họ nêu rõ cách chỉ ĐỌC các bảng trong bản sao lưu cơ sở dữ liệu. (Không có gì tôi có thể tìm thấy?)

Tôi chỉ muốn kiểm tra một số thông tin cũ hiện đã bị xóa mà không thực sự khôi phục cơ sở dữ liệu đầy đủ. Điều này có khả thi không?

.

EDIT:

Tôi chỉ muốn gửi giải pháp T-SQL của tôi cho vấn đề, để những người khác có thể sử dụng nó và tôi có thể quay trở lại và nhìn nó lên;)

Trước tiên tôi tạo ra một cơ sở dữ liệu mới có tên là backup_lookup và đã chuyển sang chế độ ngoại tuyến. Sau này tôi có thể khôi phục cơ sở dữ liệu cũ của tôi mydb sang cơ sở dữ liệu mới, mà không bao giờ chạm vào bản gốc của tôi.

USE master 
GO 
RESTORE DATABASE backup_lookup 
FROM DISK = 'D:\backup\mydb.bak' 
WITH REPLACE, 
MOVE 'mydb' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\backup_lookup.mdf', 
MOVE 'mydb_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\backup_lookup_log.ldf' 
GO 

Tôi hy vọng điều này sẽ giúp :)

Trả lời

29

Từ SQL Server 2008 SSMS (SQL Server Management Studio), chỉ cần:

  1. Kết nối database instance của bạn (ví dụ, "localhost \ SQLEXPRESS")
  2. Hoặc:

    • a) Chọn cơ sở dữ liệu bạn muốn khôi phục; hoặc, cách khác
    • b) Chỉ cần tạo cơ sở dữ liệu mới, trống để khôi phục.
  3. Nhấp chuột phải, Tasks, Khôi phục, Cơ sở dữ liệu

  4. Device, [...], Thêm, Duyệt đến tập tin bak của bạn
  5. Chọn sao lưu.
    Chọn "ghi đè = Y" trong tùy chọn.
    Khôi phục cơ sở dữ liệu
  6. Cần nói "hoàn thành 100%" và cơ sở dữ liệu của bạn phải trực tuyến.

PS: Một lần nữa, tôi nhấn mạnh: bạn có thể dễ dàng làm điều này trên một "cơ sở dữ liệu đầu" - bạn làm không cần phải ghi đè lên cơ sở dữ liệu hiện tại của bạn. Nhưng bạn do cần phải RESTORE.

PPS: Bạn cũng có thể thực hiện điều tương tự với các lệnh T-SQL, nếu bạn muốn tập lệnh đó.

+0

Ah, vì vậy tôi chỉ có thể làm cho một tạm thời cơ sở dữ liệu và khôi phục lại nó vào, và sau đó xóa nó mà không có bất kỳ tác dụng trên cơ sở dữ liệu ban đầu của tôi? :) – Behrens

+0

Có, chính xác :) – paulsm4

+0

+1 và câu trả lời được chấp nhận vì giải pháp miễn phí :) – Behrens

9

Các giải pháp khả thi duy nhất là để khôi phục file .bak. Nội dung và cấu trúc của các tệp đó là không được ghi lại và do đó, thực sự không có cách nào (ngoài hack khủng khiếp) để làm việc này - chắc chắn không xứng đáng với thời gian và nỗ lực của bạn!

Công cụ duy nhất tôi biết là có thể hiểu được các tệp .bak mà không khôi phục chúng là Red-Gate SQL Compare Professional (và So sánh dữ liệu SQL đi kèm) cho phép bạn so sánh cấu trúc cơ sở dữ liệu với nội dung của tệp .bak. Công cụ Red-Gate là tuyệt vời tuyệt vời - rất khuyến khích và cũng có giá trị mỗi penny họ chi phí!

Và tôi vừa kiểm tra trang web của họ - có vẻ như bạn thực sự có thể khôi phục một bảng từ một tệp .bak với SQL So sánh Pro! :-)

0

Có vẻ như không thể chỉ với SQL Server 2008. Bạn sẽ cần sự trợ giúp của công cụ bên thứ ba.

Nó sẽ giúp bạn thực hiện hành động bak của bạn giống như một cơ sở dữ liệu trực tiếp:

http://www.red-gate.com/products/dba/sql-virtual-restore/

+1

Tuy nhiên, một viên ngọc Red Gate khác! :-) –

+0

Tôi không hiểu tại sao Microsoft chưa quyết định tạo loại tính năng này có sẵn .. Sẽ tốt cho doanh nghiệp nếu họ làm .. – Nonym

+1

không dành cho doanh nghiệp của Red-Gate, mặc dù .... –

9

Không có cách nào tiêu chuẩn để làm điều này. Bạn cần sử dụng các công cụ của bên thứ 3 như ApexSQL Restore hoặc SQL Virtual Restore. Những công cụ này không thực sự đọc tệp sao lưu trực tiếp. Họ nhận được SQL Server để "suy nghĩ" của các tập tin sao lưu như thể đây là những cơ sở dữ liệu trực tiếp.

+0

Hỗ trợ khôi phục SQL ảo đã kết thúc vào ngày 6 tháng 2 năm 2015. – mukama

1

Chỉ cần thêm giải pháp TSQL-scripted của tôi:

Trước hết; thêm cơ sở dữ liệu mới có tên backup_lookup. Sau đó chỉ cần chạy kịch bản này, chèn đường dẫn gốc cơ sở dữ liệu của riêng bạn và filepath sao lưu

USE [master] 
GO 
RESTORE DATABASE backup_lookup 
FROM DISK = 'C:\backup.bak' 
WITH REPLACE, 
MOVE 'Old Database Name' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\backup_lookup.mdf', 
MOVE 'Old Database Name_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\backup_lookup_log.ldf' 
GO 
Các vấn đề liên quan