<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="hu">
	<id>https://vik.wiki/index.php?action=history&amp;feed=atom&amp;title=Adatb%C3%A1zisok_szerver_oldali_programoz%C3%A1sa_El%C5%91ad%C3%A1s%2C_2006.04.07.</id>
	<title>Adatbázisok szerver oldali programozása Előadás, 2006.04.07. - Laptörténet</title>
	<link rel="self" type="application/atom+xml" href="https://vik.wiki/index.php?action=history&amp;feed=atom&amp;title=Adatb%C3%A1zisok_szerver_oldali_programoz%C3%A1sa_El%C5%91ad%C3%A1s%2C_2006.04.07."/>
	<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=Adatb%C3%A1zisok_szerver_oldali_programoz%C3%A1sa_El%C5%91ad%C3%A1s,_2006.04.07.&amp;action=history"/>
	<updated>2026-05-16T17:55:04Z</updated>
	<subtitle>Az oldal laptörténete a wikiben</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://vik.wiki/index.php?title=Adatb%C3%A1zisok_szerver_oldali_programoz%C3%A1sa_El%C5%91ad%C3%A1s,_2006.04.07.&amp;diff=163842&amp;oldid=prev</id>
		<title>2001:738:2001:2078:0:208:37:0: Új oldal, tartalma: „{{GlobalTemplate|Valaszthato|AdatbServerProgJegyzet20060407}}  &lt;!--  * Set DENYTOPICVIEW = TWikiGuest --&gt;   &lt;style&gt;  	code.pre { white-space: pre; display: block; m…”</title>
		<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=Adatb%C3%A1zisok_szerver_oldali_programoz%C3%A1sa_El%C5%91ad%C3%A1s,_2006.04.07.&amp;diff=163842&amp;oldid=prev"/>
		<updated>2013-03-31T19:03:39Z</updated>

		<summary type="html">&lt;p&gt;Új oldal, tartalma: „{{GlobalTemplate|Valaszthato|AdatbServerProgJegyzet20060407}}  &amp;lt;!--  * Set DENYTOPICVIEW = &lt;a href=&quot;/index.php?title=TWikiGuest&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;TWikiGuest (a lap nem létezik)&quot;&gt;TWikiGuest&lt;/a&gt; --&amp;gt;   &amp;lt;style&amp;gt;  	code.pre { white-space: pre; display: block; m…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Új lap&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{GlobalTemplate|Valaszthato|AdatbServerProgJegyzet20060407}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
* Set DENYTOPICVIEW = [[TWikiGuest]]&lt;br /&gt;
--&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt; &lt;br /&gt;
	code.pre { white-space: pre; display: block; mergin-top: 2px; margin-bottom: 2px;}&lt;br /&gt;
	li { line-height: 18px; }&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt; [[AdatbServerProgJegyzet20060404|&amp;amp;lt;&amp;amp;lt;]] Előadás, 2006.04.07. [[AdatbServerProgJegyzet20060411|&amp;amp;gt;&amp;amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Tranzakciók==&lt;br /&gt;
&lt;br /&gt;
===Definíció===&lt;br /&gt;
Tranzakciónak hívjuk a munka 1 logikai egységét. 1 tranzakció 1 vagy több SQL utasításból állhat.&lt;br /&gt;
&lt;br /&gt;
Tranzakció tulajdonságai (ACID) &amp;amp;mdash; gyakori vizsgakérdés:&lt;br /&gt;
* atomicity: vagy minden utasítása végrehajtódik, vagy egyik sem&lt;br /&gt;
* consistency: a tranzakció konzisztens állapotból konzisztens állapotba visz&lt;br /&gt;
* isolation: a tranzakció elvárt eredménye megegyezik azzal, mintha a tranzakció egyedül futna&lt;br /&gt;
* durability: véglegesítés után nem veszhet el az információ&lt;br /&gt;
&lt;br /&gt;
===Tranzakció határai===&lt;br /&gt;
* kezdete: 1 futtatható SQL utasítás&lt;br /&gt;
* vége:&lt;br /&gt;
** explicit =COMMIT= vagy =ROLLBACK=&lt;br /&gt;
** implicit: DDL utasítás (=CREATE=, =DROP=, =RENAME=, =ALTER=) kiadásával vagy a kapcsolat bezárásával automatikusan commitol. A DDL utasítás mindenképp külön tranzakcióban fut.&lt;br /&gt;
** implicit =ROLLBACK=: ha az adatbázis kapcsolat hiba köveztében szakad meg&lt;br /&gt;
&lt;br /&gt;
====COMMIT====&lt;br /&gt;
* véglegesítés&lt;br /&gt;
* a változtatások a többiek számára is láthatóvá válnak&lt;br /&gt;
* zárak felszabadítása&lt;br /&gt;
* az adat lemezre kerül&lt;br /&gt;
* naplózás&lt;br /&gt;
&lt;br /&gt;
====ROLLBACK====&lt;br /&gt;
* visszafejti az utasításokat a tranzakció kezdetéig&lt;br /&gt;
* Oracle megoldása a visszafejtésre: &amp;#039;&amp;#039;redo log&amp;#039;&amp;#039;, azaz minden utasítás végrehajtásakor letárolja az utasítás inverzét is&lt;br /&gt;
* a tranzakcióban definiálhatók biztonsági pontok (=SAVEPOINT=): a tranzakció nem csak a legelejére görgethető vissza, hanem egy biztonsági pontig is&lt;br /&gt;
** =SAVEPOINT= definiálása: =SAVEPOINT s.p. neve;=&lt;br /&gt;
** visszagörgetés: =ROLLBACK TO s.p. neve;=&lt;br /&gt;
** ha azonos néven definiálunk 2 savepointot, az utolsó felülírja a többit&lt;br /&gt;
** rekurzív függvényben a &amp;lt;pre&amp;gt;SAVEPOINT&amp;lt;/pre&amp;gt;-ok a stacken tárolódnak, de csak a legbelső érhető el&lt;br /&gt;
** az utasítás szintű visszafejtést az Oracle implicit &amp;lt;pre&amp;gt;SAVEPOINT&amp;lt;/pre&amp;gt;-ok segítségével végzi&lt;br /&gt;
&lt;br /&gt;
===Konkurens tranzakciók===&lt;br /&gt;
&lt;br /&gt;
Konkurens tranzakciók esetén a következő problémák merülhetnek fel:&lt;br /&gt;
* _dirty read_: a tranzakció olyan adatot olvas, amit egy másik nem kommittáltan írt&lt;br /&gt;
* _nem megismételhető olvasás_: az adathalmazt újra beolvasva azt látjuk, hogy egy már kommittált tranzakció módosította vagy törölt belőle&lt;br /&gt;
* _fantom olvasás_: olvasás közben egy másik tranzakció új sorokat szúr be&lt;br /&gt;
&lt;br /&gt;
A problémák megoldására az SQL&amp;#039;92 szabvány 4 izolációs szintet különít el. A táblázat mezői azt jelentik, hogy adott izolációs szinten adott hiba előfordulhat-e.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|						  || &amp;#039;&amp;#039;&amp;#039;Dirty read&amp;#039;&amp;#039;&amp;#039; || &amp;#039;&amp;#039;&amp;#039;Non-repeatable read&amp;#039;&amp;#039;&amp;#039; || &amp;#039;&amp;#039;&amp;#039;Phantom read&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Read uncommitted&amp;#039;&amp;#039;&amp;#039; || igen			|| igen						|| igen			  &lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Read committed&amp;#039;&amp;#039;&amp;#039;	|| nem			 || igen						|| igen			  &lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Repeatable read&amp;#039;&amp;#039;&amp;#039;  || nem			 || nem						 || igen			  &lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Serializable&amp;#039;&amp;#039;&amp;#039;	  || nem			 || nem						 || nem				&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Az Oracle 3 izolációs szintet vezetett be:&lt;br /&gt;
* read committed: alapbeállítás&lt;br /&gt;
** a tranzakciók olyan adatokat látnak, amiket a &amp;#039;&amp;#039;&amp;#039;lekérdezés&amp;#039;&amp;#039;&amp;#039; előtt kommittáltak&lt;br /&gt;
** akkor érdemes használni, ha kevés ütközésre számítunk&lt;br /&gt;
* serializable&lt;br /&gt;
** a tranzakciók olyan módosításokat adatokat látnak, amiket a &amp;#039;&amp;#039;&amp;#039;tranzakció&amp;#039;&amp;#039;&amp;#039; kezdete előtt kommittáltak&lt;br /&gt;
** nagy adatbázis, várhatóan kevés ütközés (2 tranzakció azonos sort próbál módosítani), rövid, kevés sort érintő módosító tranzakciók esetén érdemes használni&lt;br /&gt;
* read only&lt;br /&gt;
** a tranzakciók olyan módosításokat adatokat látnak, amiket a &amp;#039;&amp;#039;&amp;#039;tranzakció&amp;#039;&amp;#039;&amp;#039; kezdete előtt kommittáltak&lt;br /&gt;
** a tranzakció csak olvashat&lt;br /&gt;
&lt;br /&gt;
====Példa====&lt;br /&gt;
&lt;br /&gt;
===Zárak kezelése===&lt;br /&gt;
&lt;br /&gt;
====Sor szintű zárak====&lt;br /&gt;
&lt;br /&gt;
====Sor szintű zárak kurzorral====&lt;br /&gt;
&lt;br /&gt;
====Tábla szintű zárolás====&lt;br /&gt;
&lt;br /&gt;
===Autonóm tranzakció===&lt;br /&gt;
&lt;br /&gt;
-- [[PallosPeter|Peti]] - 2006.04.10.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Valaszthato]]&lt;/div&gt;</summary>
		<author><name>2001:738:2001:2078:0:208:37:0</name></author>
	</entry>
</feed>