Điểm:0

Tập lệnh SQL Developer PL/SQL không hiển thị đầu ra qua OpenVPN sau khi chạy một khoảng thời gian nhất định

lá cờ in

Vấn đề:

Khi tôi cố chạy thu thập số liệu thống kê qua OpenVPN trên cơ sở dữ liệu Oracle 19c của mình, Nhà phát triển SQL không trả về thông báo "thủ tục PL/SQL đã hoàn thành thành công" điển hình nếu nó chạy trong một khoảng thời gian nhất định.

Rõ ràng, kết nối bị treo sau một thời gian và tôi cần ngắt kết nối khỏi OpenVPN hoặc tắt SQL Developer trong Trình quản lý tác vụ Windows để đóng nó.

Cơ sở dữ liệu Oracle 19c và máy chủ OpenVPN của tôi nằm trên các nhà cung cấp đám mây khác nhau.

Việc chạy số liệu thống kê thu thập trên cơ sở dữ liệu này thường mất khoảng nửa giờ.

Chạy lệnh thu thập số liệu thống kê trên SQL Developer

Những gì tôi đã kiểm tra:

  1. Không có gì bất thường trên nhật ký Iptables và OpenVPN trên Máy chủ OpenVPN hoặc trên nhật ký nghe và cảnh báo trên Máy chủ Oracle 19c.

  2. net.ipv4.tcp_keepalive_time và net.netfilter.nf_conntrack_tcp_timeout_ seted được đặt thành giá trị mặc định là 7200 (2 giờ) và 432000 (5 ngày) trên cả hai máy.

  3. Nếu tôi kết nối với cơ sở dữ liệu dưới dạng hệ thống và chạy:

    chọn x.sid, x.serial#, x.username, x.status, x.osuser, x.machine, x.program, x.event, x.state, sql.sql_text từ v$sqlarea sql, v$session x trong đó x.sql_hash_value = sql.hash_value và x.sql_address = sql.address và x.username = 'myuser';

Sau khoảng nửa giờ, tôi nhận thấy rằng phiên thu thập số liệu thống kê không hoạt động. Vì vậy, tôi cho rằng số liệu thống kê thu thập thực sự chạy và kết thúc thành công, nhưng chỉ không trả về thông báo đầu ra đã nói ở trên.

Thu thập số liệu thống kê chạy trên cơ sở dữ liệu

Phiên thu thập số liệu thống kê không hoạt động sau khoảng nửa giờ

Những gì tôi đã thử:

  1. Trên một cơ sở dữ liệu nhỏ hơn trong cùng một trường hợp, việc chạy thu thập số liệu thống kê qua OpenVPN sẽ trả về thông báo thành công đã nói ở trên. Cái này mất khoảng 10 phút.

  2. Kết nối trực tiếp (không có OpenVPN) với cơ sở dữ liệu bằng cách thêm địa chỉ IP của tôi vào tường lửa của nhà cung cấp đám mây và chạy số liệu thống kê thu thập cũng trả về thông báo thành công nói trên.

  3. Tạo cặp khóa công khai/riêng tư SSH trên máy chủ Oracle 19c và sử dụng Máy chủ SSH trên SQL Developer, nhưng kết nối rất không ổn định/luôn đặt lại.

  4. Thiết lập máy chủ proxy Dante. Rõ ràng, Nhà phát triển SQL chỉ có thể sử dụng một số loại máy chủ proxy đặc biệt.

  5. Thiết lập IPSEC VPN với StrongSwan. Windows 10 của tôi không thể thiết lập kết nối với nó vì một số lý do.

Phill  W. avatar
lá cờ cn
Không muốn mưa trong cuộc diễu hành của bạn, nhưng '19 không tự động làm tất cả điều này sao?
js1018 avatar
lá cờ in
Nếu đó là trường hợp, tôi đã không nhận thức được điều đó. Mặc dù vậy, vấn đề vẫn còn. Tôi chưa thử, nhưng có lẽ điều này cũng sẽ xảy ra với bất kỳ tập lệnh PL/SQL nào khác chạy trong khoảng từ 10 đến 30 phút trên OpenVPN.
Điểm:0
lá cờ in

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.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.