{"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\/hr\/blog\/administrirovanie\/po-sledam-highload-siberia-2019-8-zadach-po-oracle","title":{"rendered":"U tragovima Highload++ Siberia 2019 \u2014 8 zadataka po Oracle","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Pozdrav!<\/p>\n<p>24. i 25. lipnja u Novosibirsku odr\u017eana je konferencija Highload++ Siberia 2019. Na\u0161i de\u010dki su tako\u0111er bili tamo <noindex><a rel=\"nofollow\" href=\"https:\/\/www.highload.ru\/siberia\/2019\/abstracts\/5211\">izvje\u0161taj<\/a><\/noindex> \u201eKontejnerske baze podataka Oracle (CDB\/PDB) i njihova prakti\u010dna upotreba za razvoj softvera\u201c, tekstualnu verziju objavit \u0107emo malo kasnije. Bilo je sjajno, hvala <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/olegbunin\/\" class=\"user_link\">olegbunin<\/a><\/noindex> za organizaciju, kao i svima koji su do\u0161li. <\/p>\n<p><img decoding=\"async\" alt=\"U tragovima Highload++ Siberia 2019 \u2014 8 zadataka po Oracle\" src=\"\/wp-content\/uploads\/2019\/07\/27f4707d4bb5968eaaa5c4748ff467cd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nU ovom postu \u017eeljeli bismo podijeliti s vama zadatke koji su bili na na\u0161em \u0161tandu, kako biste mogli provjeriti svoje znanje o Oracleu. Ispod - 8 zadataka, varijante odgovora i obja\u0161njenje.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Koja \u0107e biti maksimalna vrijednost sekvence rezultata izvr\u0161enja sljede\u0107eg skripta?<\/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>Nijedna, dobit \u0107ete gre\u0161ku<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Odgovor<\/b>Prema dokumentaciji Oraclea (citirano iz 8.1.6):<br \/>\nUnutar jednog SQL izraza, Oracle \u0107e pove\u0107ati sekvencu samo jednom po redu. Ako izraz sadr\u017ei vi\u0161e referenci na NEXTVAL za sekvencu, Oracle pove\u0107ava sekvencu jednom i vra\u0107a istu vrijednost za sve pojave NEXTVAL-a. Ako izraz sadr\u017ei reference na CURRVAL i NEXTVAL, Oracle pove\u0107ava sekvencu i vra\u0107a istu vrijednost za CURRVAL i NEXTVAL bez obzira na njihov redoslijed unutar izraza.<\/p>\n<p>Dakle, <b>maksimalna vrijednost \u0107e odgovarati broju redova, odnosno 5<\/b>.<\/p>\n<h3>Koliko \u0107e redova biti u tablici kao rezultat izvo\u0111enja sljede\u0107eg skripta?<\/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\">Odgovor<\/b>Prema dokumentaciji Oraclea (citirano iz 11.2):<\/p>\n<p>Prije izvo\u0111enja bilo kojeg SQL izraza, Oracle ozna\u010dava implicitnu to\u010dku spremanja (koja nije dostupna vama). Tada, ako izraz ne uspije, Oracle ga automatski vra\u0107a i vra\u0107a odgovaraju\u0107i kod gre\u0161ke u SQLCODE-u u SQLCA. Na primjer, ako INSERT izraz izazove gre\u0161ku poku\u0161avaju\u0107i umetnuti dupliciranu vrijednost u jedinstveni indeks, izraz se vra\u0107a.<\/p>\n<p>Poziv pohranjene procedure s klijenta tako\u0111er se smatra i obra\u0111uje kao jedan izraz. Tako prvi poziv procedure uspje\u0161no zavr\u0161ava umetaju\u0107i tri zapisa; drugi poziv procedure zavr\u0161ava gre\u0161kom i vra\u0107a \u010detvrti zapis koji je uspio umetnuti; tre\u0107i poziv zavr\u0161ava gre\u0161kom, <b>i u tablici ostaju tri zapisa<\/b>.<\/p>\n<h3>Koliko \u0107e redova biti u tablici kao rezultat izvo\u0111enja sljede\u0107eg skripta?<\/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\">Odgovor<\/b>Prema dokumentaciji Oraclea (citirano iz 11.2):<\/p>\n<p>Ograni\u010denje provjere omogu\u0107uje da odredite uvjet koji svaka redak u tablici mora zadovoljavati. Da bi se ispunilo ograni\u010denje, svaki redak u tablici mora u\u010diniti uvjet ili ISTINITIM ili nepoznatim (zbog niza). Kada Oracle procjenjuje uvjet ograni\u010denja provjere za odre\u0111eni redak, svi nazivi stupaca u uvjetu odnose se na vrijednosti stupaca u tom retku.<\/p>\n<p>Tako \u0107e null vrijednost pro\u0107i provjeru, a anonimna blok \u0107e se uspje\u0161no izvr\u0161iti do poku\u0161aja umetanja vrijednosti 3. Nakon toga, blok obrade gre\u0161aka \u0107e ugasiti iznimku, ne\u0107e do\u0107i do povrata i <b>u tablici \u0107e ostati \u010detiri retka<\/b> s vrijednostima 1, null, 2 i ponovno null.<\/p>\n<h3>Koje parove vrijednosti \u0107e zauzeti jednake koli\u010dine prostora u bloku?<\/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 i X<\/li>\n<li>B i Y<\/li>\n<li>C i K<\/li>\n<li>C i Z<\/li>\n<li>K i Z<\/li>\n<li>I i J<\/li>\n<li>J i X<\/li>\n<li>Sve navedeno<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Odgovor<\/b>Uzmimo izvatke iz dokumentacije (12.1.0.2) o pohrani razli\u010ditih tipova podataka u Oracle.<\/p>\n<p><b>CHAR Tip Podataka<\/b><br \/>\nCHAR tip podataka odre\u0111uje fiksnu duljinu niza znakova u skupu znakova baze podataka. Odre\u0111ujete skup znakova baze podataka kada kreirate svoju bazu podataka. Oracle osigurava da sve vrijednosti pohranjene u CHAR stupcu imaju duljinu koju odredite prema veli\u010dini u odabranim semantici duljine. Ako umetnete vrijednost koja je kra\u0107a od duljine stupca, Oracle \u0107e popuniti vrijednost prazninama do duljine stupca.<\/p>\n<p><b>VARCHAR2 Tip Podataka<\/b><br \/>\nVARCHAR2 tip podataka specificira niz znakova varijabilne duljine u skupu znakova baze podataka. Odre\u0111ujete skup znakova baze podataka kada kreirate svoju bazu podataka. Oracle pohranjuje vrijednost znaka u VARCHAR2 stupcu to\u010dno onako kako je navedete, bez praznina, pod uvjetom da vrijednost ne prelazi duljinu stupca.<\/p>\n<p><b>NUMBER Tip Podataka<\/b><br \/>\nNUMBER tip podataka pohranjuje nulu kao i pozitivne i negativne fiksne brojeve s apsolutnim vrijednostima od 1.0 x 10-130 do ali ne uklju\u010duju\u0107i 1.0 x 10126. Ako odredite aritmeti\u010dki izraz \u010dija vrijednost ima apsolutnu vrijednost ve\u0107u ili jednake 1.0 x 10126, Oracle \u0107e vratiti gre\u0161ku. Svaka NUMBER vrijednost zahtijeva od 1 do 22 bajta. Uzimaju\u0107i to u obzir, veli\u010dina stupca u bajtovima za odre\u0111enu broj\u010danu vrijednost NUMBER(p), gdje je p preciznost dane vrijednosti, mo\u017ee se izra\u010dunati koriste\u0107i sljede\u0107u formulu: <i>ROUND((length(p)+s)\\\/2))+1<\/i> gdje s je jednako nula ako je broj pozitivan, a s je jednako 1 ako je broj negativan.<\/p>\n<p>Osim toga, uzmimo izvadak iz dokumentacije o pohrani Null vrijednosti.<\/p>\n<p>Null je odsustvo vrijednosti u stupcu. Nullovi ukazuju na nedostaju\u0107e, nepoznate ili neprimjenjive podatke. Nullovi se pohranjuju u bazi podataka ako se nalaze izme\u0111u stupaca s vrijednostima podataka. U tim slu\u010dajevima zahtijevaju 1 bajt za pohranu duljine stupca (nula). Nullovi na kraju reda ne zahtijevaju pohranu jer novi zaglavlje reda signalizira da su preostali stupci u prethodnom redu null. Na primjer, ako su posljednja tri stupca tablice null, tada se za te stupce ne pohranjuju podaci.<\/p>\n<p>Na temelju tih podataka formiramo zaklju\u010dke. Pretpostavljamo da u Bazi podataka koristi se kodiranje AL32UTF8. U ovom kodiranju ruska slova zauzimat \u0107e 2 bajta.<\/p>\n<p>1) A i X, vrijednost polja a 'Y' zauzima 1 bajt, vrijednost polja x 'D' \u2013 2 bajta<br \/>\n2) B i Y, \u2018Vasja\u2019 u b \u0107e se dopuniti razmacima do 10 znakova i zauzeti 14 bajtova, \u2018Vasja\u2019 u d \u2013 zauzet \u0107e 8 bajtova.<br \/>\n3) C i K. Oba polja imaju vrijednost NULL, nakon njih slijede zna\u010dajna polja, zato zauzimaju po 1 bajt.<br \/>\n4) C i Z. Oba polja imaju vrijednost NULL, ali polje Z je posljednje u tablici, stoga ne zauzima mjesto (0 bajtova). Polje C zauzima 1 bajt.<br \/>\n5) K i Z. Sli\u010dno prethodnom slu\u010daju. Vrijednost u polju K zauzima 1 bajt, u Z \u2013 0.<br \/>\n6) I i J. Prema dokumentaciji, obje vrijednosti zauzet \u0107e po 2 bajta. Duljinu ra\u010dunamo prema formuli preuzetoj iz dokumentacije: round( (1 + 0) \/ 2) + 1 = 1 + 1 = 2.<br \/>\n7) J i X. Vrijednost u polju J zauzet \u0107e 2 bajta, vrijednost u polju X zauzet \u0107e 2 bajta.<\/p>\n<p><b>Dakle, ispravni varijante su: C i K, I i J, J i X.<\/b><\/p>\n<p><\/p>\n<h3>Koliko \u0107e otprilike biti clustering factor indeksa 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>Otprilike desetci<\/li>\n<li>Otprilike stotine<\/li>\n<li>Otprilike tisu\u0107e<\/li>\n<li>Otprilike desetci tisu\u0107a<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Odgovor<\/b>Prema dokumentaciji Oracle (citirano iz 12.1):<\/p>\n<p>Za B-stablo indeks, indeks clustering factor mjeri fizi\u010dko grupiranje redaka u odnosu na vrijednost indeksa.<\/p>\n<p>Indeks clustering factor poma\u017ee optimizatoru da odlu\u010di ho\u0107e li indeks skenirati ili obaviti puni pregled tablice kao u\u010dinkovitiji za odre\u0111ene upite. Nizak clustering factor ukazuje na u\u010dinkovitije skeniranje indeksa.<\/p>\n<p>Clustering factor koji je blizu broju blokova u tablici ukazuje da su redci fizi\u010dki poredani u blokovima tablice prema indeksnom klju\u010du. Ako baza podataka izvodi puni pregled tablice, tada \u0107e \u010desto dohva\u0107ati redce kako su spremljeni na disku, sortirani prema indeksnom klju\u010du. Clustering factor koji je blizu broju redaka ukazuje da su redci nasumi\u010dno raspr\u0161eni preko blokova baze podataka u odnosu na indeks klju\u010d. Ako baza podataka izvr\u0161i puni pregled tablice, tada ne\u0107e dohvatiti redce u bilo kojem sortiranom redoslijedu prema ovom indeks klju\u010du.<\/p>\n<p>U ovom slu\u010daju podaci su savr\u0161eno sortirani, stoga \u0107e clustering factor biti jednak ili blizak broju zauzetih blokova u tablici. Za standardnu veli\u010dinu bloka od 8 kilobajta mo\u017ee se o\u010dekivati da \u0107e u jedan blok stati otprilike tisu\u0107u uskih number vrijednosti, stoga \u0107e broj blokova, a time i clustering factor biti <b>otprilike desetci<\/b>.<\/p>\n<h3>Pod kojim vrijednostima N \u0107e sljede\u0107i skript uspje\u0161no biti izvr\u0161en u obi\u010dnoj bazi podataka sa standardnim postavkama?<\/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\">Odgovor<\/b>Prema dokumentaciji Oraclea (citirano iz 11.2):<\/p>\n<p>Logi\u010dka ograni\u010denja baze podataka<\/p>\n<p><strong>Stavka<\/strong><br \/>\n<strong>Tip ograni\u010denja<\/strong><br \/>\n<strong>Vrijednost ograni\u010denja<\/strong><\/p>\n<p>Indeksi<br \/>\nUkupna veli\u010dina indeksiranog stupca<br \/>\n75% veli\u010dine bloka baze podataka minus neki prekovremeni tro\u0161ak<\/p>\n<p>\nDakle, ukupna veli\u010dina indeksiranih kolona ne smije prelaziti 6KB. Sve dalje zavisi od odabrane kodne stranice baze. Za kodnu stranicu AL32UTF8 jedan znak mo\u017ee zauzimati maksimalno 4 bajta, tako da u 6 kilobajta u najgorem slu\u010daju mo\u017ee stati oko 1500 znakova. Stoga \u0107e Oracle zabraniti stvaranje indeksa pri N = 400 (kada je du\u017eina klju\u010da u najgorem slu\u010daju 1600 znakova * 4 bajta + du\u017eina rowid), dok <b>pri N = 200 (i manje)<\/b> stvaranje indeksa \u0107e pro\u0107i bez problema.<\/p>\n<h3>INSERT operator sa hintom APPEND namijenjen je za u\u010ditavanje podataka u direktnom re\u017eimu. \u0160to \u0107e se dogoditi ako se primijeni na tabelu na kojoj se nalazi okida\u010d?<\/h3>\n<p><\/p>\n<ul>\n<li>Podaci \u0107e se u\u010ditati u direktnom re\u017eimu, okida\u010d \u0107e se aktivirati kao \u0161to treba<\/li>\n<li>Podaci \u0107e se u\u010ditati u direktnom re\u017eimu, ali okida\u010d ne\u0107e biti aktiviran<\/li>\n<li>Podaci \u0107e se u\u010ditati u konvencionalnom re\u017eimu, okida\u010d \u0107e se aktivirati kao \u0161to treba<\/li>\n<li>Podaci \u0107e se u\u010ditati u konvencionalnom re\u017eimu, ali okida\u010d ne\u0107e biti aktiviran<\/li>\n<li>Podaci ne\u0107e biti u\u010ditani, zabilje\u017eit \u0107e se gre\u0161ka<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Odgovor<\/b>U principu, ovo je vi\u0161e pitanje logike. Da bih prona\u0161ao ispravan odgovor, predlo\u017eio bih sljede\u0107i model razmi\u0161ljanja:<\/p>\n<ol>\n<li>Umetanje u direktnom re\u017eimu se vr\u0161i direktnim generisanjem bloka podataka, mimo SQL engine-a, \u0161to omogu\u0107ava veliku brzinu. Tako je veoma te\u0161ko osigurati izvr\u0161enje okida\u010da, ako je to uop\u0161te mogu\u0107e, i nema smisla, jer bi to i dalje zna\u010dajno usporilo umetanje.<\/li>\n<li>Neizvr\u0161enje okida\u010da \u0107e dovesti do toga da \u0107e stanje baze u celini (drugih tabela) zavisiti od toga u kojem re\u017eimu su podaci umetnuti. To \u0107e o\u010dito naru\u0161iti integritet podataka i ne mo\u017ee se primeniti kao re\u0161enje u produkciji.<\/li>\n<li>Nemogu\u0107nost izvr\u0161enja zatra\u017eene operacije, op\u0107enito govore\u0107i, smatra se gre\u0161kom. Me\u0111utim, ovde se treba setiti da je APPEND hint, a op\u0107a logika hintova je da se uzimaju u obzir ako je to mogu\u0107e, ako nije \u2013 operator se izvr\u0161ava bez obzira na hint.<\/li>\n<\/ol>\n<p>\nDakle, o\u010dekivani odgovor je <b>podaci \u0107e se u\u010ditati u obi\u010dnom (SQL) re\u017eimu, okida\u010d \u0107e se aktivirati.<\/b><\/p>\n<p>Prema Oracle dokumentaciji (citirano iz 8.04):<\/p>\n<p>Kr\u0161enja ograni\u010denja uzrokovat \u0107e da se iskaz izvr\u0161i serijski, koriste\u0107i konvencionalni put umetanja, bez upozorenja ili poruka o gre\u0161ci. Izuzetak je ograni\u010denje na iskaze koji pristupaju istoj tabeli vi\u0161e od jednom u transakciji, \u0161to mo\u017ee izazvati poruke o gre\u0161ci.<br \/>\nNa primjer, ako su na tablici prisutni okida\u010di ili referentna cjelovitost, tada \u0107e se APPEND savjet zanemariti kada poku\u0161ate koristiti direktno u\u010ditavanje INSERT (serijski ili paralelno), kao i PARALLEL savjet ili klauzulu, ako ih ima.<\/p>\n<h3>\u0160to \u0107e se dogoditi prilikom izvr\u0161avanja sljede\u0107eg skripta?<\/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>Uspje\u0161no izvr\u0161enje<\/li>\n<li>Neuspjeh zbog sintakti\u010dke pogre\u0161ke<\/li>\n<li>Pogre\u0161ka vezana uz neprihvatljive autonomne transakcije<\/li>\n<li>Pogre\u0161ka vezana uz prekora\u010denje maksimalne ugnije\u017edene dubine poziva<\/li>\n<li>Pogre\u0161ka vezana uz kr\u0161enje vanjskog klju\u010da<\/li>\n<li>Pogre\u0161ka vezana uz zaklju\u010davanje<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Odgovor<\/b>Tablica i okida\u010d su ispravno kreirani i ova operacija ne bi trebala uzrokovati probleme. Autonomne transakcije u okida\u010du su tako\u0111er dozvoljene, ina\u010de logiranje ne bi bilo mogu\u0107e.<\/p>\n<p>Nakon umetanja prve vrste, uspje\u0161no aktiviranje okida\u010da dovelo bi do umetanja druge vrste, zbog \u010dega bi se opet aktivirao okida\u010d, umetnuo tre\u0107u vrstu i tako dalje, sve dok izjava ne padne zbog prekora\u010denja maksimalne ugnije\u017edene dubine poziva. Me\u0111utim, postoji jo\u0161 jedna suptilna to\u010dka. Tijekom izvr\u0161enja okida\u010da za prvi umetnuti zapis, jo\u0161 nije izvr\u0161en commit. Stoga okida\u010d koji radi u autonomnoj transakciji poku\u0161ava umetnuti u tablicu redak koji se poziva vanjskim klju\u010dem na jo\u0161 ne potvr\u0111eni zapis. To dovodi do o\u010dekivanja (autonomna transakcija \u010deka commit glavne, kako bi shvatila mo\u017ee li umetnuti podatke) i istovremeno glavna transakcija \u010deka commit autonomne, kako bi nastavila rad nakon okida\u010da. <b>Dolazi do deadlocka i kao posljedica - autonomna transakcija se prekida zbog problema vezanih uz zaklju\u010davanje<\/b>.<\/p>\n<p class=\"for_users_only_msg\">Samo registrirani korisnici mogu sudjelovati u anketi. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Prijavite se<\/a><\/noindex>, molimo.<\/p>\n<h2 class=\"default-block__polling-title\">Je li bilo te\u0161ko?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Kao dva prsta, odmah sam sve ispravno rije\u0161io.<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Nije bilo posebno, pogrije\u0161io sam u nekoliko pitanja.<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Rije\u0161io sam polovicu ispravno.<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Dva puta sam pogodio odgovor!<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Napisa\u0107u u komentarima<\/p>\n<\/li>\n<\/ul>\n<p>    Glasalo je 14 korisnika. Suzdr\u017ealo se 10 korisnika.<br \/>\n<br \/>Izvor: <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.4 - 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\/hr\/blog\/administrirovanie\/po-sledam-highload-siberia-2019-8-zadach-po-oracle\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"hr_HR\" \/>\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\/hr\/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\udd47U tragovima Highload++ Siberia 2019 \u2014 8 zadataka po Oracle | ProHoster","description":"Pozdrav! 24-25. lipnja u Novosibirsku odr\u017eana je konferencija Highload++ Siberia 2019.","canonical_url":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/po-sledam-highload-siberia-2019-8-zadach-po-oracle","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hr_HR","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\/hr\/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\/hr\/wp-json\/wp\/v2\/posts\/36171","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/comments?post=36171"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/36171\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media\/27053"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media?parent=36171"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/categories?post=36171"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/tags?post=36171"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}