Cách triển khai sao lưu bằng online dump của InterBase XE7
Dmitry Kuzmenko, 08-T09-2016
InterBase từ phiên bản 2007 hỗ trợ online dump - sao chép tệp cơ sở dữ liệu trực tuyến. Thay vì gbak -b/-c, điều này cho phép bạn có được cơ sở dữ liệu sẵn sàng sử dụng sau khi sao chép, và bạn không cần phải “khôi phục” nó từ bản sao lưu (thứ không phải là cơ sở dữ liệu). Online dump rất nhanh, gần như sao chép tệp bằng hệ điều hành.
Sử dụng lệnh sau để tạo online dump của cơ sở dữ liệu
gbak -d [options] database target
(Bạn có thể tìm thấy mô tả đầy đủ về dump trong tài liệu, Doc\OpGuide.pdf, hoặc tại đây)
Cũng giống như tệp cơ sở dữ liệu, target có thể có bất kỳ tên và phần mở rộng nào bạn muốn. Kết quả của lệnh sẽ là tệp dump tương đương với cơ sở dữ liệu gốc, nhưng ở chế độ chỉ đọc.
Thời gian chạy lần đầu của lệnh này là thời gian quét (đọc) cơ sở dữ liệu nguồn và thời gian ghi tệp target.
Cho đến khi target ở chế độ chỉ đọc, nó được liên kết với tệp cơ sở dữ liệu. Ở lần dump đầu tiên, toàn bộ tệp cơ sở dữ liệu sẽ được đọc và sao chép vào target. Ở lần thứ hai và các lần tiếp theo - chỉ các trang đã thay đổi mới được ghi vào target. Điều này được gọi là “incremental dump”.
Quan trọng! InterBase XE7 ở mỗi lần lặp lại lệnh dump (tất nhiên với cùng tên tệp) chỉ đọc các trang đã thay đổi của cơ sở dữ liệu và ghi chúng vào target. Các phiên bản trước XE7 đọc toàn bộ cơ sở dữ liệu nguồn. Vì vậy, hiệu suất khác nhau, và XE7 nhanh hơn nhiều. Nếu không có trang nào được thay đổi trong cơ sở dữ liệu nguồn, incremental dump của XE7 sẽ mất ~1 giây, trong khi InterBase2007-XE3 sẽ mất thời gian cần thiết để đọc toàn bộ tệp cơ sở dữ liệu. Thời gian phụ thuộc vào kích thước cơ sở dữ liệu nguồn và tốc độ lưu trữ. Ví dụ, nếu tốc độ lưu trữ khoảng 400mb/giây, thì cơ sở dữ liệu 100gb sẽ được quét trong 250 giây (4 phút 10 giây).
Lưu ý. InterBase XE7 hỗ trợ định dạng tệp cơ sở dữ liệu của XE7 (ODS 16), XE/XE3 (ODS 15) và 2009 (ODS 13). Tính năng quét thông minh được đề cập ở trên sẽ chỉ hoạt động với định dạng cơ sở dữ liệu XE7 (ODS 16).
Nếu bạn cần chuyển target sang chế độ đọc-ghi (chế độ bình thường), hãy sử dụng lệnh
gfix target -mode read_write
Nhưng sau đó target mất liên kết với cơ sở dữ liệu, và việc chạy tiếp theo của gbak -d database target là không thể nữa vì target được coi là “một cơ sở dữ liệu khác”.
Nếu bạn muốn ghi đè hoàn toàn target thay vì incremental dump, hãy sử dụng tùy chọn -ov
gbak -d -ov database target
Dump của dump
Lần dump đầu tiên của dump sẽ hoạt động, nhưng các lần tăng dần tiếp theo sẽ không. Ví dụ, đầu tiên
gbak -d database target1
ở đây chúng ta có target1 như một cơ sở dữ liệu được dump đầy đủ ở chế độ chỉ đọc
Tiếp theo,
gbak -d target1 target2
Như bạn thấy, chúng ta tạo dump của dump. Và đúng vậy, lệnh này sẽ sao chép target1 vào target2. Cả hai target sẽ ở chế độ chỉ đọc. Nhưng nếu chúng ta lặp lại hai lệnh này lần nữa, các thay đổi từ cơ sở dữ liệu đến target1 sẽ không được sao chép vào target2. Vì vậy, target2 vẫn ở trạng thái sau lần sao chép ban đầu. Và không có bất kỳ thông báo lỗi hoặc cảnh báo nào.
Vì vậy, nếu bạn muốn tạo dump của dump, bạn chỉ nên sử dụng dump đầy đủ
gbak -d -ov target1 target2
Tùy chọn -ov là bắt buộc để đảm bảo target2 sẽ được ghi (và ghi đè) với nguồn từ target1.
Sơ đồ sao lưu 1
Ví dụ về các dump tại các khoảng thời gian khác nhau
gbak -d database target
Được chạy, ví dụ, mỗi 1 giờ. Ở đây chúng ta có cơ sở dữ liệu nguồn sản xuất và bản sao “sao lưu” target, chậm hơn một giờ.
Ngoài ra, cứ mỗi 24 giờ chúng ta có thể chạy
gbak -d database target2
Ở đây chúng ta có cơ sở dữ liệu sản xuất, bản sao target chậm hơn 1 giờ, và bản sao target2 chậm hơn 24 giờ.
Bạn có thể tạo bất kỳ số lượng dump nào từ một cơ sở dữ liệu.
Không cần phải nói rằng, các target dump có thể được sử dụng như cơ sở dữ liệu chỉ đọc cho bất kỳ mục đích nào - báo cáo, phân tích, v.v., cho các tác vụ không cần xem cơ sở dữ liệu thực tế.
Ưu điểm: Mỗi dump có thể được lên lịch độc lập.
Nhược điểm: Độ trễ giữa dump mới nhất và cũ nhất.
Sơ đồ sao lưu 2
Dump tuần tự đến các target khác nhau. Trong trường hợp này, bạn cần điều chỉnh một số bộ lập lịch (hệ điều hành hoặc tùy chỉnh) để chạy các lệnh sau mỗi khoảng thời gian được chỉ định
gbak -d database target1
gbak -d database target2
gbak -d database target3
Nếu bạn sử dụng khoảng thời gian 1 giờ giữa các lệnh này, bạn sẽ có các dump (sao lưu) như sau:
target1 lúc 12:00, target2 lúc 13:00, target3 lúc 14:00. Lần chạy dump target1 tiếp theo sẽ được cập nhật lúc 15:00, và cứ tiếp tục. Kết quả là, chúng ta sẽ có các bản sao của cơ sở dữ liệu trong 3 giờ qua.
Ưu điểm: chúng ta có các dump trong vài giờ gần với cơ sở dữ liệu gốc
Nhược điểm: hơi khó để lên lịch các lệnh này. Tức là trong ví dụ này, các lệnh dump cần được lên lịch theo thời gian chính xác:
Dump vào target1 lúc 00:00, 03:00, 06:00…
Dump vào target2 lúc 01:00, 04:00, 07:00…
Dump vào target3 lúc 02:00, 05:00, 08:00…
Tóm tắt
Gbak -d có thể được sử dụng để dump vào bộ lưu trữ cục bộ và dump qua mạng - vì incremental dump chỉ gửi các trang đã thay đổi đến target. Vì vậy, target có thể được đặt trên bộ lưu trữ mạng từ xa. Nhưng, tất nhiên, mạng phải có băng thông tốt để tương thích với bộ lưu trữ cục bộ. Nếu không, việc ghi vào target sẽ chậm.
Online dump có thể được sử dụng không chỉ như một công cụ để tạo bản sao lưu trực tuyến của cơ sở dữ liệu mà còn như một công cụ để “mở rộng theo chiều ngang” của hệ thống, cân bằng tải cho các ứng dụng sản xuất, báo cáo và phân tích.
Mặc dù bạn thấy rằng online dump là cách nhanh nhất để có được bản sao cơ sở dữ liệu trực tuyến (thay vì gbak -b/-c), vì dump hoạt động với các trang, nó có thể bỏ qua một số hư hỏng trên các trang nếu cơ sở dữ liệu bị hỏng. Do đó, bạn vẫn cần kiểm tra tính nhất quán của cơ sở dữ liệu bằng gbak -b/-c tốt cũ, nhưng bạn có thể làm điều đó ít thường xuyên hơn trước.