Trang này được dịch bằng máy. Đọc bản gốc tiếng Anh. English

Thư viện IBSurgeon

Chuyển đổi nhanh cơ sở dữ liệu Firebird 2.5 sang Firebird 3.0

Basil Sidorov, 02-APR-2019, (c) IBSurgeon

Mỗi phiên bản Firebird đều có định dạng cơ sở dữ liệu riêng - O(n)D(isk)S(tructure). Cho đến phiên bản 2.5, công cụ cơ sở dữ liệu có thể hoạt động với ODS của phiên bản trước, nhưng công cụ Firebird 3 chỉ hoạt động với ODS của riêng nó (phiên bản 12.0).

Để nâng cấp cơ sở dữ liệu từ Firebird 2.5 lên 3.0, cần phải sao lưu tệp cơ sở dữ liệu bằng công cụ gbak trong 2.5 và sau đó khôi phục nó trong 3.0.

Tất nhiên, cơ sở dữ liệu cần được chuẩn bị để chuyển đổi - siêu dữ liệu và truy vấn cần được kiểm tra tương thích với Firebird 3.0, và sau khi khôi phục trong Firebird 3, tất cả các đối tượng có BLR (trigger, stored procedure, v.v.) phải được biên dịch lại.

Nếu chúng ta sử dụng cách tiếp cận tiêu chuẩn, chúng ta cần sao lưu cơ sở dữ liệu trên 2.5, sau đó cài đặt Firebird 3 và khôi phục tệp sao lưu.

Điều này ổn nếu bạn có đủ thời gian. Nhưng khi cơ sở dữ liệu của bạn lớn, hoặc bạn có hàng chục cơ sở dữ liệu cần di chuyển, và bạn bị giới hạn về thời gian, bạn có thể sử dụng chuyển đổi luồng (stream conversion), nhanh hơn 25-30%.

Ý tưởng là sử dụng băng chuyền:

gbak -b … db25 stdout | gbak -c … stdin db30

Gbak -b từ 2.5 ghi bản sao lưu tuần tự và chuyển nó đến luồng stdout, luồng này ngay lập tức được đọc từ stdin bởi gbak của 3.0 và tạo ra một cơ sở dữ liệu mới.

Băng chuyền này cần sử dụng truy cập cơ sở dữ liệu cục bộ (embedded) vì truyền dữ liệu qua mạng (dù là localhost) sẽ làm chậm quá trình đáng kể.

Dưới đây chúng ta xem xét cách thực hiện sao lưu luồng trên Windows và trên Linux.

Windows

Tốt hơn là tạo một bộ tệp Firebird đặc biệt cho Windows. Chúng ta cần lấy kho lưu trữ embedded Firebird 2.5, đổi tên fbembed.dll thành fbclient.dll, và thêm gbak.exe và tùy chọn isql.exe.

Đối với Firebird 3.0, chúng ta sẽ sử dụng kho lưu trữ tiêu chuẩn.

Bộ tối thiểu (không yêu cầu runtime của VS2008/VS2010) bao gồm các tệp sau:

Code
25/gbak.exe
25/fbclient.dll
25/firebird.conf
25/firebird.log
25/firebird.msg
25/ib_util.dll
25/icudt30.dll
25/icuin30.dll
25/icuuc30.dll
25/Microsoft.VC80.CRT.manifest
25/msvcp80.dll
25/msvcr80.dll
30/fbclient.dll
30/firebird.conf
30/firebird.msg
30/gbak.exe
30/ib_util.dll
30/icudt52.dll
30/icudt52l.dat
30/icuin52.dll
30/icuuc52.dll
30/msvcp100.dll
30/msvcr100.dll
30/intl/fbintl.conf
30/intl/fbintl.dll
30/plugins/engine12.dll

Quản trị viên/nhà phát triển có kinh nghiệm có thể nhận thấy rằng các tệp 25/intl/fbintl.dll và 25/intl/fbintl.conf không được bao gồm. Điều này đúng, vì gbak không sử dụng bộ ký tự cho kết nối và không chuyển đổi dữ liệu giữa các bộ ký tự. Nhưng, ở phía nhận, Firebird 3.0, cần có các tệp icu* vì các bộ ký tự được sử dụng trong quá trình tạo chỉ mục (bước cuối cùng của sao lưu/khôi phục).

