Oracle oturumu VPN üzerinden düştü mü? Keepalive katmanlarını denetleyin
Sessiz veritabanı işi etkin olmayan bir ağ akışından sağ çıkabilir. Soket anahtarını, çekirdeğin varsayılanlarını ve Oracle Net ayarını doğru sırayla ele alın.
Yirmi beş dakikalık faydalı veritabanı işi neredeyse hiç çıktı üretmez ve yoldaki her cihazdan bu akış etkin değilmiş gibi görünür. Tam olarak etkin olmayan durum toplanır. Sonraki rapor her zaman aynı biçimdedir: sorgu çalışıyordu, sonra oturum kayboldu ve sonuç hiç ulaşmadı.
Dört denetim sessiz bir oturumun ayakta kalıp kalmayacağına karar verir ve soketten dışarı doğru ilerler. Bunları sırayla yapın, çünkü her biri önceki katmanın işini yaptığını varsayar.
Hangi akış sessizleşir
Önemli olan, veritabanı trafiğini taşıyan bağlantıdır ve kendi adresleri ile portlarıyla tanımlanır. Onu başka hiçbir şey tazelemez. Ağ geçidine ping, aynı ana bilgisayardan ikinci bir SQL bağlantısı ve tünelin kendi kalp atışı ayrı akışlardır ve onları izleyen her cihazda ayrı durumları vardır.
ss -tio dst 10.60.4.20
sysctl net.ipv4.tcp_keepalive_time net.ipv4.tcp_keepalive_intvl net.ipv4.tcp_keepalive_probes
Soket listesi canlı bağlantının zamanlayıcılarını ve kuyruk durumunu gösterir; bu, erişilebilirlik testinden daha bilgilendiricidir. sysctl değerleri keepalive davranışı için çekirdek varsayılanlarıdır ve sonraki bölüm bunların oturumunuza hiç uygulanmayabileceğini açıklar. Hiç tetiklenmeyen bir varsayılan, hiç varsayılan olmamasından ayırt edilemez.
Bağlantının kullandığı adresleri, portları ve arayüzü yazın. Bir oturum öldüğünde, doğru cihaza ne yaptığını sormanızı sağlayan şey tam olarak bu ayrıntılardır; ağın açık olup olmadığını sormak yerine.
Boşta kalma ilkesi süresi doluyor mu, sınırlıyor mu
İki ilke aynı belirtiyi üretir ve zıt yanıtlar gerektirir. Boşta kalma zaman aşımı, nitelikli trafiğin tazeleyebileceği durumu kaldırır ve bir keepalive bunu önleyebilir. Mutlak oturum sınırı, etkinlikten bağımsız olarak sabit bir süre sonra akışı kaldırır ve hiçbir keepalive bunu değiştirmez.
Her aracının sahibine ikisinden hangisini uyguladığını sorun. Bir güvenlik duvarı, bir NAT cihazı, bir yük dengeleyici ve bir bulut ağ geçidi durum tutabilir ve anlaşmak zorunda değildir. En dar olanı, yenmeniz gereken süreyi belirler.
Bu ayrım aynı zamanda ayarlamayı ne zaman bırakacağınızı da söyler. İlke mutlak bir sınırsa doğru çözüm daha kısa bir iş birimi, sürdürülebilir bir iş veya onaylanmış bir istisnadır ve aşağıdaki denetim yalnızca keepalive'ların hiçbir şey değiştirmediğini doğrular.
Linux varsayılanlarının arkasındaki soket anahtarı
Keepalive her soket için isteğe bağlıdır. Çekirdek varsayılanları, soket mekanizmayı etkinleştirdikten sonra yoklamaların nasıl davrandığını tanımlar ve mevcut bağlantılar için onu etkinleştirmez. Hiç istemeyen bir uygulama, sysctl değerleri ne derse desin hiç yoklama almaz.
Bu yüzden yalnızca sayıları yükseltmek bir veritabanı istemcisi için hiçbir şeyi değiştirmez. Mekanizmayı istemci kitaplığı veya uygulama etkinleştirmelidir ve yığın bağlantı başına denetim sunduğunda, sınırlı bir ayar, ilgisiz hizmetleri etkileyen tüm ana bilgisayar değişikliğinden daha iyidir.
İlk yoklamaya kadar olan aralık da bir sorgu zaman aşımı değildir. Sağlıklı bir bağlantı yoklamalar arasında sessiz kalır ve ölü bir eş, yoklama aralığına ve sayısına göre tanınır. Bu üç değeri tek bir zaman aşımı olarak okumak, arızayı ya çok geç ya çok hevesli yakalayan ayarlara götürür. Bunlar algılamayı denetler, uygulamanın sabrını değil.
EXPIRE_TIME bir veritabanı ayarıdır, ağ düzeltmesi değil
Oracle Net kendi canlılık mekanizmasını sunar; bu, süreç için etkin profilde yapılandırılır, şans eseri benzer adı olan rastgele bir dosyada değil. Değer dakika olarak ifade edilir.
SQLNET.EXPIRE_TIME = 5
Asıl amacı sunucu tarafında ölü bağlantıların algılanmasıdır ve geliştirilmiş modeli destekleyen platformlarda bu bağlantılar için TCP keepalive davranışını da ayarlar. Bu yararlı bir özelliktir: veritabanı katmanı, istemci uygulamasından değişiklik istemeden yoklamalar düzenleyebilir.
Yukarıdaki örnek değer, varsayılan bir süreye karşı koordineli bir seçimdir, öneri değil. Belgelenen genel öneri daha uzun bir aralıktır ve doğru sayı kurulu uygulamaya, kabul ettiğiniz yoklama maliyetine ve yoldaki gerçek tazeleme kurallarına bağlıdır. Ayarı ilgili sürecin okuduğu profile koyun ve sürecin onu aldığını doğrulayın. Oracle, profil konumlarını ve algılama davranışını parametre başvurusunda belgeler.
Sessiz aralığı test edin, sonra kurtarmayı planlayın
Yeni izin verilen bir bağlantıyı yenmeye çalıştığınız süreden daha uzun sessiz bir dönemden geçirin ve canlılık trafiğini ve uygulama sonucunu izleyin. İhtiyacınız olmayan yük içeriğini yakalamayın; zamanlayıcılar ve bağlantı durumu soruyu yanıtlar.
ss -tio dst 10.60.4.20
# after the quiet interval, same command
ls -l "$ORACLE_HOME/network/admin/sqlnet.ora"
Oturum yine de kaybolursa, süre henüz sormadığınız bir cihaza aittir veya ilke mutlak bir sınırdır. Ayakta kalırsa, bir sonraki sessiz işlem araştırmayı yinelemesin diye hangi katmanın değiştiğini not edin.
Son olarak, bağlantı gerçekten düştüğünde ne olacağına karar verin, çünkü canlılık denetimleri sıklığı azaltır ve olasılığı asla ortadan kaldırmaz. Veritabanı işleminin kayıtlı sonucunu yeniden göndermeden önce belirleyin: yanıtın kaybolması, işin onaylanıp onaylanmadığı konusunda hiçbir şey kanıtlamaz. Bir dizüstü bilgisayarın kapanmasına veya bir tünelin yeniden başlamasına dayanması gereken her şey için sunucuya ait, kalıcı sonuçlu bir iş daha güçlü tasarımdır ve keepalive bir zamanlayıcı değildir.