Hai khái niệm tưởng chừng như nhau nhưng mục đích lại khác nhau, bởi vậy nên bài viết này sẽ giải ngố cho bạn nào còn đang phân vân không biết mỗi cái dùng cho hoàn cảnh nào ✨
I wonder how I wonder why ❤️
1 Bài toán đặt ra
Ví dụ như mình có 2 case này hen
Mình muốn chuyển đổi và phục hồi lại một cái CSDL siêu to. Nhu cầu mình nói đơn giản là sao chép cái CSDL đó từ con Server cũ sang con mới, vậy mình cần chọn giải phải là Detach hay là Backup đây? 😢
Thanh niên Toàn
Tui muốn nâng cấp SQL Server từ bảng 2016 lên bản 2019. Tui bị bối rối không biết là nên lựa chọn giải pháp Detach-Attach hay là Backup-Restore?
Thanh niên Thắng
Rõ ràng thì mục đích của cả hai vẫn là đảm bảo tính toàn vẹn của dữ liệu nhưng việc có 2 phương pháp khác nhau thì chuyện lăn tăn không biết chọn cái nào cũng là lẽ hiển nhiên hen.
Để xác định được nên chọn giải pháp nào thì điều đầu tiên là bạn cần phải xác định các vấn đề sau:
- Database có lớn không?
- Database có yêu cầu luôn online thay không?
- Có yêu cầu file log hay không?
- Có cần lưu lại meta data như ngày thực thi, kích thước dữ liệu xử lý,…
2. Tôi là bạn hay bạn là tôi?
Okay để dễ theo dõi thì để mình tạo ra một bảng so sánh giữa 2 “ông kẹ” này hen
| ✨ Tiêu chí so sánh | ✨Detach/Attach | ✨Backup/Restore |
| Định nghĩa | – Detach = Gỡ ra, rõ ràng là nếu dùng giải pháp này thì nhu cầu sẽ là không còn giữ gì lại trên Server nè. – Lưu ý là nó khác với Drop = Gỡ bỏ = 🎶”còn gì nữa đâu mà khóc với sầu” 🎶 | – Backup = Sao lưu, rõ ràng là vẫn còn giữ lại bản gốc đúng hông nè😁 – Lưu ý: Lý thuyết hàn lâm cũng không bằng muôn hình vạn trạng. – Vd: chúng ta có thể chuyển Db sang Offline rùi Backup nè 😎 |
| File nhận được | – Có 2 file với đuôi là .mdf và .idf | – Chỉ có 1 file .bak |
| Mode | -Khi bạn thực hiện Detach thì ngữ cảnh là bạn muốn Offline cái CSDL của bạn. -Nói cách khác là bạn ngưng giao dịch trên ứng dụng của bạn 😵💫 | – Trái ngược lại ông kẹ kế bên thì ở đây bạn chỉ muốn sao lưu dữ liệu từ bản gốc thui. |
| SQL Servre Log File | – File có đuôi .idf là ẻm đó. – Việc có file log cũng giống với việc bản thân có nhiều điểm hồi sinh trong game. | – Vì không có file log nên về cơ bản nó nhẹ hơn. – Đừng đùa chứ có khi file log có thể lên tới chục GB đó 😢 |
| Các files dữ liệu bị phân mảnh | – Detach Database bị phân mảnh nhiều thì sẽ càng khiến files nặng hơn. – Nếu mọi người hỏi phân mảnh Db là gì thì nó liên quan tới việc trong cùng 1 Filegroup chưa quá nhiều data file (.mdf) – Đọc thêm | – .bak file đã nén tất cả các trang dữ liệu lại nên chính vì vậy dữ liệu của file khá là tương đồng với dữ liệu thực của file .mdf – Các công việc chống phân mảnh nó khá là quan trong. Mình sẽ có bài viết riêng về thằng này sau. |
| Ghi nhận vào các bảng CSDL MSDB | Nope. Không có ghi nhận bất kỳ thông tin chi tiết thủ tục Detach hay Attach | Yup. Một số thông tin bao gồm nagy2, kích thước, loại backup / restore, ..v..v.. |
| Các chức năng tùy chọn | – Một vài lựa chọn trước khi Detach có thể bạn quan tâm: + Drop Connections: Cơ bản là bạn phải ngắt kết nối (với các ứng dụng đang trỏ vào) thì mới Detach được. + Keep Full-Text Catalogs: Nếu lúc cài đặt Server bạn chọn gói cài đặt Full-Text Search Engine thì mới hiện lựa chọn này. + Update Statistics: Lưu vết lại những gì đã được tối ưu của CSDL, ví dụ như những index đã được đánh, … | – Khác với Detach, Backup có nhiều tùy chọn chuyên sâu hơn chia làm 3 trang chính: ✨General Page: ➡️Source: Các tùy chọn liên quan tới phần DB sẽ Backup 🎍Recovery Model: Có 3 chế độ Simple: Không sao lưu nhật ký (log) Full: Vì có lưu log nên có thể phục hồi lại dữ liệu ở các điểm mốc trước đó Bulk logged: Cũng giống Full nhưng nhẹ hơn vì chỉ lưu log về những lần backup trước. Do đó chỉ phục hồi ở những thời điểm backup thui 🎍Backup type: Tùy vào mode trên sẽ có ảnh hưởng khác nhau 🎍Copy_only backup: Trong trường hợp bạn chon chế độ Differential và muốn backup fille thì nên chọn chế độ này để tránh thay đổi LSN (log sequence number) 🎍Backup component: Lựa chọn sao lưu Db hay File&Filegroups ➡️Destination: Lựa chọn lưu file vào Disk hoặc URL (Nếu bạn dùng Azure File hoặc Azure Blob Storage) ✨Media Options Page: ➡️Overwrite Media: Lựa chọn cách ghi Backup vào Media set ➡️ Reliability: Kiểm soát lỗi khi Backup, ➡️Transaction log: Tùy chỉnh sao lưu cho log Đối với OLAP Db thì có option về Tail-log Backup nên coi nè ➡️Type drive: hay Disk file là phần cứng mà dữ liệu Backup sẽ lưu lên 😂 Bạn không cần quan tâm lắm về lựa chọn này ✨Backup Options Page: Các tùy chọn ở đây cũng dễ hiểu, như thời hạn file Backup nè, Tên nè, Có nén file Backup không nè (default có), Tùy chọn mã hóa |
| Mức độ sử dụng | – Khi cần nâng cấp | – Thường xuyên theo tháng hoặc quý tùy theo tốc độ phình của dữ liệu |
Nếu việc Backup là thường xuyên thì sau khi chỉnh xong các tùy chọn, bạn có thể chọn cái biểu tượng Script ở góc trên bên trái để tạo ra file SQL thực thi Backup rùi lên lịch chạy mà không cần làm thủ công
Có thể bạn chưa biết ❤️
3. Tóm cái váy lại
Qua bảng so sánh ở trên mình nghĩ các bạn phần nào cũng biết được khi nào cần câu trả lời dành cho 2 thanh niên trên rùi hỉ 😂
Với Toàn thì tùy vào mục đích nếu con Server mới là Server Test thì chỉ cần Backup và chọn mode Simple. Còn nếu con mới là DB chính luôn thì nên chọn Backup mode Full.
Với Thắng thì rõ ràng là nâng cấp nên sẽ con Detach là hợp lý nhất. Nhưng nhớ cẩn thận thông báo tới người dùng hoặc có giải pháp lưu lại các giao dịch trong thời gian chuyển đổi.

