Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 11117|Vastaus: 0

[Lähde] ORACLE 11g Uudet ominaisuudet – Sallii DDL-lukkojen odottaa DML-lukkoja

[Kopioi linkki]
Julkaistu 26.11.2014 15.54.15 | | |
Olen myös kirjoittanut siitä aiemminORACLE11G Uudet ominaisuudet -artikkeli, nytORACLE11g on tullut valtavirtaanORACLETietokantaversio, ymmärrä ja opiORACLE11G:n uudet ominaisuudet ovat ratkaisevan tärkeitä, samoin minäORACLE11G:n uusien ominaisuuksien aloittelijoille haluaisin jakaa oppimisprosessini ja kokemukseni täällä.
Tämä artikkeli mainitsee pääasiassa seuraavaa:ORACLE11g:n uusi ominaisuus, joka sallii DDL-lukkojen odottaa DML-lukkoja, ja tämä on myös teema, jonka herra Zhang Leyi (kamus) jakoi ACOUG-tapahtumassa 30. kesäkuuta.
Versioissa ennen 11g:tä DDL-lukot eivät oletuksena odota DML-lukkoja, ja jos suoritat DDL-operaatioita DML-lukkoja sisältävällä taulukolla, se palauttaa välittömästi virheen (paitsi saman SESSIONin kohdalla), tehdään yksinkertainen koe, lisätään data taulukkoon STREAM SESSION1, ei lähetä, tällä hetkellä taululla STREAM on DML-lukko, ja suoritetaan TRUNCATE-taulun STREAM-operaatio SESSION2:ssa, jolloin se palauttaa välittömästi virheen:
SESSION1 >lisää stream selectiin * dbdreamista; 10 riviä luotu. SESSION2 >lyhennetty taulukkovirta; Trunkcate table stream * ERROR rivillä 1: ORA-00054: resource busy and acquire with NOWAIT (NOWAIT) tai aikakatkaisu versiossa 11g,ORACLEDDL_LOCK_TIMEOUT-parametri, joka sallii DDL-lukkojen odottaa DML-lukkoja, jotka säätelevät DDL-lukkojen odotusaikaa, sekunneissa oletusarvo on 0, eli DDL-lukot eivät odota DML-lukkoja, maksimiarvo on 1 miljoona, eli 11,5 päivää, tämä parametri voidaan asettaa globaalisti tai SESSION-tasolla.
SESSION2 >näytä parametri ddl_lock_timeout NIMITYYPIN ARVO ----------------------- ----------- ------ ddl_lock_timeout kokonaisluku 0 SESSION2 >muuta istuntojoukkoa ddl_lock_timeout=2000000; VIRHE: ORA-00068: virheellinen arvo 2000000 parametrille ddl_lock_timeout, täytyy olla välillä 0 ja 1000000. Seuraava havainnollistaa seuraavan DDL_LOCK_TIMEOUT-parametrin vaikutuksen ja ottaa myös yllä olevan STREAM-taulukon esimerkkinä, nykyisessä STREAM-taulukossa on edelleen DML-lukko, SESSION2 on DDL_LOCK_ TIMEOUT asetetaan 60 sekunniksi, minkä jälkeen TRUNCATE-operaatio suoritetaan, eikä epäonnistumista palauteta heti, vaan odotetaan 60 sekuntia, ja jos STREAM-taulukon DL-lukkoa ei vapauteta 60 sekunnin kuluessa, se palauttaa virheen.
SESSION2 >alter session setin ddl_lock_timeout=60; Istunto muutettu. SESSION2 >aseta ajoitus SESSION2 >lyhennettyyn taulukkovirtaan; --Tässä vaiheessa SESSION2 keskeytetään, odottaa, että SESSION1 vapauttaa DML-lukon 60 sekunnin sisällä, palautukset epäonnistuvat 60 sekunnin jälkeen, tauluvirran karsiminen * VIRHE rivillä 1: ORA-00054: resurssi varattu ja hanki NOWAIT määritellyllä tai aikakatkaisu päättyy Kulunut: 00:01:00.01 DDL_LOCK_TIMEOUT parametrien syntyminen yksinkertaistaa huomattavasti DBA:iden toimintaa, esimerkiksi haluamme lisätä kentän taulukkoon, mutta tässä taulukossa on paljon DML-operaatioita, emmekä voi käyttää ALTER SYSTEM KILL SESSION -metodia näiden operaatioiden lopettamiseen, joten jos haluamme lisätä kenttiä tähän taulukkoon, meidän täytyy lisätä kenttiä lukemattomia kertoja tai kirjoittaa skriptejä tätä varten, ja nyt meillä on DDL_ LOCK_TIMEOUT parametrin vuoksi meidän tarvitsee vain asettaa tämän parametrin arvo hieman suuremmaksi, eikä tarvitse huolehtia SQL:n suorittamisesta, näytetään tämä prosessi alla.
SESSION2 lisää kenttiä:
SESSION2 >alter table stream add jpg_path varchar2(255) default '/home/oraakkeli/'; 此时挂起,等待STREAM表的DML锁释放,SESSION1提交释放DML锁后,SESSION2操作便成功了。
SESSION1 >sitoumus; Sitoudu valmiiksi. SESSION2 >alter table stream add jpg_path varchar2(255) default '/home/oraakkeli/'; Table altered. SESSION2 >select * from stream; ID IDENTIFIER PIC_NO JPG_PATH ---------- --------------- ------ --------------- 1 18-0220-003 1 /home/oraakkeli/ 2 18-0221-003 1 /home/oraakkeli/ 3 18-0221-003 2 /home/oraakkeli/ 4 18-0221-003 3 /home/oraakkeli/ 5 18-0223-005 1 /home/oraakkeli/ 6 18-0223-005 2 /home/oraakkeli/ 7 18-0223-005 3 /home/oraakkeli/ 8 18-0223-005 4 /home/oraakkeli/ 9 18-0223-005 5 /home/oraakkeli/ 10 18-0223-005 6 /home/oraakkeli/ 10 rows selected.




Edellinen:Käytännön SQL-lause: päivämäärän estimointi
Seuraava:Oracle ORA-12541: TNS:ei kuuntelijavirheen kiertotietä
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com