Különböző lekérdezések a dinamikus nézettáblákból: -------------------------------------------------- Melyek az éppen futó (aktív) tranzakciók a rendszerben? Melyik tranzakciót melyik session futtatja? SELECT ... FROM v$session se, v$transaction tr WHERE se.taddr = tr.addr STATUS START_TIME SID USERNAME LOG_IO PHY_IO ---------- -------------------- ---------- ---------- ---------- ---------- ACTIVE 07/12/01 14:33:06 11 NIKOVITS 27 0 ACTIVE 07/12/01 14:40:56 17 NIKOVITS 22 0 A tranzakcióhoz tartozó session melyik utasítást futtatja jelenleg? SELECT ... FROM v$transaction tr, v$session se, v$sqltext tx WHERE tr.addr = se.taddr AND se.prev_sql_addr = tx.address AND se.prev_hash_value = tx.hash_value START_TIME USERNAME SQL_TEXT --------------------------------------------------------------------------- 07/12/01 14:33:06 NIKOVITS update proba set szam= szam+32 where sorszam=1 A prev_sql_addr és prev_hash_value a legutóbb futtatott utasítást adja meg, az éppen futtatott utasítást az sql_address és sql_hash_value alapján lehet megkapni. Vigyázni kell azonban, mert ha a másik ablakbeli utasítás túl gyorsan lefut, akkor már nem látjuk azt 'aktuális'-ként. Gondoskodhatunk róla, hogy a másik session-beli utasítás 'lassan' fusson, pl. SQLPLUS-ban lapozgatással. A fenti két join oszlop helyett egyetlen másik is használható: sql_id (illetve prev_sql_id) Arra is érdemes odafigyelni, hogy a tranzakció utasításai addig nem jelennek meg a v$transaction táblában, amíg nem történik valami módosítás (UPDATE, DELETE, INSERT). Egy tranzakció melyik rollback szegmenst használja? SELECT ... FROM v$rollname rn, v$transaction tr WHERE rn.usn = tr.xidusn NAME START_TIME ADDR ------------------------------ -------------------- -------- _SYSSMU1$ 07/12/01 14:33:06 02F864AC _SYSSMU6$ 07/12/01 14:40:56 02F86828 A tranzakció melyik adatfájlba írja a rollback blokkjait (Undo Block Address)? SELECT ... FROM v$datafile f, v$transaction tr WHERE tr.ubafil = f.file# A rollback szegmens használatával kapcsolatos statisztikai információk kinyerése. SELECT ... FROM v$rollstat rs, v$transaction tr WHERE rs.usn = tr.xidusn START_TIME NAME EXTENTS WRITES XACTS GETS -------------------- ---------- ---------- ---------- ---------- ---------- 07/12/01 14:33:06 _SYSSMU$1 8 970 1 100 07/12/01 14:40:56 _SYSSMU$6 8 3482 1 104 10.2-es újdonság Lemondhatunk a tranzakció által garantált tartósságról, cserébe azért, hogy gyorsabban hajtódjanak végre a COMMIT műveletek, és így az alkalmazásunk több tranzakciót tudjon végrehajtani adott idő alatt. Alapértelmezés szerint (a régebbi verziók csak így tudnak működni) a COMMIT hatására a napló puffer bejegyzések lemezre íródtak, és a vezérlés csak a teljes kiírás után került vissza a programhoz. Most mindkét dolgot felülbírálhatjuk (legyen írás vagy ne illetve várjuk meg vagy ne) egy init paraméterrel, vagy közvetlenül a COMMIT utasításban. ALTER SYSTEM SET COMMIT_WRITE = BATCH, NOWAIT COMMIT WRITE BATCH NOWAIT