{"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":"Im Anschluss an Highload++ Siberia 2019 \u2013 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. Unsere Leute waren auch dort. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.highload.ru\/siberia\/2019\/abstracts\/5211\">\u00fcber<\/a><\/noindex> \u201eContainer-Datenbanken Oracle (CDB\/PDB) und deren praktische Nutzung f\u00fcr die Softwareentwicklung\u201c, wir werden sp\u00e4ter die Textversion ver\u00f6ffentlichen. Es war gro\u00dfartig, vielen Dank. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/olegbunin\/\" class=\"user_link\">olegbunin<\/a><\/noindex> f\u00fcr die Organisation sowie allen, die gekommen sind. <\/p>\n<p><img decoding=\"async\" alt=\"Im Anschluss an Highload++ Siberia 2019 \u2013 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 einige Aufgaben mit Ihnen teilen, die an unserem Stand waren, damit Sie Ihr Wissen in Oracle testen k\u00f6nnen. Nach dem Cut \u2014 8 Aufgaben, Antwortm\u00f6glichkeiten und Erkl\u00e4rungen.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Welchen maximalen Sequenzwert sehen wir als Ergebnis 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 einzelnen SQL-Anweisung wird Oracle die Sequenz nur einmal pro Zeile erh\u00f6hen. Wenn eine Anweisung mehr als einen Verweis auf NEXTVAL f\u00fcr eine Sequenz enth\u00e4lt, erh\u00f6ht Oracle die Sequenz 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 Sequenz und gibt denselben Wert f\u00fcr sowohl CURRVAL als auch NEXTVAL zur\u00fcck, unabh\u00e4ngig von deren Reihenfolge in der Anweisung.<\/p>\n<p>Daher <b>wird der maximale Wert der Anzahl der Zeilen entsprechen, also 5.<\/b>.<\/p>\n<h3>Wie viele Zeilen erscheinen in der Tabelle nach 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>Bevor Oracle eine SQL-Anweisung ausf\u00fchrt, markiert es einen impliziten Speicherpunkt (der f\u00fcr Sie nicht verf\u00fcgbar ist). Wenn die Anweisung fehlschl\u00e4gt, wird sie automatisch zur\u00fcckgerollt, und der entsprechende Fehlercode wird im SQLCODE in der SQLCA zur\u00fcckgegeben. Wenn beispielsweise eine INSERT-Anweisung einen Fehler verursacht, indem sie versucht, einen doppelten Wert in einen eindeutigen Index einzuf\u00fcgen, wird die Anweisung zur\u00fcckgerollt.<\/p>\n<p>Der Aufruf der PL\/SQL-Prozedur von einem Client aus wird ebenfalls als einzelner Befehl betrachtet und verarbeitet. Daher wird der erste Aufruf der Prozedur erfolgreich abgeschlossen und f\u00fcgt drei Eintr\u00e4ge ein; der zweite Aufruf endet mit einem Fehler und rollt den vierten Eintrag zur\u00fcck, den er bereits eingef\u00fcgt hat; der dritte Aufruf endet mit einem Fehler, <b>und es befinden sich drei Eintr\u00e4ge in der Tabelle<\/b>.<\/p>\n<h3>Wie viele Zeilen erscheinen in der Tabelle nach 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\u00fcfungsbedingung erm\u00f6glicht es Ihnen, eine Bedingung festzulegen, die jede Zeile in der Tabelle erf\u00fcllen muss. Um die Bedingung zu erf\u00fcllen, muss jede Zeile in der Tabelle die Bedingung entweder auf WAHR oder unbekannt (aufgrund eines Nullwerts) setzen. Wenn Oracle eine \u00dcberpr\u00fcfungsbedingung f\u00fcr eine bestimmte Zeile bewertet, beziehen sich alle Spaltennamen in der Bedingung auf die Spaltenwerte in dieser Zeile.<\/p>\n<p>Somit wird der Nullwert die \u00dcberpr\u00fcfung bestehen, und der anonyme Block wird erfolgreich ausgef\u00fchrt, bis versucht wird, den Wert 3 einzuf\u00fcgen. Danach l\u00f6scht der Fehlerbehandlungsblock die Ausnahme, ein Rollback erfolgt nicht, und <b>die Tabelle beh\u00e4lt vier Zeilen<\/b> mit den Werten 1, null, 2 und erneut null.<\/p>\n<h3>Welche Wertpaare belegen den gleichen Platz im Block?<\/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', 'Vasya', 10, 10, 'D', 'Vasya');\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 aufgelisteten<\/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 mit 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 in einer CHAR-Spalte gespeicherten Werte die durch die Gr\u00f6\u00dfe in der gew\u00e4hlten L\u00e4ngensemantik angegebene L\u00e4nge haben. Wenn Sie einen Wert einf\u00fcgen, der k\u00fcrzer als die Spaltenl\u00e4nge ist, dann f\u00fcllt Oracle den Wert mit Leerzeichen auf die Spaltenl\u00e4nge auf.<\/p>\n<p><b>VARCHAR2 Datentyp<\/b><br \/>\nDer VARCHAR2-Datentyp spezifiziert eine variabel lange Zeichenkette im Zeichensatz der Datenbank. Den Zeichensatz der Datenbank geben Sie bei der Erstellung Ihrer Datenbank an. Oracle speichert einen Zeichenwert in einer VARCHAR2-Spalte genau so, wie Sie ihn angeben, ohne Leerzeichen zuzuf\u00fcgen, solange der Wert die L\u00e4nge der Spalte nicht \u00fcberschreitet.<\/p>\n<p><b>DATENTYP NUMBER<\/b><br \/>\nDer DATENTYP NUMBER 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 Byte f\u00fcr einen bestimmten numerischen Datenwert NUMBER(p), wobei p die Pr\u00e4zision eines bestimmten Wertes ist, mit folgender Formel berechnet werden: <i>ROUND((length(p)+s)\/2))+1<\/i> wobei s null ist, wenn die Zahl positiv ist, und s gleich 1, wenn die Zahl negativ ist.<\/p>\n<p>Au\u00dferdem nehmen wir einen Auszug aus der Dokumentation \u00fcber die Speicherung von Nullwerten.<\/p>\n<p>Ein Nullwert 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 zur Speicherung der L\u00e4nge der Spalte (null). Anh\u00e4ngende Nullwerte in einer Zeile ben\u00f6tigen keinen Speicherplatz, da ein neuer Zeilenheader signalisiert, dass die verbleibenden Spalten in der vorherigen Zeile null sind. Wenn beispielsweise die letzten drei Spalten einer Tabelle null sind, wird f\u00fcr diese Spalten keine Daten gespeichert.<\/p>\n<p>Ausgehend von diesen Daten f\u00fchren wir \u00dcberlegungen an. Wir nehmen an, dass in der DB die Codierung AL32UTF8 verwendet wird. In dieser Codierung nehmen die russischen Buchstaben 2 Byte in Anspruch.<\/p>\n<p>1) A und X, der Wert des Feldes a &#8216;Y&#8217; belegt 1 Byte, der Wert des Feldes x \u2018\u0414\u2019 \u2013 2 Bytes<br \/>\n2) B und Y, \u2018\u0412\u0430\u0441\u044f\u2019 im b-Wert wird mit Leerzeichen auf 10 Zeichen aufgef\u00fcllt und ben\u00f6tigt 14 Bytes, \u2018\u0412\u0430\u0441\u044f\u2019 im d ben\u00f6tigt 8 Bytes.<br \/>\n3) C und K. Beide Felder haben den Wert NULL, davor sind bedeutende Felder, daher ben\u00f6tigen sie jeweils 1 Byte.<br \/>\n4) C und Z. Beide Felder haben den Wert NULL, aber Feld Z ist das letzte in der Tabelle, daher ben\u00f6tigt es keinen Platz (0 Bytes). Feld C ben\u00f6tigt 1 Byte.<br \/>\n5) K und Z. \u00c4hnlich wie im vorherigen Fall. Der Wert im Feld K ben\u00f6tigt 1 Byte, im Z ben\u00f6tigt es 0.<br \/>\n6) I und J. Laut Dokumentation ben\u00f6tigen beide Werte jeweils 2 Bytes. Die L\u00e4nge wird gem\u00e4\u00df der in der Dokumentation angegebenen Formel berechnet: round((1 + 0)\/2) +1 = 1 + 1 = 2.<br \/>\n7) J und X. Der Wert im Feld J ben\u00f6tigt 2 Bytes, der Wert im Feld X ben\u00f6tigt 2 Bytes.<\/p>\n<p><b>Insgesamt sind die korrekten Kombinationen: 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>In der Gr\u00f6\u00dfenordnung von Dutzenden<\/li>\n<li>In der Gr\u00f6\u00dfenordnung von Hunderten<\/li>\n<li>In der Gr\u00f6\u00dfenordnung von Tausenden<\/li>\n<li>In der Gr\u00f6\u00dfenordnung von Zehntausenden<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Antwort<\/b>Laut 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 Bezug auf einen Indexwert.<\/p>\n<p>Der Clusterfaktor des Index hilft dem Optimierer zu entscheiden, ob ein Index-Scan oder ein vollst\u00e4ndiger Tabellenscan f\u00fcr bestimmte Abfragen effizienter ist. Ein niedriger Clusterfaktor weist auf einen effizienten Index-Scan hin.<\/p>\n<p>Ein Clusterfaktor, der nahe der Anzahl der Bl\u00f6cke in einer Tabelle liegt, zeigt an, dass die Zeilen physisch in den Tabellenbl\u00f6cken nach dem Indexschl\u00fcssel geordnet sind. Wenn die Datenbank einen vollst\u00e4ndigen Tabellenscan durchf\u00fchrt, tendiert sie dazu, die Zeilen in der Reihenfolge abzurufen, in der sie auf der Festplatte nach dem Indexschl\u00fcssel gespeichert sind. Ein Clusterfaktor, der nahe der Anzahl der Zeilen liegt, weist darauf hin, dass die Zeilen zuf\u00e4llig \u00fcber die Datenbankbl\u00f6cke in Bezug auf den Indexschl\u00fcssel verteilt sind. Wenn die Datenbank einen vollst\u00e4ndigen Tabellenscan durchf\u00fchrt, w\u00fcrde sie die Zeilen nicht in einer sortierten Reihenfolge gem\u00e4\u00df diesem Indexschl\u00fcssel abrufen.<\/p>\n<p>In diesem Fall sind die Daten perfekt sortiert, sodass der Clusterfaktor gleich oder nahe der Anzahl der belegten Bl\u00f6cke in der Tabelle liegt. Bei einer Standardblockgr\u00f6\u00dfe von 8 Kilobyte kann man erwarten, dass etwa tausend schmale Zahlenwerte in einen Block passen, sodass die Anzahl der Bl\u00f6cke und folglich der Clusterfaktor <b>im Bereich von wenigen Dutzend liegt.<\/b>.<\/p>\n<h3>Bei welchen Werten von N wird das folgende Skript erfolgreich auf 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>Element<\/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 Gr\u00f6\u00dfe des Datenbankblocks abz\u00fcglich eines gewissen Overheads<\/p>\n<p>\nDer Gesamtdatenumfang der indizierten Spalten sollte 6 KB nicht \u00fcberschreiten. Alles Weitere h\u00e4ngt von der gew\u00e4hlten Datenbankkodierung ab. Bei der Kodierung AL32UTF8 kann ein Zeichen maximal 4 Bytes belegen, was bedeutet, dass in 6 Kilobyte im schlimmsten Fall etwa 1500 Zeichen Platz finden. Daher wird Oracle die Erstellung eines Indexes bei N = 400 verbieten (wenn die Schl\u00fcsselgr\u00f6\u00dfe im schlechtesten Fall 1600 Zeichen * 4 Byte + die L\u00e4nge von rowid betr\u00e4gt), w\u00e4hrend <b>bei N = 200 (oder weniger)<\/b> die Erstellung des Indexes problemlos funktioniert.<\/p>\n<h3>Der INSERT-Befehl mit dem HINT APPEND dient zum Laden von Daten im Direct-Modus. Was passiert, wenn er auf eine Tabelle angewendet wird, die einen Trigger hat?<\/h3>\n<p><\/p>\n<ul>\n<li>Die Daten werden im Direct-Modus geladen, der Trigger wird wie vorgesehen ausgel\u00f6st.<\/li>\n<li>Die Daten werden im Direct-Modus geladen, der Trigger wird jedoch 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, der Trigger wird jedoch nicht ausgef\u00fchrt.<\/li>\n<li>Die Daten werden nicht geladen, es tritt ein Fehler auf.<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Antwort<\/b>Im Grunde genommen ist dies eine Frage der Logik. Um die richtige Antwort zu finden, w\u00fcrde ich folgendes Denkmodell vorschlagen:<\/p>\n<ol>\n<li>Der Direktmodus der Daten\u00fcbertragung erfolgt durch die direkte Bildung von Datenbl\u00f6cken, ohne den SQL-Engine, was eine hohe Geschwindigkeit garantiert. Daher ist es sehr schwierig, einen Trigger auszuf\u00fchren, wenn nicht sogar unm\u00f6glich, und es macht keinen Sinn, da er die Einf\u00fcgung ohnehin stark 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 spezifischen Modus diese Daten eingef\u00fcgt wurden. Dies w\u00fcrde die Datenintegrit\u00e4t offensichtlich gef\u00e4hrden und kann nicht als L\u00f6sung im Produktionsumfeld verwendet werden.<\/li>\n<li>Die Unm\u00f6glichkeit, die angeforderte Operation auszuf\u00fchren, wird allgemein als Fehler interpretiert. Hier sollte jedoch bedacht werden, dass APPEND ein Hinweis ist, und die allgemeine Logik von Hinweisen besteht darin, dass sie ber\u00fccksichtigt werden, wenn dies m\u00f6glich ist. Andernfalls wird der Operator ohne Ber\u00fccksichtigung des Hinweises ausgef\u00fchrt.<\/li>\n<\/ol>\n<p>\nSomit lautet die erwartete Antwort \u2013 <b>die Daten werden im normalen (SQL-) Modus geladen, der Trigger wird ausgel\u00f6st.<\/b><\/p>\n<p>Laut der Oracle-Dokumentation (zitiert von 8.04):<\/p>\n<p>Verst\u00f6\u00dfe gegen die Beschr\u00e4nkungen f\u00fchren dazu, dass die Anweisung seriell ausgef\u00fchrt wird, wobei der konventionelle Einf\u00fcgepfad ohne Warnungen oder Fehlermeldungen verwendet wird. Eine Ausnahme bildet die Beschr\u00e4nkung f\u00fcr Anweisungen, die in einer Transaktion mehr als einmal auf dasselbe Tabellenobjekt zugreifen, was Fehlermeldungen verursachen kann.<br \/>\nWenn beispielsweise Trigger oder referentielle Integrit\u00e4t auf der Tabelle vorhanden sind, wird der APPEND-Hinweis ignoriert, wenn Sie versuchen, den direkten Lade-Einf\u00fcge-Befehl (seriell oder parallel) zu verwenden, ebenso wie den 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 Verschachtelungstiefe verbunden ist<\/li>\n<li>Fehler, der mit einer Verletzung des Fremdschl\u00fcssels verbunden ist<\/li>\n<li>Fehler, der mit Sperren verbunden ist<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Antwort<\/b>Die Tabelle und der Trigger werden korrekt erstellt, und diese Operation sollte keine Probleme verursachen. Autonome Transaktionen im Trigger sind ebenfalls erlaubt, da sonst beispielsweise ein Logging nicht m\u00f6glich w\u00e4re.<\/p>\n<p>Nach dem Einf\u00fcgen der ersten Zeile w\u00fcrde das erfolgreiche Ausl\u00f6sen des Triggers zum Einf\u00fcgen der zweiten Zeile f\u00fchren, woraufhin der Trigger erneut ausgel\u00f6st w\u00fcrde, die dritte Zeile eingef\u00fcgt w\u00fcrde und so weiter, bis die Anweisung aufgrund der maximalen Verschachtelung von Aufrufen fehlschl\u00e4gt. Allerdings gibt es noch einen weiteren kniffligen Punkt. Zum Zeitpunkt der Ausf\u00fchrung des Triggers f\u00fcr den ersten eingef\u00fcgten Datensatz war das Commit noch nicht durchgef\u00fchrt. Daher versucht der Trigger, der in einer autonomen Transaktion arbeitet, eine Zeile in die Tabelle einzuf\u00fcgen, die \u00fcber einen Fremdschl\u00fcssel auf einen noch nicht abgeschlossenen Datensatz verweist. Dies f\u00fchrt zu einer Wartesituation (die autonome Transaktion wartet auf das Commit der Haupttransaktion, um zu entscheiden, ob die Daten eingef\u00fcgt werden k\u00f6nnen), w\u00e4hrend gleichzeitig die Haupttransaktion auf das Commit der autonomen Transaktion wartet, um nach dem Trigger fortzufahren. <b>Es entsteht ein Deadlock, und als Folge wird die autonome Transaktion aufgrund von 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 melden Sie sich an.<\/a><\/noindex>Sind Sie an Contour interessiert?<\/p>\n<h2 class=\"default-block__polling-title\">War das schwierig?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Wie zwei Finger, habe sofort alles richtig entschieden.<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Nicht besonders, habe mich bei ein paar Fragen vertan.<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Habe die H\u00e4lfte richtig gel\u00f6st.<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Ich habe zweimal die Antwort 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>    Es haben 14 Nutzer abgestimmt. 10 Nutzer 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 4.9.10 - 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. \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\" \/>\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) 4.9.10\" \/>\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. \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\" \/>\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\udd47Im Anschluss an Highload++ Siberia 2019 \u2013 8 Herausforderungen zu Oracle | ProHoster","description":"Hallo! Vom 24. bis 25. Juni fand in Nowosibirsk die Konferenz Highload++ Siberia 2019 statt. Unser Team war auch dort mit einem Vortrag \u00fcber \"Container-Datenbanken von Oracle (CDB\/PDB) und deren praktische Nutzung zur Softwareentwicklung\" vertreten. Die textliche Version werden wir sp\u00e4ter ver\u00f6ffentlichen. Es war gro\u00dfartig, danke an olegbunin f\u00fcr die Organisation und auch an alle, die gekommen sind. In diesem Beitrag m\u00f6chten wir die Herausforderungen teilen, die","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. \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","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"},"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}]}}