Ne ho anche scritto in passatoORACLEArticolo sulle nuove caratteristiche di 11g, oraORACLEL'11g è diventato mainstreamORACLEVersione del database, comprendi e imparaORACLELe nuove funzionalità del 11G sono fondamentali, e lo sono anch'ioORACLEPer i principianti delle nuove funzionalità di 11G, vorrei condividere qui il mio processo di apprendimento ed esperienza.
Questo articolo riporta principalmente che:ORACLEUna nuova funzione del 11g che permette alle serrature DDL di attendere quelle DML, tema condiviso anche dal signor Zhang Leyi (kamus) all'evento ACOUG del 30 giugno.
Nelle versioni precedenti a 11g, di default, i lock DDL non attendono i lock DML, e se esegui operazioni DDL su una tabella con lock DML, restituirà immediatamente un fallimento (tranne per la stessa SESSION), facciamo un semplice esperimento, inseriamo dati nella tabella STREAM in SESSION1, non inviare, a questo punto il table STREAM avrà un blocco DML, ed esegui l'operazione TRUNCATE table STREAM in SESSION2, e restituirà immediatamente un fallimento:
SESSION1 >inserisci nello stream seleziona * da dbdream; 10 righe create. SESSION2 >troncare il flusso della tavola; troncare flusso di tabella * ERRORE alla riga 1: ORA-00054: resource busy and acquire con NOWAIT specificato o timeout scaduto nella versione 11g,ORACLEIntrodotto DDL_LOCK_TIMEOUT parametro, che permette ai blocchi DDL di attendere i blocchi DML, che controllano il tempo in cui i blocchi DDL devono aspettare i blocchi DML, in pochi secondi il valore predefinito è 0, cioè i blocchi DDL non attendono i blocchi DML, il valore massimo è 1 milione, cioè 11,5 giorni; questo parametro può essere impostato globalmente o a livello SESSION.
SESSION2 >parametro di mostra ddl_lock_timeout NOME TIPO VALORE ----------------------- ----------- ------ ddl_lock_timeout intero 0 SESSION2 >altera sessione set ddl_lock_timeout=2000000; ERRORE: ORA-00068: valore invalido 2000000 per il parametro ddl_lock_timeout, deve essere tra 0 e 1000000 Il seguente dimostra l'effetto del seguente parametro DDL_LOCK_TIMEOUT e prende anche come esempio la tabella STREAM sopra, la tabella STREAM corrente ha ancora un blocco DML, nel SESSION2 sarà DDL_LOCK_ TIMEOUT è impostato a 60 secondi, poi viene eseguita l'operazione TRUNCATE, e il fallimento non verrà restituito immediatamente, ma aspetterà 60 secondi; se il blocco DL della tabella STREAM non viene rilasciato entro 60 secondi, restituirà un fallimento.
SESSION2 >altera sessione set ddl_lock_timeout=60; Sessione cambiata. SESSION2 >imposta la tempistica su SESSION2 >tronca il flusso della tabella; --A questo punto, SESSION2 sospende, aspetta che SESSION1 rilasci il blocco DML entro 60 secondi, ritorna fallito dopo 60 secondi tronca il flusso della tabella * ERRORE alla riga 1: ORA-00054: resource busy and acquire con NOWAIT specificato o timeout scaduto Elapsed: 00:01:00.01 L'emergere di DDL_LOCK_TIMEOUT parametri semplifica notevolmente il funzionamento dei DBA, ad esempio, vogliamo aggiungere un campo a una tabella, ma questa tabella ha molte operazioni DML, e non possiamo usare il metodo ALTER SYSTEM KILL SESSION per terminare queste operazioni, quindi se vogliamo aggiungere campi a questa tabella, dobbiamo eseguire l'operazione di aggiungere campi innumerevoli volte, o scrivere script per svolgere questo lavoro, e ora abbiamo DDL_ LOCK_TIMEOUT parametro, dobbiamo solo aumentare leggermente il valore di questo parametro, e non dobbiamo preoccuparci di eseguire SQL, dimostriamo questo processo qui sotto.
SESSION2 aggiungere campi:
SESSION2 >alter table stream add jpg_path varchar2(255) predefinito '/home/oracolo/'; 此时挂起,等待STREAM表的DML锁释放,SESSION1提交释放DML锁后,SESSION2操作便成功了。
SESSION1 >impegno; Commit completato. SESSION2 >alter table stream add jpg_path varchar2(255) predefinito '/home/oracolo/'; Table altered. SESSION2 >select * from stream; ID IDENTIFIER PIC_NO JPG_PATH ---------- --------------- ------ --------------- 1 18-0220-003 1 /home/oracolo/ 2 18-0221-003 1 /home/oracolo/ 3 18-0221-003 2 /home/oracolo/ 4 18-0221-003 3 /home/oracolo/ 5 18-0223-005 1 /home/oracolo/ 6 18-0223-005 2 /home/oracolo/ 7 18-0223-005 3 /home/oracolo/ 8 18-0223-005 4 /home/oracolo/ 9 18-0223-005 5 /home/oracolo/ 10 18-0223-005 6 /home/oracolo/ 10 rows selected.
|