{"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\/es\/blog\/administrirovanie\/po-sledam-highload-siberia-2019-8-zadach-po-oracle","title":{"rendered":"A ra\u00edz de Highload++ Siberia 2019 \u2014 8 tareas sobre Oracle","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>\u00a1Hola!<\/p>\n<p>Los d\u00edas 24 y 25 de junio tuvo lugar en Novosibirsk la conferencia Highload++ Siberia 2019. Nuestro equipo tambi\u00e9n estuvo presente. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.highload.ru\/siberia\/2019\/abstracts\/5211\">informe<\/a><\/noindex> \u00abBases de datos en contenedor de Oracle (CDB\/PDB) y su uso pr\u00e1ctico para el desarrollo de software\u00bb, publicaremos la versi\u00f3n textual un poco m\u00e1s tarde. Fue genial, gracias. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/olegbunin\/\" class=\"user_link\">olegbunin<\/a><\/noindex> por la organizaci\u00f3n, as\u00ed como a todos los que asistieron. <\/p>\n<p><img decoding=\"async\" alt=\"A ra\u00edz de Highload++ Siberia 2019 \u2014 8 tareas sobre Oracle\" src=\"\/wp-content\/uploads\/2019\/07\/27f4707d4bb5968eaaa5c4748ff467cd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nEn esta publicaci\u00f3n, nos gustar\u00eda compartir con ustedes las tareas que estaban en nuestro stand, para que puedan comprobar sus conocimientos en Oracle. A continuaci\u00f3n, est\u00e1n 8 tareas, opciones de respuesta y explicaciones.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>\u00bfCu\u00e1l es el valor m\u00e1ximo de la secuencia que veremos como resultado de la ejecuci\u00f3n del siguiente script?<\/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>Ninguno, habr\u00e1 un error.<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Respuesta<\/b>Seg\u00fan la documentaci\u00f3n de Oracle (cita de 8.1.6):<br \/>\nDentro de una sola declaraci\u00f3n SQL, Oracle incrementar\u00e1 la secuencia solo una vez por fila. Si una declaraci\u00f3n contiene m\u00e1s de una referencia a NEXTVAL para una secuencia, Oracle incrementa la secuencia una vez y devuelve el mismo valor para todas las ocurrencias de NEXTVAL. Si una declaraci\u00f3n contiene referencias tanto a CURRVAL como a NEXTVAL, Oracle incrementa la secuencia y devuelve el mismo valor tanto para CURRVAL como para NEXTVAL, independientemente de su orden dentro de la declaraci\u00f3n.<\/p>\n<p>Por lo tanto, <b>el valor m\u00e1ximo corresponder\u00e1 al n\u00famero de filas, es decir, 5.<\/b>.<\/p>\n<h3>\u00bfCu\u00e1ntas filas habr\u00e1 en la tabla como resultado de la ejecuci\u00f3n del siguiente script?<\/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\">Respuesta<\/b>Seg\u00fan la documentaci\u00f3n de Oracle (cita de 11.2):<\/p>\n<p>Antes de ejecutar cualquier declaraci\u00f3n SQL, Oracle marca un punto de salvaguarda impl\u00edcito (no disponible para usted). Luego, si la declaraci\u00f3n falla, Oracle lo revierte autom\u00e1ticamente y devuelve el c\u00f3digo de error aplicable a SQLCODE en el SQLCA. Por ejemplo, si una declaraci\u00f3n INSERT causa un error al intentar insertar un valor duplicado en un \u00edndice \u00fanico, la declaraci\u00f3n se revierte.<\/p>\n<p>La llamada a una SP desde el cliente tambi\u00e9n se considera y se procesa como una declaraci\u00f3n \u00fanica. Por lo tanto, la primera llamada a la SP se completa con \u00e9xito, insertando tres registros; la segunda llamada a la SP finaliza con un error y revierte el cuarto registro que logr\u00f3 insertar; la tercera llamada termina con un error, <b>y en la tabla se quedan tres registros.<\/b>.<\/p>\n<h3>\u00bfCu\u00e1ntas filas habr\u00e1 en la tabla como resultado de la ejecuci\u00f3n del siguiente script?<\/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;\u00a1Ups!&#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\">Respuesta<\/b>Seg\u00fan la documentaci\u00f3n de Oracle (cita de 11.2):<\/p>\n<p>Una restricci\u00f3n de verificaci\u00f3n te permite especificar una condici\u00f3n que cada fila en la tabla debe cumplir. Para satisfacer la restricci\u00f3n, cada fila en la tabla debe hacer que la condici\u00f3n sea verdadera o desconocida (debido a un nulo). Cuando Oracle eval\u00faa una condici\u00f3n de restricci\u00f3n de verificaci\u00f3n para una fila particular, cualquier nombre de columna en la condici\u00f3n se refiere a los valores de columna en esa fila.<\/p>\n<p>Por lo tanto, el valor nulo pasar\u00e1 la verificaci\u00f3n, y el bloque an\u00f3nimo se ejecutar\u00e1 con \u00e9xito hasta que intente insertar el valor 3. Despu\u00e9s de esto, el bloque de manejo de errores apagar\u00e1 la excepci\u00f3n, no habr\u00e1 un retroceso y <b>quedar\u00e1n cuatro filas en la tabla<\/b> con los valores 1, nulo, 2 y nuevamente nulo.<\/p>\n<h3>\u00bfQu\u00e9 pares de valores ocupar\u00e1n el mismo espacio en el bloque?<\/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 y X<\/li>\n<li>B y Y<\/li>\n<li>C y K<\/li>\n<li>C y Z<\/li>\n<li>K y Z<\/li>\n<li>I y J<\/li>\n<li>J y X<\/li>\n<li>Todos los enumerados<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Respuesta<\/b>Presentamos extractos de la documentaci\u00f3n (12.1.0.2) sobre el almacenamiento de diferentes tipos de datos en Oracle.<\/p>\n<p><b>Tipo de dato CHAR<\/b><br \/>\nEl tipo de dato CHAR especifica una cadena de caracteres de longitud fija en el conjunto de caracteres de la base de datos. Especificas el conjunto de caracteres de la base de datos cuando creas tu base de datos. Oracle asegura que todos los valores almacenados en una columna CHAR tienen la longitud especificada por el tama\u00f1o en la sem\u00e1ntica de longitud seleccionada. Si insertas un valor que es m\u00e1s corto que la longitud de la columna, Oracle completar\u00e1 el valor hasta la longitud de la columna.<\/p>\n<p><b>Tipo de dato VARCHAR2<\/b><br \/>\nEl tipo de dato VARCHAR2 especifica una cadena de caracteres de longitud variable en el conjunto de caracteres de la base de datos. Especificas el conjunto de caracteres de la base de datos cuando creas tu base de datos. Oracle almacena un valor de car\u00e1cter en una columna VARCHAR2 exactamente como lo especificas, sin ning\u00fan relleno en blanco, siempre que el valor no exceda la longitud de la columna.<\/p>\n<p><b>Tipo de dato NUMBER<\/b><br \/>\nEl tipo de dato NUMBER almacena cero, as\u00ed como n\u00fameros fijos positivos y negativos con valores absolutos desde 1.0 x 10-130 hasta, pero sin incluir, 1.0 x 10126. Si especificas una expresi\u00f3n aritm\u00e9tica cuyo valor tenga un valor absoluto mayor o igual a 1.0 x 10126, Oracle devolver\u00e1 un error. Cada valor NUMBER requiere de 1 a 22 bytes. Teniendo esto en cuenta, el tama\u00f1o de la columna en bytes para un valor num\u00e9rico particular NUMBER(p), donde p es la precisi\u00f3n de un valor dado, puede calcularse usando la siguiente f\u00f3rmula: <i>ROUND((length(p)+s)\/2))+1<\/i> donde s es cero si el n\u00famero es positivo, y s es 1 si el n\u00famero es negativo.<\/p>\n<p>Adem\u00e1s, tomemos un extracto de la documentaci\u00f3n sobre el almacenamiento de valores nulos.<\/p>\n<p>Un nulo es la ausencia de un valor en una columna. Los nulos indican datos faltantes, desconocidos o no aplicables. Los nulos se almacenan en la base de datos si caen entre columnas con valores de datos. En estos casos, requieren 1 byte para almacenar la longitud de la columna (cero). Los nulos finales en una fila no requieren almacenamiento porque un nuevo encabezado de fila se\u00f1ala que las columnas restantes en la fila anterior son nulas. Por ejemplo, si las \u00faltimas tres columnas de una tabla son nulas, entonces no se almacena ning\u00fan dato para estas columnas.<\/p>\n<p>A partir de estos datos, construimos razonamientos. Supongamos que en la base de datos se utiliza la codificaci\u00f3n AL32UTF8. En esta codificaci\u00f3n, las letras rusas ocupar\u00e1n 2 bytes.<\/p>\n<p>1) A y X, el valor del campo a 'Y' ocupa 1 byte, el valor del campo x '\u0414' \u2013 2 bytes<br \/>\n2) B y Y, \u2018Vasya\u2019 en b se complementar\u00e1 con espacios hasta 10 caracteres y ocupar\u00e1 14 bytes, \u2018Vasya\u2019 en d \u2013 ocupar\u00e1 8 bytes.<br \/>\n3) C y K. Ambos campos tienen valor NULL, despu\u00e9s de ellos hay campos significativos, por lo que ocupan 1 byte cada uno.<br \/>\n4) C y Z. Ambos campos tienen valor NULL, pero el campo Z es el \u00faltimo de la tabla, por lo tanto, no ocupa espacio (0 bytes). El campo C ocupa 1 byte.<br \/>\n5) K y Z. Similar al caso anterior. El valor en el campo K ocupa 1 byte, en Z \u2013 0.<br \/>\n6) I y J. Seg\u00fan la documentaci\u00f3n, ambos valores ocupar\u00e1n 2 bytes. La longitud se calcula seg\u00fan la f\u00f3rmula extra\u00edda de la documentaci\u00f3n: round((1 + 0) \/ 2) + 1 = 1 + 1 = 2.<br \/>\n7) J y X. El valor en el campo J ocupar\u00e1 2 bytes, el valor en el campo X ocupar\u00e1 2 bytes.<\/p>\n<p><b>En total, las opciones correctas son: C y K, I y J, J y X.<\/b><\/p>\n<p><\/p>\n<h3>\u00bfCu\u00e1l ser\u00e1 aproximadamente el factor de agrupamiento del \u00edndice T_I?<\/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>Cientos.<\/li>\n<li>Miles.<\/li>\n<li>Decenas de miles.<\/li>\n<li>Cientos de miles.<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Respuesta<\/b>Seg\u00fan la documentaci\u00f3n de Oracle (cita de la 12.1):<\/p>\n<p>Para un \u00edndice B-tree, el factor de agrupamiento del \u00edndice mide el agrupamiento f\u00edsico de las filas en relaci\u00f3n con un valor de \u00edndice.<\/p>\n<p>El factor de agrupamiento del \u00edndice ayuda al optimizador a decidir si un escaneo de \u00edndice o un escaneo completo de la tabla es m\u00e1s eficiente para ciertas consultas. Un factor de agrupamiento bajo indica un escaneo de \u00edndice eficiente.<\/p>\n<p>Un factor de agrupamiento que se acerca al n\u00famero de bloques en una tabla indica que las filas est\u00e1n ordenadas f\u00edsicamente en los bloques de la tabla por la clave del \u00edndice. Si la base de datos realiza un escaneo completo de la tabla, entonces tiende a recuperar las filas tal como est\u00e1n almacenadas en disco, ordenadas por la clave del \u00edndice. Un factor de agrupamiento que se acerca al n\u00famero de filas indica que las filas est\u00e1n dispersas aleatoriamente a trav\u00e9s de los bloques de la base de datos en relaci\u00f3n con la clave del \u00edndice. Si la base de datos realiza un escaneo completo de la tabla, no recuperar\u00eda las filas en ning\u00fan orden ordenado por esta clave del \u00edndice.<\/p>\n<p>En este caso, los datos est\u00e1n perfectamente ordenados, por lo que el factor de agrupamiento ser\u00e1 igual o cercano al n\u00famero de bloques ocupados en la tabla. Para un tama\u00f1o est\u00e1ndar de bloque de 8 kilobytes, se puede esperar que en un bloque quepan alrededor de mil valores num\u00e9ricos estrechos, por lo que el n\u00famero de bloques, y como consecuencia el factor de agrupamiento, ser\u00e1 <b>decenas.<\/b>.<\/p>\n<h3>\u00bfPara qu\u00e9 valores de N se ejecutar\u00e1 con \u00e9xito el siguiente script en una base de datos normal con configuraciones est\u00e1ndar?<\/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\">Respuesta<\/b>Seg\u00fan la documentaci\u00f3n de Oracle (cita de 11.2):<\/p>\n<p>L\u00edmites L\u00f3gicos de la Base de Datos<\/p>\n<p><strong>\u00cdtem<\/strong><br \/>\n<strong>Tipo de L\u00edmite<\/strong><br \/>\n<strong>Valor del L\u00edmite<\/strong><\/p>\n<p>\u00cdndices<br \/>\nTama\u00f1o total de la columna indexada<br \/>\n75% del tama\u00f1o del bloque de la base de datos menos algunos gastos generales.<\/p>\n<p>\nPor lo tanto, el tama\u00f1o total de las columnas indexadas no debe exceder los 6 KB. Lo que sucede a continuaci\u00f3n depende de la codificaci\u00f3n de la base de datos elegida. Para la codificaci\u00f3n AL32UTF8, un car\u00e1cter puede ocupar un m\u00e1ximo de 4 bytes, por lo que en 6 kilobytes, en el peor de los casos, caben aproximadamente 1500 caracteres. Por lo tanto, Oracle prohibir\u00e1 la creaci\u00f3n del \u00edndice cuando N = 400 (cuando la longitud de la clave en el peor de los casos ser\u00e1 de 1600 caracteres * 4 bytes + la longitud de rowid), mientras que <b>cuando N = 200 (y menos)<\/b> la creaci\u00f3n del \u00edndice funcionar\u00e1 sin problemas.<\/p>\n<h3>El operador INSERT con el hint APPEND est\u00e1 dise\u00f1ado para cargar datos en modo directo. \u00bfQu\u00e9 suceder\u00e1 si se aplica a una tabla que tiene un trigger?<\/h3>\n<p><\/p>\n<ul>\n<li>Los datos se cargar\u00e1n en modo directo, el trigger se activar\u00e1 como debe<\/li>\n<li>Los datos se cargar\u00e1n en modo directo, pero el trigger no se ejecutar\u00e1<\/li>\n<li>Los datos se cargar\u00e1n en modo convencional, el trigger se activar\u00e1 como debe<\/li>\n<li>Los datos se cargar\u00e1n en modo convencional, pero el trigger no se ejecutar\u00e1<\/li>\n<li>Los datos no se cargar\u00e1n, se registrar\u00e1 un error<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Respuesta<\/b>En principio, esta es una cuesti\u00f3n m\u00e1s l\u00f3gica. Para encontrar la respuesta correcta, propongo el siguiente modelo de razonamiento:<\/p>\n<ol>\n<li>La inserci\u00f3n en modo directo se realiza generando directamente el bloque de datos, desviando el motor SQL, lo que garantiza una alta velocidad. Por lo tanto, es bastante dif\u00edcil garantizar la ejecuci\u00f3n del trigger, si es que es posible, y no tiene sentido, ya que de todos modos ralentizar\u00eda dr\u00e1sticamente la inserci\u00f3n.<\/li>\n<li>La no ejecuci\u00f3n del trigger har\u00e1 que, con los mismos datos en la tabla, el estado de la base de datos en general (otras tablas) dependa de en qu\u00e9 modo se insertaron esos datos. Esto obviamente destruir\u00e1 la integridad de los datos y no puede aplicarse como soluci\u00f3n en producci\u00f3n.<\/li>\n<li>La imposibilidad de ejecutar la operaci\u00f3n solicitada, en t\u00e9rminos generales, se interpreta como un error. Pero aqu\u00ed hay que recordar que APPEND es un hint, y la l\u00f3gica general de los hints es que se tienen en cuenta si es posible, si no, la operaci\u00f3n se ejecuta sin tener en cuenta el hint.<\/li>\n<\/ol>\n<p>\nPor lo tanto, la respuesta esperada es: <b>los datos se cargar\u00e1n en modo normal (SQL), el trigger se activar\u00e1.<\/b><\/p>\n<p>Seg\u00fan la documentaci\u00f3n de Oracle (cita de 8.04):<\/p>\n<p>Las violaciones de las restricciones har\u00e1n que la instrucci\u00f3n se ejecute de forma secuencial, utilizando la ruta de inserci\u00f3n convencional, sin advertencias ni mensajes de error. Una excepci\u00f3n es la restricci\u00f3n sobre las declaraciones que acceden a la misma tabla m\u00e1s de una vez en una transacci\u00f3n, lo que puede causar mensajes de error.<br \/>\nPor ejemplo, si hay triggers o integridad referencial en la tabla, entonces la sugerencia APPEND ser\u00e1 ignorada cuando intentes utilizar INSERT de carga directa (serial o paralelo), as\u00ed como la sugerencia o cl\u00e1usula PARALLEL, si la hay.<\/p>\n<h3>\u00bfQu\u00e9 suceder\u00e1 al ejecutar el siguiente script?<\/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>Ejecuci\u00f3n exitosa<\/li>\n<li>Error debido a un error de sintaxis<\/li>\n<li>Error relacionado con la no permitibilidad de transacciones aut\u00f3nomas<\/li>\n<li>Error relacionado con el exceso de la profundidad m\u00e1xima de llamadas<\/li>\n<li>Error relacionado con la violaci\u00f3n de clave externa<\/li>\n<li>Error relacionado con bloqueos<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Respuesta<\/b>La tabla y el trigger se crean correctamente y esta operaci\u00f3n no deber\u00eda causar problemas. Las transacciones aut\u00f3nomas en el trigger tambi\u00e9n est\u00e1n permitidas, de lo contrario, no ser\u00eda posible, por ejemplo, la auditor\u00eda.<\/p>\n<p>Despu\u00e9s de insertar la primera fila, la exitosa activaci\u00f3n del trigger conducir\u00eda a la inserci\u00f3n de una segunda fila, por lo que el trigger se activar\u00eda de nuevo, insertando una tercera fila y as\u00ed sucesivamente hasta que la sentencia fallara por exceso de la profundidad m\u00e1xima de llamadas. Sin embargo, hay otro punto sutil. En el momento de la ejecuci\u00f3n del trigger para el primer registro insertado, a\u00fan no se ha realizado el commit. Por lo tanto, el trigger, que opera en una transacci\u00f3n aut\u00f3noma, intenta insertar en la tabla un registro que hace referencia a una fila a\u00fan no confirmada. Esto lleva a una espera (la transacci\u00f3n aut\u00f3noma espera el commit principal para saber si puede insertar los datos) y al mismo tiempo la transacci\u00f3n principal espera el commit de la aut\u00f3noma para continuar despu\u00e9s del trigger. <b>Se produce un deadlock y, como consecuencia, la transacci\u00f3n aut\u00f3noma se aborta debido a problemas de bloqueos<\/b>.<\/p>\n<p class=\"for_users_only_msg\">Solo los usuarios registrados pueden participar en la encuesta. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Inicie sesi\u00f3n<\/a><\/noindex>, por favor.<\/p>\n<h2 class=\"default-block__polling-title\">\u00bfFue dif\u00edcil?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Como dos dedos, lo resolv\u00ed todo correctamente de inmediato.<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    No tanto, comet\u00ed un par de errores.<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Resolvi\u00f3 la mitad correctamente.<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    \u00a1Adivin\u00e9 la respuesta dos veces!<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Escribir\u00e9 en los comentarios<\/p>\n<\/li>\n<\/ul>\n<p>    14 usuarios votaron. 10 usuarios se abstuvieron.<br \/>\n<br \/>Fuente: <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.2 - 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\/es\/blog\/administrirovanie\/po-sledam-highload-siberia-2019-8-zadach-po-oracle\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\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\/es\/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\udd47En los pasos de Highload++ Siberia 2019 \u2014 8 tareas sobre Oracle | ProHoster","description":"\u00a1Hola! La conferencia Highload++ Siberia 2019 se llev\u00f3 a cabo el 24-25 de junio en Novosibirsk.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/po-sledam-highload-siberia-2019-8-zadach-po-oracle","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","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\/es\/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\/es\/wp-json\/wp\/v2\/posts\/36171","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=36171"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/36171\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/27053"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=36171"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=36171"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=36171"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}