Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 11117|Svar: 0

[Kilde] ORACLE 11g Nye funktioner - Tillader DDL-låse at vente på DML-låse

[Kopier link]
Opslået på 26/11/2014 15.54.15 | | |
Jeg har også skrevet om det førORAKEL11g ny feature-artikel, nuORAKEL11g er blevet mainstreamORAKELdatabaseversion, forstå og læreORAKELDe nye funktioner i 11G er afgørende, og det er jeg ogsåORAKELFor begyndere med 11G's nye funktioner vil jeg gerne dele min læringsproces og erfaring her.
Denne artikel nævner hovedsageligt, at:ORAKELEn ny funktion i 11g, der tillader DDL-lås at vente på DML-låse, hvilket også er et tema, der deles af hr. Zhang Leyi (kamus) ved ACOUG-arrangementet den 30. juni.
I versioner før 11g venter DDL-låse som standard ikke på DML-låse, og hvis du udfører DDL-operationer på en tabel med DML-låse, vil den straks returnere en fejl (undtagen den samme SESSION). Lad os lave et simpelt eksperiment: indsæt data i tabellen STREAM i SESSION1, indsend ikke, på dette tidspunkt vil tabel-STREAM have en DML-lås, og udfør TRUNCATE-tabellen STREAM-operationen i SESSION2, og den vil straks returnere en fejl:
SESSION1 >indsæt i stream, vælg * fra dbdream; 10 rækker oprettet. SESSION2 >afkort tabelstrøm; afkort tabelstrøm * FEJL på linje 1: ORA-00054: ressource optaget og erhverv med NOWAIT angivet eller timeout udløbet i version 11g,ORAKELIndførte DDL_LOCK_TIMEOUT parameter, der tillader DDL-låse at vente på DML-låse, som styrer tiden for DDL-låse til at vente på DML-låse, i sekunder er standardværdien 0, det vil sige, DDL-låse venter ikke på DML-låse, den maksimale værdi er 1 million, det vil sige 11,5 dage, denne parameter kan sættes globalt eller på SESSION-niveau.
SESSION2 >vis parameter ddl_lock_timeout NAVNETYPEVÆRDI ----------------------- ----------- ------ ddl_lock_timeout heltal 0 SESSION2 >ændre sessionsmængde ddl_lock_timeout=2000000; FEJL: ORA-00068: ugyldig værdi 2000000 for parameter ddl_lock_timeout, skal være mellem 0 og 1000000 Følgende demonstrerer effekten af følgende DDL_LOCK_TIMEOUT parameter og tager også ovenstående STREAM-tabel som eksempel, den nuværende STREAM-tabel har stadig en DML-lås, i SESSION2 vil være DDL_LOCK_ TIMEOUT sættes til 60 sekunder, og derefter udføres TRUNCATE-operationen, og fejlen returneres ikke med det samme, men venter i 60 sekunder, og hvis DL-låsen i STREAM-tabellen ikke frigives inden for 60 sekunder, vil den returnere en fejl.
SESSION2 >alter session sæt ddl_lock_timeout=60; Sessionen ændret. SESSION2 > indstil timing på SESSION2 >afkort tabelstrøm; --På dette tidspunkt suspenderer SESSION2, venter på, at SESSION1 frigiver DML-låsen inden for 60 sekunder, returnerer fejl efter 60 sekunder og afkorter tabelstrømmen * FEJL på linje 1: ORA-00054: ressource optaget og erhverv med NOWAIT specificeret eller timeout udløbet Elapsed: 00:01:00.01 Fremkomsten af DDL_LOCK_TIMEOUT parametre forenkler i høj grad DBA'ernes operation; for eksempel vil vi tilføje et felt til en tabel, men denne tabel har mange DML-operationer, og vi kan ikke bruge ALTER SYSTEM KILL SESSION-metoden til at afslutte disse operationer, så hvis vi vil tilføje felter til denne tabel, skal vi udføre operationen med at tilføje felter utallige gange eller skrive scripts til at udføre denne opgave, og nu har vi DDL_ LOCK_TIMEOUT parameter behøver vi kun at sætte værdien af denne parameter lidt større, og vi behøver ikke bekymre os om at udføre SQL, lad os demonstrere denne proces nedenfor.
SESSION2 tilføjer felter:
SESSION2 >alter table stream tilføj jpg_path varchar2(255) standard '/home/Orakel/'; 此时挂起,等待STREAM表的DML锁释放,SESSION1提交释放DML锁后,SESSION2操作便成功了。
SESSION1 >forpligte; Forpligtelse fuldført. SESSION2 >alter table stream tilføj 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.




Tidligere:Praktisk SQL-sætning: datoestimering
Næste:Oracle ORA-12541: TNS:no listener error workaround
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com