{"id":36171,"date":"2019-10-31T22:09:58","date_gmt":"2019-10-31T19:09:58","guid":{"rendered":"https:\/\/prohoster.info\/blog\/po-sledam-highload-siberia-2019-8-zadach-po-oracle\/"},"modified":"2019-10-31T22:09:58","modified_gmt":"2019-10-31T19:09:58","slug":"po-sledam-highload-siberia-2019-8-zadach-po-oracle","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/po-sledam-highload-siberia-2019-8-zadach-po-oracle","title":{"rendered":"Nach Highload++ Siberia 2019 - 8 Aufgaben zu Oracle","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hallo!<\/p>\n<p>Vom 24. bis 25. Juni fand in Nowosibirsk die Konferenz Highload++ Siberia 2019 statt. Auch unsere Leute waren dort. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.highload.ru\/siberia\/2019\/abstracts\/5211\">mit einem Vortrag<\/a><\/noindex> Die Pr\u00e4sentation \u201eContainer Datenbanken Oracle (CDB\/PDB) und ihre praktische Anwendung zur Softwareentwicklung\u201c werden wir etwas sp\u00e4ter in schriftlicher Form bereitstellen. Es war gro\u00dfartig, danke. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/olegbunin\/\" class=\"user_link\">olegbunin<\/a><\/noindex> F\u00fcr die Organisation und auch an alle, die gekommen sind. <\/p>\n<p><img decoding=\"async\" alt=\"Nach Highload++ Siberia 2019 - 8 Aufgaben zu Oracle\" src=\"\/wp-content\/uploads\/2019\/07\/27f4707d4bb5968eaaa5c4748ff467cd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nIn diesem Beitrag m\u00f6chten wir die Aufgaben teilen, die an unserem Stand waren, damit Sie Ihr Wissen \u00fcber Oracle testen k\u00f6nnen. Unter dem Beitrag finden Sie 8 Aufgaben, Antwortm\u00f6glichkeiten und Erkl\u00e4rungen.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Welchen maximalen Wert des Sequences sehen wir nach der Ausf\u00fchrung des folgenden Skripts?<\/h3>\n<p><\/p>\n<pre><code class=\"sql\">create sequence s start with 1;\n \nselect s.currval, s.nextval, s.currval, s.nextval, s.currval\nfrom dual\nconnect by level &lt;= 5;\n<\/code><\/pre>\n<p><\/p>\n<ul>\n<li>1<\/li>\n<li>5<\/li>\n<li>10<\/li>\n<li>25<\/li>\n<li>Keinen, es wird ein Fehler auftreten.<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Antwort<\/b>Laut der Oracle-Dokumentation (zitiert aus 8.1.6):<br \/>\nInnerhalb einer einzigen SQL-Anweisung erh\u00f6ht Oracle die Sequence nur einmal pro Zeile. Wenn eine Anweisung mehr als einen Verweis auf NEXTVAL f\u00fcr eine Sequence enth\u00e4lt, erh\u00f6ht Oracle die Sequence einmal und gibt denselben Wert f\u00fcr alle Vorkommen von NEXTVAL zur\u00fcck. Wenn eine Anweisung sowohl Verweise auf CURRVAL als auch NEXTVAL enth\u00e4lt, erh\u00f6ht Oracle die Sequence und gibt denselben Wert f\u00fcr sowohl CURRVAL als auch NEXTVAL zur\u00fcck, unabh\u00e4ngig von ihrer Reihenfolge innerhalb der Anweisung.<\/p>\n<p>So wurde <b>Der maximale Wert entspricht der Anzahl der Zeilen, also 5.<\/b>.<\/p>\n<h3>Wie viele Zeilen befinden sich in der Tabelle nach der Ausf\u00fchrung des folgenden Skripts?<\/h3>\n<p><\/p>\n<pre><code class=\"sql\">create table t(i integer check (i &lt; 5));\n \ncreate procedure p(p_from integer, p_to integer) as\nbegin\n    for i in p_from .. p_to loop\n        insert into t values (i);\n    end loop;\nend;\n\/\n \nexec p(1, 3);\nexec p(4, 6);\nexec p(7, 9);<\/code><\/pre>\n<p><\/p>\n<ul>\n<li>0<\/li>\n<li>3<\/li>\n<li>4<\/li>\n<li>5<\/li>\n<li>6<\/li>\n<li>9<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Antwort<\/b>Laut der Oracle-Dokumentation (zitiert aus 11.2):<\/p>\n<p>Vor der Ausf\u00fchrung einer SQL-Anweisung markiert Oracle einen impliziten Savepoint (f\u00fcr Sie nicht verf\u00fcgbar). Wenn die Anweisung fehlschl\u00e4gt, wird sie automatisch zur\u00fcckgesetzt, und der entsprechende Fehlercode wird SQLCODE in der SQLCA zur\u00fcckgegeben. Wenn beispielsweise eine INSERT-Anweisung einen Fehler verursacht, weil sie versucht, einen doppelten Wert in einen einzigartigen Index einzuf\u00fcgen, wird die Anweisung zur\u00fcckgesetzt.<\/p>\n<p>Der Aufruf des gespeicherten Verfahrens (HP) vom Client wird ebenfalls als einzelner Befehl betrachtet und behandelt. Daher wird der erste Aufruf der HP erfolgreich abgeschlossen und f\u00fcgt drei Datens\u00e4tze ein; der zweite Aufruf der HP endet mit einem Fehler und rollt den vierten Datensatz zur\u00fcck, der eingef\u00fcgt werden konnte; der dritte Aufruf endet mit einem Fehler, <b>und in der Tabelle befinden sich drei Datens\u00e4tze.<\/b>.<\/p>\n<h3>Wie viele Zeilen befinden sich in der Tabelle nach der Ausf\u00fchrung des folgenden Skripts?<\/h3>\n<p><\/p>\n<pre><code class=\"sql\">create table t(i integer, constraint i_ch check (i &lt; 3));\n \nbegin\n    insert into t values (1);\n    insert into t values (null);\n    insert into t values (2);\n    insert into t values (null);\n    insert into t values (3);\n    insert into t values (null);\n    insert into t values (4);\n    insert into t values (null);\n    insert into t values (5);\nexception\n    when others then\n        dbms_output.put_line(&#039;Oops!&#039;);\nend;\n\/<\/code><\/pre>\n<p><\/p>\n<ul>\n<li>1<\/li>\n<li>2<\/li>\n<li>3<\/li>\n<li>4<\/li>\n<li>5<\/li>\n<li>6<\/li>\n<li>7<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Antwort<\/b>Laut der Oracle-Dokumentation (zitiert aus 11.2):<\/p>\n<p>Eine \u00dcberpr\u00fcfungseinschr\u00e4nkung erm\u00f6glicht es Ihnen, eine Bedingung festzulegen, die jede Zeile in der Tabelle erf\u00fcllen muss. Um die Einschr\u00e4nkung zu erf\u00fcllen, muss jede Zeile in der Tabelle die Bedingung entweder auf TRUE oder unbekannt (aufgrund eines null-Wertes) auswerten. Wenn Oracle eine \u00dcberpr\u00fcfungseinschr\u00e4nkung f\u00fcr eine bestimmte Zeile evaluiert, beziehen sich alle Spaltennamen in der Bedingung auf die Spaltenwerte in dieser Zeile.<\/p>\n<p>So wird der null-Wert die \u00dcberpr\u00fcfung bestehen, und der anonyme Block wird erfolgreich bis zum Versuch ausgef\u00fchrt, den Wert 3 einzuf\u00fcgen. Danach wird der Fehlerbehandlungsblock die Ausnahme abfangen, es wird keine R\u00fcckf\u00fchrung stattfinden, und <b>in der Tabelle bleiben vier Zeilen<\/b> mit den Werten 1, null, 2 und erneut null.<\/p>\n<h3>Welche Wertpaare belegen im Block den gleichen Platz?<\/h3>\n<p><\/p>\n<pre><code class=\"sql\">create table t (\n    a char(1 char),\n    b char(10 char),\n    c char(100 char),\n    i number(4),\n    j number(14),\n    k number(24),\n    x varchar2(1 char),\n    y varchar2(10 char),\n    z varchar2(100 char));\n \ninsert into t (a, b, i, j, x, y)\n    values ('Y', 'Wanja', 10, 10, 'D', 'Wanja');\n<\/code><\/pre>\n<p><\/p>\n<ul>\n<li>A und X<\/li>\n<li>B und Y<\/li>\n<li>C und K<\/li>\n<li>C und Z<\/li>\n<li>K und Z<\/li>\n<li>I und J<\/li>\n<li>J und X<\/li>\n<li>Alle genannten<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Antwort<\/b>Hier sind Ausz\u00fcge aus der Dokumentation (12.1.0.2) zur Speicherung verschiedener Datentypen in Oracle.<\/p>\n<p><b>CHAR Datentyp<\/b><br \/>\nDer CHAR-Datentyp gibt eine Zeichenkette fester L\u00e4nge im Zeichensatz der Datenbank an. Sie geben den Zeichensatz der Datenbank an, wenn Sie Ihre Datenbank erstellen. Oracle stellt sicher, dass alle Werte, die in einer CHAR-Spalte gespeichert sind, die L\u00e4nge haben, die durch die Gr\u00f6\u00dfe in den gew\u00e4hlten L\u00e4ngensemantiken angegeben ist. Wenn Sie einen Wert einf\u00fcgen, der k\u00fcrzer als die Spaltenl\u00e4nge ist, wird der Wert von Oracle mit Leerzeichen auf die Spaltenl\u00e4nge aufgef\u00fcllt.<\/p>\n<p><b>VARCHAR2 Datentyp<\/b><br \/>\nDer VARCHAR2-Datentyp gibt eine Zeichenkette variabler L\u00e4nge im Zeichensatz der Datenbank an. Sie geben den Zeichensatz der Datenbank an, wenn Sie Ihre Datenbank erstellen. Oracle speichert einen Zeichenwert in einer VARCHAR2-Spalte genau so, wie Sie ihn angeben, ohne Leerzeichen, vorausgesetzt, der Wert \u00fcberschreitet nicht die L\u00e4nge der Spalte.<\/p>\n<p><b>NUMBER Datentyp<\/b><br \/>\nDer NUMBER-Datentyp speichert null sowie positive und negative feste Zahlen mit absoluten Werten von 1,0 x 10-130 bis, aber nicht einschlie\u00dflich, 1,0 x 10^126. Wenn Sie einen arithmetischen Ausdruck angeben, dessen Wert einen absoluten Wert gr\u00f6\u00dfer oder gleich 1,0 x 10^126 hat, gibt Oracle einen Fehler zur\u00fcck. Jeder NUMBER-Wert ben\u00f6tigt zwischen 1 und 22 Byte. Unter Ber\u00fccksichtigung dessen kann die Spaltengr\u00f6\u00dfe in Bytes f\u00fcr einen bestimmten numerischen Datenwert NUMBER(p), wobei p die Genauigkeit eines bestimmten Wertes ist, mit der folgenden Formel berechnet werden: <i>ROUND((length(p)+s)\\\/2))+1<\/i> wobei s null ist, wenn die Zahl positiv ist, und s eins ist, wenn die Zahl negativ ist.<\/p>\n<p>Au\u00dferdem nehmen wir einen Auszug aus der Dokumentation zur Speicherung von Null-Werten.<\/p>\n<p>Ein null ist das Fehlen eines Wertes in einer Spalte. Nullwerte zeigen fehlende, unbekannte oder nicht anwendbare Daten an. Nullwerte werden in der Datenbank gespeichert, wenn sie zwischen Spalten mit Datenwerten liegen. In diesen F\u00e4llen ben\u00f6tigen sie 1 Byte, um die L\u00e4nge der Spalte (null) zu speichern. Nachfolgende null-Werte in einer Zeile ben\u00f6tigen keinen Speicherplatz, da ein neuer Zeilenheader signalisiert, dass die verbleibenden Spalten in der vorhergehenden Zeile null sind. Wenn zum Beispiel die letzten drei Spalten einer Tabelle null sind, wird kein Datenmaterial f\u00fcr diese Spalten gespeichert.<\/p>\n<p>Aus diesen Daten ergeben sich \u00dcberlegungen. Wir gehen davon aus, dass in der DB die Codierung AL32UTF8 verwendet wird. In dieser Codierung belegen russische Buchstaben 2 Byte.<\/p>\n<p>1) A und X, der Wert des Feldes a 'Y' nimmt 1 Byte ein, der Wert des Feldes x '\u0414' \u2013 2 Bytes<br \/>\n2) B und Y, \u201aVasya\u2018 wird in b durch Leerzeichen auf 10 Zeichen erg\u00e4nzt und belegt 14 Byte, \u201aVasya\u2018 in d \u2013 belegt 8 Byte.<br \/>\n3) C und K. Beide Felder haben den Wert NULL, danach gibt es bedeutende Felder, weshalb sie jeweils 1 Byte belegen.<br \/>\n4) C und Z. Beide Felder haben den Wert NULL, aber das Feld Z ist das letzte in der Tabelle, deshalb belegt es keinen Platz (0 Byte). Feld C belegt 1 Byte.<br \/>\n5) K und Z. \u00c4hnlich wie im vorherigen Fall. Der Wert im Feld K belegt 1 Byte, im Z \u2013 0.<br \/>\n6) I und J. Laut Dokumentation belegen beide Werte je 2 Byte. Die L\u00e4nge berechnen wir nach der aus der Dokumentation entnommenen Formel: round((1 + 0)\/2) + 1 = 1 + 1 = 2.<br \/>\n7) J und X. Der Wert im Feld J belegt 2 Byte, der Wert im Feld X belegt 2 Byte.<\/p>\n<p><b>Insgesamt sind die korrekten Varianten: C und K, I und J, J und X.<\/b><\/p>\n<p><\/p>\n<h3>Wie hoch wird ungef\u00e4hr der Clustering-Faktor des Index T_I sein?<\/h3>\n<p><\/p>\n<pre><code class=\"sql\">create table t (i integer);\n \ninsert into t select rownum from dual connect by level &lt;= 10000;\n \ncreate index t_i on t(i);\n<\/code><\/pre>\n<p><\/p>\n<ul>\n<li>Im Bereich von Zehnern<\/li>\n<li>Im Bereich von Hunderten<\/li>\n<li>Im Bereich von Tausenden<\/li>\n<li>Im Bereich von Zehntausenden<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Antwort<\/b>Laut der Oracle-Dokumentation (zitiert aus 12.1):<\/p>\n<p>F\u00fcr einen B-Baum-Index misst der Clustering-Faktor des Index die physische Gruppierung von Zeilen in Relation zu einem Indexwert.<\/p>\n<p>Der Clustering-Faktor des Index hilft dem Optimierer zu entscheiden, ob ein Index-Scan oder ein vollst\u00e4ndiger Tabellen-Scan f\u00fcr bestimmte Abfragen effizienter ist. Ein niedriger Clustering-Faktor zeigt einen effizienten Index-Scan an.<\/p>\n<p>Ein Clustering-Faktor, der nahe der Anzahl der Bl\u00f6cke in einer Tabelle liegt, deutet darauf hin, dass die Zeilen physisch in den Tabellenbl\u00f6cken nach dem Indexschl\u00fcssel angeordnet sind. Wenn die Datenbank einen vollst\u00e4ndigen Tabellen-Scan durchf\u00fchrt, neigt die Datenbank dazu, die Zeilen in der Reihenfolge abzurufen, wie sie auf der Festplatte sortiert sind, basierend auf dem Indexschl\u00fcssel. Ein Clustering-Faktor, der nahe der Anzahl der Zeilen liegt, zeigt an, dass die Zeilen zuf\u00e4llig \u00fcber die Datenbankbl\u00f6cke in Beziehung zum Indexschl\u00fcssel verteilt sind. Wenn die Datenbank einen vollst\u00e4ndigen Tabellen-Scan durchf\u00fchrt, w\u00fcrde die Datenbank die Zeilen nicht in einer beliebigen sortierten Reihenfolge nach diesem Indexschl\u00fcssel abrufen.<\/p>\n<p>In diesem Fall sind die Daten ideal sortiert, daher wird der Clustering-Faktor gleich oder nahe der Anzahl der belegten Bl\u00f6cke in der Tabelle liegen. Bei einer Standardblockgr\u00f6\u00dfe von 8 Kilobyte kann man erwarten, dass in einen Block etwa tausend schmale Number-Werte passen, daher wird die Anzahl der Bl\u00f6cke und folglich der Clustering-Faktor <b>im Bereich von Zehnern<\/b>.<\/p>\n<h3>Bei welchen Werten von N wird das folgende Skript erfolgreich in einer normalen Datenbank mit Standardkonfigurationen ausgef\u00fchrt?<\/h3>\n<p><\/p>\n<pre><code class=\"sql\">create table t (\n    a varchar2(N char),\n    b varchar2(N char),\n    c varchar2(N char),\n    d varchar2(N char));\n \ncreate index t_i on t (a, b, c, d);\n<\/code><\/pre>\n<p><\/p>\n<ul>\n<li>100<\/li>\n<li>200<\/li>\n<li>400<\/li>\n<li>800<\/li>\n<li>1600<\/li>\n<li>3200<\/li>\n<li>6400<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Antwort<\/b>Laut der Oracle-Dokumentation (zitiert aus 11.2):<\/p>\n<p>Logische Datenbankgrenzen<\/p>\n<p><strong>Artikel<\/strong><br \/>\n<strong>Art der Grenze<\/strong><br \/>\n<strong>Grenzwert<\/strong><\/p>\n<p>Indizes<br \/>\nGesamtgr\u00f6\u00dfe der indizierten Spalte<br \/>\n75% der Datenbankblockgr\u00f6\u00dfe minus einigen Overhead<\/p>\n<p>\nSomit sollte die Gesamtl\u00e4nge der indizierten Spalten 6 KB nicht \u00fcberschreiten. Das Weitere h\u00e4ngt von der gew\u00e4hlten Zeichencodierung der Datenbank ab. Bei der Codierung AL32UTF8 kann ein Zeichen maximal 4 Byte belegen, sodass in 6 Kilobyte im schlimmsten Fall etwa 1500 Zeichen Platz finden. Daher wird Oracle die Erstellung eines Indexes bei N = 400 (wenn die Schl\u00fcsselgr\u00f6\u00dfe im schlimmsten Fall 1600 Zeichen * 4 Byte + L\u00e4nge des ROWID betr\u00e4gt) untersagen, w\u00e4hrend <b>bei N = 200 (und weniger)<\/b> die Erstellung eines Indexes problemlos funktioniert.<\/p>\n<h3>Der INSERT-Befehl mit dem Hint APPEND dient dazu, Daten im Direktmodus zu laden. Was passiert, wenn er auf eine Tabelle angewendet wird, an der ein Trigger h\u00e4ngt?<\/h3>\n<p><\/p>\n<ul>\n<li>Die Daten werden im Direktmodus geladen, der Trigger wird wie vorgesehen ausgel\u00f6st.<\/li>\n<li>Die Daten werden im Direktmodus geladen, aber der Trigger wird nicht ausgef\u00fchrt.<\/li>\n<li>Die Daten werden im Conventional-Modus geladen, der Trigger wird wie vorgesehen ausgel\u00f6st.<\/li>\n<li>Die Daten werden im Conventional-Modus geladen, aber der Trigger wird nicht ausgef\u00fchrt.<\/li>\n<li>Die Daten werden nicht geladen, ein Fehler wird aufgezeichnet.<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Antwort<\/b>Im Prinzip ist dies eher eine Frage der Logik. Um die richtige Antwort zu finden, w\u00fcrde ich folgendes Denkmodell vorschlagen:<\/p>\n<ol>\n<li>Das Einf\u00fcgen im Direktmodus erfolgt durch direkte Blockgenerierung ohne SQL-Engine, was hohe Geschwindigkeit gew\u00e4hrleistet. Daher ist es \u00e4u\u00dferst schwierig, den Trigger auszuf\u00fchren, wenn \u00fcberhaupt, und es macht keinen Sinn, da es die Einf\u00fcgung erheblich verlangsamen w\u00fcrde.<\/li>\n<li>Das Nichterf\u00fcllen des Triggers f\u00fchrt dazu, dass der Zustand der Datenbank insgesamt (anderer Tabellen) bei identischen Daten in der Tabelle davon abh\u00e4ngt, in welchem Modus diese Daten eingef\u00fcgt wurden. Dies w\u00fcrde die Datenintegrit\u00e4t offensichtlich gef\u00e4hrden und kann nicht als L\u00f6sung in der Produktion angewendet werden.<\/li>\n<li>Die Unm\u00f6glichkeit, die angeforderte Operation auszuf\u00fchren, wird allgemein als Fehler interpretiert. Hier sollte jedoch angemerkt werden, dass APPEND ein Hint ist, und die allgemeine Logik von Hints besagt, dass sie ber\u00fccksichtigt werden, wenn m\u00f6glich; wenn nicht, wird der Befehl ohne Ber\u00fccksichtigung des Hints ausgef\u00fchrt.<\/li>\n<\/ol>\n<p>\nSomit ist die erwartete Antwort: <b>Die Daten werden im normalen (SQL) Modus geladen, der Trigger wird ausgel\u00f6st.<\/b><\/p>\n<p>Laut der Oracle-Dokumentation (zitiert aus 8.04):<\/p>\n<p>Verst\u00f6\u00dfe gegen die Beschr\u00e4nkungen f\u00fchren dazu, dass die Anweisung seriell ausgef\u00fchrt wird, indem der konventionelle Einf\u00fcgepfad ohne Warnungen oder Fehlermeldungen verwendet wird. Eine Ausnahme bildet die Beschr\u00e4nkung von Anweisungen, die in einer Transaktion mehr als einmal auf dieselbe Tabelle zugreifen, was Fehlermeldungen ausl\u00f6sen kann.<br \/>\nWenn beispielsweise Trigger oder referenzielle Integrit\u00e4t in der Tabelle vorhanden sind, wird der APPEND-Hinweis ignoriert, wenn Sie versuchen, ein direkt geladenes INSERT (seriell oder parallel) zu verwenden, sowie der PARALLEL-Hinweis oder die Klausel, falls vorhanden.<\/p>\n<h3>Was passiert bei der Ausf\u00fchrung des folgenden Skripts?<\/h3>\n<p><\/p>\n<pre><code class=\"sql\">create table t(i integer not null primary key, j integer references t);\n \ncreate trigger t_a_i after insert on t for each row\ndeclare\n    pragma autonomous_transaction;\nbegin\n    insert into t values (:new.i + 1, :new.i);\n    commit;\nend;\n\/\n \ninsert into t values (1, null);\n<\/code><\/pre>\n<p><\/p>\n<ul>\n<li>Erfolgreiche Ausf\u00fchrung<\/li>\n<li>Fehler aufgrund eines Syntaxfehlers<\/li>\n<li>Fehler, der mit der Ung\u00fcltigkeit der autonomen Transaktion verbunden ist<\/li>\n<li>Fehler, der mit der \u00dcberschreitung der maximalen Nestung von Aufrufen verbunden ist<\/li>\n<li>Fehler, der mit der Verletzung des Fremdschl\u00fcssels verbunden ist<\/li>\n<li>Fehler, der mit Blockierungen verbunden ist<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Antwort<\/b>Die Tabelle und der Trigger werden vollkommen korrekt erstellt, und dieser Vorgang sollte nicht zu Problemen f\u00fchren. Autonome Transaktionen in Triggern sind ebenfalls erlaubt, andernfalls w\u00e4re es beispielsweise unm\u00f6glich, ein Logging durchzuf\u00fchren.<\/p>\n<p>Nach dem Einf\u00fcgen der ersten Zeile w\u00fcrde das erfolgreiche Ausl\u00f6sen des Triggers zur Einf\u00fcgung einer zweiten Zeile f\u00fchren, was wiederum den Trigger ausl\u00f6sen und eine dritte Zeile einf\u00fcgen w\u00fcrde, und so weiter, bis die Anweisung aufgrund der \u00dcberschreitung der maximalen Nestung von Aufrufen fehlerhaft w\u00fcrde. Allerdings gibt es noch einen weiteren subtilen Punkt. Zum Zeitpunkt der Ausf\u00fchrung des Triggers f\u00fcr den ersten eingef\u00fcgten Datensatz ist das Commit noch nicht ausgef\u00fchrt. Daher versucht der Trigger, der in einer autonomen Transaktion arbeitet, eine Zeile in die Tabelle einzuf\u00fcgen, die auf einen noch nicht committeten Datensatz verweist. Dies f\u00fchrt zu einer Blockierung (die autonome Transaktion wartet auf das Commit der Haupttransaktion, um zu verstehen, ob die Daten eingef\u00fcgt werden k\u00f6nnen), w\u00e4hrend die Haupttransaktion auf das Commit der autonomen Einheit wartend bleibt, um nach dem Trigger fortzufahren. <b>Es tritt ein Deadlock auf, und als Folge wird die autonome Transaktion wegen der Blockierungen abgebrochen.<\/b>.<\/p>\n<p class=\"for_users_only_msg\">Nur registrierte Benutzer k\u00f6nnen an der Umfrage teilnehmen. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Bitte einloggen<\/a><\/noindex>.<\/p>\n<h2 class=\"default-block__polling-title\">War es schwer?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    So leicht wie zwei Finger, ich habe alles sofort richtig gel\u00f6st.<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Nicht besonders, ich habe ein paar Fragen falsch beantwortet.<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Ich habe die H\u00e4lfte richtig gel\u00f6st.<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Ich habe die Antwort zweimal erraten!<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Ich werde in den Kommentaren schreiben<\/p>\n<\/li>\n<\/ul>\n<p>    14 Benutzer haben abgestimmt. 10 Benutzer haben sich enthalten.<br \/>\n<br \/>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/sportmaster_lab\/blog\/459680\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442! 24-25 \u0438\u044e\u043d\u044f \u0432 \u041d\u043e\u0432\u043e\u0441\u0438\u0431\u0438\u0440\u0441\u043a\u0435 \u043f\u0440\u043e\u0448\u043b\u0430 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f Highload++ Siberia 2019. \u041d\u0430\u0448\u0438 \u0440\u0435\u0431\u044f\u0442\u0430 \u0442\u043e\u0436\u0435 \u0442\u0430\u043c \u0431\u044b\u043b\u0438 \u0434\u043e\u043a\u043b\u0430\u0434\u043e\u043c \u00ab\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043d\u044b\u0435 \u0431\u0430\u0437\u044b Oracle (CDB\/PDB) \u0438 \u0438\u0445 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u041f\u041e\u00bb, \u043c\u044b \u0432\u044b\u043b\u043e\u0436\u0438\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0437\u0436\u0435. \u0411\u044b\u043b\u043e \u043a\u0440\u0443\u0442\u043e, \u0441\u043f\u0430\u0441\u0438\u0431\u043e olegbunin \u0437\u0430 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044e, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u0441\u0435\u043c, \u043a\u0442\u043e \u043f\u0440\u0438\u0448\u0451\u043b. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u043c\u044b \u0445\u043e\u0442\u0435\u043b\u0438 \u0431\u044b \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":27053,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-36171","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442! 24-25 \u0438\u044e\u043d\u044f \u0432 \u041d\u043e\u0432\u043e\u0441\u0438\u0431\u0438\u0440\u0441\u043a\u0435 \u043f\u0440\u043e\u0448\u043b\u0430 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f Highload++ Siberia 2019.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/po-sledam-highload-siberia-2019-8-zadach-po-oracle\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041f\u043e \u0441\u043b\u0435\u0434\u0430\u043c Highload++ Siberia 2019 \u2014 8 \u0437\u0430\u0434\u0430\u0447 \u043f\u043e Oracle | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442! 24-25 \u0438\u044e\u043d\u044f \u0432 \u041d\u043e\u0432\u043e\u0441\u0438\u0431\u0438\u0440\u0441\u043a\u0435 \u043f\u0440\u043e\u0448\u043b\u0430 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f Highload++ Siberia 2019.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/po-sledam-highload-siberia-2019-8-zadach-po-oracle\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:09:58+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:09:58+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47In den Nachkl\u00e4ngen von Highload++ Siberia 2019 \u2014 8 Aufgaben zu Oracle | ProHoster","description":"Hallo! Vom 24. bis 25. Juni fand in Nowosibirsk die Konferenz Highload++ Siberia 2019 statt.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/po-sledam-highload-siberia-2019-8-zadach-po-oracle","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041f\u043e \u0441\u043b\u0435\u0434\u0430\u043c Highload++ Siberia 2019 \u2014 8 \u0437\u0430\u0434\u0430\u0447 \u043f\u043e Oracle | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442! 24-25 \u0438\u044e\u043d\u044f \u0432 \u041d\u043e\u0432\u043e\u0441\u0438\u0431\u0438\u0440\u0441\u043a\u0435 \u043f\u0440\u043e\u0448\u043b\u0430 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f Highload++ Siberia 2019.","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/po-sledam-highload-siberia-2019-8-zadach-po-oracle","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:09:58+00:00","article:modified_time":"2019-10-31T19:09:58+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"36171","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 02:18:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:49:43","updated":"2026-01-22 02:18:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/36171","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=36171"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/36171\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/27053"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=36171"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=36171"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=36171"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}