Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 11117|Risposta: 0

[Fonte] Nuove funzionalità dell'ORACLE 11g - Permette alle serrature DDL di aspettare le serrature DML

[Copiato link]
Pubblicato su 26/11/2014 15:54:15 | | |
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.




Precedente:Enunciato SQL pratico: stima della data
Prossimo:Oracle ORA-12541: soluzione alternativa per errore TNS:no listener
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com