Cum să eliminați procesele de sesiuni inexistente
În jargonul actual, titlul poate suna astfel: "Cum să eliminați cadavrele (sesiuni ucise)". Este interesant că un astfel de nume ar suna exact.
După cum știți, fiecare sesiune a programului client cu Oracle DBMS este implementată printr-un "proces de server" care apare pe computerul în care rulează DBMS. Dar sesiune de urgență poate fi întreruptă (de exemplu, din cauza terminării anormale a programelor de client sau de către administratorul emisiunii ALTER SYSTEM KILL SESIUNE comandă DB) și apoi, în mod logic, procesul de server, care deservesc sesiunea ar trebui să prăpastie. Uneori, însă, acest lucru nu se întâmplă, iar administratorul urmărește de pe server o listă tot mai mare de procese server "moarte". De ce - o conversație separată, și dezvoltatorii Oracle, probabil există justificarea ei, dar nu este atât de ușor să meargă, astfel încât nu toți administratorii au ocazia. Este important ca serverul "mort" să proceseze cel puțin consumul de memorie RAM, ceea ce ar putea să nu fie suficient, iar acest lucru poate fi combătut.
Din punct de vedere procedural, fiecare program specific numit "instanță de bază de date Oracle" constă dintr-un "set de procese interacționante" (documentație). Fiecare sesiune de comunicare activă a programului client cu instanța bazei de date este implementată printr-un astfel de proces (pe partea de server).
Lista proceselor din DBMS poate fi vizualizată în tabelul dinamic V $ PROCESS:
SELECT addr, spid, program, pga_used_mem
FROM v $ process;
Lista sesiunilor de comunicare stabilite de programele client cu DBMS poate fi vizualizată în tabela dinamică V $ SESSION:
SELECT sid, serial #, paddr, stare, terminal, program
Din sesiunea v $;
Dacă vom combina cele două tabele cu condiția V $ PROCESS.ADDR = V $ SESSION.PADDR, obține informații cu privire la sesiunile, stările lor și procesele fizice non-SGBD pentru ei:
SELECT p.spid, p.program, s.program, s.terminal, s.status
Din v $ proces p, v $ sesiune s
Unde p.addr = s.paddr;
(Cei care doresc pot primi și alte domenii, după ce au consultat semnificația lor în documentație).
Scutire zadar angajat resursele bazei de date se realizează prin eliminarea procesului de operare (fir), care implementează procesul de Oracle, care corespunde „ucis“ sesiune. Pentru îndepărtarea, cum ar fi o parte a software-ului Oracle are un program special de orakill a cărui parametri sunt numărul sistemului de proces (fir) de operare (scoate din V $ PROCESS.SPID), precum și numele instanței bazei de date (ORACLE_SID):
orakill ORACLE_SID proces_number_ (fire)
Cum se utilizează acest program este o chestiune de tehnologie. De exemplu, puteți crea o interogare de tip
SELECTați "HOST sau oracill" || Numele de identificare a produsului || '' || p.spid
Din v $ proces p, v $ sesiune s, v $ instanță i
Unde p.addr = s.paddr AND
s.status = 'URMAT';
si ocolirea sale comenzi SQL Plus * BOBINEI și START (precum și dezactiva emiterea de titlu) și, astfel, a obține script-ul SQL * Plus rula prin mijloace externe (cron, la, sau program, sau folosind Oracle Enterprise consola Manager), cu regularitatea dorită. Cu acest script, rezultatul interogării de mai sus va ajunge în fișier într-o formă similară cu aceasta:
HOST sau învățător 2059
HOST sau profesor de școală 1628
HOST sau profesor de școală 1604
HOST sau profesor 1515
.
și apoi comanda START este interpretată.