Hogyan lehet eltávolítani a folyamatokat oracle-ban

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

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.

Mint tudják, az Oracle DBMS kliensprogramjának minden munkamenetét olyan kiszolgálófolyamaton hajtják végre, amely a számítógépen fut, ahol a DBMS fut. 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 - egy külön beszélgetés és az Oracle fejlesztői valószínűleg igazolják, de nem olyan egyszerű, hogy ne legyen minden rendszergazda számára a lehetőség. 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 a V $ PROCESS.ADDR = V $ SESSION.PADDR feltétel alapján két táblát kapcsol össze, akkor információt kapunk a munkamenetekről, állapotukról és a fizikai DBMS folyamatok számáról:

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, megadhatók más területek, 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.

Kapcsolódó cikkek