Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 11117|Antwort: 0

[Quelle] ORACLE 11g Neue Funktionen – Ermöglicht DDL-Sperren, auf DML-Sperren zu warten

[Link kopieren]
Veröffentlicht am 26.11.2014 15:54:15 | | |
Ich habe auch schon einmal darüber geschriebenORAKEL11g neuer Artikel, jetztORAKEL11g ist zum Mainstream gewordenORAKELDatenbankversion, verstehen und lernenORAKELDie neuen Funktionen von 11G sind entscheidend, und ich auch.ORAKELFür Anfänger der neuen Funktionen von 11G möchte ich hier meinen Lernprozess und meine Erfahrungen teilen.
Dieser Artikel berichtet hauptsächlich, dass:ORAKELEine neue Funktion von 11g, die es DDL-Schlössern erlaubt, auf DML-Sperren zu warten, ein Thema, das auch von Herrn Zhang Leyi (kamus) auf der ACOUG-Veranstaltung am 30. Juni geteilt wird.
In Versionen vor 11g warten DDL-Sperren standardmäßig nicht auf DML-Sperrungen, und wenn Sie DDL-Operationen an einer Tabelle mit DML-Sperren durchführen, wird sofort ein Fehler zurückgegeben (außer bei derselben SESSION). Machen wir ein einfaches Experiment: Fügen Sie Daten in die Tabelle STREAM ein, fügen Sie in SESSION1 Daten ein, senden Sie nicht ein, zu diesem Zeitpunkt hat der Tabellen-STREAM eine DML-Sperre, führen Sie die TRUNCATE-Tabelle STREAM-Operation in SESSION2 aus, und es wird sofort ein Fehler zurückgegeben:
SESSION1 >in den Stream einfügen, wählen * aus DBDREAM; 10 Reihen erstellt. SESSION2 >Tabellenstrom abschneiden; Tabellenstrom abschneiden * FEHLER bei Zeile 1: ORA-00054: Ressource besetzt und mit NOWAIT angegeben oder Timeout abgelaufen in Version 11g,ORAKELEinführung DDL_LOCK_TIMEOUT Parameter, der DDL-Sperren erlaubt, auf DML-Sperren zu warten, die die Zeit steuern, in der DDL-Sperren auf DML-Sperren warten, in Sekunden liegt der Standardwert bei 0, das heißt, DDL-Sperren warten nicht auf DML-Sperren, der maximale Wert beträgt 1 Million, also 11,5 Tage, dieser Parameter kann global oder auf SESSION-Ebene gesetzt werden.
SESSION2 >Parameter ddl_lock_timeout NAMENSTYPWERT ----------------------- ----------- ------ ddl_lock_timeout Ganzzahl 0 SESSION2 >Sitzungsmenge ändern ddl_lock_timeout=2000000; FEHLER: ORA-00068: Ungültiger Wert 2000000 für Parameter ddl_lock_timeout, muss zwischen 0 und 1000000 liegen. Das Folgende zeigt die Wirkung des folgenden DDL_LOCK_TIMEOUT Parameters und nimmt auch die obige STREAM-Tabelle als Beispiel, die aktuelle STREAM-Tabelle hat immer noch eine DML-Sperre, in der SESSION2 wird DDL_LOCK_ TIMEOUT wird auf 60 Sekunden gesetzt, dann wird die TRUNCATE-Operation ausgeführt, wobei der Fehler nicht sofort zurückgegeben wird, sondern 60 Sekunden wartet; wenn die DL-Sperre der STREAM-Tabelle nicht innerhalb von 60 Sekunden aufgelöst wird, gibt sie einen Fehler zurück.
SESSION2 >alter Session Set ddl_lock_timeout=60; Sitzung geändert. SESSION2 >Timing auf SESSION2 >Tabellenstrom abschneiden; --An diesem Punkt pausiert SESSION2, wartet darauf, dass SESSION1 die DML-Sperre innerhalb von 60 Sekunden aufhebt, returniert nach 60 Sekunden failed und trunkiert den Tabellenstrom * FEHLER an Zeile 1: ORA-00054: Ressource besetzt und mit NOWAIT angegeben oder abgelaufener Timeout abgelaufen: 00:01:00.01 Das Entstehen DDL_LOCK_TIMEOUT Parameter vereinfacht die Funktionsweise von DBAs erheblich; zum Beispiel wollen wir ein Feld zu einer Tabelle hinzufügen, aber diese Tabelle enthält viele DML-Operationen, und wir können die ALTER SYSTEM KILL SESSION-Methode nicht verwenden, um diese Operationen zu beenden. Wenn wir also Felder zu dieser Tabelle hinzufügen wollen, müssen wir die Operation des Hinzufügens von Feldern unzählige Male durchführen oder Skripte schreiben, um diese Aufgabe zu erfüllen, und jetzt haben wir DDL_ LOCK_TIMEOUT Parameter müssen wir nur den Wert dieses Parameters etwas größer setzen und müssen uns keine Sorgen um die Ausführung von SQL machen. Zeigen wir diesen Prozess unten.
SESSION2 Felder hinzufügen:
SESSION2 >alter Table stream add jpg_path varchar2(255) default '/home/Orakel/'; 此时挂起,等待STREAM表的DML锁释放,SESSION1提交释放DML锁后,SESSION2操作便成功了。
SESSION1 >verpflichten; Commitment abgeschlossen. SESSION2 >alter Table stream add jpg_path varchar2(255) default '/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.




Vorhergehend:Praktische SQL-Aussage: Datumsschätzung
Nächster:Oracle ORA-12541: TNS:no Listener Error Workaround
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com