<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7419964986295601837</id><updated>2011-11-28T00:24:27.995+01:00</updated><title type='text'>Oracle Optimization - Nyárády</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://oraoptimization.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://oraoptimization.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>hobs</name><uri>http://www.blogger.com/profile/07996651390466744259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp1.blogger.com/_vEoxRJtwuhk/R9CImnFFKgI/AAAAAAAAAAo/5n_ARucps9M/S220/cv_120x160.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>25</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7419964986295601837.post-7586605557472559877</id><published>2008-10-27T07:30:00.005+01:00</published><updated>2008-10-27T07:41:16.683+01:00</updated><title type='text'>Oracle Blogger Dinner III.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_vEoxRJtwuhk/SQVh6DM61RI/AAAAAAAAACo/ErZMQgl4xYg/s1600-h/pizza.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 175px;" src="http://2.bp.blogspot.com/_vEoxRJtwuhk/SQVh6DM61RI/AAAAAAAAACo/ErZMQgl4xYg/s200/pizza.jpg" alt="" id="BLOGGER_PHOTO_ID_5261719389572093202" border="0" /&gt;&lt;/a&gt;A mai napon 17 órakor kerül sor az Oracle Blogger Dinner 3. felvonására. A témánk ezúttal az SQL Server migrációja lesz Oracle adatbázis-kezelőre, melyet &lt;a href="http://orabusiness.blogspot.com/" target="_blank"&gt;Tánczos Zoltán&lt;/a&gt; vezet majd fel, illetve ad elő. A helyszín változatlan, a Déli Point irodaház 5. emelete az Oracle-nél, a körítés azonban megújul. A menü ezúttal nem pizza és üdítő lesz, hanem egy főétel desszerttel, valamint sör és üdítő:) Remélem, hogy ahogyan azt eddig is megszokhattuk, ismét hasznosan és jó hangulatban telik majd el ez a két óra.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7419964986295601837-7586605557472559877?l=oraoptimization.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraoptimization.blogspot.com/feeds/7586605557472559877/comments/default' title='Megjegyzések küldése'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419964986295601837&amp;postID=7586605557472559877' title='0 megjegyzés'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/7586605557472559877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/7586605557472559877'/><link rel='alternate' type='text/html' href='http://oraoptimization.blogspot.com/2008/10/oracle-blogger-dinner-iii.html' title='Oracle Blogger Dinner III.'/><author><name>hobs</name><uri>http://www.blogger.com/profile/07996651390466744259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp1.blogger.com/_vEoxRJtwuhk/R9CImnFFKgI/AAAAAAAAAAo/5n_ARucps9M/S220/cv_120x160.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_vEoxRJtwuhk/SQVh6DM61RI/AAAAAAAAACo/ErZMQgl4xYg/s72-c/pizza.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419964986295601837.post-1000312804796672743</id><published>2008-09-29T08:02:00.004+02:00</published><updated>2008-10-27T07:16:29.433+01:00</updated><title type='text'>Új Téma - Anonimizálás</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_vEoxRJtwuhk/SQVco35N7WI/AAAAAAAAACg/NEl8GdqhZZQ/s1600-h/Coding.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 182px;" src="http://4.bp.blogspot.com/_vEoxRJtwuhk/SQVco35N7WI/AAAAAAAAACg/NEl8GdqhZZQ/s200/Coding.jpg" alt="" id="BLOGGER_PHOTO_ID_5261713596920753506" border="0" /&gt;&lt;/a&gt;Az idei félévtől új témával kezdtem el foglalkozni, mivel egyrészt úgy gondoltam, hogy valós projekt hiányában Adatbázis hangolás témakörében nem tudnék semmi értelmes munkát diplomaként kidolgozni. Másrészt az Oracle Junior képzése kapcsán sikerült elhelyezkednem, így próbáltam valami olyan területet keresni, amit a cégemnél is hasznosítani tudok.&lt;br /&gt;&lt;br /&gt;Ennek eredményeképpen az idei félévtől Oracle adatbázisok anonimizálásával foglalkozom. A téma lényege röviden annyi, hogy a production környezetben működő adatbázisokat érzékeny adataik miatt teszt környezetben nem használhatjuk. Ezért szükség van az adatok valamilyen algoritmus szerinti kódolására úgy, hogy abból ne legyen visszafejthető az eredeti adat, azonban ugyanúgy analizálható legyen, mintha production környezetben dolgoznánk. Fontos továbbá az, hogy az egész folyamatot megfelelően tudjuk auditálni, hogy a titkosítás folyamata bizonyítható legyen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7419964986295601837-1000312804796672743?l=oraoptimization.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraoptimization.blogspot.com/feeds/1000312804796672743/comments/default' title='Megjegyzések küldése'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419964986295601837&amp;postID=1000312804796672743' title='1 megjegyzés'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/1000312804796672743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/1000312804796672743'/><link rel='alternate' type='text/html' href='http://oraoptimization.blogspot.com/2008/09/j-tma-anonimizls.html' title='Új Téma - Anonimizálás'/><author><name>hobs</name><uri>http://www.blogger.com/profile/07996651390466744259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp1.blogger.com/_vEoxRJtwuhk/R9CImnFFKgI/AAAAAAAAAAo/5n_ARucps9M/S220/cv_120x160.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_vEoxRJtwuhk/SQVco35N7WI/AAAAAAAAACg/NEl8GdqhZZQ/s72-c/Coding.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419964986295601837.post-2927416866036151897</id><published>2008-09-17T09:10:00.009+02:00</published><updated>2008-10-27T07:44:36.600+01:00</updated><title type='text'>Nyári események - Oracle Junior képzés</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_vEoxRJtwuhk/SNCtty23fhI/AAAAAAAAACQ/bawNRGlcBog/s1600-h/oracle_certprof_clr_rgb.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_vEoxRJtwuhk/SNCtty23fhI/AAAAAAAAACQ/bawNRGlcBog/s200/oracle_certprof_clr_rgb.jpg" alt="" id="BLOGGER_PHOTO_ID_5246884568144248338" border="0" /&gt;&lt;/a&gt; A legutóbbi, nyár eleji bejegyzéseim között tettem említést az &lt;a href="http://www.oracle.hu/"&gt;Oracle Hungary kft.&lt;/a&gt; által szervezett &lt;a href="http://www.eestec.hu/oracle"&gt;Junior képzés&lt;/a&gt;ről. Mint azt sokan tudjátok már, sikerült bejutnom rá, így a nyaramat a strand helyett az Oracle székházában, a Déli Point-ban töltöttem. Első hangzásra ez talán picit negatívumnak is hangozhatna, ám a körülmények, a színvonal, s nem utolsó sorban az oktató gárda miatt olyan tapasztalatokkal és élményekkel gazdagodtam, hogy egy nyaramat sem cserélném el vele. A képzés végén kicsit olyan érzésem volt, mint amikor egy iskolából ballag el az ember, s tisztában van vele, hogy egy korszak zárult le az életében. Ezt az érzést tompítandó, a többi DBA hallgatóval megalapítottunk az OCF (Oracle Certified Fan) minősítést, s minden hónapban összejárunk egy-egy vizsga erejéig:)&lt;br /&gt;&lt;br /&gt;A tanfolyamon fejtágítást a Webváltó kft. méltán híres oktatói, Kerepes Tamás, Tóth Balázs, Gász Róbert és Varga Dávid végezték rajtunk, DBA hallgatókon. A képzés keretében pedig, ha sikeres szerződést kötöttünk egy partnercéggel, akkor az alábbi tanfolyamokat végezhettük el:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Oracle Database 10g: SQL Fundamentals&lt;/li&gt;&lt;li&gt;Oracle Database 10g: PL/SQL Fundamentals +  Develop PL/SQL Program Units&lt;/li&gt;&lt;li&gt;Oracle Database 10g: Administration Workshop I&lt;/li&gt;&lt;li&gt;Oracle Database 10g: Administration Workshop II&lt;/li&gt;&lt;li&gt;Oracle Database 10g: SQL Tuning&lt;/li&gt;&lt;li&gt;Oracle Database 10g: Performance Tuning&lt;/li&gt;&lt;li&gt;Kerepes Tamásék által kidolgozott DBA  workshopok (DBA I, DBA II, Backup&amp;amp;Recovery, Transportable Tablespaces Workshop, ASM Workshop)&lt;/li&gt;&lt;/ul&gt;A legnagyobb tapasztalatot szerintem a legutóbb említett, 5db 1 napos workshop jelentette, úgyhogy ha valakinek módjában áll, azokat feltétlen ajánlom.&lt;br /&gt;&lt;br /&gt;A tanfolyam színvonalát szavatolja továbbá az is, hogy augusztus utolsó két hetében még sikeresen megcsináltam az Oracle Database 10g Administrator-i vizsga három szintjéből kettőt, az OCA-t és az OCP-t. Így most már hivatalosan is "Oracle Database 10g Administrator Certified Professional" vagyok:)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7419964986295601837-2927416866036151897?l=oraoptimization.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraoptimization.blogspot.com/feeds/2927416866036151897/comments/default' title='Megjegyzések küldése'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419964986295601837&amp;postID=2927416866036151897' title='0 megjegyzés'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/2927416866036151897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/2927416866036151897'/><link rel='alternate' type='text/html' href='http://oraoptimization.blogspot.com/2008/09/nyri-esemnyek-oracle-junior-kpzs.html' title='Nyári események - Oracle Junior képzés'/><author><name>hobs</name><uri>http://www.blogger.com/profile/07996651390466744259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp1.blogger.com/_vEoxRJtwuhk/R9CImnFFKgI/AAAAAAAAAAo/5n_ARucps9M/S220/cv_120x160.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_vEoxRJtwuhk/SNCtty23fhI/AAAAAAAAACQ/bawNRGlcBog/s72-c/oracle_certprof_clr_rgb.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419964986295601837.post-7923468003675066844</id><published>2008-06-11T17:37:00.006+02:00</published><updated>2008-06-11T18:49:13.962+02:00</updated><title type='text'>Oracle Blogger Dinner II.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://svmomblog.typepad.com/photos/uncategorized/2007/11/18/pizza.jpg" target="_blank"&gt;&lt;img style="margin: 0pt 10px 0px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_vEoxRJtwuhk/SE_zdoaWeMI/AAAAAAAAABY/40sQf8axCwY/s200/pizza.jpg" alt="" id="BLOGGER_PHOTO_ID_5210650984280651970" border="0" /&gt;&lt;/a&gt;Hétfőn - a késő délutáni órákban - második alkalommal került sor az Oracle Blogger Dinner megrendezésére, melynek célja, hogy az Oracle-s témákban blogoló emberek néhány óra erejéig személyesen is beszélgethessenek egymással egy kis pizzázás és üdítő kíséretében.&lt;br /&gt;&lt;br /&gt;A program főként két téma köré épült. Először &lt;a href="http://www.apexblog.hu/" target="_blank"&gt;Izsák Tamás&lt;/a&gt; vezetésével az Application Express előnyeit és hátrányait veséztük ki, majd a második részben &lt;a href="http://eptentimes.blogspot.com/" target="_blank"&gt;Éberhardt Péter&lt;/a&gt;rel és &lt;a href="http://bblog.notice.hu/" target="_blank"&gt;Pém Gábor&lt;/a&gt;ral tartottunk a többieknek egy kis élménybeszámolót a HOUG 2008-as konferenciájáról. Péterrel és Gáborral egyeztetve először bemutattam magát a konferenciát egy képekkel teli &lt;a href="http://members.chello.hu/m.nyarady/blog/obd2.ppt" target="_blank"&gt;slideshow&lt;/a&gt; formájában, majd ők egy-egy szívonalas és érdekes előadást ismertettek a többiek számára is. Péter választása &lt;a href="http://opteamus.blog.hu/" target="_blank"&gt;Hoppán Gergely&lt;/a&gt; (Alpha Consulting 1996 Kft) "Blogoljunk és prosperáljunk!" című előadására esett, míg Gábor &lt;a href="http://www.kancellar.hu/" target="_blank"&gt;Papp Péter&lt;/a&gt; (kancellar.hu) "Oracle hacking háziasszonyoknak" előadását mutatta be egy látványos videó kíséretében.&lt;br /&gt;A beszélgetés élvezetességéről és hasznosságáról azt hiszem egyértelműen tanúskodik az, hogy a tervezett 2 óra helyett végül 3 óra lett belőle... várjuk a folytatást:)&lt;br /&gt;&lt;br /&gt;Kapcsolódó Linkek&lt;br /&gt;&lt;a href="http://members.chello.hu/m.nyarady/blog/obd2.ppt" target="_blank"&gt;HOUG ízelítő - prezentációm&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.houg.hu/pls/apex/f?p=houg:archivum:821372529836498" target="_blank"&gt;HOUG archívum&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7419964986295601837-7923468003675066844?l=oraoptimization.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraoptimization.blogspot.com/feeds/7923468003675066844/comments/default' title='Megjegyzések küldése'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419964986295601837&amp;postID=7923468003675066844' title='1 megjegyzés'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/7923468003675066844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/7923468003675066844'/><link rel='alternate' type='text/html' href='http://oraoptimization.blogspot.com/2008/06/oracle-blogger-dinner-ii.html' title='Oracle Blogger Dinner II.'/><author><name>hobs</name><uri>http://www.blogger.com/profile/07996651390466744259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp1.blogger.com/_vEoxRJtwuhk/R9CImnFFKgI/AAAAAAAAAAo/5n_ARucps9M/S220/cv_120x160.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_vEoxRJtwuhk/SE_zdoaWeMI/AAAAAAAAABY/40sQf8axCwY/s72-c/pizza.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419964986295601837.post-7823230440358563915</id><published>2008-06-10T02:37:00.011+02:00</published><updated>2008-06-10T03:42:17.512+02:00</updated><title type='text'>Oracle Hungary Kft. - vezetőváltás</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://en.wikipedia.org/wiki/Oracle_Corporation" target="_blank"&gt;&lt;img style="margin: 0pt 10px 0px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_vEoxRJtwuhk/SE3aIoguyHI/AAAAAAAAABQ/Ca5cC0ZvuRU/s200/480px-Oracle_Corporation_HQ.jpg" alt="" id="BLOGGER_PHOTO_ID_5210049983590581730" border="0" /&gt;&lt;/a&gt;A minap (ugyanis nálam még hétfő van...) értesültem egy kedves barátomtól arról, hogy vezetőváltás történt az &lt;a href="http://www.oracle.hu/" target="_blank"&gt;Oracle Hungary Kft.&lt;/a&gt; élén. A hírnek utánaolvasva úgy gondoltam, hogy egy bejegyzést legalább megér az ügy.&lt;br /&gt;&lt;br /&gt;A 2002 júniusa óta ügyvezető igazgatói posztot betöltő Füzesi Pétert az eddig a technológiai üzletág igazgatójaként tevékenykedő Reményi Csaba váltotta. Az új ügyvezetőről legalább néhány szóban érdemes annyit tudni, hogy 39 éves, az Oracle-nél 1997 óta dolgozik. Három diplomával rendelkezik: BME villamosmérnöki, PSZF pénzügyi, illetve University of Edinburgh MBA.&lt;br /&gt;&lt;br /&gt;Kapcsolódó Linkek&lt;br /&gt;&lt;a href="http://www.hwsw.hu/hirek/36218/oracle_hungary_remenyi_csaba_fuzes_peter_ugyvezeto.html" target="_blank"&gt;HWSW.hu&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.computerworld.hu/vezetovaltas-oracle-hungary.html" target="_blank"&gt;Computerworld.hu&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7419964986295601837-7823230440358563915?l=oraoptimization.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraoptimization.blogspot.com/feeds/7823230440358563915/comments/default' title='Megjegyzések küldése'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419964986295601837&amp;postID=7823230440358563915' title='0 megjegyzés'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/7823230440358563915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/7823230440358563915'/><link rel='alternate' type='text/html' href='http://oraoptimization.blogspot.com/2008/06/oracle-hungary-kft-vezetvlts.html' title='Oracle Hungary Kft. - vezetőváltás'/><author><name>hobs</name><uri>http://www.blogger.com/profile/07996651390466744259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp1.blogger.com/_vEoxRJtwuhk/R9CImnFFKgI/AAAAAAAAAAo/5n_ARucps9M/S220/cv_120x160.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_vEoxRJtwuhk/SE3aIoguyHI/AAAAAAAAABQ/Ca5cC0ZvuRU/s72-c/480px-Oracle_Corporation_HQ.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419964986295601837.post-8092710246918816398</id><published>2008-06-08T15:12:00.003+02:00</published><updated>2008-06-08T15:30:25.590+02:00</updated><title type='text'>Oracle Junior Képzés</title><content type='html'>A tavaszi félévben az &lt;a href="http://www.oracle.hu/" target="_blank"&gt;Oracle Hungary Kft.&lt;/a&gt;, a &lt;a href="http://www.eestec.hu/" target="_blank"&gt;Magyar Villamosmérnök- és Informatikus-hallgatók Egyesülete (MAVE)&lt;/a&gt; és a &lt;a href="http://simonyi.sch.bme.hu/" target="_blank"&gt;Simonyi Károly Szakkollégium&lt;/a&gt; szervezésében lebonyolított "Nagy méretű adattárházak és BI rendszerek adminisztrációja és fejlesztése" című &lt;a href="http://eestec.hu/oracle/" target="_blank"&gt;szemináriumsorozat&lt;/a&gt; végén sikeres vizsgát tettem, így lehetőségem nyílt az Oracle University által szervezett Junior-képzésben való részvételre.&lt;br /&gt;&lt;br /&gt;A képzésre való bekerüléshez szükséges továbbá, hogy valamely Oracle partnercég jelöljön, ezért egy adatlapot kellett kitöltenünk. Ennek kapcsán frissítettem az önéletrajzomat, illetve kértem Zsolttól egy ajánlólevelet, melyeket akkor ide is kilinkelnék:&lt;br /&gt;&lt;br /&gt;Magyar CV: &lt;a href="http://members.chello.hu/m.nyarady/cv_hun.pdf" target="_blank"&gt;link&lt;/a&gt;&lt;br /&gt;Angol CV: &lt;a href="http://members.chello.hu/m.nyarady/cv_eng.pdf" target="_blank"&gt;link&lt;/a&gt;&lt;br /&gt;Ajánlólevél: &lt;a href="http://members.chello.hu/m.nyarady/NYP_ajanlolevel.pdf" target="_blank"&gt;link&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7419964986295601837-8092710246918816398?l=oraoptimization.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraoptimization.blogspot.com/feeds/8092710246918816398/comments/default' title='Megjegyzések küldése'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419964986295601837&amp;postID=8092710246918816398' title='0 megjegyzés'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/8092710246918816398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/8092710246918816398'/><link rel='alternate' type='text/html' href='http://oraoptimization.blogspot.com/2008/06/oracle-junior-kpzs.html' title='Oracle Junior Képzés'/><author><name>hobs</name><uri>http://www.blogger.com/profile/07996651390466744259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp1.blogger.com/_vEoxRJtwuhk/R9CImnFFKgI/AAAAAAAAAAo/5n_ARucps9M/S220/cv_120x160.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419964986295601837.post-8346800046020957801</id><published>2008-05-16T07:51:00.003+02:00</published><updated>2008-05-16T08:08:27.810+02:00</updated><title type='text'>Beszámolók, prezentációk...</title><content type='html'>Feltettem az oldalra további beszámolókat és prezentációkat. Ezek az alábbiak:&lt;br /&gt;&lt;br /&gt;7. féléves prezentáció: &lt;a href="http://members.chello.hu/m.nyarady/blog/beszamolok/7felev/qja31e-nyarady.ppt" target="_blank"&gt;link&lt;/a&gt;&lt;br /&gt;8. féléves tárgyfelelősi beszámoló: &lt;a href="http://members.chello.hu/m.nyarady/blog/beszamolok/8felev/qja31e-nyarady.pdf" target="_blank"&gt;link&lt;/a&gt;&lt;br /&gt;8. féléves prezentáció: &lt;a href="http://members.chello.hu/m.nyarady/blog/beszamolok/8felev/qja31e-nyarady.ppt" target="_blank"&gt;link&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A 8. féléves feladat a rendszertervezés volt. Ennek kapcsán egy hallgatói inforámiciós rendszert terveztünk &lt;a href="http://eptentimes.blogspot.com/" target="_blank"&gt;Éberhardt Péter&lt;/a&gt;rel. Az elkészült dokumentumokkal nem mondhatnám, hogy túlságosan elégedett vagyok. Összességében nincs nagy gyakorlatom rendszertervezésben, illetve ilyen minimális tesztrendszer esetén, mint amilyet mi csináltunk, nincs is túl sok értelme - szerintem - ezt sokkal jobban részletezni. A hangsúly inkább van a hangoláson, mint a tervezésen, amit előre azért nehéz belekalkulálni nagy gyakorlat hiányában, s úgy gondolom sokkal inkább az implementálás során és után derülnek majd ki a számunkra releváns információk. Mindenesetre ma 15:00-kor megpróbálom a tárgyfelelősnek valamennyire élvezhetően prezentálni ezt a nem túl izgalmas témát.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7419964986295601837-8346800046020957801?l=oraoptimization.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraoptimization.blogspot.com/feeds/8346800046020957801/comments/default' title='Megjegyzések küldése'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419964986295601837&amp;postID=8346800046020957801' title='0 megjegyzés'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/8346800046020957801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/8346800046020957801'/><link rel='alternate' type='text/html' href='http://oraoptimization.blogspot.com/2008/05/beszmolk-prezentcik.html' title='Beszámolók, prezentációk...'/><author><name>hobs</name><uri>http://www.blogger.com/profile/07996651390466744259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp1.blogger.com/_vEoxRJtwuhk/R9CImnFFKgI/AAAAAAAAAAo/5n_ARucps9M/S220/cv_120x160.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419964986295601837.post-5979277226258416164</id><published>2008-05-06T01:43:00.005+02:00</published><updated>2008-05-06T01:46:48.104+02:00</updated><title type='text'>7. féléves beszámoló</title><content type='html'>Elkészültem a 7. szemeszterhez tartozó, a tárgyfelelősnek szánt beszámolóval is. Ez gyakorlatilag egy rövid kivonata az elvégzett munkának. Akit érdekel &lt;a href="http://members.chello.hu/m.nyarady/blog/beszamolok/7felev/qja31e_nyarady.pdf" target="_blank"&gt;innen&lt;/a&gt; letöltheti.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7419964986295601837-5979277226258416164?l=oraoptimization.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraoptimization.blogspot.com/feeds/5979277226258416164/comments/default' title='Megjegyzések küldése'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419964986295601837&amp;postID=5979277226258416164' title='0 megjegyzés'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/5979277226258416164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/5979277226258416164'/><link rel='alternate' type='text/html' href='http://oraoptimization.blogspot.com/2008/05/7-flves-beszmol.html' title='7. féléves beszámoló'/><author><name>hobs</name><uri>http://www.blogger.com/profile/07996651390466744259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp1.blogger.com/_vEoxRJtwuhk/R9CImnFFKgI/AAAAAAAAAAo/5n_ARucps9M/S220/cv_120x160.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419964986295601837.post-6707625675452957321</id><published>2008-05-05T15:03:00.003+02:00</published><updated>2008-05-05T15:11:20.381+02:00</updated><title type='text'>Nem mindennapi Oracle installálás</title><content type='html'>A dokumentációk szerkesztése közben eszembe jutott, hogy található a youtube-n egy igencsak hasznos és mókás videó, ahol az Oracle adatbázis feltelepítését mutatja be Morten Egan egy kényszerzubbonyba bújva. Biztosan akad olyan, aki még nem ismerné, ezért úgy gondoltam kiteszem ide, illetve belinkelem - ha valakinek esetleg arra lenne szüksége.&lt;br /&gt;&lt;br /&gt;&lt;object height="355" width="425" align="center"&gt;&lt;param name="movie" value="http://www.youtube.com/v/CHzV4LZnvHc&amp;amp;hl=en"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/v/CHzV4LZnvHc&amp;amp;hl=en" type="application/x-shockwave-flash" wmode="transparent" height="355" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Kapcsolódó Link&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=CHzV4LZnvHc" target="_blank"&gt;Unconventional Oracle Installation (part 1)&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7419964986295601837-6707625675452957321?l=oraoptimization.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraoptimization.blogspot.com/feeds/6707625675452957321/comments/default' title='Megjegyzések küldése'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419964986295601837&amp;postID=6707625675452957321' title='0 megjegyzés'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/6707625675452957321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/6707625675452957321'/><link rel='alternate' type='text/html' href='http://oraoptimization.blogspot.com/2008/05/nem-mindennapi-oracle-installls.html' title='Nem mindennapi Oracle installálás'/><author><name>hobs</name><uri>http://www.blogger.com/profile/07996651390466744259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp1.blogger.com/_vEoxRJtwuhk/R9CImnFFKgI/AAAAAAAAAAo/5n_ARucps9M/S220/cv_120x160.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419964986295601837.post-2253646360571962927</id><published>2008-05-05T10:22:00.006+02:00</published><updated>2008-05-05T10:30:50.209+02:00</updated><title type='text'>7. féléves tanulmány</title><content type='html'>Összeállítottam az egyetem 7. szemeszterének 2 kredites önálló laboratóriumához tartozó, konzulenseknek szánt tanulmányomat, melyet a következő &lt;a href="http://members.chello.hu/m.nyarady/blog/beszamolok/7felev/tanulmany_qja31e.pdf" target="_blank"&gt;link&lt;/a&gt;ről lehet letölteni.&lt;br /&gt;A dokumentum lényegében a blog architektúrás irodalomfeldolgozását tartalmazza kisebb javításokkal, kiegészítésekkel, képekkel és formázással.&lt;br /&gt;&lt;br /&gt;A tárgyfelelősnek szánt beszámoló, illetve a 8. szemeszterhez tartozó rendszerterv hamarosan szintén felkerül.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7419964986295601837-2253646360571962927?l=oraoptimization.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraoptimization.blogspot.com/feeds/2253646360571962927/comments/default' title='Megjegyzések küldése'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419964986295601837&amp;postID=2253646360571962927' title='0 megjegyzés'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/2253646360571962927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/2253646360571962927'/><link rel='alternate' type='text/html' href='http://oraoptimization.blogspot.com/2008/05/7-flves-tanulmny.html' title='7. féléves tanulmány'/><author><name>hobs</name><uri>http://www.blogger.com/profile/07996651390466744259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp1.blogger.com/_vEoxRJtwuhk/R9CImnFFKgI/AAAAAAAAAAo/5n_ARucps9M/S220/cv_120x160.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419964986295601837.post-245254907182135259</id><published>2008-05-05T10:04:00.003+02:00</published><updated>2008-05-05T10:20:48.206+02:00</updated><title type='text'>HOUG 2008</title><content type='html'>Az &lt;a href="http://www.oracle.com/global/hu/index.html" target="_blank"&gt;Oracle Hungary kft.&lt;/a&gt; és Sárecz Lajos jóvoltából április 8-11. között 3 másik évfolyamtársammal együtt részt vehettünk a &lt;a href="http://www.houg.hu/" target="_blank"&gt;Magyar Oracle Felhasználók Egyesületének (Hungarian Oracle Users Group - HOUG)&lt;/a&gt; éves konferenciáján, amiért útólag is szeretnék köszönetet mondani.&lt;br /&gt;&lt;br /&gt;A konferenciáról részletesebb beszámolót írt már a blogjában &lt;a href="http://eptentimes.blogspot.com/2008/04/houg-2008.html" target="_blank"&gt;Éberhardt Péter&lt;/a&gt; és &lt;a href="http://sumeghy-onlab.blog.hu/2008/04/13/houg_2008_visszatekintes" target="_blank"&gt;Sümeghy Tamás&lt;/a&gt; is. Én az egyik legnagyobb érdeklődéssel kísért, "Húsz újdonsag 60 percben - SQL-PL/SQL újdonságok Oracle 11g-ben" című előadásról szerettem volna írni részletesebben, azonban a fóliáit még nem sikerült megszereznem. Az előadást egyébként az általam leginkább favorizált (mondhatni kedvenc) előadó, Czinkóczki László (Oracle Hungary Kft.) tartotta.&lt;br /&gt;&lt;br /&gt;Izsák Tamás jóvoltából azonban már az előadások jelentős része elérhető a &lt;a href="http://www.houg.hu/pls/apex/f?p=houg:1041:6122594529460395::::P1041_KONF_ID:83" target="_blank"&gt;houg oldalán&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7419964986295601837-245254907182135259?l=oraoptimization.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraoptimization.blogspot.com/feeds/245254907182135259/comments/default' title='Megjegyzések küldése'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419964986295601837&amp;postID=245254907182135259' title='0 megjegyzés'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/245254907182135259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/245254907182135259'/><link rel='alternate' type='text/html' href='http://oraoptimization.blogspot.com/2008/05/houg-2008.html' title='HOUG 2008'/><author><name>hobs</name><uri>http://www.blogger.com/profile/07996651390466744259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp1.blogger.com/_vEoxRJtwuhk/R9CImnFFKgI/AAAAAAAAAAo/5n_ARucps9M/S220/cv_120x160.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419964986295601837.post-1829126778372750631</id><published>2008-03-31T20:51:00.009+02:00</published><updated>2008-04-04T06:19:39.972+02:00</updated><title type='text'>Architektúra part #8 – Processz architektúra</title><content type='html'>Ez a fejezet az Oracle adatbázis processzeivel (folyamataival), illetve az adatbázis különböző konfigurációival foglalkozik.&lt;br /&gt;Minden Oracle adatbázishoz csatlakozott felhasználónak két kód-modult kell futtatnia ahhoz, hogy hozzáférhessen egy adatbázis példányhoz. Ezek:&lt;br /&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;Valamilyen adatbázis &lt;i style=""&gt;alkalmazás&lt;/i&gt; (pl. előfordító program) vagy &lt;i style=""&gt;Oracle eszköz&lt;/i&gt; (pl. SQL*Plus) amely SQL utasításokat továbbít egy Oracle adatbázishoz.&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;Adatbázis &lt;i style=""&gt;szerver kód&lt;/i&gt;, amely értelmezi és végrehajtja az SQL utasításokat.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Ezeket a kód-modulokat futtatják a processzek. Ennek megfelelően a processzeket is két fő csoportra oszthatjuk: &lt;i style=""&gt;felhasználói processz&lt;/i&gt;ek, melyek az alkalmazás kódját futtatják, illetve &lt;i style=""&gt;Oracle adatbázis processz&lt;/i&gt;ek, ahová a szerver- és háttérfolyamatok tartoznak.&lt;br /&gt;A processzek struktúrája függ az operációs rendszertől és az adatbázis beállításaitól is. Dedikált vagy osztott szerveres megoldások közül választhatunk. Dedikált szerveres kapcsolat esetén minden felhasználóhoz tartozik egy felhasználói (user) és egy dedikált szerver processz, míg osztott szerveres kapcsolatnál egy szerver processz akár több felhasználót is kiszolgálhat egyszerre.&lt;br /&gt;&lt;br /&gt;&lt;b style=""&gt;Felhasználói processzek (User Processes):&lt;/b&gt;&lt;br /&gt;Ha egy felhasználó valamilyen adatbázishoz csatlakozó alkalmazást vagy Oracle eszközt (pl. Enterprise Manager vagy SQL*Plus) futtat, akkor az adatbázis automatikusan létrehoz számára egy felhasználói processzt, mely a felhasználó alkalmazását fogja kezelni. Néhány fogalom:&lt;br /&gt;&lt;i style=""&gt;Kapcsolat (Connection):&lt;/i&gt; kommunikációs csatorna a felhasználói processz és az adatbázis példány között. Használhat interprocessz kommunikációt, ha a felhasználói processz és az adatbázis egy gépen helyezkedik el, illetve csatlakozhat hálózaton keresztül, ha különbözőn.&lt;br /&gt;&lt;i style=""&gt;Session:&lt;/i&gt; egy adott felhasználóhoz tartozó kapcsolat (a felhasználói processzen keresztül az adatbázishoz).&lt;br /&gt;&lt;br /&gt;&lt;b style=""&gt;Szerverfolyamatok (Server Processes):&lt;/b&gt;&lt;br /&gt;Az Oracle adatbázis szerver processzek segítségével kezeli le a felhasználói processzek kéréseit. Bizonyos esetekben, ha a felhasználói- és a szerver processz egy gépen fut, akkor lehetőség van a két processzt összevonni, hogy csökkentsük az interprocessz kommunikációból származó overheadet. Hálózaton keresztül történő kommunikáció esetén azonban mindenképpen szükség van két külön processzre.&lt;br /&gt;Az egyes felhasználói alkalmazásokhoz rendelt szerver processzek a következő feladatokat láthatják el:&lt;br /&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;elemzi és futtatja az alkalmazás által kiadott SQL utasításokat&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;beolvassa a szükséges adatblokkokat az SGA osztott adatbázis bufferjeibe, ha azok még nincsenek bent&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;olyan formában adja vissza az eredményeket, amiket az alkalmazás képes feldolgozni&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;b style=""&gt;Háttérfolyamatok (Background Processes):&lt;/b&gt;&lt;br /&gt;A teljesítmény maximalizálása és a felhasználók kezelése érdekében az Oracle adatbázis számos háttérfolyamatot (background process) futtat. Ezekről információkat a V$BGPROCESS nézetből nyerhetünk ki (&lt;a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/process.htm#BEIFHCCJ" target="_blank"&gt;ábra&lt;/a&gt;).&lt;br /&gt;&lt;u&gt;Archiver Processes (ARCn):&lt;/u&gt; a rendszerben két redo log fájl található, egyszerre csak az egyiket írjuk. A két fájl cseréje után az éppen nem írás alatt álló fájlt ez a folyamat írja ki egy merevlemezre. Továbbá tranzakciókhoz kapcsolódó redo információk gyűjtésére is alkalmas, melyeket egy készenléti helyen tárol. A LOG_ARCHIVE_MAX_PROCESSES inicializálási paraméter segítségével korlátozhatjuk az archiváló folyamatok számát (aminek segítségével például nagy mennyiségű adat feltöltésekor keletkező jelentős archiválási munkát tudjuk szabályozni).&lt;br /&gt;&lt;u&gt;Checkpoint Process (CKPT):&lt;/u&gt; checkpointok előfordulásánál frissíti az adatfájlok (datafiles) fejlécét.&lt;br /&gt;&lt;u&gt;Database Writer Process (DBWn):&lt;/u&gt; a bufferek tartalmának merevlemezekre írását végzi. Pontosabban a bufferekben található régen használt (&lt;i style=""&gt;cold&lt;/i&gt;) és módosított (piszkos - &lt;i style=""&gt;dirty&lt;/i&gt;) adatokat írja ki a merevlemezekre, illetve biztosítja, hogy a felhasználói processzek számára mindig legyen üres buffer, ahova adatblokkokat olvashatnak be. Alapvetően egy ilyen processz (&lt;i style=""&gt;DBW0&lt;/i&gt;) is elegendő, azonban többprocesszoros rendszerek esetén létrehozhatunk továbbiakat (maximum 20-t) DB_WRITER_PROCESSES inicializálási paraméter segítségével – de ezt egyébként is elvégzi az adatbázis a processzorok száma és processzorcsoportok alapján.&lt;br /&gt;A piszkos buffereket a következő esetekben írjuk ki a merevlemezre:&lt;br /&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;ha a szerver processz egy bizonyos számú buffer átvizsgálása után sem talált üreset, akkor jelez a DBWn-nek, aki aszinkron módon kiír néhány piszkos buffert a lemezre&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;periodikusan ír ki buffereket, hogy újabb checkpointokat (az a pont a redo logban, ahonnan hiba esetén a visszaállítást kezdeni kell) érjen el. A checkpoint helyét a redo logban a buffer cache legöregebb piszkos bufferje határozza meg.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;A jobb teljesítmény érdekében a DBWn kötegelve (&lt;i style=""&gt;multiblock&lt;/i&gt;) írja ki a blokkokat a merevlemezre.&lt;br /&gt;&lt;u&gt;Job Queue Processes:&lt;/u&gt; kötegelt feldolgozás esetén használatosak. Gyakorlatilag egy ütemezőnek tekinthető, ami a megadott kezdeti idő és intervallum alapján megpróbálja végrehajtani a feladatot a megadott időintervallum előfordulásaikor. Egyszerre számos felhasználói feladatot képesek ütemezni. Működésük:&lt;br /&gt;&lt;ol style="margin-top: 0cm;" start="1" type="1"&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;A koordinátor processz (CJQ0) periodikusan kiválasztja a rendszer JOB$ táblájából a futtatandó feladatokat. Az újonnan kiválasztott feladatokat idő szerinti sorrendbe helyezi.&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;A CJQ0 dinamikusan létrehoz Job Queue szolga processzeket (J000..J999) a feladatok futtatására.&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;A Job Queue processz lefuttatja az egyik CJQ0 által kiválasztott feladatot.&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;A végrehajtott feladat után a processz újabb feladatért jelentkezik (polling). Ha nincs más végrehajtandó feladat, akkor átmegy alvó üzemmódba, ahonnan periodikus időközönként felébred és kér újabb feladatokat. Ha bizonyos ideig nem talál új feladatot, akkor a processz leáll.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;A Job Queue processzek maximális számát a JOB_QUEUE_PROCESSES inicializálási paraméter segítségével állíthatjuk be.&lt;br /&gt;&lt;u&gt;Log Writer Process (LGWR):&lt;/u&gt; ez a folyamat végzi a redo log bufferek tartalmának kiírását a redo log fájlokba. A redo log buffer egy körkörös buffer, azaz amint az LGWR kiírta a redo bejegyzéseket a redo log fájlokra, a szerver processzek felülírhatják a már kiírt bejegyzéseket az újakkal. Az LGWR általában elég gyors ahhoz, hogy még nagy terhelés esetén is mindig biztosítson szabad buffereket az új bejegyzések számára.&lt;br /&gt;Ír a redo log fájlokba, ha:&lt;br /&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;egy felhasználói processz jóváhagy (commit) egy tranzakciót, egy commit bejegyzést.&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;redo log buffereket: 3 másodpercenként; ha 1/3ig megteltek; mielőtt a DBWn kiírja a piszkos buffereket.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Az LGWR egyidejűleg ír több aktív redo log fájlba. Ha az egyik fájl sérül, vagy elérhetetlenné válik, akkor folytatja a többi fájlba történő írást, s logolja a hibát az LGWR trace fájljában és a system alert logban. Ha minden fájl sérült, vagy elérhetetlen, mert még nem archiválták, akkor az LGWR nem tud tovább működni.&lt;br /&gt;Ha egy felhasználó kiad egy COMMIT utasítást, akkor az LGWR egy commit bejegyzést tesz a redo log bufferbe, s azt a tranzakció redo bejegyzéseivel együtt azonnal a merevlemezre írja. Az adatblokkok kiírása azonban nem feltétlen azonnal – jellemzően egy másik, hatékonyabb időpontban történik. Ezt az eljárást hívjuk &lt;i style=""&gt;fast commit&lt;/i&gt;-nak, mivel az adatbázis ugyan visszajelzi a tranzakció jóváhagyásának sikerességét, de az új adatokat még nem rögzítettük a merevlemezen. A jóváhagyást követően a tranzakcióhoz rendelünk egy &lt;i style=""&gt;system change number (SCN)&lt;/i&gt;-t is, amely RAC-ok és elosztott adatbázisok esetén a szinkronizált visszaállításnál elengedhetetlen.&lt;br /&gt;Nagy terhelés esetén az I/O műveletek csökkentése és a teljesítmény növelése érdekében az LGWR több commitot egyszerre, úgynevezett &lt;i style=""&gt;group commit&lt;/i&gt;-ként is ki tud írni.&lt;br /&gt;&lt;u&gt;Process Monitor Process (PMON):&lt;/u&gt; amikor egy felhasználói processz sikertelenül ér véget, ő végzi a processz helyreállítását: kitakarítja az adatbázis buffer cacheét, s felszabadítja a felhasználói processz által használt erőforrásokat. Periodikusan ellenőrzi az ütemező és a szerver processzek állapotát is, s újraindítja őket, ha szükséges. Ezen kívül információkat az adatbázis példányról, valamint a hálózati listenerek ütemező processzeiről.&lt;br /&gt;Működése hasonló az SMON-éhoz: periodikusan ellenőrzi, hogy szükség van-e rá, s működésbe lép, ha egy másik processz igényli.&lt;br /&gt;&lt;u&gt;Queue Monitor Processes (QMNn):&lt;/u&gt; opcionális háttérfolyamat az Oracle Streams Advanced Queuing számára, mely az üzenetsorokat monitorozza. Maximálisan 10 ilyen sorfelügyelő processzt állíthatunk be. Hasonlóan a job queue processzekhez, ő is különbözik abban a többi háttérfolyamattól, hogy meghibásodása nem okozza az adatbázis példány meghibásodását.&lt;br /&gt;&lt;u&gt;Recoverer Process (RECO):&lt;/u&gt; elosztott adatbázisok esetén használatos háttérfolyamat, mely az elosztott tranzakciók hibáit kezeli. Bizonytalan elosztott tranzakció esetén a RECO automatikusan csatlakozik a másik adatbázishoz, s miután helyreállította a kapcsolatot az adatbázis szerverek között, eltávolítja az adott tranzakcióknak megfelelő sorokat mindegyik adatbázis várakozó (pending) tranzakciós táblájából.&lt;br /&gt;Ha nem sikerül a RECO-nak helyreállítania a kapcsolatot a másik adatbázissal, exponenciálisan növő időközönként újra próbálkozik.&lt;br /&gt;&lt;u&gt;System Monitor Process (SMON):&lt;/u&gt; az adatbázis példány indítását követő helyreállításokat végzi, ha erre szükség van. Feladatai köze tartozik még az ideiglenes szegmensek használat utáni kitakarítása, valamint a könyvtár vezérelt táblaterek (dictionary managed tablespaces) összefüggő üres extentjeinek összeolvasztása. Ha a példány helyreállítása során fájlolvasási vagy offline hiba miatt bármely lefutott tranzakciót ki kellett hagyni, akkor az SMON ezt később azonnal újra próbálja, ha az adott táblatér (tablespace) vagy fájl ismét elérhető (online) lesz.&lt;br /&gt;Hasonlóan a PMON-hoz, periodikusan ellenőrzi, hogy szükség van-e rá, meghívta-e egy másik processz.&lt;br /&gt;&lt;u&gt;Egyéb Oracle adatbázis háttérfolyamatok (röviden):&lt;/u&gt;&lt;br /&gt;&lt;i style=""&gt;ACMS (automatic controlfile to memory service):&lt;/i&gt; Oracle RAC környezetben használatos. Biztosítja az elosztott SGA frissítését globális commit/abort esetén.&lt;i style=""&gt;&lt;br /&gt;ASMB:&lt;/i&gt; a kommunikációt látja el az Automatic Storage Management példánnyal.&lt;i style=""&gt;&lt;br /&gt;DBRM (database resource manager):&lt;/i&gt; erőforrás tervezést vagy más erőforrás menedzser taszkok létrehozását végzi.&lt;i style=""&gt;&lt;br /&gt;DIA0 (diagnosability process 0):&lt;/i&gt; holtpont detektálás és feloldás a feladata.&lt;i style=""&gt;&lt;br /&gt;DIAG (diagnosability):&lt;/i&gt; diagnosztikai memóriakiíratás és globális „oradebug” parancsok futtatása.&lt;i style=""&gt;&lt;br /&gt;EMNC (event monitor coordinator):&lt;/i&gt; adatbázis eseménykezelés és értesítések.&lt;i style=""&gt;&lt;br /&gt;FBDA (flashback data archiver process):&lt;/i&gt; flashback adatarchívumok menedzselése.&lt;i style=""&gt;&lt;br /&gt;GMON:&lt;/i&gt; karbantartja az ASM diszkcsoportjainak taglistáját.&lt;i style=""&gt;&lt;br /&gt;GTX0-j (global transaction):&lt;/i&gt; Oracle RAC környezetben használatos XA globális tranzakcióknak nyújt transzparens támogatást.&lt;i style=""&gt;&lt;br /&gt;KATE:&lt;/i&gt; ASM háttérfolyamat, amely végrehajtja a proxy I/O-t egy ASM metafájlon, ha egy merevlemez offline lesz.&lt;i style=""&gt;&lt;br /&gt;MARK:&lt;/i&gt; megjelöli az ASM allokációs egységeit egy offline lemezre történő sikertelen írási kísérletet követően.&lt;i style=""&gt;&lt;br /&gt;MMAN:&lt;/i&gt; belső adatbázis taszkok számára.&lt;i style=""&gt;&lt;br /&gt;MMNL:&lt;/i&gt; a gyakori és jelentéktelenebb menedzseléssel kapcsolatos feladatokat látja el.&lt;i style=""&gt;&lt;br /&gt;MMON:&lt;/i&gt; különböző menedzseléssel kapcsolatos háttérfeladatok végrehajtása.&lt;i style=""&gt;&lt;br /&gt;ARBn:&lt;/i&gt; egy ASM példányon belüli aktuális kiegyenlítő extent mozgatásokat végzi.&lt;i style=""&gt;&lt;br /&gt;PSP0 (process spawner):&lt;/i&gt; Oracle processzek létrehozása.&lt;i style=""&gt;&lt;br /&gt;RBAL:&lt;/i&gt; egy ASM példányon belül a diszkcsoportok közötti kiegyenlítést koordinálja.&lt;i style=""&gt;&lt;br /&gt;SMCO (space management coordinator):&lt;/i&gt; tárhely kezeléssel kapcsolatos taszkok koordinálása. Dinamikus létrehoz szolga processzeket (Wnnn) a taszkok implementálására.&lt;i style=""&gt;&lt;br /&gt;VKTM (virtual keeper of time):&lt;/i&gt; felel a falióra idejének (másodpercenkénti frissítés) és a referenciaidő számlálónak (20ms-enkénti frissítés) a karbantartásáért.&lt;br /&gt;&lt;br /&gt;&lt;b style=""&gt;Trace fájlok és Alert log:&lt;/b&gt;&lt;br /&gt;Az Oracle 11g újdonságaként a problémák megelőzésére, észlelésére, diagnosztizálására és megoldására egy fejlett hibadiagnosztizáló infrastruktúra lett a rendszerbe beépítve. Főként a kritikus hibák észlelése volt a cél, amiket például adatbázis programhibák, meta- vagy ügyféladat sérülések okozhatnak.&lt;br /&gt;Kritikus hiba fellépése esetén egy incidens számot rendelünk a hibához és a hozzá tartozó diagnosztikai adatokat (pl. trace fájlok) azonnal begyűjtjük és megjelöljük ezzel az incidens számmal. Az adatokat az Automatic Diagnostic Repositoryban (ADR) – adatbázison kívüli, fájl alapú tárhely – mentjük el, ahonnan később az incidens szám alapján visszakereshető és analizálható a hiba.&lt;br /&gt;Minden szerver- és háttérfolyamat belső hiba észlelése esetén kiírja a hibához kapcsolódó információkat a saját &lt;b style=""&gt;trace fájl&lt;/b&gt;jába. Továbbá a háttérfolyamatok kiegészítő információkat is írhatnak a trace fájlba, ami segítheti az alkalmazás vagy az adatbázis példány hangolását.&lt;br /&gt;Minden adatbázishoz tartozik egy &lt;b style=""&gt;alert.log fájl&lt;/b&gt; is, mely időrendi sorrendben tartalmazza a következő üzeneteket és hibákat:&lt;br /&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;Minden belső hiba (ORA-600), blokk meghibásodás hiba (ORA-1578) és holtpont hiba (ORA-60).&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;Adminisztratív műveletek, úgy mint CREATE/ALTER/DROP DATABASE/TABLESPACE SQL utasítások, valamint az Enterprise Manager/SQL*Plus STARTUP/SHUTDOWN/ARCHIVE LOG/RECOVER utasításai.&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;Különböző elosztott szerver és ütemező folyamatok működéséhez kapcsolódó üzenetek és hibák.&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;Materializált nézeteket automatikus frissítése során fellépő hibák.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;b style=""&gt;Elosztott szerveres architektúra (Shared Server Architecture):&lt;/b&gt;&lt;br /&gt;Az elosztott szerveres architektúrában nem szükséges minden kapcsolathoz dedikálnunk egy-egy külön szerver processzt. Az ütemező a bejövő kéréseket az elosztott szerverfolyamatok készletéhez irányítja, ahonnan egy éppen tétlen folyamat fogja a kérést lekezelni. Így tulajdonképpen néhány elosztottan működő szerverrel tudjuk ugyanazt a teljesítményt produkálni, mint sok dedikált szerverrel együtt. Ezen felül mivel így az egy felhasználó számára szükséges memória is relatív kicsi, kevesebb memória és processz menedzsment szükséges, s egyidejűleg több felhasználót tudunk kiszolgálni.&lt;br /&gt;Elosztott szerveres rendszerek esetén a következő processzekre van szükség:&lt;br /&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;egy hálózati listener processz, amely létrehozza a kapcsolatot a felhasználói processzek és az ütemezők vagy a dedikált szerverek között.&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;egy vagy több ütemező processz&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;egy vagy több elosztott szerver processz&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Az adatbázispéldány indulását követően a listener processz létrehozza a kommunikációs portot, amin keresztül a felhasználók csatlakozhatnak az adatbázishoz, majd minden ütemező processz megadja a listernek azt a címet, amin várja a kapcsolat-felépítési kérelmeket. Használt hálózati protokollonként szükség van legalább egy megfelelően konfigurált ütemező processzre.&lt;br /&gt;A felhasználói processz kapcsolat-felépítési kérelme után a listener megvizsgálja, hogy a felhasználó processze használhat-e elosztott szerver processzt. Amennyiben igen, úgy a listener visszaadja számára a legkevésbé terhelt ütemező címét, amihez aztán a felhasználói processz közvetlenül csatlakozhat. Néhány felhasználói processz azonban nem képes az ütemezővel kommunikálni, dedikált szerverre van szüksége. Ebben az esetben a listener létrehozza a dedikált szervert és felépíti a megfelelő kapcsolatot.&lt;br /&gt;&lt;u&gt;Ütemező kérés- és válaszsorai:&lt;/u&gt; egy felhasználói hívást követően az ütemező a kérést a kéréssorba (&lt;b style=""&gt;request queue&lt;/b&gt;) helyezi, ahonnan a következő rendelkezésre álló elosztott szerver processz azt kiveszi. A kéréssort az SGA-ban tároljuk. Minden adott adatbázispéldányhoz tartozó ütemezőnek egy közös kéréssora van, ahonnan a szabad elosztott szerver processzek a kéréseket FIFO módon szedik ki. A kérés kiszolgálását követően a kiszolgálást végző elosztott szerver processz a választ a hívást kezdeményező ütemező saját válaszsorába helyezi el (&lt;b style=""&gt;response queue&lt;/b&gt;). Minden ütemező saját válaszsort tart fenn az SGA-ban, s innen továbbítja a teljesített kérésekre kapott választ a megfelelő felhasználói processznek.&lt;br /&gt;A kérés kiszolgálását követően tehát a felhasználó kapcsolatban maradhat, azonban nem kell számára egy külön processzt továbbra is fenntartani. A kérést kiszolgáló processz miután a választ elhelyezte a megfelelő válaszsorban, hozzáfoghat új, akár más felhasználóktól származó kérések kiszolgálásához is (&lt;a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/process.htm#BEIDDFDG" target="_blank"&gt;ábra&lt;/a&gt;).&lt;br /&gt;&lt;u&gt;Ütemező folyamatok (Dnnn):&lt;/u&gt; az ütemező folyamatok teszik lehetővé az elosztott szerveres konfiguráció számára, hogy a felhasználói folyamatok néhány limitált számú szerverfolyamaton osztozzanak. Ezáltal mivel kevesebb szerverfolyamatra van szükség, mint felhasználói folyamatra, egyidejűleg jóval több felhasználó szolgálható ki.&lt;br /&gt;Egy adatbázis példányhoz akár több ütemező folyamatot is létrehozhatunk, az adatbázis által használt hálózati protokollonként egy azonban mindenképpen szükséges. Ütemező folyamatokat akár az adatbázis futása közben is létrehozhatunk vagy eltávolíthatunk.&lt;br /&gt;Elosztott szerveres beállítások esetén a listener processz fogadja a felhasználói alkalmazásoktól beérkező kapcsolat-felépítési kérelmeket, s irányítja őket az ütemezőkhöz. Ha az alkalmazás nem képes ütemezőhöz csatlakozni, akkor a listener létrehoz számára egy dedikált szerver processzt. A listener processz nem az Oracle adatbázispéldány része, hanem az adatbázissal együttműködő hálózati processzekhez tartozik.&lt;u&gt;&lt;br /&gt;Elosztott szerverfolyamatok (Snnn):&lt;/u&gt; elosztott szerveres architektúra esetén minden szerverfolyamat több klienst szolgálhat ki (de nem egyidejűleg). Funkcionalitását tekintve nincs különbség dedikált és elosztott szerverfolyamatok között, csupán annyiban térnek el, hogy az elosztott szerverfolyamatok nincsenek egy megadott felhasználói folyamathoz hozzárendelve, hanem bármelyik kliens kéréseit kiszolgálhatják. Ebből kifolyólag az elosztott szerverfolyamatok PGA-ja nem is tartalmaz semmilyen felhasználói információt, csak egy veremet és processz-specifikus változókat. A sessionökhöz tartozó információkat az SGA-ban tároljuk, így minden szerverfolyamat által hozzáférhetőek. Adott sessionökhöz tartozó terület méretét a PRIVATE_SGA paraméter beállításával limitálhatjuk.&lt;br /&gt;A szerverfolyamatok számát az adatbázis dinamikusan állítja egy, a SHARED_SERVERS és MAX_SHARED_SERVERS inicializálási paraméterek között megadott értékre a kéréssor hosszának függvényében.&lt;br /&gt;&lt;u&gt;Az elosztott szerver korlátozott műveletei:&lt;/u&gt; bizonyos adminisztratív feladatok (pl. adatbázis leállítása, indítása, adathordozó helyreállítás) nem hajthatóak végre, ha ütemező folyamathoz csatlakozunk – hibaüzenetet fogunk kapni. Ezért ha adminisztrátorként csatlakozunk egy adatbázishoz, célszerű a connection stringben explicit megadni, hogy dedikált szerverfolyamatot (SERVER=DEDICATED) szeretnénk használni.&lt;br /&gt;&lt;br /&gt;&lt;b style=""&gt;Dedikált szerveres architektúra (Dedicated Server Configuration):&lt;/b&gt;&lt;br /&gt;Dedikált szerveres architektúra esetén minden felhasználói folyamathoz külön szerverfolyamatot rendelünk (&lt;a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/process.htm#BEIJAEDA" target="_blank"&gt;ábra&lt;/a&gt;). Ezeket a processzeket hívjuk dedikált szerverfolyamatoknak, mivel csak a hozzá tartozó felhasználói folyamat nevében cselekszenek. Mindig ugyanannyi szerverfolyamatunk lesz, mint amennyi felhasználói – a szerverfolyamat akkor is megmarad inaktívként, ha a hozzá tartozó felhasználói folyamat éppen nem intéz kérést az adatbázis felé.&lt;br /&gt;Bizonyos operációsrendszerek esetén (pl. UNIX) akkor is szükség van külön szerverfolyamatokra, ha a kliensalkalmazás és a szerver ugyanazon a gépen fut, ugyanis ezek az operációsrendszerek nem lennének képesek külön kezelni a két programot, ha egy közös processz tartozna csak hozzájuk.&lt;br /&gt;&lt;br /&gt;&lt;b style=""&gt;Database Resident Connection Pooling (&lt;a href="http://www.oracle.com/technology/tech/oci/pdf/oracledrcp11g.pdf" target="_blank"&gt;DRCP&lt;/a&gt;):&lt;/b&gt;&lt;br /&gt;A DRCP egy connection pool-t (&lt;a href="http://en.wikipedia.org/wiki/Connection_pool" target="_blank"&gt;Connection pool&lt;/a&gt;) nyújt tipikusan web alkalmazások számára. Különösen hasznos olyan többprocesszes, egyszálas alkalmazásszerverek (pl. PHP és Apache szerverek) skálázhatóságának javításában, melyek nem képesek középső rétegbeli connection poolingra. A webes alkalmazások egy szálon, általában csak rövid ideig használják az adatbázis-kapcsolatot. Ennek támogatására a DRCP tulajdonképpen azt teszi lehetővé, hogy az egyes processzek közösen osztozzanak a dedikált szervereken, azaz nem kell minden egyes kapcsolatot újra kiépíteni, aminek következményeként nagyszámú klienskapcsolatot tudunk kiszolgálni jóval szerényebb erőforrásokkal is (csökkenti a szükséges memóriát, növeli az adatbázisszerver és a középső réteg skálázhatóságát, valamint csökkenti újbóli kapcsolat-felépítésekhez szükséges időt).&lt;br /&gt;A pooled szerver modell nagyban hasonlít az Oraclenél alapértelmezésben használt dedikált modellhez. A különbség csupán annyi, hogy csökkenti a szervert csak rövid ideig igénylő kapcsolatoknál a szerverdedikálásból fakadó overheadet. A kliensek a „connection broker”-hez csatlakoznak, ami a pool működését implementálja és multiplexálja a pooled szervereket a kliens processzektől bejövő kapcsolatok között (&lt;a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/process.htm#CIHDHHEF" target="_blank"&gt;ábra&lt;/a&gt;). Ha egy kliens adatbázis-műveleteket szeretne végrehajtani, akkor a connection broker kiszed a poolból egy pooled szervert, s hozzárendeli a klienshez. Innentől a kliens már közvetlenül csatlakozik a pooled szerverhez, melynek a működése teljesen azonos lesz egy dedikált szerverével. A kérés kiszolgálását követően azonban a szerver visszakerül a pool-ba, s a kliens is visszacsatlakozik a connection brokerhez.&lt;br /&gt;DRCP használatához az adatbázis adminisztrátorának explicit el kell indítania a pool-t. Az alapértelmezett connection pool-t SYS_DEFAULT_CONNECTION_POOL-nak nevezik, így ennek elindítása SYSDBA-ként bejelentkezve a következő paranccsal hajtható végre:&lt;br /&gt;&lt;br /&gt;EXECUTE DBMS_CONNECTION_POOL.START_POOL(‘SYS_DEFAULT_CONNECTION_POOL’);&lt;br /&gt;&lt;br /&gt;A megosztott pool-hoz történő csatlakozáshoz továbbá a server típusát is POOLED-ra kell állítani a connection stringben. Erre egy példa:&lt;br /&gt;&lt;br /&gt;ServerPool = (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp) (HOST=somehost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=testdb)(SERVER=POOLED)))&lt;br /&gt;&lt;br /&gt;Vagy egyszerű connect parancs használatával:&lt;br /&gt;&lt;br /&gt;CONNECT joeuser@myhost.mydomain.com:1521/mydb:&lt;b style=""&gt;POOLED&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Kapcsolatosztályok:&lt;/u&gt; logikai neveket definiálnak különböző alkalmazások által igényelt kapcsolattípusokra. Két különböző felhasználó nem oszthat meg egymás között kapcsolatot vagy sessiont. Továbbá lehetőség van egy felhasználón belül az alkalmazások közötti elkülönítésre is. A DRCP biztosítja, hogy egy kapcsolatosztályhoz tartozó session nem osztozkodik a kapcsolatosztályon kívüli sessionökkel.&lt;br /&gt;&lt;u&gt;Session Purity:&lt;/u&gt; meghatározza, hogy az alkalmazás egy teljesen új sessiont igényel-e (PURITY=NEW), vagy pooled sessiont kívánja használni (PURITY=SELF). Utóbbi esetben az alkalmazás egy igényelt kapcsolatosztályú szabad sessiont kap.&lt;br /&gt;A kapcsolatosztályokat és a session purityt a kliens a DRCP kapcsolat attribútumaiban határozhatja meg. Alapértelmezésben a kapcsolatosztály értéke &lt;i style=""&gt;username&lt;/i&gt;.SHARED, illetve a purity értéke NEW. Ezek azonban alkalmazások esetén eltérhetnek, ezért célszerű az alkalmazás manualjében utánanézni.&lt;br /&gt;&lt;br /&gt;&lt;b style=""&gt;Program interfész (Program interface):&lt;/b&gt;&lt;br /&gt;A program interfész egy szoftver réteg az alkalmazás és az Oracle adatbázis között, mely a következőket végzi:&lt;br /&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;biztonsági falat képez, amely megakadályozza a felhasználói processzek destruktív hozzáférését az SGA-hoz.&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;kommunikációs mechanizmusként viselkedik: formázza az információkéréseket, továbbítja az adatokat, valamint elkapja és visszaadja a hibákat.&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;konvertálja és lefordítja az adatot, különösen különböző típusú számítógépek között, vagy külső felhasználói adattípusok számára.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Bővebben: &lt;a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/process.htm#i18680" target="_blank"&gt;link&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Kapcsolódó Link&lt;br /&gt;&lt;a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/process.htm" target="_blank"&gt;&lt;b&gt;Oracle® Database Concepts – Process Architecture&lt;/b&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7419964986295601837-1829126778372750631?l=oraoptimization.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraoptimization.blogspot.com/feeds/1829126778372750631/comments/default' title='Megjegyzések küldése'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419964986295601837&amp;postID=1829126778372750631' title='0 megjegyzés'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/1829126778372750631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/1829126778372750631'/><link rel='alternate' type='text/html' href='http://oraoptimization.blogspot.com/2008/03/architektra-part-8-processz-architektra.html' title='Architektúra part #8 – Processz architektúra'/><author><name>hobs</name><uri>http://www.blogger.com/profile/07996651390466744259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp1.blogger.com/_vEoxRJtwuhk/R9CImnFFKgI/AAAAAAAAAAo/5n_ARucps9M/S220/cv_120x160.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419964986295601837.post-5083924522520175085</id><published>2008-03-13T19:16:00.006+01:00</published><updated>2008-03-13T21:42:28.299+01:00</updated><title type='text'>Önlab megbeszélés #2</title><content type='html'>A mai napon lezajlott az idei második önálló laboros megbeszélés, amelyen néhány felmerülő kérdés után négyünknek nyílt lehetősége arra, hogy bemutassa röviden mivel foglalkozott az eddigiek során.&lt;br /&gt;Az általam készített prezentáció, mely tulajdonképpen egy architektúra gyorstalpaló szeretett volna lenni, &lt;a href="http://members.chello.hu/m.nyarady/blog/architecture.ppt" target="_blank"&gt;innen&lt;/a&gt; tölthető le.&lt;br /&gt;A megbeszéléssel kapcsolatos tapasztalataim/észrevételeim:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;szerintem a beszámóló jellegű előadások főleg a konzulensek számára érdekesek. A többi hallgatót úgy gondolom jobban érdekelnék a szakmai jellegű bemutatók, azokra viszont 15 perc édeskevés... legalább 30 percet, de inkább egy órát kéne rászánni.&lt;/li&gt;&lt;li&gt;máskor nem próbálok meg 10 percbe belesűríteni egy minimum 10 órás anyagot, illetve ha mégis, akkor arra nem 1-2 óra felkészülést kell szánni, hisz ellentétben a másfél órás előadásokkal, itt nincs lehetőség arra, hogy közben átgondolja az ember, hogy mit fog mondani a következő percekben:)&lt;/li&gt;&lt;li&gt;nem iszom meg előre a vizemet, mert mint mindig, most is annyira kiszáradt a szám, hogy alig tudtam beszélni:)&lt;/li&gt;&lt;/ul&gt;Ha később eszembe jut még más is, akkor frissítem a bejegyzést.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7419964986295601837-5083924522520175085?l=oraoptimization.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraoptimization.blogspot.com/feeds/5083924522520175085/comments/default' title='Megjegyzések küldése'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419964986295601837&amp;postID=5083924522520175085' title='0 megjegyzés'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/5083924522520175085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/5083924522520175085'/><link rel='alternate' type='text/html' href='http://oraoptimization.blogspot.com/2008/03/nlab-megbeszels-2.html' title='Önlab megbeszélés #2'/><author><name>hobs</name><uri>http://www.blogger.com/profile/07996651390466744259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp1.blogger.com/_vEoxRJtwuhk/R9CImnFFKgI/AAAAAAAAAAo/5n_ARucps9M/S220/cv_120x160.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419964986295601837.post-7764542325785741149</id><published>2008-03-07T19:42:00.004+01:00</published><updated>2008-03-07T22:33:22.742+01:00</updated><title type='text'>Architektúra part #7 – Memória architektúra</title><content type='html'>Az Oracle adatbázis memóriájában a következő komponenseket tároljuk:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;programkód&lt;/li&gt;&lt;br /&gt;&lt;li&gt;információ a csatlakozott active és inactive sessionökről&lt;/li&gt;&lt;br /&gt;&lt;li&gt;programvégrehajtás közben szükséges információk, állapotok&lt;/li&gt;&lt;br /&gt;&lt;li&gt;az adatbázis processzei között megosztott információk (pl. zárak)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;cachelt adatok, mint pl. adatblokkok és redo log bejegyzések, amik ugyanakkor természetesen tárolva vannak a merevlemezeken is&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;A &lt;b&gt;memória struktúrája&lt;/b&gt; &lt;a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/memory.htm#CHDHAHIJ" target="_blank"&gt;ábra&lt;/a&gt; alapvetően három része osztható:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;szoftver kód területek:&lt;/i&gt; az éppen futó vagy futtatható kódokat tartalmazza. Általában a felhasználói programoktól eltérő helyen van.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;i&gt;System Global Area (SGA):&lt;/i&gt; az összes szerver- és háttérfolyamat (processz) között megosztott memória struktúrák (SGA komponensek – lásd fenti ábra) csoportja. Adat és vezérlési információkat tartalmaz.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;i&gt;Program Global Area (PGA):&lt;/i&gt; egy bizonyos szerver processzhez tartozó adat és vezérlési információkat tartalmazó memóriaterület, mely a szerverprocessz indításakor jön létre, s csak ő fér hozzá. Minden egyes szerverprocesszhez (és háttérfolyamathoz) tartozik egy-egy PGA. Az adatbázis inicializálási paramétereinél megadott PGA méret az összes PGA együttes méretére, s nem az egyes példányokra vonatkozik.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;System Global Area (SGA):&lt;/b&gt;&lt;br /&gt;Az adatbázis processzeinek halmaza az SGA-val együtt alkot egy adatbázis példányt (instance). Minden egyes adatbázis példány létrehozásakor az Oracle adatbázis automatikusan lefoglal memóriát az SGA számára, s visszaadja az operációs rendszernek a példány a leállításakor.&lt;br /&gt;Az SGA egy írható és olvasható memóriaterület. Minden szerverprocessz és háttérfolyamat olvashatja, s néhány processz adatbázis műveletek során írhatja is.&lt;br /&gt;Az SGA egy része a háttérfolyamatok számára tartalmaz általános információkat az adatbázis és a példány állapotáról. Ezt a területet hívjuk fixed SGA-nak. A változó rész elsősorban a processzek között kommunikált információt (pl. zárolási információk), illetve osztott szerver-architektúra esetén a kérés/válasz sorokat és a PGA tartalmának egy részét tárolja.&lt;br /&gt;&lt;br /&gt;A legfontosabb SGA komponensek:&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Database Buffer Cache:&lt;/u&gt; az adatfájlokból (datafiles) beolvasott adatblokkok (data blocks) másolatait tartalmazza. Minden felhasználó konkurensen hozzáfér.&lt;br /&gt;A cache bufferjei két listát tartalmaznak:&lt;br /&gt;1. A &lt;i&gt;write list&lt;/i&gt; tartalmazza a piszkos (dirty) buffereket, melyekben a módosított, de a diszkre még nem kiírt adatok vannak.&lt;br /&gt;2. Az &lt;i&gt;LRU (Least Recently Used) list&lt;/i&gt; tartalmazza az üres buffereket, a pinned (éppen hozzáférés alatt álló) buffereket és az olyan piszkos buffereket, amelyeket még nem tettünk át a write listbe.&lt;br /&gt;Egy bufferhez történő hozzáférést követően a buffert az LRU lista MRU végére mozgatjuk. Minél több buffert helyezünk folyamatosan az LRU lista MRU végére, annál gyorsabban öregednek a dirty bufferek, s kerülnek az LRU lista LRU végére.&lt;br /&gt;Ha az adatbázisnak szüksége van egy konkrét adatra, akkor először a buffer cacheben kezdi el keresni. Ha megtalálja az adatot a cacheben (cache hit), akkor közvetlenül a memóriából be tudja olvasni. Ha nincs bent az adat a cacheben (cache miss), akkor először be kell olvasni a merevlemezről az adatblokkot a memóriába, s csak utána lehet hozzáférni. Ebből következik az LRU lista előnye, hogy a gyakran használt adatokat bent tartja a memóriában, s ezáltal hozzájuk sokkal gyorsabb hozzáférést biztosít.&lt;br /&gt;Az adatblokk cachebe történő beolvasásához először keresni kell egy üres (free) buffert az LRU listában. A keresést a lista LRU végéről kezdi. Ha keresés közben piszkos buffert találunk, akkor azt a buffert áthelyezzük a write listába, majd folytatjuk a keresést. Ha találtunk egy üres (free) buffert, akkor beolvassuk oda az adatblokkot, s a buffert az LRU lista MRU végére mozgatjuk. Ha elértük a keresési limitet, s nem sikerült üres (free) buffert találni, akkor leállítjuk a keresést, és jelzünk a DBW0 háttérfolyamatnak, hogy írjon ki néhány piszkos buffert a merevlemezre.&lt;br /&gt;Full table scan esetén – mivel a beolvasott adatok általában csak rövid ideig kellenek – az adatokkal feltöltött buffereket az LRU lista LRU végére tesszük (a hagyományos adatbeolvasásnál ugyebár a lista MRU végére pakoljuk a buffereket, hogy ne egyből őket dobjuk majd ki). Ha a buffereket mégis a lista MRU végére szeretnénk pakolni, akkor a CREATE/ALTER parancs CACHE klózával tudjuk ezt megadni.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Redo Log Buffer:&lt;/u&gt; itt tároljuk az adatbázison végrehajtott változtatásokat. Egy körkörös, fix méretű buffer, melynek merevlemezre írását az LGWR processz végzi. A Redo bejegyzések az adatbázis esetleges helyreállításához szükségesek. Mivel minden INSERT, UPDATE, DELETE, CREATE, ALTER és DROP művelet által végrehajtott módosítást tartalmaznak, így remélhetőleg könnyedén vissza tudunk állítani egy korábbi, konzisztens állapotot.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Shared Pool:&lt;/u&gt; a Shared Pool három cache területből áll:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;1. Library Cache:&lt;/i&gt; tartalmazza a megosztott (shared) és privát (private – csak &lt;a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28310/manproc001.htm#i1006130" target="_blank"&gt;shared server&lt;/a&gt; konfiguráció esetén) SQL területeket (areas), PL/SQL eljárásokat és csomagokat, valamint vezérlési struktúrákat.&lt;br /&gt;A shared(/private) SQL areak tartalmazzák a futtatott és éppen futás alatt álló SQL utasítások elemzési fáját és végrehajtási tervét. Az Oracle adatbázis automatikusan felismeri, hogyha két felhasználó ugyanazt az SQL utasítást futtatja, ezáltal sokfelhasználós rendszerek esetén, amikor egy utasítást gyakran és sokszor futtatnak le a felhasználók, jelentős memóriát takaríthatunk meg, mivel elegendő az utasítás elemzési fáját és végrehajtási tervét csak egy példányban tárolnunk, s ahhoz minden felhasználó egyaránt hozzáfér. A shared pool memóriájának menedzselésére szintén az LRU algoritmust használjuk (részletesebben lásd „Buffer Cache” vagy „Kapcsolódó Linkek”).&lt;br /&gt;PL/SQL programok kezelése majdnem teljesen hasonlóan történik a sima SQL utasításokéhoz. A lefordított programnak ugyanúgy foglalunk helyet a shared SQL areaban, de a session specifikus változókat a private SQL areaban tároljuk.&lt;br /&gt;Néhány, az alap LRU algoritmustól eltérő esetben is kiteszünk egy shared SQL areat a Shared Poolból. Ezek:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Az ANALYZE statisztikagyűjtő utasítás használata esetén minden olyan shared SQL areat kidobunk a shared poolból, ami tartalmaz hivatkozást az analizált séma objektumra.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Ha egy SQL utasítás által hivatkozott objektum az utasítás shared poolba kerülését követően módosul, akkor az utasítás shared SQL areajá invaliddá válik, s az utasítást újra le kell fordítani a következő futtatása előtt.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Ha az adatbázis globális nevét megváltoztatjuk, minden információt kiürít az adatbázis a shared poolból.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Az ALTER SYSTEM FLUSH SHARED_POOL utasítással az adminisztrátor manuálisan kiürítheti az egész shared poolt. Ezzel az adatbázis újraindítása nélkül tud a shared pool adatbázispéldány indítása utáni teljesítményéről információkat gyűjteni.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;2. Dictionary Cache:&lt;/i&gt; az adatszótár (data dictionary) cacheelésére szolgál. Két részből áll: a data dictionary cache (másik nevén row cache) az adatokat sorok (rows) formájában, s nem blokkokban (bufferekben) tárolja. A másik rész, a library cache buffereket használ.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;3. Result Cache:&lt;/i&gt; a SQL query result cacheből és a PL/SQL query cacheből áll, melyekben a lekérdezések/függvények eredményét cacheeljük. A DBMS_RESULT_CACHE csomag, illetve a V$RESULT_CACHE_* nézetek segíthetnek az adminisztrátornak a karbantartásában. A RESULT_CACHE_MODE-ban állíthatjuk be, hogy minden SQL lekérdezés eredményét szeretnénk-e cacheelni, vagy csak bizonyos megjelölt lekérdezéseket. Természetesen, ha egy tranzakció egy olyan objektum bármely adatát vagy metaadatát módosítja, amit a lekérdezés eredményének kiszámításához használtunk, akkor a cacheelt eredmény azonnal invaliddá válik.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Large Pool:&lt;/u&gt; az adatbázis adminisztrátor által konfigurálható opcionális memóriaterület, mely a következők számára biztosít extra, nagyméretű memóriát:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;session memória az osztott szervernek és az Oracle XA interfésznek (több adatbázissal kommunikáló tranzakciók használják), hogy ne a shared SQL cachet pakolják tele&lt;/li&gt;&lt;br /&gt;&lt;li&gt;I/O szerver processzek&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Oracle adatbázis biztonsági mentési és visszaállítási műveletei&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Ellentétben a Shared Pool–lal, a Large Pool nem használ LRU listákat.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Java Pool:&lt;/u&gt; a session-specifikus Java kódok és adatok használják. A Java Pool Advisor segítségével statisztikát gyűjthetünk, amely segítségével információt kapunk arról, hogy hogyan változtassuk a Java Pool méretét a hatékonyabb működés érdekében. Az Advisor a statistics_level legalább TYPICAL–ra állításával van bekapcsolva.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Streams Pool:&lt;/u&gt; az Oracle Folyamok (Streams) használják. Mérete nulláról indul, és dinamikusan növekszik, amikor a Folyamoknak szüksége van memóriára.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Program Global Area (PGA):&lt;/b&gt;&lt;br /&gt;Az Oracle adatbázis minden szerverfolyamat számára automatikusan lefoglal egy PGA-t. SQL utasítások végrehajtására, illetve session-specifikus (pl. bejelentkezési) információk tárolására használják. Két részből áll:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Session Memória:&lt;/i&gt; session specifikus információkat tárol. Shared szerver konfiguráció esetén megosztottan működik, amúgy privát.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Privát SQL terület (Private SQL Area):&lt;/i&gt; bind variable értékeket, lekérdezések végrehajtásának állapotinformációit és munkaterületeit tartalmazza. Minden sessionhöz tartozik egy külön privát SQL terület, így ha két felhasználó ugyanazt a lekérdezést futtatja, mindegyiknek külön privát SQL területük van, de egy osztott SQL területet használnak. A privát SQL területek elhelyezkedése kapcsolatfüggő. Ha dedikált szerveren keresztül csatlakozunk, akkor a szerverfolyamat PGA-jában kap helyet. Azonban ha osztott szerveren keresztül kapcsolódunk, akkor a privát SQL terület egy része az SGA-ban tárolódik.&lt;br /&gt;Implicit kurzorok számára osztott SQL területeket használ az adatbázis, de az explicit kurzoroknak külön privát SQL területet foglal le. Az OPEN_CURSORS inicializálási paraméterben adhatjuk meg, hogy egy felhasználói processz maximum hány privát SQL területet foglalhat le magának. A paraméter alapértéke 50.&lt;br /&gt;Memóriafoglalás alapján a különbségek dedikált és osztott szerver esetén: &lt;a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/memory.htm#g26073" target="_blank"&gt;táblázat&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Memóriakezelési eljárások&lt;/b&gt; (Memory Management Methods - &lt;a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/memory.htm#CHDFFHGH" target="_blank"&gt;táblázat&lt;/a&gt;): inicializálási paraméterben adható meg. Az Oracle az automatic management method-t ajánlja. Instance PGA = az adatbázispéldányhoz tartozó összes egyedi PGA-k halmaza.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Automatic Memory Management&lt;/i&gt; – SGA &amp; Instance PGA: 11g újdonság. Csak a teljes memóriaterületet kell megadnunk, s onnantól az Oracle adatbázis mindent automatikusan elvégez. Dinamikusan elosztja a memóriát az SGA és az Instance PGA között, valamint külön-külön az egyes SGA komponensek és egyedi PGA-k méretét is meghatározza.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;i&gt;Automatic Shared Memory Management&lt;/i&gt; – SGA: az Automatic Memory Managementtel szemben ebben az üzemmódban meg tudjuk adni az SGA célzott és maximális méretét. Ebben az esetben a rendszer megpróbálja az SGA méretét a célméreten tartani, és dinamikusan állítja az egyes SGA komponensek méretét.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;i&gt;Manual Shared Memory Management&lt;/i&gt; - SGA: ebben az üzemmódban nem csak az SGA méretét állíthatjuk be, hanem szabályozhatjuk az egyes SGA komponensek rendelkezésére álló memóriát is.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;i&gt;Automatic PGA Memory Management&lt;/i&gt; – Instance PGA: Az Automatic Memory Management kikapcsolásával, s az Automatic Shared Memory Management vagy a Manual Shared Memory Management bekapcsolásával implicit bekapcsoljuk ezt az üzemmódot is. Beállíthatjuk az Instance PGA célzott méretét, és az egyedi PGA-k méretet a rendszer dinamikusan szabályozza majd. Ha nem adunk meg célzott méretet, akkor az adatbázis automatikus kiszámol és beállít egy értelmes alapértéket.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;i&gt;Manual PGA Memory Management&lt;/i&gt; – Instance PGA: az Oracle adatbázis korábbi verzióiban a DBA-nak manuálisan kellett definiálnia a maximális munkaterületet (work area) minden SQL operátor számára, ez azonban nagyon körülményes és nehéz feladat, hiszen a munkaterület mérete állandóan változik. Az Oracle erősen ajánlja, hogy ne használjuk ezt az üzemmódot!&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Ha az adatbázist a Database Configuration Assistant (DBCA) segítségével hozzuk létre, akkor „basic” installálási opciót választva automatic memory management lesz beállítva. „Advanced” installálást választva az alábbi három konfiguráció közül választhatunk:&lt;br /&gt;1. automatic memory management&lt;br /&gt;2. automatic shared memory management + automatic PGA memory management&lt;br /&gt;3. manual shared memory management + automatic PGA memory management&lt;br /&gt;Ha kézzel, a CREATE DATABASE SQL paranccsal akarunk adatbázist létrehozni, akkor a 3. konfiguráció az alapértelmezett.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Szoftver kód területek (Software Code Areas):&lt;/b&gt;&lt;br /&gt;Olyan memóriaterületek, amiket az Oracle adatbázis futó vagy futtatható kódjainak tárolására használunk. Általában statikus méretű, csak szoftverfrissítéskor vagy újratelepítéskor változik. Az igényelt terület mérete operációs rendszertől függ. Csak olvasható, megosztottan (shared) és nem megosztottan (nonshared) installálhatjuk. Ajánlott az előbbit használni, mivel így a felhasználóknak nem kell többszörös másolatokat a memóriában tartaniuk, ami amúgy az általános teljesítményt rontaná.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Kapcsolódó Link&lt;br /&gt;&lt;a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/memory.htm" target="_blank"&gt;Oracle® Database Concepts – Memory Architecture&lt;/a&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Cache_algorithms" target="_blank"&gt;http://en.wikipedia.org/wiki/Cache_algorithms&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7419964986295601837-7764542325785741149?l=oraoptimization.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraoptimization.blogspot.com/feeds/7764542325785741149/comments/default' title='Megjegyzések küldése'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419964986295601837&amp;postID=7764542325785741149' title='0 megjegyzés'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/7764542325785741149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/7764542325785741149'/><link rel='alternate' type='text/html' href='http://oraoptimization.blogspot.com/2008/03/architektra-part-7-memria-architektra.html' title='Architektúra part #7 – Memória architektúra'/><author><name>hobs</name><uri>http://www.blogger.com/profile/07996651390466744259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp1.blogger.com/_vEoxRJtwuhk/R9CImnFFKgI/AAAAAAAAAAo/5n_ARucps9M/S220/cv_120x160.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419964986295601837.post-2280273109012615944</id><published>2008-03-06T23:43:00.004+01:00</published><updated>2008-03-07T00:56:02.173+01:00</updated><title type='text'>Blog szépítgetése</title><content type='html'>Kicsit kipofoztam a blogot. Az alábbi módosítások történtek:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;tettem fel képet, hogy nagyjából beazonosítható legyek előben is&lt;/li&gt;&lt;li&gt;jobb oldali sávba kitettem a többi magyar Oracle blogger oldalára mutató linkeket (forrásként Éberhardt Peti &lt;a href="http://eptentimes.blogspot.com/" target="_blank"&gt;oldalát&lt;/a&gt; használtam)&lt;/li&gt;&lt;li&gt;kikerült egy Hírek oldalelem is, ami a Google News között Oracle kulcsszóra keres&lt;/li&gt;&lt;li&gt;az alsó sávba elrejtettem egy hirdetést, melynek fő célja, hogy legyenek statisztikáim az oldalról&lt;/li&gt;&lt;li&gt;lényegretörőbbé tettem a bemutatkozás részt&lt;br /&gt;&lt;/li&gt;&lt;li&gt;html kódot szerkesztgettem, amennyire engedte magát, illetve egyéb menüből elérhető apróbb változtatásokat eszközöltem&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7419964986295601837-2280273109012615944?l=oraoptimization.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraoptimization.blogspot.com/feeds/2280273109012615944/comments/default' title='Megjegyzések küldése'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419964986295601837&amp;postID=2280273109012615944' title='2 megjegyzés'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/2280273109012615944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/2280273109012615944'/><link rel='alternate' type='text/html' href='http://oraoptimization.blogspot.com/2008/03/blog-szptgetse.html' title='Blog szépítgetése'/><author><name>hobs</name><uri>http://www.blogger.com/profile/07996651390466744259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp1.blogger.com/_vEoxRJtwuhk/R9CImnFFKgI/AAAAAAAAAAo/5n_ARucps9M/S220/cv_120x160.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419964986295601837.post-7511214415193012328</id><published>2008-03-06T02:34:00.011+01:00</published><updated>2008-03-07T00:49:42.265+01:00</updated><title type='text'>Architektúra part #6 – Adatszótár</title><content type='html'>Az adatszótár (&lt;b&gt;data dictionary&lt;/b&gt;) az Oracle adatbázis egyik legfontosabb részét képezi. A központi, csak olvasható referencia táblák és nézetek tartoznak hozzá, melyekben az adatbázisról tároljuk a következő lényeges információkat:&lt;br /&gt;&lt;br /&gt;&lt;ol style="margin-top: 0cm;" start="1" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;séma objektumok definíciója&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;séma objektumok számára allokált és felhasznált területek&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;oszlopok alapértelmezett értékei&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;integritás kényszerekről információk&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;az adatbázis felhasználóinak nevei&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;az egyes felhasználókhoz tartozó jogok és szerepek&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;naplózási információk&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;egyéb általános adatbázis információk&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;A SYSTEM tablespaceben tároljuk, ami mindig online, ezért ezek az információk mindig elérhetőek. Szerkezetileg kétféle objektumot tartalmaz:&lt;br /&gt;1. Alap táblák (&lt;b&gt;Base tables&lt;/b&gt;): az adatbázisról tartalmaznak információkat. Csak az Oracle adatbázis írhatja és olvashatja őket. Az adatokat titkosított formában tárolják.&lt;br /&gt;2. Felhasználói nézetek (&lt;b&gt;User-Accessible Views&lt;/b&gt;): nézetek, melyek összegzik és a felhasználók számára emészthető formában megjelenítik az Alap táblákban tárolt információkat. A legtöbb felhasználó ezekhez a nézetekhez férhet hozzá.&lt;br /&gt;&lt;br /&gt;Minden &lt;i style=""&gt;Base table&lt;/i&gt; és &lt;i style=""&gt;User-Accessible View&lt;/i&gt; a SYS felhasználó sémájában van, így egyetlen felhasználó sem módosíthatja őket, mivel az súlyos veszélyeket jelentene az adatintegritásra. Éppen ezért célszerű nagy biztonságban tartani ezt a központi accountot!&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Felhasználás:&lt;/u&gt; az adatszótár használatának három fő területe van:&lt;br /&gt;&lt;br /&gt;&lt;ol style="margin-top: 0cm;" start="1" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;az adatbázis lekérdez információkat felhasználókról, séma objektumokról és tárolási struktúrákról&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;az adatbázis módosítja az adatszótárt minden DDL utasítás végrehajtása esetén&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;bármely felhasználó lekérdezhet információkat az adatbázisról&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Az adatbázis a legtöbb nézethez létrehoz &lt;b&gt;Publikus Szinonimákat&lt;/b&gt;, hogy azok kényelmesen elérhetőek legyenek, de a SYS felhasználóval további publikus szinonimákat is létre lehet hozni manuális. Fontos, hogy a séma objektumok elnevezései lehetőleg ne keveredjenek a publikus szinonimák nevével.&lt;br /&gt;Az adatszótár lehetőleg minél nagyobb részét az SGA (System Global Area) &lt;b&gt;dictionary cache&lt;/b&gt; részében tároljuk a gyors hozzáférés érdekében. Nyilván az egész adatszótárt nehéz lenne cacheelni, ezért a least recently used (LRU) algoritmus alapján a legrégebben használt adatokat dobjuk ki először.&lt;br /&gt;Más Oracle adatbázis &lt;b&gt;termékek&lt;/b&gt; is hivatkozhatnak, illetve létrehozhatnak objektumokat maguknak az adatszótárban. Célszerű az alkalmazásfejlesztőknek a hivatkozásoknál a publikus szinonimákat használni, mivel azok a legtöbb verzióban azonosak.&lt;br /&gt;&lt;br /&gt;Az &lt;b&gt;adatszótár&lt;/b&gt; nézetei általában három különböző prefixszel vannak ellátva, melyek jelentése:&lt;br /&gt;&lt;br /&gt;&lt;ol style="margin-top: 0cm;" start="1" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;USER: felhasználói nézet - a felhasználó sémájában lévő nézet: főként az adott felhasználóhoz tartozó információkat tartalmazzák. Így például a&lt;br /&gt;SELECT object_name, object_type FROM USER_OBJECTS;&lt;br /&gt;lekérdezés a sémánkban lévő objektumokat adja vissza.&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;ALL: kiterjesztett felhasználói nézet - a felhasználó által hozzáférhető nézet: az adott felhasználó által elérhető „információkat” tartalmazzák. Így például a&lt;br /&gt;SELECT owner, object_name, object_type FROM ALL_OBJECTS;&lt;br /&gt;lekérdezés az általunk hozzáférhető objektumát adja vissza.&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;DBA: adatbázis adminisztrátori nézet – minden felhasználó sémájában megtalálható nézet: globális információkat tartalmaznak az adatbázisról. Így például a&lt;br /&gt;SELECT owner, object_name, object_type FROM SYS.DBA_OBJECTS;&lt;br /&gt;az adatbázis összes objektumat adja vissza.&lt;br /&gt;Az „O7_DICTIONARY_ACCESSIBILITY is false” beállítással a felhasználóknak megtilthatjuk a SYS sémán belüli objektumokhoz való hozzáférésüket.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Dinamikus Teljesítmény táblák (&lt;b&gt;Dynamic Performance Tables&lt;/b&gt;):&lt;/u&gt; virtuális táblák halmaza, melyek az adatbázis tevékenységeket rögzítik. Nem valós táblák, de az adminisztrátor létrehozhat rájuk nézeteket a felhasználók számára. Ezeket a nézeteket fix nézeteknek hívjak, mivel az adminisztrátor nem tudja módosítani vagy törölni őket.&lt;br /&gt;A SYS felhasználóhoz tartoznak, s V_&lt;span style="" lang="EN-US"&gt;$&lt;/span&gt; karakterekkel kezdődik a nevük. Ezekre a táblákra hozhatunk létre nézetek, majd a nézetekre publikus szinonimákat, melyek neve V&lt;span style="" lang="EN-US"&gt;$&lt;/span&gt; karakterekkel kezdődik. Pl. V&lt;span style="" lang="EN-US"&gt;$&lt;/span&gt;DATAFILE tartalmaz információkat az adatbázis adatfájljairól, míg V&lt;span style="" lang="EN-US"&gt;$&lt;/span&gt;FIXED_TABLE magukról a dinamikus teljesítmény táblákról.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Kapcsolódó Link&lt;br /&gt;&lt;a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/datadict.htm" target="_blank"&gt;Oracle® Database Concepts – The Data Dictionary&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7419964986295601837-7511214415193012328?l=oraoptimization.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraoptimization.blogspot.com/feeds/7511214415193012328/comments/default' title='Megjegyzések küldése'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419964986295601837&amp;postID=7511214415193012328' title='0 megjegyzés'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/7511214415193012328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/7511214415193012328'/><link rel='alternate' type='text/html' href='http://oraoptimization.blogspot.com/2008/03/architektra-part-6-adatsztr.html' title='Architektúra part #6 – Adatszótár'/><author><name>hobs</name><uri>http://www.blogger.com/profile/07996651390466744259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp1.blogger.com/_vEoxRJtwuhk/R9CImnFFKgI/AAAAAAAAAAo/5n_ARucps9M/S220/cv_120x160.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419964986295601837.post-6020962776975233525</id><published>2008-03-06T02:12:00.008+01:00</published><updated>2008-03-07T00:43:48.518+01:00</updated><title type='text'>Architektúra part #5 – Séma objektum függőségek</title><content type='html'>Vegyünk két objektumok, és nevezzük őket A-nek és B-nek. Ha A objektum a definíciójában hivatkozik B objektumra, akkor azt mondjuk, hogy A függ B-től. Ez a fejezet a séma objektumok között létrehozható függőségeket, illetve azt taglalja, hogy ezeket a függőségeket az Oracle adatbázis miként követi nyomon és menedzseli automatikusan.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Általánosságban:&lt;/u&gt; egy objektum a definíciójában hivatkozhat egy másik objektumra. Például egy nézet hivatkozik a master tábláira és/vagy nézeteire, illetve egy esetleges alprogram törzsében más objektumokra is. Ha módosítunk egy hivatkozott objektumot, akkor a tőle függőségben lévő objektumok esetlegesen nem fognak működni – ez nyilván csak akkor fordul elő, ha a hivatkozott objektum olyan attribútumát változtatjuk meg, amire a tőle függőségben lévő objektum hivatkozik.&lt;br /&gt;A DBA_DEPENDENCIES, USER_DEPENDENCIES és ALL_DEPENDENCIES táblák írják le az adatbázis objektumai között fennálló függőségeket.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Állapotok:&lt;/u&gt; a séma objektumok az alábbi állapotok valamelyikében lehetnek:&lt;br /&gt;&lt;br /&gt;&lt;ol style="margin-top: 0cm;" start="1" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;VALID: sikeresen lefordult az adatszótárban (data dictionary) található aktuális definíció alapján.&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;Compiled with Errors: legutóbbi fordítási kísérlet során hiba lépett fel.&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;INVALID: egy hivatkozott objektum megváltozott (csak a függőségben lévő objektum tud INVALID állapotba kerülni, a hivatkozott nem).&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;UNAUTHORIZED: egy hivatkozott objektumról visszavonták (REVOKE) a hozzáférési jogosultságát a hivatkozó objektumnak (csak a függőségben lévő objektum tud UNAUTHORIZED állapotba kerülni, a hivatkozott nem).&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;INVALID állapotba kerülés okai:&lt;/u&gt; megkülönböztethetünk közvetlen (direct) és közvetett (indirect) függéseket az alapján, hogy A objektum a közvetlenül hivatkozott B objektumtól is függhet, illetve közvetetten a B objektum által hivatkozott C objektumtól is. A objektum mind a B, mind a C objektum megváltoztatása esetén INVALID állapotba kerülhet. A műveletekről, melyek hatással lehetnek egy objektum állapotára &lt;a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/dependencies.htm#g1008856" target="_blank"&gt;itt&lt;/a&gt; található egy összefoglaló táblázat.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;INVALID állapotba jutás elkerülése:&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol style="margin-top: 0cm;" start="1" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;az új elemeket a csomag végére illesszük be, hogy az többi objektumra történő hivatkozások ne invalidálódjanak. &lt;a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/dependencies.htm#CHDCEHIF" target="_blank"&gt;Pl.&lt;/a&gt;: &lt;i style=""&gt;assert_var&lt;/i&gt; beillesztésével a set_var-ra hivatkozó objektumok invalidálódnak.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;CREATE OR REPLACE PACKAGE pkg1 IS&lt;br /&gt;   FUNCTION get_var RETURN VARCHAR2;&lt;br /&gt;   &lt;i style=""&gt;PROCEDURE assert_var (v VARCHAR2);&lt;/i&gt;&lt;br /&gt;   PROCEDURE set_var (v VARCHAR2);&lt;br /&gt;END;&lt;/li&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;a táblákra indirekt, nézeteken keresztül hivatkozzunk. Ezzel azt érjük el, hogy a táblába új sor felvételekor, illetve nem hivatkozott oszlopok módosításakor vagy törlésekor a függőségben lévő objektumok nem válnak INVALID-dá.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Objektumok „ReVALID”-álása:&lt;/u&gt; egy objektum nem VALID (azaz nem érvényes/hivatkozható), ha a három másik állapot (Compiled with Errors, UNAUTHORIZED, INVALID) valamelyikében tartózkodik. Ha egy nem VALID objektumra hivatkozás történik, akkor a használat előtt ReVALID-álni kell, különben nem lehet majd használni. Ez a ReVALID-álási kísérlet automatikusan végbemegy.&lt;br /&gt;&lt;br /&gt;&lt;ol style="margin-top: 0cm;" start="1" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;i style=""&gt;Compiled with Errors objektum revalidálása:&lt;/i&gt; a fordító automatikusan nem tudja revalidálni az objektumot. Megpróbálja újrafordítani azt. Ha sikerül VALID állapotba kerül, egyébként marad Compiled with Errors.&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;&lt;i style=""&gt;UNAUTHORIZED objektum revalidálása:&lt;/i&gt; a fordító ellenőrzi a hozzáférési jogokat. Ha időközben megkaptuk őket, akkor VALID állapotra vált, egyébként hibaüzenetet ír ki.&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;&lt;i style=""&gt;INVALID SQL objektum revalidálása:&lt;/i&gt; lásd Compiled with Errors revalidálás.&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;&lt;i style=""&gt;INVALID PL/SQL objektum revalidálása:&lt;/i&gt; a PL/SQL fordító megnézi, hogy a hivatkozott objektumokban történt-e az INVALID objektumot érintő változás. Ha igen, akkor a fordító újrafordítja az INVALID objektumot, s siker esetén VALID állapotba helyezi. Ha nem történt az INVALID objektumot érintő változás, akkor újrafordítás nélkül próbálja meg a fordító revalidálni az objektumot (lásd fast revalidálás).&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;&lt;i style=""&gt;INVALID PL/SQL objektum „fast” revalidálása:&lt;/i&gt; a fordító újrafordítás nélkül revalidálja az objektumot. Főként indirect függőségből származó invalidálódás esetén szokott sikerrel járni.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Remote Procedure Call (RPC) Függőség Menedzsment:&lt;/u&gt; elosztott adatbázis esetén fordul elő, amikor egy helyi eljárás távoli eljáráshívást hajt végre.&lt;br /&gt;&lt;br /&gt;&lt;ol style="margin-top: 0cm;" start="1" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;i style=""&gt;Időbélyeg ellenőrzés:&lt;/i&gt; az eljárások létrehozásakor, módosításkor és felülírásukkor mindig feljegyezzük a műveletek időbélyegét az adatszótárba (data dictionary). Ha egy olyan eljárást hívunk meg, amit tartalmaz távoli eljáráshívást is, akkor az adatbázis összehasonítja a fordítás időbélyegét a távoli eljárás éppen aktuális időbélyegével. A következő két eset fordulhat elő:&lt;br /&gt;1. a helyi és a távoli eljárás időbélyegei egyeznek, az eljárás gond nélkül lefut.&lt;br /&gt;2. ha a távoli eljárás bármely időbélyege nem egyezik, a helyi eljárás invalidálódik, s nem hibaüzenettel tér vissza az eljáráshívás. Továbbá invalidálódik az összes többi, arra a távoli eljárásra hivatkozó helyi eljárásunk is. Célszerű tehát a hálózaton keresztül hivatkozott objektumokat ritkán újrafordítani, hogy jelentős teljesítménycsökkenést tudnak okozni!&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;&lt;i style=""&gt;Aláírás ellenőrzés:&lt;/i&gt; a távoli függőségekre egy alternatív lehetőséget jelentenek az RPC aláírások. Egy eljárás aláírása tartalmazza a nevét (csomag, eljárás vagy függvény neve), a paraméterek típusát, üzemmódját (IN­/OUT/IN OUT) és számát, illetve függvény esetén a visszatérési érték típusát. Az aláírások használata enyhít néhány, az időbélyeg alapú modell esetén jelentkező problémát, melyek kritikusak lehetnek a teljesítményre nézve (pl. újrafordított távoli eljárás esetén, ha az aláírás nem változott, akkor gond nélkül lefut a helyi eljárásunk). Az aláírás adattípusok (&lt;a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/dependencies.htm#g4951307" target="_blank"&gt;ábra&lt;/a&gt;) közötti váltáskor következik be (az adattípus osztályán belüli váltáskor nem).&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;&lt;i style=""&gt;Vezérlés:&lt;/i&gt; a fenti két módot a REMOTE_DEPENDENCIES_MODE inicializáló paraméter segítségével állíthatjuk be (= &lt;span style="" lang="EN-US"&gt;{SIGNATURE | TIMESTAMP})&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Kapcsolódó Link&lt;br /&gt;&lt;a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/dependencies.htm" target="_blank"&gt;Oracle® Database Concepts – Schema Object Dependencies&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7419964986295601837-6020962776975233525?l=oraoptimization.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraoptimization.blogspot.com/feeds/6020962776975233525/comments/default' title='Megjegyzések küldése'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419964986295601837&amp;postID=6020962776975233525' title='0 megjegyzés'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/6020962776975233525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/6020962776975233525'/><link rel='alternate' type='text/html' href='http://oraoptimization.blogspot.com/2008/03/architektra-part-5-sma-objektum-fggsgek.html' title='Architektúra part #5 – Séma objektum függőségek'/><author><name>hobs</name><uri>http://www.blogger.com/profile/07996651390466744259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp1.blogger.com/_vEoxRJtwuhk/R9CImnFFKgI/AAAAAAAAAAo/5n_ARucps9M/S220/cv_120x160.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419964986295601837.post-3805644513155639547</id><published>2008-03-05T06:50:00.010+01:00</published><updated>2008-03-31T21:15:03.767+02:00</updated><title type='text'>Architektúra part #4 – Séma objektumok (2/2)</title><content type='html'>Dimenziók (&lt;b&gt;Dimensions&lt;/b&gt;):&lt;br /&gt;A dimenziók hierarchikus (gyermek/szülő) viszonyt határoznak meg oszloppárok vagy oszlophalmazok között. Minden gyermek pontosan egy szülőhöz van társítva. Mivel a dimenzió csak logikai kapcsolatok gyűjteménye, nincs tárolási terület hozzárendelve. A dimenziót létrehozó CREATE DIMENSION parancs meghatározza a hierarchia szinteket (LEVEL), a köztük lévő viszonyt (HIERARCHY), illetve opcionálisan az ATTRIBUTE ágban kiegészítő oszlopot vagy oszlop halmazt az adott szinthez. Az oszlopok származhatnak egy táblából (denormalized) vagy több táblából (normalized). Utóbbi esetén illesztést kell alkalmazni a HIERARCHY ágban.&lt;br /&gt;&lt;br /&gt;Szekvencia Generátor (&lt;b&gt;Sequence Generator&lt;/b&gt;):&lt;br /&gt;A szekvencia generátor segítségével számok szekvenciális sorozatát állíthatjuk elő (pl. egyedi elsődleges kulcsoknak). Segítségével többfelhasználós rendszerek esetén elkerülhetünk felesleges zárolásokat (pl. egyszerre két felhasználó is tud adatokat bevinni egy táblába). Méretük maximum 38 számjegy lehet, definíciójukat az adatszótárban (data dictionary) tároljuk. A számok generálása független az egyes tábláktól, így egy szekvencia generátort akár több táblánál is használhatunk.&lt;br /&gt;&lt;br /&gt;Szinonimák (&lt;b&gt;Synonyms&lt;/b&gt;):&lt;br /&gt;A szinonima egy alternatív név bármely táblára, nézetre, materializált nézetre, szekvenciára, eljárásra, függvényre, csomagra, típusra, Java osztályra, felhasználó által definiált objektum-típusra vagy egy másik szinonimára. Mivel adatot a szinonima sem tárol, így számára sem szükséges területeket lefoglalni…a definícióját az adatszótárban (data dictionary) tároljuk. Használatának két fő célja a biztonság és a kényelem, valamint az, hogyha a master táblájának megváltozik a neve, akkor csak magát a szinonimát kell átírni, s utána a szinonimát használó alkalmazások probléma nélkül futnak majd. A szinonima lehet public vagy private. Előbbi minden felhasználó számára elérhető, míg utóbbi egy bizonyos felhasználó sémájában található, s mások számára a hozzáférhetőséget ő határozhatja meg.&lt;br /&gt;&lt;br /&gt;Indexek (&lt;b&gt;Indexes&lt;/b&gt;):&lt;br /&gt;Az indexek opcionális, táblákhoz és klaszterekhez rendelhető struktúrák. Indexeket lehet egy vagy több oszlophoz rendelni, melyek segítségével egy SQL utasítás esetén gyorsabban megtalálja a keresett információt az adatbázis – ezáltal a helyesen használt indexek jelentik az I/O műveletek csökkentésének fő forrását. A következő index-sémák használhatóak: B-fa index, B-fa klaszter index, Hash klaszter index, Reverse key (inverz kulcs) index, Bitmap index, Bitmap join index. Az indexek használata automatikus, csak a létrehozásukkal és az esetleges törlésükkel kell foglalkozni. Továbbá az optimalizáló (optimizer) akár felhasználhat egy már létező indexet egy új index létrehozására, ami jóval gyorsabb index-építést eredményezhet.&lt;br /&gt;&lt;u&gt;Unique/Nonunique:&lt;/u&gt; az egyedi (unique) indexek garantálják, hogy a hivatkozott oszlopban nem szerepelhet duplikált érték. Ajánlott ezt explicit megadni mindig a CREATE UNIQUE INDEX használatával, ugyanis nem garantált, hogy egy primary key vagy unique constraint automatikusan létrehoz egy új indexet, s ha létre is hozott, arra sincs garancia, hogy az az index unique lesz.&lt;br /&gt;&lt;u&gt;Visible/Invisible:&lt;/u&gt; a láthatatlan (invisible) indexeket csak a DML műveletek kezelik, s nem használhatja őket az optimalizáló (optimizer).&lt;br /&gt;&lt;u&gt;Összetett indexek (Composite/Concatenated Indexes):&lt;/u&gt; több oszlopra definiált indexek. Az oszlopok megadásának sorrendjét nem befolyásolja az, hogy az adott oszlopok milyen sorrendben szerepelnek a táblában, azonban maga a sorrend nagyon is fontos. Célszerű a gyakran hivatkozott oszlopokat a sorrendben előre helyezni. Összetett indexekkel lényeges javulást akkor tudunk elérni, ha sikerül olyan oszlopokat találni, melyek (mind, vagy legalább nagyobb részük) gyakran szerepel(nek) egyszerre a WHERE feltételében. Maximum 32 (bitmap indexek esetén 30) oszlopot adhatunk meg.&lt;br /&gt;&lt;u&gt;Indexek és kulcsok (Keys):&lt;/u&gt; két különböző dologról van szó. Az indexek az adatbázisban tárolt, felhasználók által létrehozott struktúrák, melyek célja az adatok elérésének meggyorsítása. A kulcsok azonban szigorúan csak logikailag léteznek, s az integritás kényszerekért felelnek.&lt;br /&gt;&lt;u&gt;NULL értékek:&lt;/u&gt; különböző értékként vannak számon tartva, kivéve, hogyha az index legalább két sorában lévő nem NULL érték azonos. Tehát az UNIQUE indexekkel – mivel ott minden nem NULL érték különböző – lehet biztosítani, hogy a NULL értéket tartalmazó sorok is különbözőként legyenek kezelve (kivétel, ha minden érték NULL).&lt;br /&gt;&lt;u&gt;Függvény-alapú indexek (Function-Based Indexes):&lt;/u&gt; létrehozhatunk indexeket olyan függvényekre és kifejezésekre is, melyek tartalmaznak legalább egy oszlopot egy indexelt táblából. Ezek a függvény-alapú indexek kiszámolják a függvény vagy kifejezés értékét, s azt tárolják az indexben. Típusát tekintve B-fa vagy bitmap indexek lehetnek. A függvény maga lehet aritmetikai kifejezés, vagy olyan kifejezés, ami tartalmaz PL/SQL függvényt, csomag függvényt, C hívást vagy SQL függvényt. Nem tartalmazhat azonban aggregátum függvényeket, DETERMINISTIC-usnak kell lennie, s nem vonatkozhat LOB típusú, REF vagy beágyazott tábla oszlopára sem.&lt;br /&gt;&lt;i style=""&gt;1. Használat:&lt;/i&gt; &lt;a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/schema.htm#CHDECAAD" target="_blank"&gt;példák&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol style="margin-top: 0cm;" start="1" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;lekérdezések WHERE ágában szereplő feltételek kiszámításának gyorsítására:&lt;br /&gt;CREATE INDEX idx ON table_1 (a + b * (c - 1), a, b);&lt;br /&gt;SELECT a FROM table_1 WHERE a + b * (c - 1) &lt;&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;case-insensitive keresések gyorsítása:&lt;br /&gt;CREATE INDEX uppercase_idx ON employees (UPPER(first_name));&lt;br /&gt;SELECT * FROM employees WHERE UPPER(first_name) = 'RICHARD';&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;i style=""&gt;2. Optimalizálás:&lt;/i&gt; az optimalizálónak (optimizer) szüksége van statisztikákra ahhoz, hogy használni tudja a függvény-alapú indexeket. Az optimalizáló a kifejezésfák alapján választ egy SQL utasításhoz hozza illeszkedő függvény-alapú indexet. Nyilván minél kevesebb variáció lehetséges a WHERE klóz alapján, annál hatékonyabb lesz ez a keresés.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Tárolás:&lt;/u&gt; az index létrehozását követően az adatbázis automatikusan lefoglal neki egy index szegmenst. A lefoglalt szegmens mérete a tábláknál már ismertetett módon történik. Azaz vagy tárolási paraméterek (storage parameteres) megadásával, vagy a PCTFREE és a PCTUSED paraméterekkel állíthatjuk be. Az index számára a létrehozásakor megadhatunk egy – az ownerjétől különböző - tablespacet is a tárolásra. Ezen túl, ha az indexet még egy külön, a tábláétól különböző diszkre is tesszük, akkor mivel az adatbázis a két diszket párhuzamosan tudja használni, teljesítménynövekedést érhetünk el.&lt;br /&gt;&lt;u&gt;Blokk formátuma:&lt;/u&gt; az index létrehozását követően az adatbázis fetcheli és rendezi az indexelt oszlopokat, s eltárolja a rowid-ket minden egyes sor index értékéhez.&lt;br /&gt;&lt;u&gt;Belső struktúra:&lt;/u&gt; az Oracle adatbázis B-fákat (&lt;a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/schema.htm#i5765" target="_blank"&gt;ábra&lt;/a&gt;) használ az indexek tárolására. Ezáltal a szekvenciális keresés átlagos n/2 idejét lecsökkenti O(log(n))–re.&lt;br /&gt;&lt;u&gt;Unique Scan:&lt;/u&gt; az egyik leghatékonyabb adathozzáférési módszer. Az optimalizáló (optimizer) ezt a módszert használja unique index esetén.&lt;br /&gt;&lt;u&gt;Range Scan:&lt;/u&gt; kevésbé hatékony adathozzáférési módszer. Az adatot az index oszlopok szerinti növekvő sorrendben adja vissza, duplikált sorok esetén ROWID szerinti növekvő sorrendben.&lt;br /&gt;&lt;u&gt;Kulcstömörítés:&lt;/u&gt; lehetővé teszi, hogy az elsődleges kulcs (primary key) értékek csoportjait egy indexbe vagy egy index-szervezett táblába tömörítsük, csökkentve ezáltal az ismételt értékekből származó tárolási overheadet. Általában egy index egy csoportazonosító és egy egyedi részre bontható. A tömörítést a csoport részre végezzük: megadjuk, hogy az index milyen hosszú részét képezi, majd az ezáltal lehetséges csoportazonosítókat csak egyszer tárolunk el.&lt;br /&gt;&lt;br /&gt;&lt;i style=""&gt;· Teljesítmény:&lt;/i&gt; a kulcstömörítés jelentős helymegtakarítást jelenthet, ezáltal csökkentve az I/O műveleteket és növelve a teljesítményt, azonban a kulcsok újbóli felépítése némi CPU overheadet jelenthet az indexek scanelése közben.&lt;br /&gt;&lt;i style=""&gt;· Használat:&lt;/i&gt; az alábbi esetekben célszerű kulcstömörítést használni:&lt;br /&gt;&lt;br /&gt;&lt;ol style="margin-top: 0cm;" start="1" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;nonunique reguláris indexeknél, ugyanis az Oracle adatbázis a duplikált sorokhoz duplikált keyeket használ.&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;olyan unique indexek esetén, ahol a kulcs egyediségét nem az első attribútum generálja. Pl.: egy elemre és az elemhez történt hozzáférések időbélyegére definiáltunk indexet. Ekkor a csoport rész (prefix) lehet az elem, az egyediséget pedig (suffix rész) az időbélyeg fogja garantálni.&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;VARRAY vagy NESTED TABLE –t tartalmazó index-szervezett tábláknál, mivel az objektumazonosító ismételt a kollekciók minden elemére.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Reverse key (inverz kulcs) indexek:&lt;/u&gt; a hagyományos indexekkel ellentétben megfordítják minden indexelt oszlop bájtjait (a ROWID kivételével), míg az oszlopsorrendet változatlanul hagyják. Ezáltal kizárjuk az indexen az index range scanning lekérdezéseket, de cserébe RAC-os alkalmazások futását meggyorsíthatjuk, mivel a beillesztés elosztottan mehet végbe az index levelei között.&lt;br /&gt;&lt;u&gt;Bitmap indexek:&lt;/u&gt; az Oracle adatbázis által használt B-fa indexeknél a kulcsértéket minden egyes ROWIDhez eltároljuk, így ismétlődés fordulhat elő. Bitmap indexek esetén minden kulcsértékhez egy bitmapet használunk. A bitmap minden egyes bitje egy lehetséges ROWID-t reprezentál, s akkor van beállítva, hogyha a hozzá tartozó ROWID tartalmazza a kulcsértéket.&lt;br /&gt;Kevés különböző kulcsérték esetén a bitmap indexek használata (B-fa indexek helyett) jelentős helymegtakarítást jelent – alkalmazásának adattárházak (Data Warehouses) esetén van számos előnye. Lekérdezések hatékonyságának gyorsítására főként abban az esetben alkalmas, ha a WHERE feltételében ekvivalencia vizsgálatok (illetve azok AND, OR és NOT operátoros kombinációi) szerepelnek.&lt;br /&gt;A legtöbb indexszel ellentétben NULL értéket tartalmazó sorokat is képes felhasználni, ami hasznos lehet a COUNT aggregátum használata esetén.&lt;br /&gt;&lt;u&gt;Bitmap Join indexek:&lt;/u&gt; több illesztett táblára is létrehozhatunk bitmap (join) indexet, ami tárolási szempontból jóval előnyösebb a materializált join nézeteknél (mivel ők nem tömörítik a hivatkozott táblák ROWID-jét).&lt;br /&gt;&lt;br /&gt;Index-szervezett (&lt;b&gt;Index-Organized&lt;/b&gt;) táblák:&lt;br /&gt;A hagyományos táblákkal ellentétben – ahol az adatok rendezetlenül, kupacban (heap) tárolódnak -, az index-szervezett táblák adatait egy elsődleges kulcs szerint rendezett B-fában tároljuk. Ezáltal nem kell külön indexet létrehozni és fenntartani az elsődleges kulcsra (&lt;a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/schema.htm#g37535" target="_blank"&gt;Összehasonlítás&lt;/a&gt;).&lt;br /&gt;&lt;u&gt;Előnyök:&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol style="margin-top: 0cm;" start="1" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;gyorsabb hozzáférés a tábla soraihoz&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;mivel a többi, nem kulcs értékű információ is megtalálható a fában, nincs szükség további blokkhozzáférésre&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;az elsődleges kulcs szerinti sorrendhelyes tárolás miatt minimális blokkhozzáférésre van szükség&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;a ritkán használt nem kulcs típusú oszlopokat ki lehet pakolni egy külön kupacba, ezáltal csökkentve a B-fa méretét&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;nem kell az elsődleges kulcsra külön indexet fenntartani (kevesebb tárhely igény)&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;a sorrendhelyes kulcstárolás miatt kulcstömörítés alkalmazható&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Overflow:&lt;/u&gt; mivel az index-szervezett táblákban esetlegesen nagyon sok nem kulcs típusú oszlopot is tárolhatunk, az egyes levelek mérete igencsak megnőhet, s ezáltal elveszítheti a B-fa sűrűn fürtözött tulajdonságát. Ennek elkerülése végett az OVERFLOW klózzal két részre oszthatjuk az oszlopokat: az első részbe tartoznak az index bejegyzések és fizikai ROWID-k, valamint megadhatunk néhány nem kulcs típusú oszlopot, amit szeretnénk a B-fában tartani. A második részbe (overflow rész) kerül a többi nem kulcs típusú oszlop, melyeket külön tárolunk.&lt;br /&gt;&lt;u&gt;Másodlagos indexek:&lt;/u&gt; index-szervezett tábláknál is van lehetőség nem kulcs típusú oszlopokra indexeket létrehozni (ún. másodlagos/secondary indexek). Ezek működése azonban általában lassabb a hagyományos táblákra létrehozott indexekénél (azonos működés érhető el, ha helyes sejtésünk van az adat fizikai elhelyezkedéséről).&lt;br /&gt;&lt;u&gt;UROWID:&lt;/u&gt; az index-szervezett táblák sorainak azonosítására használható, logikai elsődleges kulcs alapú ROWID-k.&lt;br /&gt;&lt;u&gt;Alkalmazások:&lt;/u&gt; az elsődleges kulcs alapú lekérdezéseket használó, valamint a tárhellyel takarékoskodni akaró alkalmazások számára ideális. Pl.: OLTP (Online Transaction Processing), Internet (kereső motorok és portálok), Elektronikus kereskedelem, Adattárházak (Data Warehouses), Analitikus függvények.&lt;br /&gt;&lt;br /&gt;Alkalmazás Domain Indexek (&lt;b&gt;Application Domain Indexes&lt;/b&gt;):&lt;br /&gt;Az Oracle adatbázis indexelése kiterjeszthető komplex adattípusokra - mint pl. dokumentumok, spatial adatok, képek, videók, stb. – is. Ezeket az indexeket hívjuk domain indexeknek, melyeket a Cartridge szoftverrel lehet szabályozni.&lt;br /&gt;&lt;br /&gt;Klaszterek (&lt;b&gt;Clusters):&lt;/b&gt;&lt;br /&gt;Klaszternek nevezzük táblák egy csoportját, melyek – mivel közös oszlopokat használnak – ugyanazon az adatblokkokon osztoznak (&lt;a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/schema.htm#i30164" target="_blank"&gt;példa&lt;/a&gt;).&lt;br /&gt;&lt;u&gt;Előnyei:&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol style="margin-top: 0cm;" start="1" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;kevesebb I/O művelet az egy klaszteren belül lévő illesztett táblákra&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;gyorsabb hozzáférés az egy klaszteren belül lévő illesztett táblákra&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal" style=""&gt;klaszter kulcsértékek (és indexek) csak egyszer tárolódnak, ezáltal kevesebb tárhelyet fogyasztanak.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Hash klaszterek (&lt;b&gt;Hash Clusters&lt;/b&gt;):&lt;br /&gt;A hash klaszterek bizonyos értelemben megfelelnek a klaszterekre definiált hagyományos indexekkel, azzal a különbséggel, hogy a kulcs hash értékét tárolják. Jobb teljesítményt lehet velük elérni olyan tábláknál, melyen gyakran alkalmaznak ekvivalencia vizsgálatos feltételt tartalmazó lekérdezéseket, mivel a hash kulcs közvetlenül a diszken lévő adatra mutat.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Kapcsolódó Link&lt;br /&gt;&lt;a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/schema.htm#i18190" target="_blank"&gt;Oracle® Database Concepts – Schema Objects&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7419964986295601837-3805644513155639547?l=oraoptimization.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraoptimization.blogspot.com/feeds/3805644513155639547/comments/default' title='Megjegyzések küldése'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419964986295601837&amp;postID=3805644513155639547' title='1 megjegyzés'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/3805644513155639547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/3805644513155639547'/><link rel='alternate' type='text/html' href='http://oraoptimization.blogspot.com/2008/03/architektra-part-4-sma-objektumok-22.html' title='Architektúra part #4 – Séma objektumok (2/2)'/><author><name>hobs</name><uri>http://www.blogger.com/profile/07996651390466744259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp1.blogger.com/_vEoxRJtwuhk/R9CImnFFKgI/AAAAAAAAAAo/5n_ARucps9M/S220/cv_120x160.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419964986295601837.post-4343055395529620299</id><published>2008-03-05T06:24:00.007+01:00</published><updated>2008-03-07T00:24:26.084+01:00</updated><title type='text'>Architektúra part #4 – Séma objektumok (1/2)</title><content type='html'>Sémának (&lt;b&gt;Schema&lt;/b&gt;) nevezzük az egy felhasználóhoz tartozó logikai adatstruktúrák (séma objektumok) összességét. Ezek az objektumok nem feleltethetőek meg egy az egyben fizikai diszken tárolt fájloknak. Logikailag egy objektum egy tablespacen belül helyezkedik el, fizikailag azonban tárolódhat akár több datafileban is. A sémák és tablespacek között nincs semmilyen összefüggés: egy tablespace tartalmazhat objektumokat több különböző sémából, illetve egy séma objektumai is tárolódhatnak különböző tablespacekben (&lt;a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/schema.htm#i5716" target="_blank"&gt;ábra&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Az alábbi objektumok tartoznak a séma objektumok közé:&lt;br /&gt;klaszterek; kényszerek; adatbázis hivatkozások; adatbázis triggerek; dimenziók; külső eljáráskönyvtárak; indexek és indextípusok; Java osztályok; materializált nézetek és a hozzájuk tartozó logok; objektum táblák, objektum típusok és objektum nézetek; operátorok; szekvenciák; tárolt függvények, eljárások és csomagok; szinonimák; táblák és indexelt táblák; nézetek.&lt;br /&gt;Nem tartoznak séma alá a következő objektumok:&lt;br /&gt;kontextusok; könyvtárak; paraméter fájlok (PFILEs) és szerver paraméter fájlok (SPFILEs); profilok; szerepek; rollback szegmensek; tablespacek; felhasználók.&lt;br /&gt;&lt;br /&gt;Táblák (&lt;b&gt;Tables&lt;/b&gt;):&lt;br /&gt;A táblák jelentik az Oracle adatbázisban az alapvető adattárolási egységet. Alapvető tulajdonságainak részletes ismertetése &lt;a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/schema.htm#i5663" target="_blank"&gt;itt&lt;/a&gt;.&lt;br /&gt;&lt;u&gt;Tárolása:&lt;/u&gt; a tábla létrehozásakor automatikusan lefoglalunk neki egy adatszegmenst a tablespacen belül. Ennek vezérlésére használhatjuk a már ismertetett PCTFREE és PCTUSED paramétereket, vagy beállíthatjuk az adatszegmens tárolási paramétereit. Klaszter használata esetén nincs lehetőség külön táblánként tárolási paramétereket állítani, hanem csak egységesen, az klaszter összes táblájára vonatkozóan állíthatjuk be őket.&lt;br /&gt;&lt;u&gt;Sorok formátuma és mérete:&lt;/u&gt; ha egy sor 256 oszlopnál kevesebbet tartalmaz, s adatai elférnek egy adatblokkban, akkor az adatbázis a sort egy adatblokkon belül, egy darabban tárolja. Azonban ha a sor adatai méretüknél fogva nem tehetőek be egy adatblokkba, vagy a sor legalább 256 oszlopból áll, akkor több adatblokkra van szükség a tároláshoz. Ezt láncolásnak nevezzük -- a további adatblokkok ROWID-jét a sor headerjében tároljuk (&lt;a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/schema.htm#i20134" target="_blank"&gt;ábra&lt;/a&gt;).&lt;br /&gt;&lt;u&gt;ROWID:&lt;/u&gt; azonosítja az egyes sordarabokat helyük vagy címük alapján. Érdemes hivatkozni rájuk SQL utasításokban, hiszen értékük sosem változik meg.&lt;br /&gt;&lt;u&gt;Oszlopsorrend:&lt;/u&gt; tárolási szempontból általában megegyezik a tábla létrehozásakor megadott oszlopsorrenddel (kivétel pl. ha LONG típust használunk, ugyanis azt az adatbázis mindig utolsó oszlopként tárolja -- illetve újonnan felvett oszlopok is mindig hátra kerülnek), ezért célszerű a gyakran NULL értéket felvevő oszlopokat a sorrendben hátulra tenni, mivel így (ha nincs LONG típusunk deklarálva) jelentős mennyiségű helyet takaríthatunk meg.&lt;br /&gt;&lt;u&gt;Táblák tömörítése:&lt;/u&gt; az egy blokkon belül többször előforduló adatokat nem tároljuk el külön-külön többször, hanem csak egyszer a blokk elején (egy ún. szimbólum táblában), s a későbbi előfordulások alkalmával csak egy hivatkozást illesztünk be a szimbólum tábla megfelelő elemére. A tömörítés nem jelent semmilyen funkcionalitásbeli hátrányt, s a LOB (Long OBject) típusokon kívül minden más típussal működik. A törlés (DELETE) és beillesztés (INSERT) sem kerül több időbe, mint a tömörítés nélkül tárolt tábláknál. Egyedül az adatok frissítése (UPDATE) esetén fordulhat elő, hogy a végrehajtás lassabb lesz. Célszerű tehát a tömörítést minden csak olvasható, illetve ritkán változtatandó táblánál használni (mivel csökkenti a használt merevlemezt, memóriát –buffer cache- és gyorsítja a lekérdezés végrehajtást – cserébe azonban csak egy csekély CPU-val fizetünk).&lt;br /&gt;&lt;u&gt;Partícionált táblák:&lt;/u&gt; által lehetőség van az adatok kisebb részekre bontására, s ezáltal könnyebb managelésére.&lt;br /&gt;&lt;u&gt;Egymásba ágyazott táblák (Nested tables):&lt;/u&gt; egy tábla oszloptípusának megadhatunk egy másik táblát is, ezáltal egymásba ágyazott táblákat is létrehozhatunk. A beágyazott táblát az Oracle adatbázis egy külön táblában tárolja.&lt;br /&gt;&lt;u&gt;Ideiglenes táblák (Temporary tables):&lt;/u&gt; nem permanens táblák. Tranzakcióhoz vagy sessionhöz tartozhatnak, így csak azok élettartama alatt léteznek. Mivel az adott tranzakció, ill. session kizárólagos joggal rendelkezik felettük, így zárkezelésre sincs szükség. Ellentétben a permanens táblákkal, számukra csak az első INSERT utasítás kiadását követően foglalunk szegmenst.&lt;br /&gt;&lt;u&gt;Külső táblák (External tables):&lt;/u&gt; által lehetőség van külső adatbázisokban található adatokhoz történő hozzáférésre úgy, mintha azok a saját adatbázisunk egy táblájában lennének tárolva. A külső táblák nem tartalmazzák, hogy a külső forrásnál hogyan vannak az adatok tárolva (az adatok transzformálását az Access Driver végzi), csupán azok megjelenítéséért felelősek. Természetesen csak olvashatóak, nem rendelhetünk hozzájuk indexeket, s a virtuális oszlopok sem támogatottak.&lt;br /&gt;&lt;br /&gt;Nézetek (&lt;b&gt;View&lt;/b&gt;s):&lt;br /&gt;A nézetek olyan virtuális táblák, melyek adataikat egy vagy több fizikai táblából, vagy más nézetekből veszik. Fő feladatuk tehát az adatoknak egy előre megszabott formában történő megjelenítése, s ezáltal bizonyos adatok elrejtése. Működésük és a rajtuk végrehajtható műveletek többé-kevésbé megegyeznek a tábláknál megszokottakkal.&lt;br /&gt;&lt;u&gt;Tárolás:&lt;/u&gt; mivel a nézetek csak egy lekérdezés által definiáltak, s nem tartalmaznak ténylegesen adatokat, ezért tárolási helyet sem kell biztosítani a számukra. Csupán magát a lekérdezést tároljuk el a data dictionaryben.&lt;br /&gt;&lt;u&gt;Felhasználás:&lt;/u&gt; tábla bizonyos sorainak vagy oszlopainak rejtése; adat komplexitás elrejtése; egyszerűbb lekérdezések megfogalmazása; többféle adat megjelenítés; alkalmazások függetlenítése az alap táblákon végrehajtott változtatásoktól.&lt;br /&gt;&lt;u&gt;Működés:&lt;/u&gt; &lt;br /&gt;&lt;br /&gt;&lt;ul style="margin-top: 0cm;" start="1" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;A nézetre történő hivatkozás helyére behelyettesítődik a nézet által definiált lekérdezés.&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Szintaktikai elemzést hajt végre az így kialakult utasításon.&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Végrehajtja az      utasítást.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Updatable Join Views:&lt;/u&gt; két vagy több táblából vagy nézetből származtatott nézet, melyen engedélyezettek az UPDATE, INSERT és DELETE műveletek. Az adatszótár (data dictionary) ALL_UPDATABLE_COLUMNS, DBA_UPDATABLE_COLUMNS és USER_UPDATABLE_COLUMNS nézetei tartalmazzák, hogy a nézet mely oszlopai frissíthetőek (UPDATEelhetőek). Ennek feltétele, hogy a nézet ne tartalmazza a következő struktúrák egyikét sem: halmaz operátorok; DISTINCT operátor; aggregátumok és analitikus funkciók; GROUP BY, ORDER BY, CONNECT BY és START WITH klauzulák; kollekciós kifejezés vagy allekérdezés a SELECT után; illesztések (néhány kivételtől eltekintve). A nem frissíthető nézeteket INSTEAD OF triggerek használatával módosíthatjuk.&lt;br /&gt;&lt;u&gt;Object Views:&lt;/u&gt; objektum nézetekből kinyerhetjük, frissíthetjük, beilleszthetjük és törölhetjük az adatokat pontosan úgy, mintha objektum típusként lennének tárolva.&lt;br /&gt;&lt;u&gt;Inline Views:&lt;/u&gt; nem séma objektum, csak egy allekérdezés egy aliasszal.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Materializált Nézetek (&lt;b&gt;Materialized View&lt;/b&gt;s):&lt;br /&gt;A materializált nézeteket adatok összegzésére, számítására, replikázására és szétosztására használhatjuk. Ebből kifolyólag főként adattárházaknál (data warehouse), döntéstámogató rendszereknél és elosztott vagy mobil számításoknál használjuk őket. Az optimalizáló (optimizer) automatikusan felismeri, hogy mikor lehet egy kérést materializált nézet segítségével kielégíteni, s automatikusan behelyettesíti azt a lekérdezésbe. Így nem szükséges közvetlen a táblákból vagy nézetekből kinyerni a kívánt adatokat, amivel növelhetjük a teljesítményt. Néhány szempontból tehát a materializált nézetek hasonlítanak az indexekre:&lt;br /&gt;&lt;br /&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style=""&gt;tárhelyet fogyasztanak.&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;ha változnak az adatok a master táblájában, akkor frissíteni kell őket.&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;lekérdezések      behelyettesítése által növelik az SQL végrehajtások teljesítményét.&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;felhasználók és      alkalmazások szempontjából átlátszóak.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Ellentétben azonban az indexekkel, a materializált nézetekhez közvetlenül is hozzáférhetünk egy SELECT utasítással, illetve a frissítés típusának függvényében akár közvetlenül is alkalmazhatunk rajtuk INSERT, UPDATE vagy DELETE műveleteket.&lt;br /&gt;&lt;u&gt;Nézeteken alkalmazott kényszerek:&lt;/u&gt; multidimenziós adatok felismerhetősége érdekében lehetőség nézeteken is bizonyos kényszerek megfogalmazására: primary key, unique és referential integrity constrainteket adhatunk meg.&lt;br /&gt;&lt;u&gt;Frissítés:&lt;/u&gt; kétféle frissítési eljárás használtható: inkrementális (fast refesh) és teljes. Előbbi esetén a materialized view log vagy a direct loader log tartalmazza a változtatásokat. A frissítés maga történhet azonnal vagy előre meghatározott időközönként.&lt;br /&gt;&lt;u&gt;Materialized View Logs:&lt;/u&gt; séma objektumok, melyek az egyes master táblákban történt változásokat jegyzik a materializált nézet számára, ha az inkrementális frissítést használ. Helye a master tábla sémájában van.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Kapcsolódó link:&lt;br /&gt;&lt;a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/schema.htm" target="_blank"&gt;Oracle® Database Concepts: Schema Objects&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7419964986295601837-4343055395529620299?l=oraoptimization.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraoptimization.blogspot.com/feeds/4343055395529620299/comments/default' title='Megjegyzések küldése'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419964986295601837&amp;postID=4343055395529620299' title='0 megjegyzés'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/4343055395529620299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/4343055395529620299'/><link rel='alternate' type='text/html' href='http://oraoptimization.blogspot.com/2008/03/architektra-part-4-sma-objektumok-13.html' title='Architektúra part #4 – Séma objektumok (1/2)'/><author><name>hobs</name><uri>http://www.blogger.com/profile/07996651390466744259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp1.blogger.com/_vEoxRJtwuhk/R9CImnFFKgI/AAAAAAAAAAo/5n_ARucps9M/S220/cv_120x160.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419964986295601837.post-482872103081846622</id><published>2008-03-05T06:19:00.005+01:00</published><updated>2008-03-07T00:21:38.509+01:00</updated><title type='text'>Munkatervek</title><content type='html'>A 2007/2008 2. félévre vonatkozó munkatervek letölthetőek:&lt;br /&gt;&lt;br /&gt;2 kredites önlab munkaterve: &lt;a href="http://members.chello.hu/m.nyarady/blog/qja31e-nyarady_2.rtf" target="_blank"&gt;itt&lt;/a&gt;&lt;br /&gt;8 kredites önlab munkaterve: &lt;a href="http://members.chello.hu/m.nyarady/blog/qja31e-nyarady_8.rtf" target="_blank"&gt;itt&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7419964986295601837-482872103081846622?l=oraoptimization.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraoptimization.blogspot.com/feeds/482872103081846622/comments/default' title='Megjegyzések küldése'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419964986295601837&amp;postID=482872103081846622' title='0 megjegyzés'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/482872103081846622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/482872103081846622'/><link rel='alternate' type='text/html' href='http://oraoptimization.blogspot.com/2008/03/munkatervek.html' title='Munkatervek'/><author><name>hobs</name><uri>http://www.blogger.com/profile/07996651390466744259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp1.blogger.com/_vEoxRJtwuhk/R9CImnFFKgI/AAAAAAAAAAo/5n_ARucps9M/S220/cv_120x160.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419964986295601837.post-3953492251628614467</id><published>2007-12-03T16:27:00.002+01:00</published><updated>2008-03-07T00:20:04.374+01:00</updated><title type='text'>Architektúra part #3 – Tranzakciókezelés</title><content type='html'>A &lt;b&gt;tranzakció&lt;/b&gt; legalább egy SQL utasítást magába foglaló műveletsorozatot jelent. Elemi műveletként értelmezzük, ami annyit tesz, hogy a tranzakciót alkotó SQL utasítások mindegyike végrehajtódik (&lt;b&gt;commit&lt;/b&gt;álódik), vagy egyik sem (&lt;b&gt;roll back&lt;/b&gt; – visszagörgetés). Egy tranzakció jóváhagyása vagy visszagörgetése explicit módon a COMMIT vagy ROLLBACK utasításokkal, implicit módon az alkalmazásból való kilépéssel vagy egy DDL utasítás végrehajtásával történhet.&lt;br /&gt;&lt;b&gt;Utasítás szintű visszagörgetés&lt;/b&gt;ről akkor beszélünk, ha egy SQL utasítás valamilyen hiba folytán nem tud lefutni. Ilyen hiba lehet például, ha már létező elsődleges kulcsot akarunk létrehozni, ha két SQL utasítás között versenyhelyzet áll elő, vagy egyszerűen csak szintaktikailag nem helyes az utasítás. A hibás utasítás nem okozza az egész tranzakció visszagörgetését, pusztán csak a saját feladatát nem tudja végrehajtani.&lt;br /&gt;&lt;br /&gt;Nagy adatbázis műveletek számára előnyös lehet, hogyha egy tranzakció helyfoglalási problémák következtében nem tud tovább futni, akkor nem visszagörgetés következik, hanem lehetősége van az adatbázis adminisztrátornak a hibát elhárítania, majd a tranzakciók zökkenőmentesen futhatnak tovább. (&lt;b&gt;Resumable space allocation&lt;/b&gt;)&lt;br /&gt;&lt;br /&gt;Egy tranzakció futásának kezdetén a visszagörgetéshez szükséges információk tárolására hozzárendelünk a tranzakcióhoz egy undo tablespacet. A &lt;b&gt;tranzakció végén&lt;/b&gt; a következők állhatnak elő:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;a felhasználó COMMIT vagy ROLLBACK utasítást ad ki.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;a felhasználó valamilyen DDL utasítást (CREATE, DROP, RENAME vagy ALTER) ad ki. Ebben az esetben az adatbázis először commitálja a tranzakciót, majd csak azután hajtja végre a DDL utasítást, mint egy egy utasításból álló külön tranzakciót.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;a felhasználó kapcsolatot bont az adatbázissal. Ekkor automatikusan commit hajtódik végre.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;a felhasználói processz abnormálisan áll le. Ekkor automatikusan rollback hajtódik végre.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Commit&lt;/b&gt;álni egy tranzakciót annyit tesz, mint véglegesíteni az adatbázisban az SQL utasítások által végzett műveleteket. A commit előtt az adatbázis a következő műveleteket hajtja végre: undo információkat generál, melyek a az SQL utasítások által módosított adatok módosítás előtti változatát tárolják. Illetve az SGA redo log bufferjébe redo log bejegyzéseket tesz, melyek az adatblokkokon illetve roll back blokkokon történt változásokat rögzítik. Előrefordulhat, hogy ezek az adatok a tranzakció commitálását megelőzően már a lemezre kerülnek. A &lt;b&gt;commit után&lt;/b&gt; a következők mennek végbe:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;az undo tablespacehez tartozó belső tranzakciós táblában feljegyezzük, hogy a tranzakciót commitálták, s beírjuk a tranzakció egyedi SCN (system change number) számát.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;az SGA redo log bufferjének redo log fájljába bejegyzéseket tesz az LGWR (log writer process), s szintén beírja a tranzakció SCN számát, ami egyben a tranzakció commitálását is jelenti.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;az adatbázis elengedi a tranzakció által használt zárakat.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;a tranzakciót késznek jelöli.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Egy tranzakció visszagörgetése (&lt;b&gt;roll back&lt;/b&gt;) annyit jelent, hogy egy lezáratlan tranzakció minden addigi adatmódosítását visszaállítjuk az adatok eredeti értékére. A régi adatokat az undo tablespaceben, a változtatásokat a redo logban tároljuk. Lehetőség van savepointok definiálására, amikkel egy nagyobb tranzakciót kisebb részegységekre bonthatunk, így ha valahol hiba történik, akkor a visszagörgetés nem teljesen a tranzakció elejéig történik, hanem a legutolsó savepointig (már ha volt addig). A &lt;b&gt;visszagörgetés&lt;/b&gt; a következő lépésekből áll:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;az adatbázis az undo tablespace alapján minden addigi, a tranzakció SQL utasításai által végrehajtott módosítást visszacsinál. Savepoint esetén természetesen csak az adott savepointig kell visszacsinálni mindent, vagyis csak a savepoint után szereplő SQL utasítások által módosított adatokat kell a régi értékükre visszaállítani.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Ha volt savepointunk, akkor azt az adott savepointot természetesen megőrizzük, de minden utána megállapított savepointot törlünk.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Elengedjük a tranzakció zárjait. Természetesen ha savepointot alkalmaztunk, akkor itt is csak a savepoint után igényelt zárakat engedjük el. Azok az adatok, melyek a savepoint előtt már zárolva voltak, természetesen továbbra is zárolva maradnak.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Kétfázisú commit&lt;/b&gt; működési elve:&lt;br /&gt;Egy elosztott adatbázisban hálózati vagy rendszer hibák esetén is gondoskodni kell a hálózat feletti tranzakcióvezérlésről és az adatok konzisztenciájáról. Elosztott tranzakciónak nevezünk egy tranzakciót, ha tartalmaz legalább egy olyan utasítást, ami módosít legalább két különböző hálózati végpontokon lévő adatbázisokat. A kétfázisú elv biztosítja, hogy elosztott tranzakció minden adatbázisa konzisztens marad, vagyis az összes adatbázis vagy commitálja a tranzakciót, vagy visszagörgeti annak addigi hatásait.&lt;br /&gt;&lt;br /&gt;Léteznek ún. &lt;b&gt;autonóm tranzakció&lt;/b&gt;k, melyeket más tranzakciók hívnak meg, de azoktól teljesen függetlenül futnak le. A hívást követően a meghívó tranzakció felfüggesztődik, a meghívott tranzakció teljesen független zárakkal és utasításokkal lefut, majd függetlenül attól, hogy committáltunk vagy visszagörgettük a tranzakciót, folytatódik a meghívó tranzakció futása. Ezáltal természetesen létre lehet hozni holtpontot, amit az adatbázis hibaüzenettel ugyan jelez, de ezekért a holtpontokért teljes mértékben az alkalmazás fejlesztője felel. Egy autonóm tranzakció is meghívhat más autonóm tranzakciókat, nincs semmilyen korlát a hívások mélységére. Lehetőség van azonban nem autonóm tranzakciók meghívására is. Ekkor a meghívott tranzació örökli a hívó tranzakció környezetét.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Kapcsolódó link:&lt;br /&gt;&lt;a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/transact.htm" target="_blank"&gt;Oracle® Database Concepts: Transaction Management&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7419964986295601837-3953492251628614467?l=oraoptimization.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraoptimization.blogspot.com/feeds/3953492251628614467/comments/default' title='Megjegyzések küldése'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419964986295601837&amp;postID=3953492251628614467' title='0 megjegyzés'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/3953492251628614467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/3953492251628614467'/><link rel='alternate' type='text/html' href='http://oraoptimization.blogspot.com/2007/12/architektra-part-3-tranzakcikezels.html' title='Architektúra part #3 – Tranzakciókezelés'/><author><name>hobs</name><uri>http://www.blogger.com/profile/07996651390466744259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp1.blogger.com/_vEoxRJtwuhk/R9CImnFFKgI/AAAAAAAAAAo/5n_ARucps9M/S220/cv_120x160.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419964986295601837.post-1666165971005542955</id><published>2007-12-03T16:01:00.003+01:00</published><updated>2008-03-07T00:16:44.024+01:00</updated><title type='text'>Architektúra part #2 – Táblaterek és Adatfájlok</title><content type='html'>A logikai adattárolás legnagyobb egységei a &lt;b&gt;tablespace&lt;/b&gt;k, míg a fizikai tárolás &lt;b&gt;datafile&lt;/b&gt;ok formájában történik. Az Oracle adatbázis tartalmaz legalább két tablespacet, a SYSTEM-t és a SYSAUX-t, illetőleg egy harmadik, TEMP nevű tablespacet opcionálisan. A tablespacek adatait fizikailag egy vagy több datafile tárolja. A fájlrendszer további részeit képezik még a visszagörgetéshez használt &lt;b&gt;Redo log&lt;/b&gt; fájlok, illetve az adatbázis indításához és működéséhez elengedhetetlen &lt;b&gt;Control&lt;/b&gt; fájlok. Az adatbázisunk méretét háromféleképpen növelhetjük:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;új tablespacet hozunk létre&lt;/li&gt;&lt;br /&gt;&lt;li&gt;egy már létező tablespacehez új datafilet adunk hozzá&lt;/li&gt;&lt;br /&gt;&lt;li&gt;egy már létező datafile méretet növeljük (engedélyezhetjük, hogy az adatbázis ezt dinamikus hajtsa végre, amint szüksége van több területre)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;A tablespacek, ahogyan azt már tárgyaltuk, szegmensekből épülnek fel, melyeket extentek alkotnak, amiket pedig összefüggő adatblokkok képeznek.&lt;br /&gt;&lt;br /&gt;A 64-bites rendszerek képességeinek kiaknázása érdekében lehetőség van ún. „&lt;b&gt;bigfile tablespace&lt;/b&gt;”-k létrehozására. Ez lényegében annyit jelent, hogy az adott tablespaceünket mindössze egyetlen datafile alkotja, így a szokványos „smallfile tablespace”-kkel szemben jóval nagyobb datafilet használthatunk – egészen pontosan mivel a smallfile tablespacek maximum 1024 datafilet tartalmazhatnak, ezért a bigfile tablespaceünk egyetlen datafileja akár 1024szer lehet nagyobb. A datafilek számára is van egy felső korlát (64K), ezért mivel a bigfile tablespacek tablespacenként csak egy datafilet tartalmaznak, lehetőségünk van hatalmas adatbázisok tárolására egészen 8 exabyte (10^18) méretig, illetve a kevesebb datafile miatt könnyebben kezelhető lesz az adatbázisunk. Cserébe viszont a bigfile tablespacek (néhány kivételtől eltekintve) csak lokálisan vezérelt (locally managed), automatikus szegmens-foglalási tablespaceként működhetnek.&lt;br /&gt;&lt;br /&gt;A &lt;b&gt;SYSTEM táblaspace&lt;/b&gt; automatikusan létrejön, amikor az adatbázist létrehozzuk. Alapvetően könyvtár vezérelt (dictionary managed), de természetesen ezt átállíthatjuk lokális vezérlésre is, azonban ezáltal a későbbiekben nem tudunk könyvtár vezérelt tablespaceket létrehozni, s a létezőket is csak olvasni tudjuk. A SYSTEM tablespaceben tároljuk a data dictionary táblákat, illetve a tárolt PL/SQL eljárásokat.&lt;br /&gt;A &lt;b&gt;SYSAUX tablespace&lt;/b&gt; a SYSTEM-t kiegészítő tablespace. Sok adatbázis komponens használja alapértelmezett tárolási helyként, illetve az összes, nem a SYSTEM tablespaceben lévő metaadatot itt tároljuk.&lt;br /&gt;Az &lt;b&gt;UNDO tablespace&lt;/b&gt;k csak és kizárólag undo infomárciókat tartalmaznak, s csak automatikus undo menedzselt módban (alapértelmezett) alkalmazhatóak. Lehet ugyan több ilyen tablespaceünk, azonban használatban egyszerre csak egy lehet. Az undo tablespacek automatikusan létrejönnek, mindig lokálisan vezéreltek, s néhány ritkán előforduló körülménytől eltekintve a tranzakciókat első DML eljáráshívásuk után hozzárendeljük egy undo szegmenshez.&lt;br /&gt;Ha a SYSTEM tablespaceünket lokális vezérlésre állítottuk, mindenképpen definiálnunk az ideiglenes adatok tárolására egy &lt;b&gt;ideiglenes tablespace&lt;/b&gt;t, de ajánlott könyvtár vezérelt módban sem a SYSTEM-be szemetelni. A könnyebb kezelhetőség és a versenyhelyzet elkerülése érdekében természetesen ajánlott a felhasználók adatainak számára is külön tablespace(ke)t létrehozni.&lt;br /&gt;&lt;br /&gt;A tablespacek területének menedzselésére kétféle mód kínálkozik:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;A &lt;b&gt;lokálisan vezérelt&lt;/b&gt; tablespacek egy bitmapben tartják számon a datafileban használt és szabad területeket. Előnyük, hogy ezáltal nem kell foglalkozni a szomszédos szabad területek összeolvasztásával, illetve nincs szükség rekurzív területvezérlési műveletekre (pl. ha felszabadítunk helyet egy extentben, akkor az nem idéz elő semmilyen más műveletet a data dictionaryben vagy rollback szegmensben). A SEGMENT SPACE MANAGENT paraméterrel beállíthatjuk, hogy AUTO (alapértelmezett) vagy MANUAL módban szeretnénk-e kezelni a szegmensen belüli területeket. Előbbi esetben az adatbázis a bitmap alapján automatikusan kezeli a szabad területeket, míg utóbbiban egy (az előző részben már említett) free list-ben tartjuk nyilván az olyan adatblokkokat, ahova van lehetőség új sor beillesztésére.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A &lt;b&gt;könyvtár vezérelt&lt;/b&gt; mód az Oracle 9i verziójától elérhető. Ebben az esetben bitmapek helyett az adatbázis a SYSTEM tablespacen belül kezel egy data dictionaryt, melyet minden extentfoglalás és –felszabadítás esetén frissít, s ezekről a frissítésekről a rollback szegmensekben tárol információt.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Lehetőség van a SYSTEM tablespace kivételével (mivel annak data dictionaryjére mindig szüksége van egy futó adatbázisnak) bármely tablespacet online módból &lt;b&gt;offline mód&lt;/b&gt;ba átállítani. Erre karbantartáskor vagy biztonsági mentés létrehozásakor lehet szükség, de bizonyos hibák esetén az adatbázis automatikusan is offline módba állíthat egy tablespacet. Ilyenkor természetesen semmilyen olyan SQL utasítás nem hajtható végre, ami az adott tablespacen belüli objektumokra hivatkozik.&lt;br /&gt;&lt;br /&gt;Biztonsági okokból adott tablespaceket lehet csak olvasásra (&lt;b&gt;read-only&lt;/b&gt;) is engedélyezni.&lt;br /&gt;&lt;br /&gt;A CREATE &lt;b&gt;TEMPORARY TABLESPACE&lt;/b&gt; utasítással ideiglenes tárolási célokra használt tablespaceket hozhatunk létre. Ezek nagyban növelhetik a rendezést használó utasítások végrehajtásának hatékonyságát. Természetesen egy temporary tablespace nem használható állandó sémaobjektumok tárolására.&lt;br /&gt;&lt;br /&gt;Lehetőség van tablespaceink adatbázisok közti szállítására is. Ehhez nyújt segítséget a &lt;b&gt;tablespace repository&lt;/b&gt;, amelyben a tablespacek egy halmazának szállításához szükséges fájlokat tároljuk. Nem árt ügyelni arra, hogyha egy könyvtár vezérelt tablespacet költöztetünk át egy lokálisan vezérelt SYSTEM tablespaceszel rendelkező adatbázisba, akkor azt ott csak olvasni tudjuk majd, írni nem.&lt;br /&gt;&lt;br /&gt;Egy tablespacet ugyebár fizikailag &lt;b&gt;datafile&lt;/b&gt;(ok) alkotnak. Egy datafile csak egy tablespacehez és adatbázishoz tartozhat. Létrehozásakor az általa kijelölt terület formatálódik, s az adatbázis lefoglalja a későbbiekben szükséges extentek létrehozására. Az ideiglenes táblahelyek ideiglenes datafilejai kevesebb tulajdonsággal bírnak szokványos társaiknál: például nem logolnak és nem lehet őket read-only módra állítani.&lt;br /&gt;&lt;br /&gt;Az adatbázis indításához és működéséhez az ún. &lt;b&gt;control file&lt;/b&gt;okat használja. Ezeknek mindig írásra alkalmasnak kell lenniük, hisz az adatbázis működés közben folyamatosan frissíti bennük a fizikai architektúra és a visszagörgetéshez szükséges redo logok leírását. Ebből kifolyólag ha a control fileok nem elérhetőek vagy sérülnek, az adatbázis nem fog helyesen működni, ezért erősen ajánlott több azonos control filet egyszerre, különböző fizikai lemezeken tárolni és frissíteni.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Kapcsolódó link:&lt;br /&gt;&lt;a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/physical.htm" target="_blank"&gt;Oracle® Database Concepts: Tablespaces, Datafiles, and Control Files&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7419964986295601837-1666165971005542955?l=oraoptimization.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraoptimization.blogspot.com/feeds/1666165971005542955/comments/default' title='Megjegyzések küldése'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419964986295601837&amp;postID=1666165971005542955' title='1 megjegyzés'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/1666165971005542955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/1666165971005542955'/><link rel='alternate' type='text/html' href='http://oraoptimization.blogspot.com/2007/12/architektra-part-2-tablespacek-s.html' title='Architektúra part #2 – Táblaterek és Adatfájlok'/><author><name>hobs</name><uri>http://www.blogger.com/profile/07996651390466744259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp1.blogger.com/_vEoxRJtwuhk/R9CImnFFKgI/AAAAAAAAAAo/5n_ARucps9M/S220/cv_120x160.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419964986295601837.post-2410623355221136268</id><published>2007-11-21T01:06:00.001+01:00</published><updated>2008-03-07T00:08:55.272+01:00</updated><title type='text'>Architektúra part #1 – Logikai struktúra</title><content type='html'>Az Oracle Database logikai felépítése alapvetően három szintből áll. A legkisebb egységet az adatblokkok (&lt;b&gt;data blocks&lt;/b&gt;) képezik, amik egy előre meghatározott, fix pár bytenyi részt jelentenek. A fizikailag folytonosan elhelyezkedő, valamilyen tárolási célból előre lefoglalt adatblokkok képezik a következő szintet, az &lt;b&gt;extent&lt;/b&gt;eket. Ha egy extent betelik, de szükség van további szabad helyre, akkor új extentet kell foglalnunk. Az így keletkező, azonos célra foglalt, s azonos táblahelyen (&lt;a href="http://en.wikipedia.org/wiki/Tablespace" target="_blank"&gt;tablespace&lt;/a&gt;) elhelyezkedő extentek alkotják a harmadik hierarchia szintet, a szegmenseket (&lt;b&gt;segments&lt;/b&gt;).&lt;br /&gt;&lt;br /&gt;Az &lt;b&gt;adatblokk&lt;/b&gt;ok méretét a &lt;i&gt;DB_BLOCK_SIZE&lt;/i&gt; kezdeti paraméter beállításával adhatjuk meg, egy bizonyos felső korláttal, hogy elkerüljük a nagy adatblokkokból származó felesleges I/O-műveleteket.&lt;br /&gt;Az adatblokkra vonatkozó információkat tartalmazó overheadet (header, table directory, row directory) leszámítva használt és szabad területekre oszthatjuk a felhasználás szempontjából lényeges helyet. Használatban lévő területet felszabadítani nyilvánvalóan két utasítás fog: a &lt;i&gt;DELETE&lt;/i&gt; és az olyan &lt;i&gt;UPDATE&lt;/i&gt;, ami az addigi értéket egy kevesebb helyet foglalóra módosítja. Az így keletkező területek nem feltétlen fognak folytonosan elhelyezkedni, azonban mivel ezek az utasítások viszonylag gyakran előfordulhatnak, a töredezettség csökkentését csak akkor végzi el az Oracle Database, ha egy &lt;i&gt;INSERT&lt;/i&gt; vagy &lt;i&gt;UPDATE&lt;/i&gt; művelet olyan blokkot akar használni, ahol van elég hely számára, azonban nincs a blokkban olyan összefüggő hely, ami elég lenne számára.&lt;br /&gt;Fontos még megemlíteni, hogyha egy tábla sorának az adatai nem férnek bele egy adatblokkba, akkor azt adatblokkok láncolásával illetve pointerekkel ugyan megoldja az adatbázis, de az ebből fakadó többszörös I/O műveletek csökkentik a teljesítményt.&lt;br /&gt;Manuálisan felügyelt tablespaceknél két paramétert használhatunk az adatblokkok szabad területéhez történő hozzáférés vezérlésére:&lt;br /&gt;A &lt;i&gt;PCTFREE&lt;/i&gt;-vel beállíthatjuk, hogy az adatblokk hány százalékát akarjuk update-ekre fenntartani. Azaz ha az adatblokkban felhasznált terület eléri a (100-PCTFREE)%-t, akkor kiszedjük az adatblokkot ’free list’-ből (az a lista, amely tartalmazza, hogy mely adatblokkoknál alkalmazhatjuk az insert műveletet).&lt;br /&gt;A &lt;i&gt;PCTUSED&lt;/i&gt; paraméter egy minimum értéket ad a használt területre, amíg nem kezdeményezhetünk új instertet. Azaz ha a felhasznált terület az itt megadott érték alá esik, akkor az adatblokk visszakerül a ’free list’-be, s ismét lehet új sorokat is ide beilleszteni.&lt;br /&gt;&lt;br /&gt;Az &lt;b&gt;extent&lt;/b&gt;ek néhány folytonosan elhelyezkedő adatblokkot jelentenek, melyek lefoglalása egyidejűleg és előre történik. Például egy tábla létrehozásakor automatikusan lefoglal neki az Oracle Database egy kezdeti extentet, majd ha ez a terület kevésnek bizonyul, akkor további, legalább a kezdeti extent méretével egyező, vagy annál nagyobb extenteket. Ehhez a datafile-ok bitmapjeit használja, amik alapján megállapítható, hogy hol van megfelelő mennyiségű szomszédos szabad blokk.&lt;br /&gt;Az extentek felszabadítása alapesetben csak akkor történik meg, ha töröljük az adott táblát. Kivételt képeznek ez alól a manuális műveletek, illetve a rollback szegmens, aminek méretét az Oracle Database periódikusan optimalizálja.&lt;br /&gt;&lt;br /&gt;Azok az extentek, melyek egy tablespacen belül logikailag összetartozó struktúrát képeznek, alkotnak egy &lt;b&gt;szegmens&lt;/b&gt;et. Például egy táblához vagy indexhez tartozó extentek jelentik az adott táblához illetve indexhez tartozó szegmenset.&lt;br /&gt; A hatékonyság szempontjából fontos tárolási paramétereket mind a táblák, mind az indexek létrehozásakor illetve módosításukkor beállíthatjuk. Egy indexnek azonban nem feltétlen kell az általa hivatkozott táblával egy tablespaceben lennie… így a tárolási paraméterek beállításánál akár egy másik tablespacet is választhatunk.&lt;br /&gt; Léteznek még az ún. ideiglenes szegmensek is, melyeket az Oracle Database automatikusan lefoglal, ha valamely művelet végrehajtása során szüksége van a memóriát meghaladó területekre, vagy ha egy tranzakció során ideiglenes táblá(ka)t használunk. Az ideiglenes szegmensek tárolására használt tablespaceket a felhasználók létrehozásánál illetve módosításánál a &lt;i&gt;TEMPORARY TABLESPACE&lt;/i&gt; paraméterrel állíthatjuk be. Ez alapesetben a &lt;i&gt;SYSTEM&lt;/i&gt; tablespacet jelenti, azonban ajánlott legalább egy ilyen tablespacet létrehozni, hogy elkerüljük a SYSTEM nagymértékű tördelődését.&lt;br /&gt;Fontos még megjegyezni, hogy a 9i verziótól ugyan már automatikusan működik a tranzakciók visszagörgetése – amivel egy inkonzisztens állapotból térhetünk vissza egy konzisztensbe -, azonban egy rosszul működő tranzakció túlságosan nagy részét foglalhatja el az visszagörgetéshez használt undo tablespacenek. Ezért lehetőség van a felhasználók egy bizonyos csoportjának, vagy akár egy adott felhasználónak is közvetlen korlátozni az undo területét. Erre szolgál az &lt;i&gt;UNDO_POOL&lt;/i&gt; paraméter, melynek default értéke természetesen &lt;i&gt;UNLIMITED&lt;/i&gt;. Így ha egy csoport egy felhasználója megtölti a csoport számára kijelölt területet, akkor nem hajthat végre további update-eket mindaddig, amíg egy másik csoportbéli felhasználó tranzakciója be nem fejeződik, s ezáltal területek szabadulnak fel.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Kapcsolódó link:&lt;br /&gt;&lt;a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/logical.htm#i8531" target="_blank"&gt;Oracle® Database Concepts: Data Blocks, Extents, and Segments&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7419964986295601837-2410623355221136268?l=oraoptimization.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraoptimization.blogspot.com/feeds/2410623355221136268/comments/default' title='Megjegyzések küldése'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419964986295601837&amp;postID=2410623355221136268' title='2 megjegyzés'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/2410623355221136268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/2410623355221136268'/><link rel='alternate' type='text/html' href='http://oraoptimization.blogspot.com/2007/11/architektra-part-1-logikai-struktra.html' title='Architektúra part #1 – Logikai struktúra'/><author><name>hobs</name><uri>http://www.blogger.com/profile/07996651390466744259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp1.blogger.com/_vEoxRJtwuhk/R9CImnFFKgI/AAAAAAAAAAo/5n_ARucps9M/S220/cv_120x160.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419964986295601837.post-8594727751175423429</id><published>2007-10-11T07:08:00.001+02:00</published><updated>2008-03-07T00:02:41.142+01:00</updated><title type='text'>Az Oracle optimalizáló eszközei</title><content type='html'>Az &lt;a href="http://edelivery.oracle.com/linux" target="_blank"&gt;Enterprise Linux 5&lt;/a&gt;, illetve az &lt;a href="http://download.oracle.com/otn/linux/oracle11g/linux_11gR1_database.zip" target="_blank"&gt;Oracle 11g&lt;/a&gt; telepítése néhány gigabyte memória-bővítést követően egy-két kisebb akadály lekűzdése után végül zökkenőmentesen végbement.&lt;br /&gt;Majd következett az Oracle két legfontosabb optimalizáló eszközével való ismerkedés.&lt;br /&gt;&lt;br /&gt;A &lt;a href="http://www.oracle.com/technology/products/manageability/database/pdf/ds/diagnostic-pack-11g-datasheet.pdf" target="_blank"&gt;Diagnostic Pack&lt;/a&gt; legfontosabb része az ADDM (Automatic Database Diagnostic Monitor), amely a teljesítményproblémák automatikus diagnosztizálását végzi. Egy problémaelemzési fát bejárva gyorsan és hatékonyan keresi a működés szűk keresztmetszeteit, illetve azoknak konkrét okait. Ehhez nyújt segítséget az Automatic Workload Repository (AWR), amely folyamatosan gyűjti és tárolja az adatokat az adatbázis működéséről és terheléséről.&lt;br /&gt;&lt;br /&gt;A &lt;a href="http://www.oracle.com/technology/products/manageability/database/pdf/ds/tuning-pack-11g-datasheet.pdf" target="_blank"&gt;Tuning Pack&lt;/a&gt; az SQL-kódok automatikus optimalizálását teszi lehetővé. Ehhez az SQL Tuning Advisor négyfajta elemzést végez (Statisztikai elemzés, SQL Profiling, Elérési utak elemzése, SQL-struktúra elemzés), majd optimalizálási javaslatokat tesz a várható előnyök ismertetése mellett. Az ehhez szükséges adatokat különböző forrásokból képes egy SQL Tuning Set objektumba fogadni.&lt;br /&gt;A Tuning Pack másik fontos része az SQL Access Advisor, amely az adatbázis-séma optimalizálását segíti indexek és nézetek létrehozására/elhagyására történõ tanácsokkal.&lt;br /&gt;A Tuning Pack harmadik komponenseként tartalmazza az Object Reorganization Wizardot, amely objektumok átszervezésével, táblaterek hatékony helykihasználásával segíti elő a teljesítménynövekedést.&lt;br /&gt;&lt;br /&gt;A későbbiekben ezekhez keresek példákat, hogy a működésüket közelebbről is megismerhessem/kipróbálhassam (ehhez természetesen tanácsokat is szívesen fogadok), illetve az optimalizálási eljárásokat tanulmányozom (&lt;a href="http://download.oracle.com/docs/cd/A91202_01/901_doc/server.901/a87503/optimops.htm" target="_blank"&gt;CBO vs RBO&lt;/a&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7419964986295601837-8594727751175423429?l=oraoptimization.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraoptimization.blogspot.com/feeds/8594727751175423429/comments/default' title='Megjegyzések küldése'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419964986295601837&amp;postID=8594727751175423429' title='3 megjegyzés'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/8594727751175423429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/8594727751175423429'/><link rel='alternate' type='text/html' href='http://oraoptimization.blogspot.com/2007/10/az-oracle-optimalizl-eszkzkei.html' title='Az Oracle optimalizáló eszközei'/><author><name>hobs</name><uri>http://www.blogger.com/profile/07996651390466744259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp1.blogger.com/_vEoxRJtwuhk/R9CImnFFKgI/AAAAAAAAAAo/5n_ARucps9M/S220/cv_120x160.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419964986295601837.post-8097422909936344574</id><published>2007-10-04T13:43:00.001+02:00</published><updated>2008-03-06T23:59:55.464+01:00</updated><title type='text'>Kezdet</title><content type='html'>A blog elsődleges célja, hogy önálló labor konzulenseim (Kardkovács Zsolt (BME) és Sárecz Lajos (Oracle))  bármikor on-line nyomon követhessék az előrehaladásomat. Emellett természetesen a blogot bárki olvashatja, így remélhetőleg a későbbiekben egyesek számára hasznos forrásként is funkcionál majd.&lt;br /&gt;&lt;br /&gt;Előreláthatólag a következő napok folyamán az Oracle 11g felépítésével ismerkedem majd, illetve tanulmányozom a relációs adatbázisokban végezhető optimalizálási eljárásokat. A későbbiekben szakirodalmak feldolgozását végzem elsősorban, s próbalom elsajátítani többek között a hintek megadásának módját, valamint különböző példaprogramokat és teszteket vizsgálok és hasonlítok majd össze.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7419964986295601837-8097422909936344574?l=oraoptimization.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraoptimization.blogspot.com/feeds/8097422909936344574/comments/default' title='Megjegyzések küldése'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419964986295601837&amp;postID=8097422909936344574' title='0 megjegyzés'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/8097422909936344574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419964986295601837/posts/default/8097422909936344574'/><link rel='alternate' type='text/html' href='http://oraoptimization.blogspot.com/2007/10/kezdet.html' title='Kezdet'/><author><name>hobs</name><uri>http://www.blogger.com/profile/07996651390466744259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp1.blogger.com/_vEoxRJtwuhk/R9CImnFFKgI/AAAAAAAAAAo/5n_ARucps9M/S220/cv_120x160.jpg'/></author><thr:total>0</thr:total></entry></feed>
