Oracle sesija nutrūko per VPN? Patikrinkite keepalive sluoksnius
Tyli duomenų bazės veikla gali išgyventi neaktyvų tinklo srautą. Peržiūrėkite lizdo jungiklį, branduolio numatytąsias vertes ir Oracle Net nuostatą teisinga tvarka.
Dvidešimt penkios minutės naudingo duomenų bazės darbo beveik nieko neišveda, o iš kiekvieno kelio įrenginio tas srautas atrodo neaktyvus. Būtent neaktyvi būsena ir surenkama. Vėlesnė ataskaita visada turi tą pačią formą: užklausa vyko, tada sesija dingo, o rezultatas taip ir neatėjo.
Keturi patikrinimai nusprendžia, ar tyli sesija išgyvens, ir jie eina nuo lizdo į išorę. Atlikite juos iš eilės, nes kiekvienas daro prielaidą, kad ankstesnis sluoksnis atlieka savo darbą.
Kuris srautas nutyla
Svarbi jungtis yra ta, kuri perduoda duomenų bazės srautą, atpažįstama pagal savo adresus ir prievadus. Niekas kitas jos neatnaujina. Ping į šliuzą, antra SQL jungtis iš to paties hosto ir paties tunelio pulsas yra atskiri srautai su atskira būsena kiekviename juos stebinčiame įrenginyje.
ss -tio dst 10.60.4.20
sysctl net.ipv4.tcp_keepalive_time net.ipv4.tcp_keepalive_intvl net.ipv4.tcp_keepalive_probes
Lizdų sąrašas rodo gyvos jungties laikmačius ir eilės būseną, o tai informatyviau už pasiekiamumo testą. sysctl reikšmės yra branduolio numatytosios keepalive elgsenos vertės, o kitas skyrius paaiškina, kodėl jos gali niekada nepasireikšti jūsų sesijai. Numatytoji reikšmė, kuri niekada nesuveikia, neatskiriama nuo jokios numatytosios reikšmės.
Užsirašykite adresus, prievadus ir sąsają, kuriuos naudoja jungtis. Kai sesija miršta, būtent šios detalės leidžia paklausti tinkamo įrenginio, ką jis padarė, o ne klausti, ar tinklas veikė.
Ar neveiklumo taisyklė baigiasi, ar riboja
Dvi taisyklės sukuria tą patį simptomą ir reikalauja priešingų atsakymų. Neveiklumo laiko limitas pašalina būseną, kurią kvalifikuotas srautas galėjo atnaujinti, o keepalive gali to išvengti. Absoliuti sesijos riba pašalina srautą po fiksuotos trukmės nepriklausomai nuo aktyvumo, ir joks keepalive to nepakeis.
Paklauskite kiekvieno tarpininko savininko, kurią iš dviejų jis įgyvendina. Užkarda, NAT įrenginys, apkrovos balansuotojas ir debesies šliuzas gali visi saugoti būseną, ir jiems nebūtina sutarti. Siauriausias nustato terminą, kurį turite įveikti.
Šis skirtumas taip pat pasako, kada nustoti derinti. Jei taisyklė yra absoliuti riba, teisingas sprendimas yra trumpesnis darbo vienetas, atnaujinama užduotis arba patvirtinta išimtis, o žemiau esantis patikrinimas tik patvirtins, kad keepalive nieko nepakeitė.
Lizdo jungiklis už Linux numatytųjų verčių
Keepalive yra pasirenkamas kiekvienam lizdui. Branduolio numatytosios vertės aprašo, kaip elgiasi zondai, kai lizdas jau įjungė mechanizmą, ir jos neįjungia jo esamoms jungtims. Programa, kuri niekada to neprašo, negauna jokių zondų, ką bepasakytų sysctl reikšmės.
Todėl vien skaičių padidinimas nieko nekeičia duomenų bazės klientui. Mechanizmą turi įjungti kliento biblioteka arba programa, o ten, kur dėklas siūlo valdymą kiekvienai jungčiai, apribotas nustatymas pranašesnis už viso hosto pakeitimą, kuris paliečia nesusijusias paslaugas.
Intervalas iki pirmojo zondo taip pat nėra užklausos laiko limitas. Sveika jungtis tyli tarp zondų, o miręs partneris atpažįstamas pagal zondo intervalą ir skaičių. Šių trijų verčių skaitymas kaip vieno laiko limito veda prie nustatymų, kurie gedimą aptinka arba per vėlai, arba pernelyg skubotai. Jie valdo aptikimą, o ne programos kantrybę.
EXPIRE_TIME yra duomenų bazės nustatymas, o ne tinklo taisymas
Oracle Net siūlo savo gyvybingumo mechanizmą, sukonfigūruotą efektyviame proceso profilyje, o ne atsitiktiniame faile, kuris atsitiktinai turi panašų pavadinimą. Vertė išreiškiama minutėmis.
SQLNET.EXPIRE_TIME = 5
Jo pagrindinis tikslas yra mirusių jungčių aptikimas serverio pusėje, o platformose, palaikančiose patobulintą modelį, jis taip pat derina šių jungčių TCP keepalive elgseną. Tai naudinga savybė: duomenų bazės sluoksnis gali organizuoti zondus neprašydamas kliento programos keistis.
Aukščiau pateikta iliustracinė vertė yra suderintas pasirinkimas tariamo termino atžvilgiu, o ne rekomendacija. Dokumentuota bendra rekomendacija yra ilgesnis intervalas, o teisingas skaičius priklauso nuo įdiegtos realizacijos, priimtinų zondų išlaidų ir faktinių atnaujinimo taisyklių kelyje. Įdėkite nustatymą į profilį, kurį skaito atitinkamas procesas, ir patvirtinkite, kad procesas jį paėmė. Oracle dokumentuoja profilių vietas ir aptikimo elgseną savo parametrų žinyne.
Išbandykite tylų intervalą, tada planuokite atkūrimą
Praleiskite naują leidžiamą jungtį per tylų laikotarpį, ilgesnį už terminą, kurį bandote įveikti, ir stebėkite gyvybingumo srautą bei programos rezultatą. Neįrašykite naudingojo krovinio turinio, kurio jums nereikia; laikmačiai ir jungties būsena atsako į klausimą.
ss -tio dst 10.60.4.20
# after the quiet interval, same command
ls -l "$ORACLE_HOME/network/admin/sqlnet.ora"
Jei sesija vis tiek dingsta, terminas priklauso įrenginiui, kurio dar nepaklausėte, arba taisyklė yra absoliuti riba. Jei ji išgyvena, pažymėkite, kuris sluoksnis pasikeitė, kad kita tyli operacija nekartotų tyrimo.
Galiausiai nuspręskite, kas atsitinka, kai jungtis tikrai nutrūksta, nes gyvybingumo patikrinimai sumažina dažnį ir niekada nepanaikina galimybės. Nustatykite įrašytą duomenų bazės operacijos rezultatą prieš siųsdami ją iš naujo: atsakymo praradimas nieko neįrodo apie tai, ar darbas buvo patvirtintas. Viskam, kas turi išgyventi nešiojamojo kompiuterio uždarymą ar tunelio paleidimą iš naujo, serveriui priklausanti užduotis su ilgalaikiu rezultatu yra tvirtesnis dizainas, o keepalive nėra planuotojas.