Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 11210|Svare: 0

[Kilde] ORACLE 11g Nye funksjoner - Lar DDL-låser vente på DML-låser

[Kopier lenke]
Publisert på 26.11.2014 15:54:15 | | |
Jeg har også skrevet om det førORAKLE11g ny artikkel om nye funksjoner, nåORAKLE11g har blitt mainstreamORAKLEdatabaseversjon, forstå og lærORAKLEDe nye funksjonene i 11G er avgjørende, og det er jeg også.ORAKLEFor nybegynnere med 11Gs nye funksjoner, vil jeg gjerne dele min læringsprosess og erfaring her.
Denne artikkelen registrerer hovedsakelig at:ORAKLEEn ny funksjon i 11g som lar DDL-låser vente på DML-låser, noe som også er et tema delt av Mr. Zhang Leyi (kamus) på ACOUG-arrangementet 30. juni.
I versjoner før 11g venter som standard ikke DDL-låser på DML-låser, og hvis du utfører DDL-operasjoner på en tabell med DML-låser, vil den umiddelbart returnere en feil (bortsett fra for samme SESSION), la oss gjøre et enkelt eksperiment, sett inn data i tabellen STREAM i SESSION1, ikke send inn, på dette tidspunktet vil tabell-STREAM ha en DML-lås, og utføre TRUNCATE-tabellen STREAM-operasjonen i SESSION2, og den vil umiddelbart returnere en feil:
SESSION1 >sett inn i strømmen velg * fra dbdream; 10 rader opprettet. SESSION2 >forkorte tabellstrømmen; trunkere tabellstrøm * FEIL på linje 1: ORA-00054: ressurs opptatt og hent med NOWAIT spesifisert eller timeout utløpt i versjon 11g,ORAKLEIntroduserte DDL_LOCK_TIMEOUT parameter, som tillater DDL-låser å vente på DML-låser, som kontrollerer tiden DDL-låser må vente på DML-låser, i sekunder er standardverdien 0, det vil si DDL-låser venter ikke på DML-låser, maksimal verdi er 1 million, det vil si 11,5 dager, denne parameteren kan settes globalt eller på SESSION-nivå.
SESSION2 >vis parameter ddl_lock_timeout NAVNETYPEVERDI ----------------------- ----------- ------ ddl_lock_timeout heltall 0 SESSION2 >endre sesjonssett ddl_lock_timeout=2000000; FEIL: ORA-00068: ugyldig verdi 20000000 for parameter ddl_lock_timeout, må være mellom 0 og 1000000 Følgende demonstrerer effekten av følgende DDL_LOCK_TIMEOUT parameter, og tar også STREAM-tabellen ovenfor som eksempel, den nåværende STREAM-tabellen har fortsatt en DML-lås, i SESSION2 vil være DDL_LOCK_ TIMEOUT settes til 60 sekunder, og deretter utføres TRUNCATE-operasjonen, og feilen vil ikke bli returnert umiddelbart, men vil vente i 60 sekunder, og hvis DL-låsen i STREAM-tabellen ikke frigjøres innen 60 sekunder, vil den returnere en feil.
SESSION2 >alter session sett ddl_lock_timeout=60; Økt endret. SESSION2 >sett timing på SESSION2 >avkorte tabellstrømmen; --På dette tidspunktet suspenderer SESSION2, venter på at SESSION1 skal frigjøre DML-låsen innen 60 sekunder, returnerer feilet etter 60 sekunder og trunkerer tabellstrømmen * FEIL på linje 1: ORA-00054: ressurs opptatt og henter med NOWAIT spesifisert eller timeout utløpt Elapsed: 00:01:00.01 Fremveksten av DDL_LOCK_TIMEOUT parametere forenkler operasjonen til DBA-er betydelig, for eksempel ønsker vi å legge til et felt i en tabell, men denne tabellen har mange DML-operasjoner, og vi kan ikke bruke ALTER SYSTEM KILL SESSION-metoden for å avslutte disse operasjonene, så hvis vi vil legge til felt i denne tabellen, må vi utføre operasjonen med å legge til felt utallige ganger, eller skrive skript for å utføre denne jobben, og nå har vi DDL_ LOCK_TIMEOUT parameter trenger vi bare å sette verdien av denne parameteren litt større, og vi trenger ikke bekymre oss for å kjøre SQL, la oss demonstrere denne prosessen nedenfor.
SESSION2 legger til felt:
SESSION2 >alter table stream legg til jpg_path varchar2(255) standard '/home/Orakel/'; 此时挂起,等待STREAM表的DML锁释放,SESSION1提交释放DML锁后,SESSION2操作便成功了。
SESSION1 >forplikte; Forpliktelse fullført. SESSION2 >alter table stream legg til jpg_path varchar2(255) standard '/home/Orakel/'; Table altered. SESSION2 >select * from stream; ID IDENTIFIER PIC_NO JPG_PATH ---------- --------------- ------ --------------- 1 18-0220-003 1 /home/Orakel/ 2 18-0221-003 1 /home/Orakel/ 3 18-0221-003 2 /home/Orakel/ 4 18-0221-003 3 /home/Orakel/ 5 18-0223-005 1 /home/Orakel/ 6 18-0223-005 2 /home/Orakel/ 7 18-0223-005 3 /home/Orakel/ 8 18-0223-005 4 /home/Orakel/ 9 18-0223-005 5 /home/Orakel/ 10 18-0223-005 6 /home/Orakel/ 10 rows selected.




Foregående:Praktisk SQL-setning: datoestimering
Neste:Oracle ORA-12541: TNS:no listener error workaround
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com