Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 11117|Odpoveď: 0

[Zdroj] ORACLE 11g Nové funkcie - Umožňuje DDL zámkom čakať na DML zámky

[Kopírovať odkaz]
Zverejnené 26. 11. 2014 15:54:15 | | |
Aj ja som o tom už písalORACLEČlánok o nových funkciách 11G, terazORACLE11G sa stalo bežnou súčasťouORACLEVerzia databázy, pochopenie a naučenie saORACLENové funkcie 11G sú kľúčové, rovnako ako jaORACLEPre začiatočníkov v nových funkciách 11G by som tu rád zdieľal svoj proces učenia a skúsenosti.
Tento článok najmä zaznamenáva, že:ORACLENová funkcia 11g umožňuje DDL zámkom počkať na DML zámky, čo je téma, ktorú zdieľa aj pán Zhang Leyi (kamus) na podujatí ACOUG 30. júna.
Vo verziách pred 11g DDL zámky predvolene nečakajú na DML zámky, a ak vykonáte DDL operácie na tabuľke s DML zámkami, okamžite sa vráti zlyhanie (okrem toho istého SESSION), urobme jednoduchý experiment, vložte dáta do STREAM tabuľky v SESSION1, neodosielajte, v tomto momente bude mať TOK tabuľky DML zámok a vykonáte operáciu TRUNCATE TABLE STREAM v SESSION2, pričom okamžite vráti zlyhanie:
SESSION1 >vložiť do výberu prúdu * z dbdream; Vytvorených 10 riadkov. SESSION2 >prúd orezanej tabuľky; trunkovať tok tabuľky * CHYBA na riadku 1: ORA-00054: zdroj obsadený a získaný so špecifikovaným NOWAIT alebo vypršaný timeout vo verzii 11g,ORACLEBol zavedený DDL_LOCK_TIMEOUT parameter, ktorý umožňuje DDL zámkom čakať na DML zámky, ktoré riadia čas, kým DDL zámky čakajú na DML zámky, za sekundy je predvolená hodnota 0, teda DDL zámky nečakajú na DML zámky, maximálna hodnota je 1 milión, teda 11,5 dňa, tento parameter je možné nastaviť globálne alebo na úrovni SESSION.
SESSION2 >zobraziť parameter ddl_lock_timeout MENO, TYP HODNOTY ----------------------- ----------- ------ ddl_lock_timeout CELÉ ČÍSLO 0 SESSION2 >zmeniť sadu relácie ddl_lock_timeout=2000000; CHYBA: ORA-00068: neplatná hodnota 2000000 pre parameter ddl_lock_timeout, musí byť medzi 0 a 1000000. Nasledujúce ukazuje účinok nasledujúceho parametra DDL_LOCK_TIMEOUT a tiež uvádza vyššie uvedenú tabuľku STREAM ako príklad, aktuálna STREAM tabuľka má stále DML zámok, v SESSION2 bude DDL_LOCK_ TIMEOUT sa nastaví na 60 sekúnd, potom sa vykoná operácia TRUNCATE, pričom zlyhanie sa nevráti okamžite, ale počká 60 sekúnd, a ak sa DL zámok tabuľky STREAM neuvoľní do 60 sekúnd, vráti sa zlyhanie.
SESSION2 >alter session set ddl_lock_timeout=60; Sedenie zmenené. SESSION2 >nastavte časovanie na SESSION2 >strum orezanej tabuľky; --V tomto bode sa SESSION2 pozastaví, čaká, kým SESSION1 uvoľní DML zámok do 60 sekúnd, vráti sa po 60 sekundách skracovacieho toku tabuľky * CHYBA na riadku 1: ORA-00054: zdroj obsadený a získanie s NOWAIT špecifikovaným alebo časovým limitom vypršaným Uplynulo: 00:01:00.01 Vznik DDL_LOCK_TIMEOUT parametrov výrazne zjednodušuje fungovanie DBA, napríklad chceme pridať pole do tabuľky, ale táto tabuľka obsahuje veľa DML operácií a nemôžeme použiť metódu ALTER SYSTEM KILL SESSION na ukončenie týchto operácií, takže ak chceme pridať polia do tejto tabuľky, musíme vykonať operáciu pridávania polí nespočetnekrát, alebo napísať skripty na túto úlohu, a teraz máme DDL_ LOCK_TIMEOUT parametre stačí nastaviť hodnotu tohto parametra o niečo väčšiu a nemusíme sa obávať vykonávania SQL, tento proces si ukážme nižšie.
SESSION2 pridať polia:
SESSION2 >alter table stream pridať jpg_path varchar2(255) default '/home/Oracle/'; 此时挂起,等待STREAM表的DML锁释放,SESSION1提交释放DML锁后,SESSION2操作便成功了。
SESSION1 >zaviazať sa; Záväzok dokončený. SESSION2 >alter table stream pridať jpg_path varchar2(255) default '/home/Oracle/'; Table altered. SESSION2 >select * from stream; ID IDENTIFIER PIC_NO JPG_PATH ---------- --------------- ------ --------------- 1 18-0220-003 1 /home/Oracle/ 2 18-0221-003 1 /home/Oracle/ 3 18-0221-003 2 /home/Oracle/ 4 18-0221-003 3 /home/Oracle/ 5 18-0223-005 1 /home/Oracle/ 6 18-0223-005 2 /home/Oracle/ 7 18-0223-005 3 /home/Oracle/ 8 18-0223-005 4 /home/Oracle/ 9 18-0223-005 5 /home/Oracle/ 10 18-0223-005 6 /home/Oracle/ 10 rows selected.




Predchádzajúci:Praktické SQL vyhlásenie: odhad dátumu
Budúci:Oracle ORA-12541: Obchádzka TNS:no listener error
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com