Es arī rakstīju par to iepriekšORĀKULS11g jaunu funkciju raksts, tagadORĀKULS11G ir kļuvis par galvenoORĀKULSDatu bāzes versija, izpratne un mācīšanāsORĀKULSJaunās 11G funkcijas ir izšķirošas, un es arī esmuORĀKULS11G jauno funkciju iesācējiem es vēlos dalīties savā mācību procesā un pieredzē šeit.
Šajā rakstā galvenokārt ir norādīts, ka:ORĀKULSJauna 11g funkcija, kas ļauj DDL slēdzenēm gaidīt DML slēdzenes, kas ir arī tēma, ar kuru dalījās Zhang Leyi kungs (kamus) ACOUG pasākumā 30. jūnijā.
Versijās pirms 11g, pēc noklusējuma DDL slēdzenes negaida DML slēdzenes, un, ja veicat DDL operācijas tabulā ar DML slēdzenēm, tas nekavējoties atgriezīs kļūmi (izņemot to pašu SESSION), veiksim vienkāršu eksperimentu, ievietojiet datus tabulā STREAM SESSION1, neiesniedziet, šobrīd tabulai STREAM būs DML bloķēšana un izpildiet TRUNCATE tabulas STREAM operāciju SESSION2, un tā nekavējoties atgriezīs kļūmi:
SESSION1 >ievietot straumē atlasiet * no dbdream; Izveidotas 10 rindas. SESSION2 >saīsināt galda plūsmu; saīsināt tabulas plūsmu * KĻŪDA 1. rindā: ORA-00054: resurss aizņemts un iegūts ar norādītu NOWAIT vai taimauts beidzies versijā 11g,ORĀKULSIeviests DDL_LOCK_TIMEOUT parametrs, kas ļauj DDL slēdzenēm gaidīt DML slēdzenes, kas kontrolē laiku, kad DDL slēdzenes gaida DML slēdzenes, sekundēs, noklusējuma vērtība ir 0, tas ir, DDL slēdzenes negaida DML slēdzenes, maksimālā vērtība ir 1 miljons, tas ir, 11,5 dienas, šo parametru var iestatīt globāli vai SESSION līmenī.
SESSION2 >rādīt parametru ddl_lock_timeout NOSAUKUMA TIPA VĒRTĪBU ----------------------- ----------- ------ ddl_lock_timeout veselu skaitli 0 SESSION2 >mainīt sesiju kopu ddl_lock_timeout=2000000; KĻŪDA: ORA-00068: nederīga vērtība 2000000 parametram ddl_lock_timeout, jābūt no 0 līdz 1000000 Tālāk parādīta šāda DDL_LOCK_TIMEOUT parametra ietekme, kā arī iepriekš minētā tabula STREAM kā piemērs, pašreizējai STREAM tabulai joprojām ir DML bloķēšana, SESSION2 būs DDL_LOCK_ TIMEOUT ir iestatīts uz 60 sekundēm, un pēc tam tiek izpildīta TRUNCATE operācija, un kļūme netiks atgriezta nekavējoties, bet gaidīs 60 sekundes, un, ja STREAM tabulas DL bloķēšana netiek atbrīvota 60 sekunžu laikā, tā atgriezīs kļūmi.
SESSION2 >mainīt sesiju kopu ddl_lock_timeout=60; Sesija mainīta. SESSION2 >iestatīt laiku SESSION2 >saīsināt galda plūsmu; --Šajā brīdī SESSION2 aptur, gaida, kamēr SESSION1 atbrīvos DML bloķēšanu 60 sekunžu laikā, atgriešanās neizdevās pēc 60 sekundēm saīsināt tabulas straumi * KĻŪDA 1. rindā: ORA-00054: resurss aizņemts un iegūts ar norādītu NOWAIT vai taimauts beidzies Pagājis: 00:01:00.01 DDL_LOCK_TIMEOUT parametru parādīšanās ievērojami vienkāršo DBA darbību, piemēram, mēs vēlamies pievienot lauku tabulai, bet šajā tabulā ir daudz DML operāciju, un mēs nevaram izmantot ALTER SYSTEM KILL SESSION metodi, lai pabeigtu šīs darbības, tāpēc, ja mēs vēlamies pievienot laukus šai tabulai, mums ir jāveic lauku pievienošana neskaitāmas reizes vai jāraksta skripti, lai veiktu šo darbu, un tagad mums ir DDL_ LOCK_TIMEOUT parametru mums ir nepieciešams iestatīt tikai nedaudz lielāku šī parametra vērtību, un mums nav jāuztraucas par SQL izpildi, parādīsim šo procesu tālāk.
SESSION2 pievienot laukus:
SESSION2 >mainīt tabulas plūsmu pievienot jpg_path varchar2(255) noklusējuma '/home/Orākuls/'; 此时挂起,等待STREAM表的DML锁释放,SESSION1提交释放DML锁后,SESSION2操作便成功了。
SESSION1 > apņemties; Apņemšanās pabeigta. SESSION2 >mainīt tabulas plūsmu pievienot jpg_path varchar2(255) noklusējuma '/home/Orākuls/'; Table altered. SESSION2 >select * from stream; ID IDENTIFIER PIC_NO JPG_PATH ---------- --------------- ------ --------------- 1 18-0220-003 1 /home/Orākuls/ 2 18-0221-003 1 /home/Orākuls/ 3 18-0221-003 2 /home/Orākuls/ 4 18-0221-003 3 /home/Orākuls/ 5 18-0223-005 1 /home/Orākuls/ 6 18-0223-005 2 /home/Orākuls/ 7 18-0223-005 3 /home/Orākuls/ 8 18-0223-005 4 /home/Orākuls/ 9 18-0223-005 5 /home/Orākuls/ 10 18-0223-005 6 /home/Orākuls/ 10 rows selected.
|