Như các bạn đã biết trong quá trình vận hành CSDL Oracle Data Guard chúng ta thường xuyên gặp hiện tượng là xuất hiện GAP nghĩa là dữ liệu từ Primary không được đồng bộ sang bên Standby (cũng có thể gọi là mất đồng bộ).
Lỗi này do nhiều nguyên nhân: lỗi mạng kết nối giữa các node, chưa bật listener, lỗi đĩa, máy chủ CSDL bị treo do quá tải….
Bài viết này sẽ chia sẻ một vài phương pháp quản trị và khắc phục sự cố tự động trong quá trình vận hành Oracle Data Guard.
“Tuning Automatic Outage Resolution with Data Guard” là một tính năng trong Oracle Data Guard được sử dụng để tối ưu hóa quá trình phục hồi tự động sau khi xảy ra sự cố (outage) trong một môi trường Data Guard.
Khi có sự cố xảy ra, chẳng hạn như mất kết nối mạng giữa primary database và standby database, hoặc một vấn đề kỹ thuật khác, Data Guard có khả năng tự động phát hiện và phục hồi từ các sự cố này. Tuy nhiên, quá trình này có thể ảnh hưởng đến hiệu suất và thời gian phục hồi của hệ thống.
Tuning Automatic Outage Resolution cho phép bạn điều chỉnh cách mà Data Guard phản ứng và xử lý các sự cố, nhằm cải thiện hiệu suất và thời gian phục hồi. Dưới đây là một số cải tiến mà tính năng này mang lại:
- Thời gian chờ và đợi (Timeouts and Delays): Bạn có thể tinh chỉnh thời gian chờ và thời gian đợi trước khi Data Guard bắt đầu thực hiện các hành động phục hồi, như kích hoạt một standby database.
- Sự ưu tiên (Priority): Cho phép bạn xác định ưu tiên của các sự cố để Data Guard biết sự cố nào cần được xử lý trước.
- Kiểm soát số lượng và tần suất thử lại (Retry Control): Bạn có thể cấu hình số lượng lần thử lại và thời gian giữa các lần thử lại để đảm bảo quá trình phục hồi được thực hiện một cách hiệu quả.
- Xử lý thông báo và logging: Data Guard cung cấp các cấu hình để kiểm soát cách thông báo và logging được xử lý trong quá trình phục hồi tự động, giúp bạn quản lý được lượng thông tin và logs được tạo ra.
- Kiểm soát hoạt động tự động (Automatic Activity Control): Cho phép bạn tắt hoặc bật các chức năng tự động như kích hoạt database, quản lý quá trình log apply, và nhiều hơn nữa.
THÔNG TIN CHI TIẾT 2 NODE:
Items | Primary – SRV1 | Standby – SRV2 |
hostname | srv1 | srv2 |
ip | 192.168.1.11 | 192.168.1.12 |
db name | duodb | duodb |
instance_name | duodb | stand |
db_unique_name | duodb | stand |
version DB | 19.3 | 19.3 |
DB_HOME | /u01/app/oracle/ product/19.3.0/dbhome_1 | /u01/app/oracle/ product/19.3.0/dbhome_1 |
DB_BASE | /u01/app/oracle | /u01/app/oracle |
global database name | srv1.localdomain | srv2.localdomain |
SRV1 – server tôi đặt là Primary
SRV2 – server tôi đặt là Standby
Kiểm tra thông tin database:
DATA_GUARD_MAX là một tham số trong Oracle Database, thường được sử dụng trong môi trường Oracle Data Guard để xác định số lượng bản sao dữ liệu tối đa có thể được tạo ra.
Khi thiết lập tham số này, bạn chỉ định số lượng bản sao dữ liệu mà hệ thống Oracle Data Guard có thể tạo ra trước khi dừng quá trình sao chép. Tham số này giúp quản trị viên kiểm soát việc sao chép dữ liệu, đặc biệt hữu ích trong các trường hợp khi việc sao chép có thể gây ảnh hưởng đến hiệu suất hệ thống.
Thông thường, nếu số lượng bản sao dữ liệu vượt quá giá trị DATA_GUARD_MAX, quá trình sao chép sẽ dừng lại cho đến khi số lượng bản sao giảm xuống dưới ngưỡng được chỉ định. Điều này giúp tránh tình trạng quá tải hệ thống và có thể điều chỉnh được bằng cách thay đổi giá trị của tham số này.
Check thông tin DB Primary:
show parameter DATA_GUARD_MAX
Giá trị mặc định là: 240
Giá trị có thể nhận là: 10 to 7200
SQL> show parameter DATA_GUARD_MAX
NAME TYPE VALUE
———————————— ———– ——————————
data_guard_max_io_time integer 240
data_guard_max_longio_time integer 240
Trong đó:
data_guard_max_io_time: là một tham số được sử dụng trong môi trường Oracle Data Guard để xác định thời gian tối đa mà một hoạt động I/O có thể chờ đợi trước khi bị hủy bởi quá trình ghi bản sao dữ liệu (data guard write).
Khi một bản sao dữ liệu (standby database) đang chờ để ghi dữ liệu từ bản gốc (primary database), thời gian chờ đợi có thể tăng lên nếu có sự cố xảy ra, chẳng hạn như mất kết nối mạng hoặc sự cố phần cứng. Tham số DATA_GUARD_MAX_IO_TIME cho phép bạn đặt một giới hạn thời gian cho các hoạt động I/O này, để tránh việc chờ đợi vô hạn và giảm thiểu tác động đến hiệu suất hệ thống.
Khi thời gian chờ đợi vượt quá giá trị được thiết lập trong DATA_GUARD_MAX_IO_TIME, bản sao dữ liệu có thể quyết định hủy bỏ hoạt động đang chờ đợi và tiếp tục với các hoạt động khác.
data_guard_max_longio_time: Nó xác định thời gian tối đa mà một hoạt động I/O dài (long I/O) có thể chờ đợi trước khi bị hủy bởi quá trình ghi bản sao dữ liệu (data guard write).
Cụ thể, khi một bản sao dữ liệu (standby database) đang chờ để ghi dữ liệu từ bản gốc (primary database), có thể có các hoạt động I/O mà cần nhiều thời gian hơn để hoàn thành do các vấn đề như mất kết nối mạng hoặc sự cố phần cứng. Tham số DATA_GUARD_MAX_LONGIO_TIME giúp đặt một ngưỡng thời gian cho các hoạt động I/O dài này.
Khi thời gian chờ đợi vượt quá giá trị được thiết lập trong DATA_GUARD_MAX_LONGIO_TIME, bản sao dữ liệu có thể quyết định hủy bỏ hoạt động đang chờ đợi và tiếp tục với các hoạt động khác.
Như vậy: để điều chỉnh hiệu năng CSDL chúng ta chỉ cần tính toán và thay đổi thông số này cho phù hợp với thông tin CSDL hiện tại của bạn:
alter system set data_guard_max_io_time = 260; alter system set data_guard_max_longio_time = 300;
SQL> show parameter DATA_GUARD_MAX
NAME TYPE VALUE
———————————— ———– ——————————
data_guard_max_io_time integer 240
data_guard_max_longio_time integer 240
SQL> alter system set data_guard_max_io_time = 260;
System altered.
SQL> show parameter DATA_GUARD_MAX
NAME TYPE VALUE
———————————— ———– ——————————
data_guard_max_io_time integer 260
data_guard_max_longio_time integer 240
SQL> alter system set data_guard_max_longio_time = 300;
System altered.
SQL> show parameter DATA_GUARD_MAX
NAME TYPE VALUE
———————————— ———– ——————————
data_guard_max_io_time integer 260
data_guard_max_longio_time integer 300
Chúc các bạn thành công.