Đính kèm / tách so với sao lưu / khôi phục


14

Tôi cần chuyển cơ sở dữ liệu (toàn bộ) sang một máy chủ khác, để tạo một cơ sở dữ liệu trùng lặp để thiết lập một môi trường thử nghiệm khác.

Tôi có hai lựa chọn:

  1. Tạo một bản sao lưu đầy đủ tại máy chủ nguồn / khôi phục tại máy chủ đích;
  2. Tháo ra tại máy chủ nguồn / đính kèm tại máy chủ đích.

Những ưu và nhược điểm của hai giải pháp theo yêu cầu của tôi là gì?

Tôi đang sử dụng SQL Server 2008 Enterprise.

Câu trả lời:


12

Sao lưu / khôi phục thường là phương pháp bạn chọn. Nó sẽ nhanh hơn trong hầu hết các tình huống.

Bạn có thể sử dụng nó một cách nhất quán, cũng để sản xuất để kiểm tra quá.

Xem câu hỏi liên quan này là tốt, trong đó sao lưu / khôi phục so với tách / đính kèm được đề cập:

SQL Server Migration khôi phục sao lưu so với sao chép dữ liệu và tệp nhật ký

Hãy chắc chắn rằng bạn thêm WITH COPY_ONLYtùy chọn vào bản sao lưu để nó không phá vỡ chuỗi sao lưu kế hoạch bảo trì hiện có.


SQL 2008 Enterprise giới thiệu nén sao lưu; nhiều khả năng là bản sao lưu nén sẽ nhỏ hơn đáng kể so với 100GB, và do đó, việc ghi / sao chép / tải nhanh hơn so với sao chép qua các bản MDF / LDF.
Thomas Rushton

6
  1. Tháo cơ sở dữ liệu sẽ đưa nó ngoại tuyến. Tạo một bản sao lưu nếu bạn cần cơ sở dữ liệu vẫn trực tuyến trong khi bạn sao chép nó sang một máy chủ khác.
  2. Di chuyển và khôi phục tệp sao lưu (.bak) có thể đơn giản / dễ dàng hơn so với việc di chuyển và đính kèm nhiều tệp mdf / ldf (như bạn sẽ làm nếu tách rời cơ sở dữ liệu).
  3. Trên giấy tờ, việc tách / đính kèm cơ sở dữ liệu có thể nhanh hơn về mặt kỹ thuật, nhưng trên thực tế, việc sao lưu / khôi phục có thể sẽ nhanh hơn và dễ dàng hơn. Khi bạn tách cơ sở dữ liệu, trước tiên bạn phải lấy cơ sở dữ liệu gốc ngoại tuyến (ngắt kết nối mọi người và mọi thứ), sau đó cơ sở dữ liệu không khả dụng cho đến khi bạn gắn lại. Bạn cũng phải theo dõi tất cả các tệp, trong khi với bản sao lưu tất cả các tệp được nhóm lại.

Nếu bạn quyết định sao lưu / khôi phục, hãy sử dụng tùy chọn VỚI COPY_ONLY trong quá trình sao lưu để đảm bảo rằng bất kỳ chuỗi sao lưu nào của gói bảo trì hiện tại không bị hỏng.

Tệp .bak nén tốt, vì vậy nếu bạn quyết định thực hiện sao lưu, nén sao lưu trước khi di chuyển, nó có thể tiết kiệm thời gian chuyển.


4

Tôi sẽ đi sao lưu / khôi phục vì nó để cơ sở dữ liệu gốc ở trạng thái hoạt động.

Đặc biệt nếu bạn đang thực hiện chuyển đổi 'sản xuất để kiểm tra', điều quan trọng là cơ sở dữ liệu sản xuất vẫn trực tuyến.

Sao lưu / khôi phục cũng là một tùy chọn an toàn hơn : Điều gì xảy ra nếu tệp bị hỏng ở đâu đó giữa lúc bắt đầu tách, sao chép, đính kèm, v.v.? Ít nhất nếu bạn thực hiện sao lưu và tệp bị hỏng, bạn có thể bắt đầu lại. Nếu điều đó xảy ra với một tách ra, cơ sở dữ liệu của bạn sẽ biến mất.

Ngoài ra, với tôi (mặc dù nó có cảm giác hơn bất kỳ thứ gì khác), sao lưu / khôi phục là "công việc hàng ngày" trong khi tách / đính kèm là thứ bạn làm trong những trường hợp đặc biệt. Đừng hỏi tôi nơi tôi có ý tưởng này mặc dù ;-)


1

Tôi luôn gặp vấn đề với phần "khôi phục" của sao lưu / khôi phục. Tôi không thể trích dẫn chi tiết cụ thể vì cuối cùng tôi đã từ bỏ nó và đã gỡ bỏ / sao chép / đính kèm kể từ đó.

Điều duy nhất về tách ra là bạn CÓ PHẢI đảm bảo rằng bạn chắc chắn rằng DBMS cũng sẽ không xóa cơ sở dữ liệu. Đã có điều này xảy ra, và nó không phải là một cảnh đẹp.


5
DBMS sẽ không xóa cơ sở dữ liệu trên tách ra. Bạn đang ở loại cửa hàng nào nếu tách tệp xóa và khôi phục có vấn đề?
gbn

@Will: sp_detach_db không phải là DROP: 2 lệnh riêng biệt và không liên quan phải được ban hành riêng. Cơ sở dữ liệu tách rời không thể DROPped hoặc các tệp bị xóa qua SQL. Một cơ sở dữ liệu bị rơi không thể tách rời. Detach không có tùy chọn "xóa tệp" qua mã hoặc qua SSMS. Vì vậy, tôi có thể biện minh cho nhận xét đầu tiên của mình vì bạn phải cố tình chọn tùy chọn xóa các tệp trên DROP. Không tách ra
gbn

1

Tôi khuyên bạn nên copy_onlysao lưu bằng phương thức này từ trình bao DOS (để bạn không làm gián đoạn nhật ký giao dịch) :

Chạy từ C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\Backupthư mục:

backup.bat SQLDBNAME

Nơi backup.batchứa (ngắt dòng được thêm vào để dễ đọc) :

sqlcmd.exe -U username -P xxxxxxx -S SQL-SERVERNAME 
    -Q "BACKUP DATABASE %1 TO DISK = '%1_COPYONLY.BAK' WITH COPY_ONLY,INIT;"
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.