O tem sem že prej pisalORAKELJČlanek o novih funkcijah 11G, zdajORAKELJ11G je postal glavni tokORAKELJRazličica baze podatkov, razumevanje in učenjeORAKELJNove funkcije 11G so ključne, prav tako tudi jazORAKELJZa začetnike z novimi funkcijami 11G bi rad tukaj delil svoj učni proces in izkušnje.
Ta članek predvsem navaja, da:ORAKELJNova funkcija 11g, ki omogoča DDL ključavnicam, da čakajo na DML ključavnice, kar je tudi tema, ki jo je delil gospod Zhang Leyi (kamus) na dogodku ACOUG 30. junija.
V različicah pred 11g DDL zaklepi privzeto ne čakajo na DML zaklepe, in če izvedete DDL operacije na tabeli z DML zaklepi, bo takoj vrnil neuspeh (razen za isto SESSION), izvedimo preprost eksperiment, vstavite podatke v tabelo STREAM v SESSION1, ne oddajajte, v tem trenutku bo tabela STREAM imela DML zaklep in izvedite operacijo TRUNCATE table STREAM v SESSION2, ki takoj vrne neuspeh:
SESSION1 >vstavi v izbiro toka * iz dbdream; Ustvarjenih 10 vrstic. SESSION2 >odrezani tok tabele; trunkate table stream * NAPAKA na vrstici 1: ORA-00054: vir zaseden in pridobljen z NOWAIT specifikacijo ali časovni potek v različici 11g,ORAKELJUveden DDL_LOCK_TIMEOUT parameter, ki omogoča DDL ključavnicam, da čakajo na DML ključavnice, ki nadzorujejo čas, da DDL ključavnice čakajo na DML ključavnice, v sekundah je privzeta vrednost 0, torej DDL ključavnice ne čakajo na DML ključavnice, največja vrednost je 1 milijon, torej 11,5 dni, ta parameter je mogoče nastaviti globalno ali na ravni SESSION.
SESSION2 >prikaži parameter ddl_lock_timeout IME TIP VREDNOST ----------------------- ----------- ------ ddl_lock_timeout celo število 0 SESSION2 >alter session set ddl_lock_timeout=2000000; NAPAKA: ORA-00068: neveljavna vrednost 2000000 za parameter ddl_lock_timeout, mora biti med 0 in 1000000. Naslednje prikazuje učinek naslednjega parametra DDL_LOCK_TIMEOUT in kot primer vzamemo tudi zgornjo tabelo STREAM, trenutna tabela STREAM še vedno ima DML zaklep, v SESSION2 bo DDL_LOCK_ TIMEOUT je nastavljen na 60 sekund, nato se izvede operacija TRUNCATE, napaka pa se ne vrne takoj, ampak počaka 60 sekund, in če DL zaklep tabele STREAM ni sproščen v 60 sekundah, se vrne napaka.
SESSION2 >alter session set ddl_lock_timeout=60; Seja spremenjena. SESSION2 >nastavi časovni okvir na SESSION2 >toka za odrezovanje tabele; --Na tej točki SESSION2 začasno ustavi, počaka, da SESSION1 sprosti DML zaklep v 60 sekundah, vrne se po 60 sekundah, tok tabele skrajšavanja * NAPAKA na vrstici 1: ORA-00054: vir zaseden in pridobitev z NOWAIT specifikacijo ali časovni potek potekel Potekel: 00:01:00.01 Pojav DDL_LOCK_TIMEOUT parametrov močno poenostavi delovanje DBA-jev, na primer, želimo dodati polje v tabelo, vendar ima ta tabela veliko DML operacij in ne moremo uporabiti metode ALTER SYSTEM KILL SESSION za zaključek teh operacij, zato če želimo dodati polja v to tabelo, moramo operacijo dodajanja polj izvajati neštetokrat ali napisati skripte za to nalogo, in zdaj imamo DDL_ LOCK_TIMEOUT parametru moramo le nekoliko povečati vrednost tega parametra in ni nam treba skrbeti za izvajanje SQL, pokažimo ta postopek spodaj.
SESSION2 dodajte polja:
SESSION2 >spremeni tok tabele dodaj jpg_path varchar2(255) privzeto '/home/Orakelj/'; 此时挂起,等待STREAM表的DML锁释放,SESSION1提交释放DML锁后,SESSION2操作便成功了。
SESSION1 >zaveži se; Zaveza zaključena. SESSION2 >spremeni tok tabele dodaj jpg_path varchar2(255) privzeto '/home/Orakelj/'; Table altered. SESSION2 >select * from stream; ID IDENTIFIER PIC_NO JPG_PATH ---------- --------------- ------ --------------- 1 18-0220-003 1 /home/Orakelj/ 2 18-0221-003 1 /home/Orakelj/ 3 18-0221-003 2 /home/Orakelj/ 4 18-0221-003 3 /home/Orakelj/ 5 18-0223-005 1 /home/Orakelj/ 6 18-0223-005 2 /home/Orakelj/ 7 18-0223-005 3 /home/Orakelj/ 8 18-0223-005 4 /home/Orakelj/ 9 18-0223-005 5 /home/Orakelj/ 10 18-0223-005 6 /home/Orakelj/ 10 rows selected.
|