Olen sellest ka varem kirjutanudORACLE11g uute artiklite artikkel, nüüdORACLE11g on muutunud peavooluksORACLEAndmebaasi versioon, mõista ja õpiORACLE11G uued funktsioonid on üliolulised, ja nii olen ka minaORACLE11G uute funktsioonide algajatele soovin siin jagada oma õppimisprotsessi ja kogemusi.
See artikkel märgib peamiselt, et:ORACLE11g uus funktsioon, mis võimaldab DDL-lukkudel oodata DML-lukke, mida jagas ka hr Zhang Leyi (kamus) ACOUG üritusel 30. juunil.
Versioonides enne 11g ei oota DDL-lukud vaikimisi DML-lukke, ja kui teed DDL-operatsioone laual, kus on DML-lukud, tagastatakse kohe tõrke (välja arvatud sama SESSION), teeme lihtsa katse, sisestame andmed tabelisse STREAM SESSION1, ei esita, sel hetkel on tabelil STREAM DML-lukk, ja kui käivitada TRUNCATE tabeli STREAM operatsioon SESSION2, tagastab see kohe tõrke:
SESSION1 >sisesta voogu valik * dbdreamist; 10 rida loodud. SESSION2 >lühendatud tabelivoog; lühendatud tabelivoog * ERROR reas 1: ORA-00054: ressurss hõivatud ja hankimine NOWAIT määratud või aegunud ajapiiranguga versioonis 11g,ORACLETutvustati DDL_LOCK_TIMEOUT parameetrit, mis lubab DDL-lukkudel oodata DML-lukke, mis kontrollivad aega, mil DDL-lukud ootavad DML-lukke, sekundites on vaikimisi väärtus 0, st DDL-lukud ei oota DML-lukke, maksimaalne väärtus on 1 miljon ehk 11,5 päeva, seda parameetrit saab määrata globaalselt või SESSION tasemel.
SESSION2 >näita parameetrit ddl_lock_timeout NIME TÜÜPI VÄÄRTUST ----------------------- ----------- ------ ddl_lock_timeout täisarvu 0 SESSION2 >muuda sessioonikomplekti ddl_lock_timeout=2000000; ERROR: ORA-00068: kehtetu väärtus 2000000 parameetri ddl_lock_timeout jaoks, peab olema vahemikus 0 kuni 1000000. Järgnevalt demonstreeritakse järgmise DDL_LOCK_TIMEOUT parameetri mõju ning võetakse näiteks ülaltoodud STREAM tabeli, praegusel STREAM-tabelil on endiselt DML-lukk, SESSION2 on DDL_LOCK_ TIMEOUT on seatud 60 sekundile, seejärel käivitatakse TRUNCATE operatsioon, mis ei tagasta kohe, vaid ootab 60 sekundit, ning kui STREAM-tabeli DL-lukku ei vabastata 60 sekundi jooksul, tagastatakse tõrke.
SESSION2 >muuda sessiooni hulka ddl_lock_timeout=60; Sessioon muudeti. SESSION2 >seadista ajastus SESSION2 >lühendatud tabeli vool; --Sel hetkel SESSION2 peatub, ootab, kuni SESSION1 vabastab DML-luku 60 sekundi jooksul, tagastused ebaõnnestuvad pärast 60 sekundit, lühenda tabeli voog * ERROR reas 1: ORA-00054: ressurss hõivatud ja omandamine NOWAIT määratud või ajapiiranguga Möödunud: 00:01:00.01 DDL_LOCK_TIMEOUT parameetrite tekkimine lihtsustab oluliselt DBA-de tööd, näiteks tahame lisada välja tabelisse, kuid selles tabelis on palju DML-operatsioone ja me ei saa kasutada ALTER SYSTEM KILL SESSION meetodit nende operatsioonide lõpetamiseks, nii et kui tahame tabelisse välju lisada, peame tegema välju lugematuid kordi või kirjutama skripte selle töö tegemiseks, ja nüüd on meil DDL_ LOCK_TIMEOUT parameetri puhul peame selle parameetri väärtuse veidi suuremaks määrama ja SQL-i käivitamise pärast ei pea muretsema, demonstreerime seda protsessi allpool.
SESSION2 lisada väljad:
SESSION2 >alter table stream add jpg_path varchar2(255) vaikimisi '/home/oraakel/'; 此时挂起,等待STREAM表的DML锁释放,SESSION1提交释放DML锁后,SESSION2操作便成功了。
SESSION1 >kohustus; Pühendu täielikult. SESSION2 >alter table stream add jpg_path varchar2(255) vaikimisi '/home/oraakel/'; Table altered. SESSION2 >select * from stream; ID IDENTIFIER PIC_NO JPG_PATH ---------- --------------- ------ --------------- 1 18-0220-003 1 /home/oraakel/ 2 18-0221-003 1 /home/oraakel/ 3 18-0221-003 2 /home/oraakel/ 4 18-0221-003 3 /home/oraakel/ 5 18-0223-005 1 /home/oraakel/ 6 18-0223-005 2 /home/oraakel/ 7 18-0223-005 3 /home/oraakel/ 8 18-0223-005 4 /home/oraakel/ 9 18-0223-005 5 /home/oraakel/ 10 18-0223-005 6 /home/oraakel/ 10 rows selected.
|