Trước hết, tôi có thể xác nhận rằng việc thu thập số liệu thống kê thực sự kết thúc thành công bằng cách chạy:
select * from v$session_longops where opname like '%Schema%' order by start_time desc;
Sau đó, tôi đã chạy các lệnh tcpdump sau trên cả hai máy chủ:
tcpdump -i eth0 -A "(src <myipaddress> hoặc src <myoracle19caddress> hoặc dst <myipaddress> hoặc dst <myoracle19caddress>) và không phải cổng ssh cũng như không phải cổng openvpn và không phải icmp" (Máy chủ OpenVPN)
tcpdump -i eth0 -A "(src <myipaddress> hoặc src <myopenvpnserveraddress> hoặc dst <myipaddress> hoặc dst <myopenvpnserveraddress>) chứ không phải cổng ssh và không phải icmp" (Máy chủ Oracle 19c)
Và phát hiện ra rằng máy chủ Oracle 19c đã gửi thông báo thành công, nhưng máy chủ OpenVPN không bao giờ nhận được.
Sau khi tìm hiểu kỹ trên các trang web khác nhau, tôi phát hiện ra rằng mình đã hiểu sai chức năng của net.ipv4.tcp_keepalive_time.
Điều này có nghĩa là [theo mặc định] các thủ tục keepalive đợi trong hai giờ (7200 giây)
trước khi gửi đầu dò keepalive đầu tiên, sau đó gửi lại sau mỗi 75
giây.
Sau đó, tôi phát hiện ra cấu hình mạng của nhà cung cấp đám mây nơi tôi đặt máy chủ OpenVPN của mình.
kết nối nhàn rỗi
[...] triển khai theo dõi kết nối trong 10 phút cho
Các giao thức IP có khái niệm về kết nối.
Điều này có nghĩa là các gói gửi đến được liên kết với một thiết lập
kết nối được phép miễn là ít nhất một gói được gửi hoặc
nhận được cho kết nối trong vòng 10 phút qua. Nếu không có gói tin
cho kết nối đã được gửi hoặc nhận trong 10 phút hoặc
lâu hơn, các mục theo dõi của kết nối không hoạt động sẽ bị xóa. Sau
các mục theo dõi của kết nối đã bị xóa, [...] không
cho phép các gói gửi đến bổ sung cho đến khi có ít nhất một gói gửi đi mới
gói tin đã được gửi đi. Theo dõi kết nối này áp dụng cho tất cả các nguồn
và đích â cả địa chỉ IP bên trong và bên ngoài.
Với thông tin mới này, tôi đã vượt qua giới hạn này bằng cách đặt thời gian lưu giữ thành giá trị nhỏ hơn 10 phút bằng cách chạy lệnh sau trên máy chủ Oracle 19c:
sysctl -w net.ipv4.tcp_keepalive_time=300 net.ipv4.tcp_keepalive_intvl=60 net.ipv4.tcp_keepalive_probes=5
Và biến những thay đổi này thành vĩnh viễn bằng cách lưu chúng vào /etc/sysctl.conf.
Cuối cùng, Nhà phát triển SQL nhận được thông báo thành công và đóng kết nối.