Korábban is írtam rólaORACLE11G új cikk, mostORACLEA 11G már a mainstreambe váltORACLEAdatbázis verzió, megértés és tanulásORACLEA 11G új funkciói kulcsfontosságúak, és én isORACLEA 11G új funkcióinak kezdőivel szeretném megosztani a tanulási folyamatomat és tapasztalataimat itt.
Ez a cikk főként azt jegyzi fel:ORACLEAz 11g új funkciója, amely lehetővé teszi, hogy a DDL zárak megvárják a DML zárakat, és ezt a témát Zhang Leyi úr (kamus) is megosztotta az ACOUG június 30-i rendezvényen.
A 11g előtti verziókban alapértelmezés szerint a DDL zárak nem várnak a DML zárakra, és ha DDL műveleteket hajtasz végre egy DML zárolású táblán, azonnal hibát ad (kivéve ugyanazt a SESSION-ot), csináljunk egy egyszerű kísérletet, adjunk be adatokat a STREAM táblába SESSION1-ben, ne adjuk be, ekkor a STREAM tábla DML zárolással rendelkezik, és SESSION2-ben végrehajtjuk a TRUNCATE tábla STREAM műveletet, és azonnal visszaadja a hibát:
SESSION1 >bekerüljön a stream Select * fájlba a dbdreamből; 10 sor létrejött. SESSION2 >lerövidített táblázatfolyam; truncate táblafolyam * ERROR az 1. sornál: ORA-00054: erőforrás foglalt és beszerezve NOWAIT megadott vagy időkivonás lejárt a 11g verzióban,ORACLEBevezetés DDL_LOCK_TIMEOUT paramétert, amely lehetővé teszi a DDL zárak számára, hogy megvárják a DML záratokat, amelyek szabályozzák a DDL zárak DML zárrá való várakozási időt, másodpercek alatt az alapértelmezett érték 0, vagyis a DDL zárak nem várnak DML zárolásokra, a maximális érték 1 millió, azaz 11,5 nap, ez a paraméter globálisan vagy SESSION szinten beállítható.
SESSION2 > paraméter ddl_lock_timeout név típus érték ----------------------- ----------- ------ ddl_lock_timeout egész szám 0 SESSION2 >alter session set ddl_lock_timeout=2000000; HIBA: ORA-00068: érvénytelen érték 2000000 ddl_lock_timeout paraméterre, 0 és 1000000 között kell lennie. Az alábbiakban bemutatja a következő DDL_LOCK_TIMEOUT paraméter hatása, és példaként veszi a fenti STREAM táblát, a jelenlegi STREAM tábla továbbra is DML zárolással rendelkezik, SESSION2 DDL_LOCK_ A TIMEOUT 60 másodpercre van állítva, majd elindul a TRUNCATE művelet, a hiba nem tér vissza azonnal, hanem 60 másodpercig vár, és ha a STREAM tábla DL zárolását nem oldják ki 60 másodpercen belül, akkor vissza fog jelenteni a hibát.
SESSION2 >alter session halmaza ddl_lock_timeout=60; A szekció megváltozott. SESSION2 >állítsd be az időzítést SESSION2 >levágott táblázatfolyamon; --Ekkor SESSION2 felfüggeszti, várja, hogy SESSION1 60 másodpercen belül feloldja a DML zárolást, a visszaküldések 60 másodperc után megbuktak a táblázatfolyam * HIBA az 1. sornál: ORA-00054: erőforrás foglalt és NOWAIT megadott vagy időkorláttal teljesít Lejárt: 00:01:00.01 A DDL_LOCK_TIMEOUT paraméterek megjelenése jelentősen leegyszerűsíti a DBA-k működését, például egy mezőt akarunk hozzáadni egy táblához, de ebben a táblában sok DML művelet van, és nem tudjuk az ALTER SYSTEM KILL SESSION módszerrel ezeket a műveleteket befejezni, így ha mezőket akarunk hozzáadni ebbe a táblába, számtalanszor kell végeznünk a mezők hozzáadását, vagy szkripteket kell írnunk ehhez a feladathoz, és most már DDL_ LOCK_TIMEOUT paraméter szerint csak egy kicsit nagyobbra kell állítanunk ennek a paraméternek az értékét, és nem kell aggódnunk az SQL futtatása miatt, ezt a folyamatot mutassuk be lentebb.
SESSION2 mezők hozzáadása:
SESSION2 >alter table stream add jpg_path varchar2(255) default '/home/jósló/'; 此时挂起,等待STREAM表的DML锁释放,SESSION1提交释放DML锁后,SESSION2操作便成功了。
SESSION1 > kötelezni; Kötelezd el a teljes kötelezettséget. SESSION2 >alter table stream add jpg_path varchar2(255) default '/home/jósló/'; Table altered. SESSION2 >select * from stream; ID IDENTIFIER PIC_NO JPG_PATH ---------- --------------- ------ --------------- 1 18-0220-003 1 /home/jósló/ 2 18-0221-003 1 /home/jósló/ 3 18-0221-003 2 /home/jósló/ 4 18-0221-003 3 /home/jósló/ 5 18-0223-005 1 /home/jósló/ 6 18-0223-005 2 /home/jósló/ 7 18-0223-005 3 /home/jósló/ 8 18-0223-005 4 /home/jósló/ 9 18-0223-005 5 /home/jósló/ 10 18-0223-005 6 /home/jósló/ 10 rows selected.
|