{"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\/hu\/blog\/administrirovanie\/po-sledam-highload-siberia-2019-8-zadach-po-oracle","title":{"rendered":"A Highload++ Siberia 2019 nyom\u00e1n - 8 feladat az Oracle-ral","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hell\u00f3!<\/p>\n<p>2019. j\u00fanius 24-25-\u00e9n Novoszibirszkben megrendez\u00e9sre ker\u00fclt a Highload++ Siberia konferencia. A mi csapatunk is ott volt. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.highload.ru\/siberia\/2019\/abstracts\/5211\">el\u0151ad\u00e1s<\/a><\/noindex> A \"Oracle kont\u00e9neradatb\u00e1zisok (CDB\/PDB) \u00e9s ezek gyakorlati alkalmaz\u00e1sa a szoftverfejleszt\u00e9sben\" c\u00edm\u0171 el\u0151ad\u00e1st k\u00e9s\u0151bb k\u00f6zz\u00e9tessz\u00fck sz\u00f6veges verzi\u00f3ban. Nagyszer\u0171 volt, k\u00f6sz\u00f6nj\u00fck! <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/olegbunin\/\" class=\"user_link\">olegbunin<\/a><\/noindex> a szervez\u00e9s\u00e9rt, \u00e9s term\u00e9szetesen mindenkinek, aki elj\u00f6tt. <\/p>\n<p><img decoding=\"async\" alt=\"A Highload++ Siberia 2019 nyom\u00e1n - 8 feladat az Oracle-ral\" src=\"\/wp-content\/uploads\/2019\/07\/27f4707d4bb5968eaaa5c4748ff467cd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nEbben a posztban szeretn\u00e9nk megosztani veletek a falunkn\u00e1l tal\u00e1lhat\u00f3 feladatokat, hogy ellen\u0151rizhess\u00e9tek tud\u00e1sotokat Oracle-b\u00f3l. A tov\u00e1bbiakban \u2013 8 feladat, v\u00e1laszlehet\u0151s\u00e9gekkel \u00e9s magyar\u00e1zattal.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Mi a maxim\u00e1lis \u00e9rt\u00e9k, amit a k\u00f6vetkez\u0151 szkript v\u00e9grehajt\u00e1sa ut\u00e1n l\u00e1tni fogunk?<\/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>Semmilyen, hiba lesz.<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">V\u00e1lasz<\/b>Az Oracle dokument\u00e1ci\u00f3ja szerint (id\u00e9zve a 8.1.6-b\u00f3l):<br \/>\nEgyetlen SQL utas\u00edt\u00e1son bel\u00fcl az Oracle csak egyszer n\u00f6veli meg a sorozatsz\u00e1mot soronk\u00e9nt. Ha egy utas\u00edt\u00e1s t\u00f6bb hivatkoz\u00e1st tartalmaz a NEXTVAL-ra, az Oracle egyszer emeli a sorozatsz\u00e1mot, \u00e9s ugyanazt az \u00e9rt\u00e9ket adja vissza minden NEXTVAL el\u0151fordul\u00e1snak. Ha egy utas\u00edt\u00e1s mind CURRVAL, mind NEXTVAL hivatkoz\u00e1sokat tartalmaz, az Oracle n\u00f6veli a sorozatsz\u00e1mot, \u00e9s ugyanazt az \u00e9rt\u00e9ket adja vissza mind CURRVAL, mind NEXTVAL sz\u00e1m\u00e1ra, f\u00fcggetlen\u00fcl azok sorrendj\u00e9t\u0151l az utas\u00edt\u00e1son bel\u00fcl.<\/p>\n<p>\u00cdgy <b>a maxim\u00e1lis \u00e9rt\u00e9k a sorok sz\u00e1m\u00e1nak megfelel\u0151en 5 lesz.<\/b>.<\/p>\n<h3>H\u00e1ny sor lesz a t\u00e1bl\u00e1ban a k\u00f6vetkez\u0151 szkript v\u00e9grehajt\u00e1sa ut\u00e1n?<\/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\">V\u00e1lasz<\/b>Az Oracle dokument\u00e1ci\u00f3ja alapj\u00e1n (id\u00e9zve a 11.2-b\u00f3l):<\/p>\n<p>Miel\u0151tt b\u00e1rmilyen SQL utas\u00edt\u00e1st v\u00e9grehajtan\u00e1nak, az Oracle implicit ment\u00e9si pontot jel\u00f6l ki (ez nem el\u00e9rhet\u0151 sz\u00e1motokra). Ezut\u00e1n, ha az utas\u00edt\u00e1s nem siker\u00fcl, az Oracle automatikusan vissza\u00e1ll\u00edtja \u00e9s visszaadja a relev\u00e1ns hiba k\u00f3dot az SQLCODE-nak az SQLCA-n bel\u00fcl. P\u00e9ld\u00e1ul, ha egy INSERT utas\u00edt\u00e1s hib\u00e1t okoz, mert megpr\u00f3b\u00e1l egy duplik\u00e1lt \u00e9rt\u00e9ket beilleszteni egy egyedi indexbe, az utas\u00edt\u00e1st vissza\u00e1ll\u00edtja.<\/p>\n<p>A kliensb\u0151l t\u00f6rt\u00e9n\u0151 elj\u00e1r\u00e1s h\u00edv\u00e1sa is egyes nyilatkozatk\u00e9nt van kezelve \u00e9s feldolgozva. \u00cdgy az els\u0151 elj\u00e1r\u00e1s h\u00edv\u00e1s sikeresen befejez\u0151dik, h\u00e1rom rekordot besz\u00farva; a m\u00e1sodik elj\u00e1r\u00e1s h\u00edv\u00e1s hib\u00e1val v\u00e9gz\u0151dik, vissza\u00e1ll\u00edtva a negyedik rekordot, amelyet m\u00e1r siker\u00fclt besz\u00farni; a harmadik h\u00edv\u00e1s hib\u00e1val v\u00e9gz\u0151dik, <b>\u00e9s a t\u00e1bl\u00e1ban h\u00e1rom rekord marad.<\/b>.<\/p>\n<h3>H\u00e1ny sor lesz a t\u00e1bl\u00e1ban a k\u00f6vetkez\u0151 szkript v\u00e9grehajt\u00e1sa ut\u00e1n?<\/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;Hopp\u00e1!&#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\">V\u00e1lasz<\/b>Az Oracle dokument\u00e1ci\u00f3ja alapj\u00e1n (id\u00e9zve a 11.2-b\u00f3l):<\/p>\n<p>Ellen\u0151rz\u00e9si felt\u00e9tel megad\u00e1sa lehet\u0151v\u00e9 teszi, hogy megadja a t\u00e1bl\u00e1nak azt a felt\u00e9tel\u00e9t, amelynek minden sornak meg kell felelnie. Az ellen\u0151rz\u00e9s teljes\u00edt\u00e9s\u00e9hez a t\u00e1bl\u00e1ban minden sor eset\u00e9ben a felt\u00e9telt igaznak vagy ismeretlennek (null miatt) kell lennie. Amikor az Oracle egy adott sorra egy ellen\u0151rz\u00e9si felt\u00e9telt \u00e9rt\u00e9kel, akkor a felt\u00e9telben szerepl\u0151 oszlopnevek az adott sor oszlopaiban l\u00e9v\u0151 \u00e9rt\u00e9kekre utalnak.<\/p>\n<p>\u00cdgy a null \u00e9rt\u00e9k \u00e1tmegy a vizsg\u00e1laton, \u00e9s az anonim blokk sikeresen v\u00e9grehajthat\u00f3, eg\u00e9szen addig a pillanatig, am\u00edg meg nem pr\u00f3b\u00e1lj\u00e1k besz\u00farni a 3-as \u00e9rt\u00e9ket. Ekkor a hiba kezel\u0151 blokk le\u00e1ll\u00edtja a kiv\u00e9telt, \u00e9s nem t\u00f6rt\u00e9nik visszag\u00f6rget\u00e9s, <b>a t\u00e1bl\u00e1ban n\u00e9gy sor marad.<\/b> az \u00e9rt\u00e9kek 1, null, 2 \u00e9s \u00fajra null.<\/p>\n<h3>Milyen \u00e9rt\u00e9kp\u00e1rok foglalnak el azonos mennyis\u00e9g\u0171 helyet a blokkban?<\/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', 'Vaszja', 10, 10, 'D', 'Vaszja');\n<\/code><\/pre>\n<p><\/p>\n<ul>\n<li>A \u00e9s X<\/li>\n<li>B \u00e9s Y<\/li>\n<li>C \u00e9s K<\/li>\n<li>C \u00e9s Z<\/li>\n<li>K \u00e9s Z<\/li>\n<li>I \u00e9s J<\/li>\n<li>J \u00e9s X<\/li>\n<li>Minden felsorolt<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">V\u00e1lasz<\/b>Hozzunk p\u00e9ld\u00e1kat a dokument\u00e1ci\u00f3b\u00f3l (12.1.0.2) a k\u00fcl\u00f6nb\u00f6z\u0151 adatt\u00edpusok t\u00e1rol\u00e1s\u00e1r\u00f3l az Oracle-ban.<\/p>\n<p><b>CHAR adatt\u00edpus<\/b><br \/>\nA CHAR adatt\u00edpus r\u00f6gz\u00edtett hossz\u00fas\u00e1g\u00fa karakterl\u00e1ncot specifik\u00e1l az adatb\u00e1zis karakterk\u00e9szlet\u00e9ben. Az adatb\u00e1zis karakterk\u00e9szlet\u00e9nek megad\u00e1sakor hat\u00e1rozza meg azt. Az Oracle biztos\u00edtja, hogy minden CHAR oszlopban t\u00e1rolt \u00e9rt\u00e9k megfeleljen a kiv\u00e1lasztott hossz\u00fas\u00e1gi szemantik\u00e1ban megadott m\u00e9retnek. Ha r\u00f6videbb \u00e9rt\u00e9ket ad meg, mint az oszlophossz, akkor az Oracle a kiv\u00e1lasztott hossz\u00fas\u00e1gra kieg\u00e9sz\u00edti az \u00e9rt\u00e9ket \u00fcres karakterekkel.<\/p>\n<p><b>VARCHAR2 adatt\u00edpus<\/b><br \/>\nA VARCHAR2 adatt\u00edpus v\u00e1ltoz\u00f3 hossz\u00fas\u00e1g\u00fa karakterl\u00e1ncot specifik\u00e1l az adatb\u00e1zis karakterk\u00e9szlet\u00e9ben. Az adatb\u00e1zis karakterk\u00e9szlet\u00e9nek megad\u00e1sakor hat\u00e1rozza meg azt. Az Oracle pontosan \u00fagy t\u00e1rol egy karakter \u00e9rt\u00e9ket a VARCHAR2 oszlopban, ahogy megadta, kip\u00e1rn\u00e1z\u00e1s n\u00e9lk\u00fcl, felt\u00e9ve, hogy az \u00e9rt\u00e9k nem haladja meg az oszlop hossz\u00e1t.<\/p>\n<p><b>NUMBER adatt\u00edpus<\/b><br \/>\nA NUMBER adatt\u00edpus null\u00e1t, valamint pozit\u00edv \u00e9s negat\u00edv r\u00f6gz\u00edtett sz\u00e1mokat t\u00e1rol, abszol\u00fat \u00e9rt\u00e9kek 1.0 x 10-130 \u00e9s 1.0 x 10126 k\u00f6z\u00f6tti \u00e9rt\u00e9kek k\u00f6z\u00f6tt, kiv\u00e9ve az ut\u00f3bbit. Ha olyan aritmetikai kifejez\u00e9st ad meg, amelynek \u00e9rt\u00e9ke nagys\u00e1ga el\u00e9rheti vagy meghaladhatja az 1.0 x 10126-ot, akkor az Oracle hib\u00e1t ad vissza. Minden NUMBER \u00e9rt\u00e9k 1 \u00e9s 22 byte k\u00f6z\u00f6tt ig\u00e9nyel. Figyelembe v\u00e9ve ezt, a NUMBER(p) t\u00edpus\u00fa numerikus adatt\u00edpusra vonatkoz\u00f3 oszlopsz\u00e9less\u00e9get az al\u00e1bbi k\u00e9plet alapj\u00e1n lehet kisz\u00e1m\u00edtani: <i>ROUND((length(p)+s)\/2))+1<\/i> ahol s nulla, ha a sz\u00e1m pozit\u00edv, \u00e9s s egy, ha a sz\u00e1m negat\u00edv.<\/p>\n<p>Ezen k\u00edv\u00fcl id\u00e9zz\u00fcnk egy szakaszt a dokument\u00e1ci\u00f3b\u00f3l a null \u00e9rt\u00e9kek t\u00e1rol\u00e1s\u00e1r\u00f3l.<\/p>\n<p>A null egy \u00e9rt\u00e9k hi\u00e1nya egy oszlopban. A nullok hi\u00e1nyz\u00f3, ismeretlen vagy nem alkalmazhat\u00f3 adatokat jeleznek. A nullok t\u00e1rol\u00f3dnak az adatb\u00e1zisban, ha adatoszloppal hat\u00e1rosak. Ezekben az esetekben 1 byte-ot ig\u00e9nyelnek az oszlop hossz\u00e1nak t\u00e1rol\u00e1s\u00e1hoz (nulla). A sor v\u00e9g\u00e9n tal\u00e1lhat\u00f3 nullok eset\u00e9ben nincs t\u00e1rol\u00e1s sz\u00fcks\u00e9ges, mivel egy \u00faj sorfej jelzi, hogy az el\u0151z\u0151 sor fennmarad\u00f3 oszlopai null\u00e1k. P\u00e9ld\u00e1ul, ha a t\u00e1bla utols\u00f3 h\u00e1rom oszlopa null, akkor ezekhez az oszlopokhoz nincs t\u00e1rolva adat.<\/p>\n<p>Ezekb\u0151l az adatokb\u00f3l k\u00f6vetkeztet\u00e9seket vonunk le. Tekintettel arra, hogy az adatb\u00e1zis AL32UTF8 k\u00f3dol\u00e1st haszn\u00e1l, ebben a k\u00f3dol\u00e1sban az orosz bet\u0171k 2 byte-ot fognak foglalni.<\/p>\n<p>1) A \u00e9s X, az a mez\u0151 \u00e9rt\u00e9ke &#8216;Y&#8217; 1 b\u00e1jt, az x mez\u0151 \u00e9rt\u00e9ke \u2018D\u2019 \u2013 2 b\u00e1jt<br \/>\n2) B \u00e9s Y, a 'Vasya' b \u00e9rt\u00e9ke 10 karakterre kieg\u00e9sz\u00fcl sz\u00f3k\u00f6z\u00f6kkel, \u00e9s 14 b\u00e1jtot foglal el, a 'Vasya' d \u2013 8 b\u00e1jtot foglal el.<br \/>\n3) C \u00e9s K. Mindk\u00e9t mez\u0151 NULL \u00e9rt\u00e9ket kapott, ut\u00e1nuk \u00e9rt\u00e9kes mez\u0151k j\u00f6nnek, ez\u00e9rt 1 b\u00e1jtot foglalnak el.<br \/>\n4) C \u00e9s Z. Mindk\u00e9t mez\u0151 NULL \u00e9rt\u00e9ket kapott, de a Z mez\u0151 az utols\u00f3 a t\u00e1bl\u00e1zatban, ez\u00e9rt nem foglal helyet (0 b\u00e1jt). A C mez\u0151 1 b\u00e1jtot foglal el.<br \/>\n5) K \u00e9s Z. Hasonl\u00f3 az el\u0151z\u0151 esetre. A K mez\u0151 \u00e9rt\u00e9ke 1 b\u00e1jtot foglal el, a Z \u2013 0-t.<br \/>\n6) I \u00e9s J. A dokument\u00e1ci\u00f3 szerint mindk\u00e9t \u00e9rt\u00e9k 2 b\u00e1jtot fog foglalni. A hossz\u00fas\u00e1got a dokument\u00e1ci\u00f3b\u00f3l vett k\u00e9plet szerint sz\u00e1m\u00edtjuk: round((1 + 0) \/ 2) + 1 = 1 + 1 = 2.<br \/>\n7) J \u00e9s X. A J mez\u0151 \u00e9rt\u00e9ke 2 b\u00e1jtot foglal el, az X mez\u0151 \u00e9rt\u00e9ke 2 b\u00e1jtot foglal el.<\/p>\n<p><b>\u00d6sszess\u00e9g\u00e9ben a helyes v\u00e1ltozatok: C \u00e9s K, I \u00e9s J, J \u00e9s X.<\/b><\/p>\n<p><\/p>\n<h3>Mekkora lesz k\u00f6r\u00fclbel\u00fcl a clustering factor a T_I indexn\u00e9l?<\/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>T\u00edzesterm\u00e9kek<\/li>\n<li>K\u00f6r\u00fclbel\u00fcl sz\u00e1zak<\/li>\n<li>K\u00f6r\u00fclbel\u00fcl ezrek<\/li>\n<li>K\u00f6r\u00fclbel\u00fcl t\u00edzezer<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">V\u00e1lasz<\/b>Az Oracle dokument\u00e1ci\u00f3ja szerint (12.1-b\u0151l id\u00e9zve):<\/p>\n<p>A B-fa index clustering factor m\u00e9ri a sorok fizik\u00e1lis csoportos\u00edt\u00e1s\u00e1t egy index \u00e9rt\u00e9kkel kapcsolatban.<\/p>\n<p>A clustering factor seg\u00edt az optimaliz\u00e1l\u00f3nak eld\u00f6nteni, hogy egy index vizsg\u00e1lat vagy teljes t\u00e1bl\u00e1zat vizsg\u00e1lat hat\u00e9konyabb bizonyos lek\u00e9rdez\u00e9sekhez. Alacsony clustering factor hat\u00e9kony index vizsg\u00e1latot jelez.<\/p>\n<p>A clustering factor, amely k\u00f6zel van a t\u00e1bl\u00e1zat blokkjainak sz\u00e1m\u00e1hoz, azt jelenti, hogy a sorok fizikailag rendezettek a t\u00e1bl\u00e1zat blokkjaiban az index kulcs szerint. Ha az adatb\u00e1zis teljes t\u00e1bl\u00e1zat vizsg\u00e1latot v\u00e9gez, akkor tend\u00e1l a sorok visszakeres\u00e9s\u00e9re, ahogyan a lemezen t\u00e1rolva vannak, rendezve az index kulcs szerint. A clustering factor, amely k\u00f6zel \u00e1ll a sorok sz\u00e1m\u00e1hoz, azt jelenti, hogy a sorok v\u00e9letlenszer\u0171en sz\u00f3rva vannak az adatb\u00e1zis blokkjain az index kulcs szerint. Ha az adatb\u00e1zis teljes t\u00e1bl\u00e1zat vizsg\u00e1latot v\u00e9gez, akkor a sorokat nem fogja rendezett sorrendben visszakeresni ezzel az index kulccsal.<\/p>\n<p>Ebben az esetben az adatok t\u00f6k\u00e9letesen rendezettek, \u00edgy a clustering factor egyenl\u0151 vagy k\u00f6zel lesz a t\u00e1bl\u00e1zatban foglalt blokkok sz\u00e1m\u00e1hoz. A 8 kilob\u00e1jtos alap blokk m\u00e9ret\u00e9vel sz\u00e1molva v\u00e1rhat\u00f3, hogy egy blokkba k\u00f6r\u00fclbel\u00fcl ezer sz\u0171k number \u00e9rt\u00e9k f\u00e9r, \u00edgy a blokkok sz\u00e1ma, \u00e9s ennek k\u00f6vetkezt\u00e9ben a clustering factor k\u00f6r\u00fclbel\u00fcl <b>t\u00edzesterm\u00e9kek<\/b>.<\/p>\n<h3>Milyen N \u00e9rt\u00e9kek eset\u00e9n fog a k\u00f6vetkez\u0151 szkript sikeresen v\u00e9grehajt\u00f3dni egy norm\u00e1l adatb\u00e1zisban a standard be\u00e1ll\u00edt\u00e1sokkal?<\/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\">V\u00e1lasz<\/b>Az Oracle dokument\u00e1ci\u00f3ja alapj\u00e1n (id\u00e9zve a 11.2-b\u00f3l):<\/p>\n<p>Logikai adatb\u00e1zis hat\u00e1rok<\/p>\n<p><strong>Elem<\/strong><br \/>\n<strong>Hat\u00e1r t\u00edpusa<\/strong><br \/>\n<strong>Hat\u00e1r\u00e9rt\u00e9k<\/strong><\/p>\n<p>Indexek<br \/>\nAz indexelt oszlopok teljes m\u00e9rete<br \/>\nA t\u00e1bl\u00e1zat blokk m\u00e9ret\u00e9nek 75%-a m\u00ednusz n\u00e9mi t\u00falterhel\u00e9s<\/p>\n<p>\n\u00cdgy teh\u00e1t az indexelt oszlopok \u00f6sszes\u00edtett m\u00e9ret\u00e9nek nem szabad meghaladnia a 6KB-ot. A tov\u00e1bbiak az adott adatb\u00e1zis k\u00f3dol\u00e1s\u00e1t\u00f3l f\u00fcggnek. Az AL32UTF8 k\u00f3dol\u00e1s eset\u00e9n egy karakter legfeljebb 4 b\u00e1jt helyet foglalhat el, \u00edgy 6 kilob\u00e1jt eset\u00e9n a legrosszabb forgat\u00f3k\u00f6nyvben k\u00f6r\u00fclbel\u00fcl 1500 karakter f\u00e9r el. Ez\u00e9rt az Oracle meg fogja tiltani egy index l\u00e9trehoz\u00e1s\u00e1t, ha N = 400 (amikor a kulcs hossza a legrosszabb esetben 1600 karakter * 4 b\u00e1jt + a rowid hossza) annak ellen\u00e9re, hogy <b>ha N = 200 (\u00e9s kevesebb)<\/b> az index l\u00e9trehoz\u00e1sa probl\u00e9m\u00e1k n\u00e9lk\u00fcl v\u00e9grehajthat\u00f3.<\/p>\n<h3>Az INSERT oper\u00e1tor, APPEND hinttel a k\u00f6zvetlen m\u00f3dban t\u00f6rt\u00e9n\u0151 adatok bet\u00f6lt\u00e9s\u00e9re szolg\u00e1l. Mi t\u00f6rt\u00e9nik, ha egy olyan t\u00e1bl\u00e1hoz alkalmazz\u00e1k, amelyhez trigger tartozik?<\/h3>\n<p><\/p>\n<ul>\n<li>Az adatok k\u00f6zvetlen m\u00f3dban lesznek bet\u00f6ltve, a trigger pedig \u00fagy fog m\u0171k\u00f6dni, ahogy kell.<\/li>\n<li>Az adatok k\u00f6zvetlen m\u00f3dban lesznek bet\u00f6ltve, de a trigger nem fog v\u00e9grehajt\u00f3dni.<\/li>\n<li>Az adatok hagyom\u00e1nyos m\u00f3dban lesznek bet\u00f6ltve, a trigger pedig \u00fagy fog m\u0171k\u00f6dni, ahogy kell.<\/li>\n<li>Az adatok hagyom\u00e1nyos m\u00f3dban lesznek bet\u00f6ltve, de a trigger nem fog v\u00e9grehajt\u00f3dni.<\/li>\n<li>Az adatok nem lesznek bet\u00f6ltve, \u00e9s hiba\u00fczenet fog jelentkezni.<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">V\u00e1lasz<\/b>Alapvet\u0151en ez a k\u00e9rd\u00e9s ink\u00e1bb logikai. A helyes v\u00e1lasz megtal\u00e1l\u00e1sa \u00e9rdek\u00e9ben a k\u00f6vetkez\u0151 \u00e9rvel\u00e9si modellt aj\u00e1nlan\u00e1m:<\/p>\n<ol>\n<li>A k\u00f6zvetlen m\u00f3d\u00fa besz\u00far\u00e1s k\u00f6zvetlen adatblokk k\u00e9pz\u00e9s\u00e9vel t\u00f6rt\u00e9nik, a SQL-motoron k\u00edv\u00fcl, ami biztos\u00edtja a magas sebess\u00e9get. \u00cdgy nagyon neh\u00e9z biztos\u00edtani a trigger v\u00e9grehajt\u00e1s\u00e1t, ha egy\u00e1ltal\u00e1n lehets\u00e9ges, \u00e9s ennek nincs \u00e9rtelme, mivel ez \u00edgy is jelent\u0151sen lelass\u00edtja a besz\u00far\u00e1st.<\/li>\n<li>A trigger v\u00e9grehajt\u00e1s\u00e1nak elmulaszt\u00e1sa azt fogja eredm\u00e9nyezni, hogy az azonos adatokat tartalmaz\u00f3 t\u00e1bl\u00e1k eset\u00e9n az adatb\u00e1zis \u00e1llapota (m\u00e1s t\u00e1bl\u00e1k eset\u00e9n) att\u00f3l fog f\u00fcggeni, hogy ezek az adatok milyen m\u00f3dban lettek besz\u00farva. Ez nyilv\u00e1nval\u00f3an rombolni fogja az adatok integrit\u00e1s\u00e1t, \u00e9s nem alkalmazhat\u00f3 megold\u00e1sk\u00e9nt a production k\u00f6rnyezetben.<\/li>\n<li>A k\u00e9rt m\u0171velet v\u00e9grehajt\u00e1s\u00e1nak lehetetlens\u00e9ge \u00e1ltal\u00e1ban hiba\u00fczenetk\u00e9nt \u00e9rtelmezhet\u0151. De itt \u00e9rdemes megeml\u00edteni, hogy az APPEND hint, \u00e9s a hint logik\u00e1ja alapvet\u0151en az, hogy figyelembe veszik, ha lehets\u00e9ges, ha nem, a parancs a hint figyelembev\u00e9tele n\u00e9lk\u00fcl hajt\u00f3dik v\u00e9gre.<\/li>\n<\/ol>\n<p>\n\u00cdgy a v\u00e1rt v\u00e1lasz az, hogy <b>az adatok hagyom\u00e1nyos (SQL) m\u00f3dban fognak bet\u00f6lt\u0151dni, a trigger pedig m\u0171k\u00f6dni fog.<\/b><\/p>\n<p>Az Oracle dokument\u00e1ci\u00f3ja szerint (8.04-b\u0151l id\u00e9zve):<\/p>\n<p>A korl\u00e1toz\u00e1sok megs\u00e9rt\u00e9se a hagyom\u00e1nyos besz\u00far\u00e1si \u00fatvonal haszn\u00e1lat\u00e1val, soros v\u00e9grehajt\u00e1sra okozza az utas\u00edt\u00e1s v\u00e9grehajt\u00e1s\u00e1t, figyelmeztet\u00e9sek vagy hiba\u00fczenetek n\u00e9lk\u00fcl. A kiv\u00e9tel a tranzakci\u00f3n bel\u00fcl t\u00f6bbsz\u00f6r ugyanazon t\u00e1bl\u00e1t \u00e9rint\u0151 utas\u00edt\u00e1sokra vonatkoz\u00f3 korl\u00e1toz\u00e1s, ami hiba\u00fczeneteket okozhat.<br \/>\nP\u00e9ld\u00e1ul, ha a t\u00e1bl\u00e1n trigger vagy referenci\u00e1lis integrit\u00e1s van, akkor az APPEND tipp figyelmen k\u00edv\u00fcl lesz hagyva, amikor k\u00f6zvetlen bet\u00f6lt\u00e9s\u0171 INSERT-et (soros vagy p\u00e1rhuzamos) pr\u00f3b\u00e1lsz haszn\u00e1lni, valamint a PARALLEL tipp vagy z\u00e1rad\u00e9k, ha van ilyen.<\/p>\n<h3>Mi fog t\u00f6rt\u00e9nni a k\u00f6vetkez\u0151 szkript v\u00e9grehajt\u00e1sakor?<\/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>Sikeres v\u00e9grehajt\u00e1s<\/li>\n<li>Hiba a szintaktikai hiba miatt<\/li>\n<li>Hiba, amely az auton\u00f3m tranzakci\u00f3 \u00e9rv\u00e9nytelens\u00e9g\u00e9vel kapcsolatos<\/li>\n<li>Hiba, amely a h\u00edv\u00e1sok maxim\u00e1lis m\u00e9lys\u00e9g\u00e9nek t\u00fall\u00e9p\u00e9s\u00e9vel kapcsolatos<\/li>\n<li>Hiba, amely a k\u00fcls\u0151 kulcs megs\u00e9rt\u00e9s\u00e9vel kapcsolatos<\/li>\n<li>Hiba, amely a z\u00e1rol\u00e1sokkal kapcsolatos<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">V\u00e1lasz<\/b>A t\u00e1bla \u00e9s a trigger teljesen helyesen van l\u00e9trehozva, \u00e9s ez a m\u0171velet nem kellene probl\u00e9m\u00e1t okozzon. Az auton\u00f3m tranzakci\u00f3k a triggerben is enged\u00e9lyezettek, k\u00fcl\u00f6nben nem lenne lehets\u00e9ges p\u00e9ld\u00e1ul a napl\u00f3z\u00e1s.<\/p>\n<p>Az els\u0151 sor besz\u00far\u00e1sa ut\u00e1n a trigger sikeres aktiv\u00e1l\u00e1sa a m\u00e1sodik sor besz\u00far\u00e1s\u00e1t eredm\u00e9nyezn\u00e9, ami \u00fajra aktiv\u00e1lja a triggert, ami harmadik sort besz\u00far, \u00e9s \u00edgy tov\u00e1bb, am\u00edg a statement \u00f6ssze nem omlik a h\u00edv\u00e1sok maxim\u00e1lis m\u00e9lys\u00e9g\u00e9nek t\u00fall\u00e9p\u00e9se miatt. Azonban van egy m\u00e1sik finom r\u00e9szlet. A trigger v\u00e9grehajt\u00e1s\u00e1nak pillanat\u00e1ban az els\u0151 besz\u00fart rekord m\u00e9g nem kommit\u00e1lva. Ez\u00e9rt a trigger, amely auton\u00f3m tranzakci\u00f3ban m\u0171k\u00f6dik, megpr\u00f3b\u00e1l besz\u00farni a t\u00e1bl\u00e1ba egy olyan rekordot, amely k\u00fcls\u0151 kulcs r\u00e9v\u00e9n egy m\u00e9g nem kommit\u00e1lt rekordra hivatkozik. Ez v\u00e1rakoz\u00e1st eredm\u00e9nyez (az auton\u00f3m tranzakci\u00f3 v\u00e1rja a f\u0151 tranzakci\u00f3 kommit\u00e1l\u00e1s\u00e1t, hogy tudja, besz\u00farhat-e adatokat), \u00e9s egyidej\u0171leg a f\u0151 tranzakci\u00f3 v\u00e1rja az auton\u00f3m kommit\u00e1l\u00e1s\u00e1t, hogy folytathassa a munk\u00e1t a trigger ut\u00e1n. <b>Deadlock l\u00e9p fel, \u00e9s ennek k\u00f6vetkezt\u00e9ben az auton\u00f3m tranzakci\u00f3t le\u00f6l\u00e9s miatt megsz\u00fcntetik, amely a z\u00e1rol\u00e1sokkal kapcsolatos<\/b>.<\/p>\n<p class=\"for_users_only_msg\">Csak a regisztr\u00e1lt felhaszn\u00e1l\u00f3k vehetnek r\u00e9szt a szavaz\u00e1son. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">K\u00e9rem, jelentkezzen be.<\/a><\/noindex>, k\u00e9rem.<\/p>\n<h2 class=\"default-block__polling-title\">Neh\u00e9z volt?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Mint k\u00e9t h\u00fcvelykujj, azonnal mindent helyesen d\u00f6nt\u00f6ttem el.<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Nem annyira, hib\u00e1ztam p\u00e1r k\u00e9rd\u00e9sn\u00e9l.<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    F\u00e9lre\u00e9rthet\u0151en oldottam meg.<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    K\u00e9tszer tal\u00e1ltam el a v\u00e1laszt!<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    \u00cdrok a megjegyz\u00e9sekbe<\/p>\n<\/li>\n<\/ul>\n<p>    14 felhaszn\u00e1l\u00f3 szavazott. 10 felhaszn\u00e1l\u00f3 tart\u00f3zkodott.<br \/>\n<br \/>Forr\u00e1s: <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.3 - 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\/hu\/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.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\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\/hu\/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\udd47A Highload++ Siberia 2019 nyom\u00e1n \u2014 8 feladat az Oracle-hoz | ProHoster","description":"Hell\u00f3! 2019. j\u00fanius 24-25-\u00e9n Novoszibirszkben megrendez\u00e9sre ker\u00fclt a Highload++ Siberia konferencia.","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/po-sledam-highload-siberia-2019-8-zadach-po-oracle","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","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\/hu\/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\/hu\/wp-json\/wp\/v2\/posts\/36171","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=36171"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/36171\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/27053"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=36171"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=36171"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=36171"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}