Làm cách nào để khôi phục cơ sở dữ liệu SQL Server và thu nhỏ tệp của nó cùng một lúc?


9

Giả sử tôi có cơ sở dữ liệu SQL Server có tệp dữ liệu đã được tạo với kích thước ban đầu là 100 GB, nhưng nó chỉ chứa 10 GB dữ liệu. Một bản sao lưu cơ sở dữ liệu sau đó sẽ chỉ có kích thước 10 GB.

Tôi muốn khôi phục bản sao lưu này sang một máy chủ khác (hoặc cơ sở dữ liệu khác trên cùng một máy chủ), nhưng tôi không muốn nó lấy cùng dung lượng đĩa như máy chủ ban đầu (100 GB), đó là điều xảy ra theo mặc định.

Tôi không thể thu nhỏ cơ sở dữ liệu gốc trước khi sao lưu (đó là cơ sở dữ liệu sản xuất và nó cần nhiều không gian được phân bổ trước); Tôi có thể thu nhỏ cơ sở dữ liệu đã khôi phục sau khi khôi phục xong, nhưng tôi thực sự muốn nó không chiếm 100 GB trong khi thực hiện điều đó; ngoài ra, trong kịch bản cụ thể này, tôi không có nhiều dung lượng đĩa trống, vì vậy việc khôi phục sẽ không đi đến đâu cả.

Có cách nào tôi có thể khôi phục cơ sở dữ liệu và nó chỉ chiếm nhiều dung lượng như dữ liệu thực tế chứa trong đó không?


Tôi đã có một vấn đề tương tự. Dung lượng DB ban đầu được lấy trên đĩa là ~ 30 GB (với khoảng 1,5 GB dữ liệu thực) và tôi muốn khôi phục nó tại máy chủ MSSQL Express cục bộ của mình. Vấn đề rõ ràng là máy chủ cục bộ của tôi chỉ cho phép tối đa. 10GB, vì đây là phiên bản miễn phí. Vì vậy, tôi có thể làm điều đó, nếu tôi có thể thu nhỏ các tệp trước khi thử khôi phục DB, nhưng ...
userfuser

Câu trả lời:


6

Không, xin lỗi - không có cách nào. Khôi phục khôi phục các tập tin như chúng đã được sao lưu. Schinking phải được thực hiện sau đó hoặc trước khi sao lưu.


2

Nếu bạn không đủ dung lượng ổ đĩa thì bạn có thể đặt tệp .bak trên mạng chia sẻ & khôi phục tệp từ đó. Nên hoạt động nếu máy chủ sql đang chạy của bạn có tài khoản miền và cung cấp cho quyền chia sẻ đủ để đọc tệp.

Tùy chọn khác trước đây trong giỏ hạt của bạn (nhưng chỉ hữu ích nếu máy chủ sql đang chạy 2008 r2 của bạn) là SQL Server hỗ trợ tạo tệp cơ sở dữ liệu trực tiếp để chia sẻ mà không phải sử dụng dấu vết & tôi có thể biết từ kinh nghiệm cá nhân bạn nó hoạt động! Vì vậy, bạn có thể thực hiện khôi phục VỚI M CHUYỂN để chia sẻ.


1

Nói chung là không. Một vài ý tưởng ngẫu nhiên có thể có hoặc không giúp ích gì cho bạn:

  • Trừ khi bạn thực sự cần dữ liệu từ bản sao lưu cụ thể đó, thì bạn có thể tạo cơ sở dữ liệu mới (trống) có kích thước mục tiêu và sử dụng bản sao hàng loạt (hoặc SSIS) để đẩy tất cả các bảng từ cơ sở dữ liệu hiện tại (trực tiếp) vào bản sao của bạn.
  • Có các công cụ của bên thứ 3 (ví dụ Redgate So sánh) có thể giúp tự động hóa loại điều này, nếu đây là hoạt động nhiều hơn một lần.
  • Một số phần mềm sao lưu của bên thứ 3 (chẳng hạn như Quest Litespeed) có khả năng thực hiện " phục hồi cấp đối tượng ", có thể khôi phục các bảng riêng lẻ hoặc các đối tượng khác vào cơ sở dữ liệu mới (trống). Ngay cả khi bản sao lưu không được tạo bằng Litespeed, tôi tin rằng sản phẩm sẽ hoạt động trên các bản sao lưu SQL gốc.

Cuối cùng, tôi cũng thích một số "phòng khuỷu tay" trong cơ sở dữ liệu sản xuất của mình, nhưng 90 GB miễn phí trong tổng số 100 GB nghe có vẻ hơi cực. Các bước sau đây có thể cung cấp cho bạn những gì bạn cần và không ảnh hưởng đến sản xuất:

  1. Chạy một DBCC SHRINKFILE ('myfile.MDF', TRUNCATEONLY)tệp dữ liệu sản xuất để tạm thời giải phóng bất kỳ không gian trống nào ở cuối tệp (TRUNCATEONLY không thâm dụng IO và sẽ không lập chỉ mục phân đoạn)
  2. Nếu tệp nhật ký cũng lớn, hãy chạy một DBCC SHRINKFILEtệp nhật ký sản xuất trong thời gian hoạt động thấp, ngay sau khi thực hiện sao lưu nhật ký.
  3. Chạy bản sao lưu của bạn
  4. Thực hiện ALTER DATABASE MODIFY FILEđể phát triển lại tệp dữ liệu sản xuất trở lại kích thước ban đầu.

Không nên có bất kỳ tác động sản xuất bằng cách sử dụng các bước này. Rủi ro duy nhất là nếu một số dữ liệu chỉ xảy ra ở phần cuối của tệp dữ liệu 100gb, trong trường hợp đó, Bước (1) sẽ không phát hành nhiều nếu có bất kỳ khoảng trống nào.


Cảm ơn, tôi đã biết về điều này và đã cố gắng đưa ra một số cách giải quyết. Tôi chỉ không thể chạm vào cơ sở dữ liệu gốc, chỉ có bản sao lưu được tạo sẵn ... và nó được cấu hình theo cách đó.
Massimo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.