A /users/elte/public_infok/abkez5 konyvtar alatt levo feladatokat kotelezoen meg kell csinalni a gyakorlati jegy megszerzesehez. NE KULDJETEK EL egyesevel a megoldasokat, hanem egy allomanyban gyujtsetek oket es majd a felev folyaman fogom kerni oket. 8. feladat Tranzakciok, konkurrencia, zarolasok Nyissunk meg egyszerre ket SQLPLUS ablakot, tiltsuk le az automatikus commit-ot (SET AUTOCOMMIT OFF) es vegezzunk el mindenfele olvaso es modosito muveleteket a ket ablakbol felvaltva. (Ehhez hozzunk letre es toltsunk fol nehany sorral egy egyszeru proba tablat, amit modositgatunk.) Az aktiv tranzakciok futasa kozben adjuk meg a rendszerkatalogusok alapjan a kovetkezo informaciokat. Melyek az aktiv tranzakciok, mikor indultak el, es ki futtatja azokat? $ select tr.addr, se.username, tr.start_time from v$transaction tr, v$session se where tr.addr=se.taddr and tr.status='ACTIVE'; Eredmeny: ADDR USERNAME START_TIME ---------------- ------------------------------ ------------------- 0000000000BD7088 XYZ 12/11/02 23:56:26 0000000000BDA400 SZLALA 12/11/02 23:54:14 0000000000BDD1C0 SZAMOSP 12/11/02 23:51:46 0000000000BDF9C8 NORBERT 12/11/02 23:52:19 Milyen utasitast futtatnak eppen az egyes tranzakciok? $ select tr.addr, username, sql_text from v$session se, v$sqltext st, v$transaction tr where se.sql_address = st.address and se.sql_hash_value=st.hash_value and tr.addr=se.taddr; Eredmeny: ADDR USERNAME ---------------- ------------------------------ SQL_TEXT ---------------------------------------------------------------- 0000000000BDD1C0 SZAMOSP l_hash_value=st.hash_value and tr.addr=se.taddr 0000000000BDD1C0 SZAMOSP st, v$transaction tr where se.sql_address = st.address and se.sq 0000000000BDD1C0 SZAMOSP select tr.addr, username, sql_text from v$session se, v$sqltext 0000000000BDA400 SZLALA select * from v$open_cursor 0000000000BDF9C8 NORBERT select oszlop58 from matrix where sor=18 0000000000BD7088 XYZ ent_id='Fizetes 1' 0000000000BD7088 XYZ 0000000000BDF9C8 NORBERT select oszlop58 from matrix where sor=18 0000000000BD7088 XYZ ent_id='Fizetes 1' 0000000000BD7088 XYZ 0000000000BD7088 XYZ tement_id='Fizetes 1' CONNECT BY PRIOR id = parent_id AND statem 0000000000BD7088 XYZ object_name, position FROM plan_table START WITH id = 0 AND sta * Melyik tranzakcio melyik rollback szegmenst hasznalja? $ select t.addr, r.name from v$rollname r, v$transaction t where r.usn=t.xidusn; ADDR NAME ---------------- ------------------------------ 0000000000BD7088 R01 0000000000BD81B0 R01 0000000000BD7640 R02 0000000000BD9890 R02 0000000000BD8D20 R03 0000000000BD9E48 R03 0000000000BD7BF8 R04 0000000000BDA400 R04 * Adjunk meg ket utasitassorozatot a ket ablakban ugy, hogy az egyik ablak * a kovetkezo hibauzenetet kapja: * "ORA-08177: Cannot serialize access for this transaction" $ set transaction isolation level serializable; 1$ update bank set name='k' where cash=4; 1$ commit 2$ update bank set name='b'; update bank set name='b' * Melyik session milyen tipusu (sor->TX, tabla->TM) es milyen modu zarolast tart * fenn eppen? (RS->2, RX->3, S->4, SRX->5, X->6) $ select sid, type, lmode, request, block, ctime from v$lock; Melyik session var epp egy zarolasra, illetve melyik zarolasra var epp valaki? Milyen regen tartja fenn a rendszer a zarolasokat, illetve milyen regen var valaki egy zarolasra? $ select s.saddr, o.object_name from v$session s, v$locked_object l, dba_objects o where l.session_id=s.sid and l.object_id=o.object_id and s.lockwait is not null; * Mely objektumokat (tablakat) tartja zarolas alatt valamelyik session * jelen pillanatban? $ select o.object_name, lo.oracle_username from v$session s, v$lock l, v$locked_object lo, dba_objects o where s.sid=l.sid and s.sid=lo.session_id and o.object_id=lo.object_id and s.lockwait is not null; Deritsuk ki (megfelelo manualis lock-olo utasitasok segitsegevel), hogy a Row Exclusive (RX) modu zarolast milyen modu zarolasokkal egyidejuleg engedelyezi a rendszer, es mely modu zarolasok eseten kell varnia a kesobbi kerelmezonek. 1$ lock table bank in ROW EXCLUSIVE MODE; OK 2$ lock table bank in ROW SHARE MODE; OK 2$ lock table bank in ROW EXCLUSIVE MODE; OK 2$ lock table bank in SHARE UPDATE MODE; OK 2$ lock table bank in SHARE MODE; wait... 2$ lock table bank in SHARE ROW EXCLUSIVE MODE; wait... 2$ lock table bank in EXCLUSIVE MODE; wait... * * * * * * * * * *