Aš taip pat rašiau apie tai anksčiauORAKULAS11g naujų funkcijų straipsnis, dabarORAKULAS11G tapo įprastaORAKULASduomenų bazės versija, suprasti ir mokytisORAKULASNaujos 11G funkcijos yra labai svarbios, taip pat ir ašORAKULASPradedantiesiems su naujomis 11G funkcijomis norėčiau pasidalinti savo mokymosi procesu ir patirtimi čia.
Šiame straipsnyje daugiausia rašoma, kad:ORAKULASNauja 11g funkcija, leidžianti DDL spynoms laukti DML spynų, kuria taip pat pasidalijo ponas Zhang Leyi (kamus) birželio 30 d. ACOUG renginyje.
Versijose iki 11g, pagal numatytuosius nustatymus DDL užraktai nelaukia DML užraktų, o jei atliksite DDL operacijas lentelėje su DML užraktais, jis iškart grąžins gedimą (išskyrus tą patį SESSION), atlikime paprastą eksperimentą, įterpkime duomenis į lentelę STREAM SESSION1, nepateikite, šiuo metu lentelė STREAM turės DML užraktą ir vykdykite TRUNCATE lentelės STREAM operaciją SESSION2, ir ji iškart grąžins gedimą:
SESSION1 >Įterpti į srautą pasirinkite * iš dbdream; Sukurta 10 eilučių. SESSION2 >sutrumpinti stalo srautą; sutrumpinti lentelės srautą * KLAIDA 1 eilutėje: ORA-00054: išteklius užimtas ir įsigyti, kai nurodyta NOWAIT arba baigėsi skirtasis laikas 11g versijoje,ORAKULASĮvestas DDL_LOCK_TIMEOUT parametras, leidžiantis DDL spynoms laukti DML užraktų, kurie kontroliuoja laiką, per kurį DDL spynos laukia DML užraktų, sekundėmis, numatytoji vertė yra 0, tai yra, DDL spynos nelaukia DML užraktų, maksimali vertė yra 1 milijonas, tai yra 11,5 dienos, šį parametrą galima nustatyti visame pasaulyje arba SESSION lygiu.
SESSION2 >rodyti parametro ddl_lock_timeout PAVADINIMO TIPO REIKŠMĘ ----------------------- ----------- ------ ddl_lock_timeout sveikąjį skaičių 0 SESSION2 >keisti seanso rinkinį ddl_lock_timeout=2000000; KLAIDA: ORA-00068: neleistina ddl_lock_timeout parametro reikšmė 2000000, turi būti nuo 0 iki 1000000 Toliau parodytas šio DDL_LOCK_TIMEOUT parametro poveikis, taip pat kaip pavyzdys paimta aukščiau pateikta STREAM lentelė, dabartinėje STREAM lentelėje vis dar yra DML užraktas, SESSION2 bus DDL_LOCK_ TIMEOUT nustatytas į 60 sekundžių, tada vykdoma TRUNCATE operacija, o gedimas nebus grąžintas iš karto, o palauks 60 sekundžių, o jei STREAM lentelės DL užraktas nebus atleistas per 60 sekundžių, jis grąžins gedimą.
SESSION2 >keisti seansų rinkinį ddl_lock_timeout=60; Sesija pakeista. SESSION2 > nustatyti laiką SESSION2 > sutrumpinti stalo srautą; --Šiuo metu SESSION2 sustabdo, laukia, kol SESSION1 atleis DML užraktą per 60 sekundžių, grąžina nepavyko po 60 sekundžių sutrumpinti lentelės srautą * KLAIDA 1 eilutėje: ORA-00054: išteklius užimtas ir įsigyti, kai nurodytas NOWAIT arba pasibaigė skirtasis laikas Praėjo: 00:01:00.01 DDL_LOCK_TIMEOUT parametrų atsiradimas labai supaprastina DBA veikimą, pavyzdžiui, norime pridėti lauką prie lentelės, tačiau šioje lentelėje yra daug DML operacijų, ir mes negalime naudoti ALTER SYSTEM KILL SESSION metodo šioms operacijoms užbaigti, taigi, jei norime pridėti laukus prie šios lentelės, turime atlikti laukų pridėjimo operaciją daugybę kartų arba parašyti scenarijus, kad atliktume šį darbą, ir dabar turime DDL_ LOCK_TIMEOUT parametrą, mums tereikia nustatyti šiek tiek didesnę šio parametro reikšmę ir mums nereikia jaudintis dėl SQL vykdymo, parodykime šį procesą toliau.
SESSION2 įtraukti laukus:
SESSION2 >keisti lentelės srautą pridėti jpg_path varchar2(255) numatytasis '/home/orakulas/'; 此时挂起,等待STREAM表的DML锁释放,SESSION1提交释放DML锁后,SESSION2操作便成功了。
SESSION1 > įsipareigoti; Įsipareigojimas baigtas. SESSION2 >keisti lentelės srautą pridėti jpg_path varchar2(255) numatytasis '/home/orakulas/'; Table altered. SESSION2 >select * from stream; ID IDENTIFIER PIC_NO JPG_PATH ---------- --------------- ------ --------------- 1 18-0220-003 1 /home/orakulas/ 2 18-0221-003 1 /home/orakulas/ 3 18-0221-003 2 /home/orakulas/ 4 18-0221-003 3 /home/orakulas/ 5 18-0223-005 1 /home/orakulas/ 6 18-0223-005 2 /home/orakulas/ 7 18-0223-005 3 /home/orakulas/ 8 18-0223-005 4 /home/orakulas/ 9 18-0223-005 5 /home/orakulas/ 10 18-0223-005 6 /home/orakulas/ 10 rows selected.
|