Nên thêm hai dòng vào firebird.conf của Firebird 3:

Code
MaxUnflushedWrites = -1
MaxUnflushedWriteTime = -1

Ngoài ra, nên đặt tên khác nhau cho tham số IpcName cho Firebird 2.5 và Firebird 3.0.

Các tham số khác, nếu bạn muốn, có thể được thay đổi với lưu ý rằng trong quá trình chuyển đổi cơ sở dữ liệu, Firebird 2.5 đọc dữ liệu và Firebird 3 ghi dữ liệu và tạo chỉ mục.

Để tăng tốc độ tạo chỉ mục, chúng tôi khuyên bạn nên tăng tham số TempCacheLimit lên khoảng 40% RAM khả dụng (nếu đây là máy tính hoặc máy chủ chuyên dụng).

Ví dụ: nếu bạn có 16GB RAM, bạn có thể đặt

Code
TempCacheLimit=6G

Tất nhiên, giá trị này chỉ có thể được đặt nếu bạn sử dụng Firebird 3 64bit, vì bất kỳ quy trình 32bit nào cũng không thể phân bổ quá 2 gigabyte RAM.

Bạn không cần thay đổi tham số này cho 2.5 vì nó không ảnh hưởng đến tốc độ sao lưu và bản thân Firebird 2.5 không thể sử dụng quá 2 gigabyte RAM cho tham số này, ngay cả phiên bản 64bit.

Ngoài ra, trước khi bắt đầu, vui lòng kiểm tra rằng giá trị “page buffers” là 0 tại trang tiêu đề cơ sở dữ liệu (gstat -h databasename).

Nếu tham số “page buffers” được đặt trong tiêu đề cơ sở dữ liệu, nó sẽ ghi đè cài đặt firebird.conf và trong trường hợp giá trị lớn có thể dẫn đến tiêu thụ bộ nhớ khổng lồ và suy giảm hiệu suất của quá trình chuyển đổi.

Sau đó, sao chép bộ tệp đã chuẩn bị vào hệ thống đích.

Xin lưu ý rằng bạn cần dừng dịch vụ Firebird 2.5 thông thường trước khi chuyển đổi.

Sau đó, mở dấu nhắc lệnh với quyền nâng cao (Chạy với tư cách quản trị viên):

Code
set ISC_USER=<chỉ_định_chủ_sở_hữu_cơ_sở_dữ_liệu_của_bạn_hoặc_sysdba>
set ISC_PASSWORD=mật_khẩu
"25/gbak" -z -b -g -v -st t -y 25.log db25 stdout|^
"30/gbak" -z -c -v -st t -y 30.log stdin db30

Ở đây toàn bộ dòng lệnh được bao quanh bởi dấu ngoặc kép, ký hiệu | được sử dụng để nối và ký hiệu ^ được sử dụng để thoát ký tự xuống dòng (hữu ích trong trường hợp dòng lệnh dài).

Tùy chọn -st(atus) được giới thiệu trong Firebird 2.5.8 và cho phép ghi thêm thông tin về quá trình sao lưu vào tệp nhật ký.

Linux

Firebird 3 phụ thuộc vào thư viện tommath trên Linux. Trên CentOS (RHEL), thư viện này nằm tại kho epel-repository, trên Ubuntu (Debian) tại kho hệ thống.

Trên CentOS, trước tiên bạn cần kích hoạt EPEL-repository và chỉ sau đó chạy « yum install libtommath».

Trên Ubuntu, bạn không cần thêm kho lưu trữ bổ sung, nhưng Ubuntu 16 và Ubuntu 18 có các phiên bản gói khác nhau - libtommath0 và libtommath1, tương ứng.

Firebird 3 tìm kiếm tommath.so.0 và đối với Ubuntu 18, bạn cần tạo liên kết tượng trưng từ tommath.so.0 đến tommath.so.1. Để làm điều này, trước tiên bạn cần tìm tommath.so.1. Đường dẫn thông thường trên Ubuntu - /usr/lib/x86.64- linux -gnu/, nhưng có thể khác trong các bản phân phối Debian khác.

