Forum Stats

  • 3,874,135 Users
  • 2,266,687 Discussions
  • 7,911,732 Comments

Discussions

What is the equivalent of (ENABLE=BROKEN) in GoldenGate?

I realize this is a long shot but here goes. For Oracle databases you can add (ENABLE=BROKEN) in your connect string to work in coordination with OS TCP Keepalive settings. We have used this with AWS Gateway Load Balancer which has a 350 second unchangeable idle timeout. By setting tcp_keepalive_time to less than 350 in Linux and using (ENABLE=BROKEN) an Oracle connection from an AWS EC2 to an on premises Oracle database through the GWLB will not timeout. Without (ENABLE=BROKEN) the Linux tcp_keepalive_time setting does not seem to do much if anything.

Anyway, we have GoldenGate between AWS and on premises and I would like to find the equivalent of (ENABLE=BROKEN) to cause GoldenGate to use the TCP keepalive functionality. We have set tcp_keepalive_time to 60 seconds in the EC2s that have GoldenGate but that by itself did nothing. We have weird unexplainable issues with all our GoldenGate connections between AWS and on premises and Oracle support has not been able to find anything so I thought it would be worth trying to get the keep alive features working for GGS. Our on premises GGS works like a charm so it is just the ground to cloud that is messed up.

Anyone out there have any ideas?

Thanks!

Bobby

Tagged:

Best Answer

  • Bobby Durrett
    Bobby Durrett Member Posts: 146 Bronze Badge
    Answer ✓

    Thanks for commenting on my question. I think that the heartbeat table could accomplish the same thing from the application layer of the network stack. All that matters for us is that we have a 350 second timeout in AWS's Gateway Load Balancer that we cannot change or bypass. As long as the Golden Gate network connections all have some activity every 349 seconds then the GWLB won't affect us. Maybe the heartbeat table will ensure that but I don't know if there are some situations when it will not. The TCP keepalive functionality is lower down in the network stack (I think) so even if for some reason the application goes 350 seconds without initiating any network activity the keepalive function will send a packet before the connection times out. I really just need to dig deeper into how TCP works. Maybe I could write a little C program using system calls to test it out. There seems to be some setting which turns the keepalive function either on or off. I think that with an Oracle database connection (ENABLE=BROKEN) in the tns string turns this keepalive function in TCP on. Since I put this post out there I have seen some data which suggests that this is automatically on in Golden Gate. If true then that is the answer to my question. Basically the -o option in netstat in Linux seems to show if the keepalive functionality in TCP is being used. With (ENABLE=BROKEN) netstat -a -n -o shows ESTABLISHED keepalive (27.30/0/0) while without (ENABLE=BROKEN) it shows ESTABLISHED off (0.00/0/0). But with our current Golden Gate classic and Big Data microservices netstat -a -n -o shows keepalive on so I think the answer to my original question is Golden Gate always operates with TCP keepalive functionality on while in Oracle database connections you can turn it on or off using (ENABLE=BROKEN) or not.

Answers

  • User_S1J6P
    User_S1J6P Member Posts: 34 Red Ribbon

    Bobby,

    I must be missing something but does the Heartbeat table setup in Goldengate not serve the purpose?

  • Bobby Durrett
    Bobby Durrett Member Posts: 146 Bronze Badge
    Answer ✓

    Thanks for commenting on my question. I think that the heartbeat table could accomplish the same thing from the application layer of the network stack. All that matters for us is that we have a 350 second timeout in AWS's Gateway Load Balancer that we cannot change or bypass. As long as the Golden Gate network connections all have some activity every 349 seconds then the GWLB won't affect us. Maybe the heartbeat table will ensure that but I don't know if there are some situations when it will not. The TCP keepalive functionality is lower down in the network stack (I think) so even if for some reason the application goes 350 seconds without initiating any network activity the keepalive function will send a packet before the connection times out. I really just need to dig deeper into how TCP works. Maybe I could write a little C program using system calls to test it out. There seems to be some setting which turns the keepalive function either on or off. I think that with an Oracle database connection (ENABLE=BROKEN) in the tns string turns this keepalive function in TCP on. Since I put this post out there I have seen some data which suggests that this is automatically on in Golden Gate. If true then that is the answer to my question. Basically the -o option in netstat in Linux seems to show if the keepalive functionality in TCP is being used. With (ENABLE=BROKEN) netstat -a -n -o shows ESTABLISHED keepalive (27.30/0/0) while without (ENABLE=BROKEN) it shows ESTABLISHED off (0.00/0/0). But with our current Golden Gate classic and Big Data microservices netstat -a -n -o shows keepalive on so I think the answer to my original question is Golden Gate always operates with TCP keepalive functionality on while in Oracle database connections you can turn it on or off using (ENABLE=BROKEN) or not.