Hogyan lehet eltávolítani a nem létező munkamenetek folyamatát?

A nem létező munkamenetek folyamatainak eltávolítása az Oracle-ben

A jelenlegi zsargonban a címsor így hangzik: "Hogyan lehet eltávolítani a holttesteket (megölt ülések)". Érdekes, hogy egy ilyen név pontosan hangzik.

Amint az ismeretes, minden kommunikációs munkamenet a kliens program az Oracle adatbázis által végrehajtott „kiszolgáló folyamat” fordul elő, hogy a számítógépen futó adatbázisban. De rendkívüli ülésén meg lehet szakítani (például kóros megszűnése kliens program vagy a kibocsátás adminisztrátor ALTER SYSTEM KILL SESSION parancs DB), majd logikusan a szerver folyamat, kiszolgálva az ülésen kellene szakadék. Néha azonban ez nem következik be, és az adminisztrátor a kiszolgálón egyre növekvő számú "halott" szerverprocesszort néz. Miért - külön beszélgetést, és az Oracle fejlesztő van talán a védekezésre, de olyan messze menni, hogy nem minden rendszergazda képesek. Fontos, hogy a "halott" kiszolgáló legalább a RAM-ot elfogyasztja, ami néha nem elégséges, és hogy ezt meg lehet küzdeni.

Az eljárási szempontból minden egyes "Oracle adatbázis példány" nevű program egy "interaktív folyamatok halmaza" (dokumentáció). Az ügyfélprogram minden egyes aktív kommunikációs munkamenetét az adatbázis példányt egy ilyen folyamat (szerver oldal) hajtja végre.

A DBMS-ben található folyamatok listája megtekinthető a V $ PROCESS dinamikus táblában:

SELECT addr, spid, program, pga_used_mem
FROM v $ folyamat;

A kliensprogramok DBMS segítségével létrehozott kommunikációs munkamenetek listáját megtekintheti a V $ SESSION dinamikus táblában:

SELECT oldal, soros #, paddr, állapot, terminál, program
FROM v $ session;

Ha összevetjük a két táblázatot a feltétellel V $ PROCESS.ADDR = V $ SESSION.PADDR, információszerzés az ülések, az államok és nem DBMS fizikai folyamatok nekik:

SELECT p.spid, p.program, s.program, s.terminal, s.status
FROM v $ folyamat p, v $ session s
WHERE p.addr = s.paddr;

(Azok, akik kívánnak, megadhatnak más területeket, miután konzultáltak a dokumentációjukban szereplő jelentéssel).

Mentesség hiába alkalmazott adatbázis-erőforrások eltávolításával érjük el az operációs rendszer folyamat (thread), amely megvalósítja az Oracle folyamat, amely megfelel a „megölte” session. Az ilyen eltávolítás részeként az Oracle szoftver egy speciális programot, amelynek orakill paraméterek száma a folyamat (thread) operációs rendszer (vegye ki a V $ PROCESS.SPID) és a nevét az adatbázis példány (ORACLE_SID):

orakill ORACLE_SID folyamat_number_ (szálak)

A program használata a technika kérdése. Például létrehozhat egy típusú lekérdezést

SELECT 'HOST orakill' || i.instance_name || '' || p.spid
FROM v $ folyamat p, v $ session s, v $ példány i
WHERE p.addr = s.paddr ÉS
s.status = 'KILLED';

és szoknya a parancsok SQL * Plus orsó és START (valamint letiltja a kiadását cím), és így kapjuk a script SQL * Plus által működtetett külső eszköz (cron, on, vagy program, illetve az Oracle Enterprise Manager konzol) a kívánt rendszerességgel. Ezzel a szkripttel a fenti lekérdezés eredménye a fájlhoz hasonló formában érkezik meg:

HOST orakill tanár 2056
HOST orakill tanár 1628
HOST orakill tanár 1604
HOST orakill tanár 1556
.

majd a START parancsot értelmezi.

Ezt a technikát önállóan gyakorolhatja.

További információkért lépjen kapcsolatba az Interface Kft-vel.

Kapcsolódó cikkek