Một vấn đề khác là cho đến Firebird 3.0.1, bao gồm cả phiên bản này, không có cách đơn giản để cài đặt 2 phiên bản máy chủ khác nhau. Tùy chọn “biên dịch từ mã nguồn với tiền tố” không được xem xét ở đây.

Firebird 3.0.2 có bản sửa lỗi CORE‑5204: xây dựng với -enable-binreloc, (http://tracker.firebirdsql.org/browse/CORE-5204) và tùy chọn cài đặt riêng -path.

Vì vậy, nếu thư viện tommath và, nếu cần, liên kết tượng trưng tommath.so.0 đã được cài đặt, bạn có thể cài đặt bản phân phối Firebird 3.0.4 mới nhất vào /opt/fb3 bằng lệnh sau: ./install.sh -path /opt/fb3

Sau đó, bạn có thể dừng Firebird 2.5 hiện có và chạy chuyển đổi luồng.

Nếu bạn sử dụng Firebird 2.5 Classic, xin nhớ rằng Classic thường được chạy bởi xinetd - vì vậy, bạn cần vô hiệu hóa dịch vụ firebird cho xinetd hoặc dừng hoàn toàn xinetd.

Bạn không cần đặt các tham số MaxUnflushed* trong firebird.conf của Firebird 3 (vì chúng chỉ hoạt động trên Windows) hoặc thay đổi bất cứ điều gì trong Firebird 2.5.

Truy cập embedded trong Firebird 2.5 trên Linux không giống như trên Windows - Firebird 2.5 sẽ hoạt động bên trong quy trình gbak (không có phần mạng), nhưng quyền truy cập sẽ được kiểm tra với cơ sở dữ liệu người dùng, vì vậy, cần chỉ định không chỉ tên người dùng chủ sở hữu cơ sở dữ liệu mà còn cả mật khẩu:

Code
export ISC_USER=tên_người_dùng ISC_PASSWORD=mật_khẩu
/opt/firebird/bin/gbak -b … db25 stdout\
|/opt/fb3/bin/gbak -c … stdin db30

Sau khi chuyển đổi thành công, bạn cần xóa “phiên bản tạm thời” của Firebird 3, sau đó gỡ cài đặt 2.5 gốc và chỉ sau đó, bạn mới có thể thực hiện cài đặt sạch Firebird 3.

Tốt hơn là cài đặt Firebird 3 từ tar.gz, không phải từ kho lưu trữ, vì tar.gz cài đặt mọi thứ vào vị trí thuận tiện /opt/ firebird , và phiên bản Firebird trong kho lưu trữ thường cũ hơn trong tar.gz.

Sau khi chuyển đổi hoàn tất và Firebird 3 được cài đặt, bạn cần kiểm tra rằng người dùng “firebird” là chủ sở hữu của tệp cơ sở dữ liệu.

Nếu không, bạn cần sửa nó:

Code
chown firebird.firebird databasename

Tóm tắt

Chuyển đổi luồng nhanh hơn cách tiếp cận tiêu chuẩn (gbak -b, sau đó gbak -c) vì nó bỏ qua các thao tác “ghi vào bản sao lưu” ở giữa - kết quả là thời gian chuyển đổi luồng khoảng “thời gian sao lưu cộng 10-15%” cộng với “thời gian tạo chỉ mục”.

Trong thực tế của chúng tôi, chuyển đổi luồng nhanh hơn ít nhất 25-30% so với sao lưu và khôi phục “tuần tự” truyền thống.

Ngoài việc tiết kiệm thời gian và giảm nhu cầu về dung lượng đĩa trống, chuyển đổi luồng còn có một lợi thế nữa - nó không yêu cầu gỡ bỏ Firebird 2.5 hiện có, cho phép bạn nhanh chóng quay lại 2.5 trong trường hợp xảy ra lỗi trong quá trình chuyển đổi.

Liên hệ

Vui lòng gửi phản hồi và thắc mắc đến đội ngũ hỗ trợ IBSurgeon.