<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Rollback &#187; replikáció</title>
	<atom:link href="http://blog.rollback.hu/tag/replikacio/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.rollback.hu</link>
	<description>SQL, üzemeltetés kicsiknek és nagyoknak.</description>
	<lastBuildDate>Thu, 17 Nov 2011 16:38:59 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Pótolom a pótolnivalót</title>
		<link>http://blog.rollback.hu/2011/08/potolom-a-potolnivalot/</link>
		<comments>http://blog.rollback.hu/2011/08/potolom-a-potolnivalot/#comments</comments>
		<pubDate>Wed, 10 Aug 2011 17:02:30 +0000</pubDate>
		<dc:creator>Erik</dc:creator>
				<category><![CDATA[Magyar]]></category>
		<category><![CDATA[eszmefuttatás]]></category>
		<category><![CDATA[konferencia]]></category>
		<category><![CDATA[replikáció]]></category>
		<category><![CDATA[SQLU]]></category>

		<guid isPermaLink="false">http://blog.rollback.hu/?p=344</guid>
		<description><![CDATA[Örömömre szolgál elmondani, hogy két hónapon belül meglesz a tranzakcionális replikáció további boncolása, melyet mostanában (2008-ban vagy 2009-ben) ígértem meg. Cserébe egy kicsit többet fogok mondani róla, mint terveztem, mivel éppen abból készülök előadni az SQLU Summit 2011-en. (Kis reklám: ez egy kiváló kis 2-3 napos konferencia Budapesten, olyan emberek, mint Itzik Ben-Gan meg Dejan [...]]]></description>
			<content:encoded><![CDATA[<p>Örömömre szolgál elmondani, hogy két hónapon belül meglesz a tranzakcionális replikáció további boncolása, melyet mostanában (2008-ban vagy 2009-ben) ígértem meg. Cserébe egy kicsit többet fogok mondani róla, mint terveztem, mivel éppen abból készülök előadni az <a href="http://summit.solidq.com/vienna/Seiten/Home.aspx">SQLU Summit 2011</a>-en. (Kis reklám: ez egy kiváló kis 2-3 napos konferencia Budapesten, olyan emberek, mint Itzik Ben-Gan meg Dejan Sarka adnak elő – na ŐK tényleg értenek a SQL Serverhez. Ráadásul nem is drága, olyan 200K HUF körül van, és aki hétfőig benevez, az megkapja <a href="http://www.netacademia.net/Info/SQLU">650 EUR-ért</a>. Na jó, ez már durván reklám, de sebaj :). </p>
<p>Mi lesz az extra a tranzakcionális replikáció elemzésében? Hát, például az olyanok, hogy central subscriber berhelése, adat inkonzisztencia kezelése is leíródik, amiket eredetileg nem terveztem. A central subscriber kevés embert hoz lázba, mert homályos. Arról van pedig csak szó, hogy van egy szerver, ami több hasonló és/vagy kapcsolódó adatbázis publikációira iratkozott fel, és összefésüli az adatot. Például több régióba telepített ugyanolyan alkalmazások adatbázisait rántja össze. Ebben az első kihívás  az inicializálás: a második subscription már békén kell, hogy hagyja a létező adatokat. És az igazi öröm az, amikor ez eltörik, és újra kell gyártani. Ami egyébként nem nehéz, ne hintsük itt a port :) Majd részletezem, ahogy haladok. </p>
<p>Viszont azt előre megmondom, hogy a konferenciáig az Availability Groupokról egy betűt nem fogok írni. Inkább gyertek el ;) Amúgy tényleg.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rollback.hu/2011/08/potolom-a-potolnivalot/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Filtered transactional replication vs performance</title>
		<link>http://blog.rollback.hu/2009/01/filtered-transactional-replication-vs-performance/</link>
		<comments>http://blog.rollback.hu/2009/01/filtered-transactional-replication-vs-performance/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 20:31:26 +0000</pubDate>
		<dc:creator>Erik</dc:creator>
				<category><![CDATA[Magyar]]></category>
		<category><![CDATA[replikáció]]></category>
		<category><![CDATA[sql2000]]></category>
		<category><![CDATA[üzemeltetés]]></category>

		<guid isPermaLink="false">http://blog.rollback.hu/?p=47</guid>
		<description><![CDATA[Elnézést az angol címért, de ez történt. Létrehoztam tegnap egy szűrt tranzakcionális publikációt (ez szerintetek jobb?), és ma ránéztem a szerverre, és azt láttam, hogy a logreader agent (naplóolvasó ügynök) le van maradva súlyos órákkal. Megnéztem a sysprocesses táblában, hogy mennyi erőforrást eszik, és azt láttam, hogy rohadt sokat. Állítgattam egy kicsit az agent paramétereken, [...]]]></description>
			<content:encoded><![CDATA[<p>Elnézést az angol címért, de ez történt. Létrehoztam tegnap egy szűrt tranzakcionális publikációt (ez szerintetek jobb?), és ma ránéztem a szerverre, és azt láttam, hogy a logreader agent (naplóolvasó ügynök) le van maradva súlyos órákkal. Megnéztem a sysprocesses táblában, hogy mennyi erőforrást eszik, és azt láttam, hogy rohadt sokat. Állítgattam egy kicsit az agent paramétereken, de igazából nem értettem a helyzetet, és nem is segített a piszkálgatás.<br />
Kénytelen voltam gondolkodni, és arra jutottam, hogy profiler kell nekem. És tényleg, a logreader agent spidjére szűrve elkezdtek záporozni a cpu-t és io-t evő eventek: dolgozta fel a filtert a szerencsétlen: where id in (select id from tabla2 where location_code = 144). Úgy döntöttem, hogy ez nekem annyira nem kell. Eldobtam az új publikációt, és&#8230; nem történt semmi változás a lemaradásban. Újraindítottam az agentet, semmi. Ekkor gondoltam, hogy le kéne menni a boltba birkaveséért, megszárítani, porrá törni, és beszórni vele a szervert. Ez segített, mert hirtelen elkezdett esni a delivery latency. Úgy látszik, hogy a filterezés tényleg kikészítette öreg barátunkat.<br />
Hepiend.</p>
<p>(a történeti hűség és politikai korrektség jegyében meg kell mondanom, hogy ez a szerver egy muzeális darab, még SQL 2000-et futtat)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rollback.hu/2009/01/filtered-transactional-replication-vs-performance/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Tranzakciós log ürítése és nem ürítése</title>
		<link>http://blog.rollback.hu/2008/11/tranzakcios-log-uritese-es-nem-uritese/</link>
		<comments>http://blog.rollback.hu/2008/11/tranzakcios-log-uritese-es-nem-uritese/#comments</comments>
		<pubDate>Tue, 04 Nov 2008 21:25:24 +0000</pubDate>
		<dc:creator>Erik</dc:creator>
				<category><![CDATA[Magyar]]></category>
		<category><![CDATA[recovery model]]></category>
		<category><![CDATA[replikáció]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[transaction log]]></category>
		<category><![CDATA[tranzakció]]></category>

		<guid isPermaLink="false">http://blog.rollback.hu/?p=31</guid>
		<description><![CDATA[   Mostanság SQL DBA-t keresek, és szakmai tesztekkel és interjúkkal is töltöm rengeteg szabadidőmet. Alapvetően megerősítve látom azon véleményemet, hogy az informatika vallásközeli tudomány, és sokan transzcendens vonásokat találnak a szerverek működésében, és babonás eszközökkel közelítik meg őket. Az egyik ilyen misztikus terület a tranzakciós log szerepe és használata.
   Mindenekelőtt szeretném [...]]]></description>
			<content:encoded><![CDATA[<p>   Mostanság <a href="http://blog.rollback.hu/2008/09/sql-dba-wanted/">SQL DBA-t keresek</a>, és szakmai tesztekkel és interjúkkal is töltöm rengeteg szabadidőmet. Alapvetően megerősítve látom azon véleményemet, hogy az informatika vallásközeli tudomány, és sokan transzcendens vonásokat találnak a szerverek működésében, és babonás eszközökkel közelítik meg őket. Az egyik ilyen misztikus terület a tranzakciós log szerepe és használata.<br />
   Mindenekelőtt szeretném leszögezni a következőt: <strong>a tranzakció teljesülését a diszkre fogja kiírni rögtön az SQL szerver</strong>, nem a memóriában írja a tranzakciós logot, mert annak ugye nem volna sok értelme, ha a commit tényét egy illékony tárban rögzítené. De ez részletkérdés pillanatnyi motivációm szempontjából, nézzük inkább meg, hogy mikor szabadítja fel az SQL a tranzakciós logot. Három feltételnek kell tejesülnie:</p>
<ol>
<li>Az adatbázis <strong>recovery modellje simple</strong> vagy (full és bulk-logged esetén) az adott naplórész <strong>le lett backupolva</strong>.</li>
<li>A tranzakciós log szóban forgó része <strong>nem tartalmaz aktív tranzakciót</strong>, azaz minden olyan tranzakció, ami a log írásakor aktív volt, már véget ért (ha rollback lett ,akkor a rollback is véget ért).</li>
<li>Az adatbázis nincs replikálva vagy ha igen, akkor a <strong>Log Reader Agent már elolvasta </strong>az adott részt</li>
</ol>
<p>   Ezeknek a feltételeknek egyszerre teljesülniük kell. Azaz ha leállítom a Log Reader Agentet, akkor elkezd nőni a tranlog az égig, hogy ne rontsa el a replikációt. Hasonlóan elkezd nőni a log, ha sikerült egy tranzakicónak nyitva maradnia az adatbázisban, és lassan az egész tranlog aktívvá válik miatta.<br />
   Tehát ha megnő a log, érdemes a fenti pontokat ellenőrizni, körülbelül ebben a sorrendben (recovery model/utolsó log backup; legrégebbi nyitott tranzakció; replikáció esetén LRA).<br />
   Ja, még egy utolsó: a TRUNCATE LOG parancsok margójára: ha valaki rendszeresen kiadja a truncate log parancsot, akkor gondolkozzon el azon, hogy miért van full recovery model beállítva, és gyorsan állítsa át simple-re. Köszi.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rollback.hu/2008/11/tranzakcios-log-uritese-es-nem-uritese/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Többszintű replikáció költöztetése</title>
		<link>http://blog.rollback.hu/2008/11/tobbszintu-replikacio-koltoztetese/</link>
		<comments>http://blog.rollback.hu/2008/11/tobbszintu-replikacio-koltoztetese/#comments</comments>
		<pubDate>Tue, 04 Nov 2008 21:07:51 +0000</pubDate>
		<dc:creator>Erik</dc:creator>
				<category><![CDATA[Magyar]]></category>
		<category><![CDATA[mssql]]></category>
		<category><![CDATA[replikáció]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://blog.rollback.hu/?p=30</guid>
		<description><![CDATA[   Pár hónapja találkoztam egy érdekes problémával: adott egy többszintű MSSQL tranzakcionális replikáció, azaz a subscriber továbbpublisholja az adatokat valahova, ahonnan ezt még tovább publikálják. Hogy mi ebben a ráció, azt nem akarom firtatni, a lényeg, hogy azért van benne, például nem látják egymást a gépek, és az eleje és a vége között [...]]]></description>
			<content:encoded><![CDATA[<p>   Pár hónapja találkoztam egy érdekes problémával: adott egy többszintű MSSQL tranzakcionális replikáció, azaz a subscriber továbbpublisholja az adatokat valahova, ahonnan ezt még tovább publikálják. Hogy mi ebben a ráció, azt nem akarom firtatni, a lényeg, hogy azért van benne, például nem látják egymást a gépek, és az eleje és a vége között van párezer mérföld távolság. Ebben a helyzetben a második publishert kellett kicserélni, mivel upgrade-elték az SQL-t 2005-re. A replikált adatmennyiség elég nagy volt, WAN-on napokig tartott egy újrainicializálás, úgyhogy valami frappáns megoldás után néztem&#8230; A végeredmény sokak szerint merész lett, de senki nem tudott belekötni, úgyhogy ezt javasoltam végső megoldásnak.<br />
   Az &#8220;adatforrás&#8221; szervert nevezzük A-nak, az ő subscriberét B-nek, aki publikálja az A-tól kapott adatokat C-nek, és ne is menjünk tovább, ennyi elég a történet szempontjából, hiszen B-t cseréljük ki BB-re. A legegyszerűbb felállásban új publikációkat kellett volna létrehozni BB-n, amire C-nek fel kell iratkozni, és a kezdeti incializálás duplán fáj: a hosszú snapshot applikáció mellett a már a C-n lévő adatokat onnan előbb el kell tüntetni: vagy delete, ami többgigás tábláknál elég csúnya hatással van az adatbázis használhatóságára, ráadásul továbbreplikálódik D-re, ahol ugyanezt a hatást váltja ki; vagy drop-create table, ami gyorsabb, de ehhez a C-n lévő publikációt el kell dobni és újra létrehozni majd, ami egy vertikálisan és horizontálisan is filterezett gigásznál szintén elég kalandos tud lenni. <span id="more-30"></span><br />
   A kettes számú megoldás, amit a BOL-ba belenézve kitalál az ember: adatbázis backup B-n, restore BB-n, a WITH KEEP_REPLICATION clause-zal. Ez kicsit egyszerűbbnek tűnik, de egyrészt mindenki szívesebben látott volna egy új, üres adatbázist, ami nem hordoz meglepetéseket magában, másrészt (és ez egy sokkal jobb indok volt) az ilyen módon előálló érdekes helyzet, miszerint az adatbázis publikál dolgokat, de az instance sosem hallott a subscriberekről, illetve a forrás A szerver sem hallott BB-ről. Ezt a BOL a következőképpen fogalmazza meg: </p>
<blockquote><p>Replication supports restoring replicated databases to the same server and database from which the backup was created. If you restore a backup of a replicated database to another server or database, replication settings cannot be preserved. In this case, you must re-create all publications and subscriptions after backups are restored.</p></blockquote>
<p>   Azaz nem állíthatod vissza másik szerverre a replikáció megőrzésével az adatbázist. Ez is kiesett.<br />
   Végül legvadabb ötletem nyerte a tendert, mely a következő lépéseket foglalja magában:</p>
<ol>
<li>Iratkozzunk fel BB-ről A megfelelő publikációira, és hozzuk létre a B-n is létező publikációkat, azaz készítsük elő BB-t az éles üzemre.</li>
<li>Állítsuk le a Log Reader Agentet A-n. Várjuk meg, amíg végimegy minden már kiolvasott módosítás B-re és onnan C-re.</li>
<li>Irassuk le C-t B publikációiról, és irassuk fel BB ekvivalens publikációira, méghozzá NOSYNC módon, azaz NE INICIALIZÁLJUK A SUBSCRIPTIONT. Hiszen pont ugyanazokat az adatokat hozná át, mivel B és BB számára A nem változik (mert leállítottuk a Log Reader Agentet, és nincs, aki a forrásadatbázisban történő változásokat kiolvassa).</li>
<li><strong>Hozzuk létre a replikációhoz szükséges tárolt eljárásokat C-n.</strong> Most páran benéznek: tessék? hát azt megcsinálja az SQL&#8230; Persze, megcsinálja, amikor inicializáljuk a subscriptiont. Ha nem, akkor úgy gondolja, hogy biztos valami nagyon érdekeset tervezünk, és inkább nem szól bele. Ha mégis szeretnénk a tárolt eljárásainkat megkapni, akkor a publisher adatbázisban kell lefuttatni a frappáns <strong>sp_scriptpublicationcustomprocs</strong> nevű tárolt eljárást, mely egyetlen paraméterként a publication nevét várja, kimenete pedig sok sor, amelyeket le kell futtatni a subscriber adatbázisban, és így megkapjuk a szükséges tárolt eljárásokat.</li>
<li>Ellenőrizzük, hogy működik-e a dolog: egy előre kiválasztott és leegyeztetett rekordot módosítsunk BB-n, és nézzük meg, hogy átment-e C-re a módosítás. Muszáj neki.</li>
<li>Indítsuk el a Log Reader Agentet A-n, és ellenőrizzünk.</li>
<li>Írjuk meg mindenkinek, hogy menniyre jók voltunk megint, és kb. 30 perc késleltetéssel megoldottuk a dolgot.</li>
</ol>
<p>   Nem azért, mert én találtam ki, de szerintem gyönyörű terv, abszolút kihasználja a replikáció működési mechanizmusát, és mégis egyszerű és átlátható (sőt, kipróbáltam, és működött is). Ezt mindenki elismerte. Kivéve a madzag végén lakókat, akik sok pénzt fizettek egy cégnek, hogy SQL-t szakértsen nekik, szerintem alaptalanul. A cég közölte minden részletezés és indoklás nélkül, hogy ez veszélyes, inkább a három nap kiesést javasolják. Nem kérdeztem vissza, mert ez a cég mondta azt korábban, hogy nem tudják, hogy mi fog történni az SQL 2000 szerverrel, ha egy Management Studiót telepítenek az alatta futó Windows 2003-ra, meg hogy ezt támogatja-e egyáltalán a Microsoft. Szóval nem éreztem úgy, hogy vannak szakmai indokaik, éppen ezért mélységesen csalódott voltam, hogy elrontották a gyönyörű játékomat, amit így élesben nem is láthattam működni, csak kicsit tesztben, de az meg nem az igazi. Ha esetleg valaki megvalósítaná ezt a tervet, vagy már megvalósította, mesélje el, hogy mennyire váltotta be a hozzá fűzött reményeimet. Köszönöm.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rollback.hu/2008/11/tobbszintu-replikacio-koltoztetese/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>&#8230;ó &#8230;ió &#8230;ció &#8230;Replikáció!</title>
		<link>http://blog.rollback.hu/2008/04/replikacio-alapok/</link>
		<comments>http://blog.rollback.hu/2008/04/replikacio-alapok/#comments</comments>
		<pubDate>Mon, 07 Apr 2008 22:39:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Magyar]]></category>
		<category><![CDATA[replikáció]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[sql2005]]></category>

		<guid isPermaLink="false">http://blog.rollback.hu/?p=3</guid>
		<description><![CDATA[Irodalmi bevezető
A replikáció érdekes terület az SQL szerverben. Sokkal kevesebben használják, mint ahányan félnek tőle, és ez valahogy azt sugallja az embernek, hogy ő se akarja használni. Pedig a replikáció szép és jó, csak tudni kell, hogy hol a helye.
Először is próbáljuk meg tisztázni, mi is a replikáció, mire is való, és mire nem. A [...]]]></description>
			<content:encoded><![CDATA[<h3>Irodalmi bevezető</h3>
<p>A replikáció érdekes terület az SQL szerverben. Sokkal kevesebben használják, mint ahányan félnek tőle, és ez valahogy azt sugallja az embernek, hogy ő se akarja használni. Pedig a replikáció szép és jó, csak tudni kell, hogy hol a helye.</p>
<p>Először is próbáljuk meg tisztázni, mi is a replikáció, mire is való, és mire nem. A replikáció tulajdonképpen arról szól, hogy egy adatbázis tetszőlegesen kiválasztott részét többszörözzük. <span id="more-3"></span>Boncolgatom egy kicsit az általam most kitalált meghatározást az érhetőség kedvéért:</p>
<p><em>egy adatbázis tetszőlegesen kiválasztott része</em>: Alapvetően általában az adatokat (azaz a táblákat) szeretnénk többszörözni, de bármilyen objektumot replikálhatunk: view-t, sp-t, udf-et. Táblák esetében a tábla tartalma mind horizontálisan, mind vertikálisan filterezhető (ez a tudományos szöveg azt hivatott elmondani, hogy mind sorokat, mind oszlopokat kihagyhatunk a táblatartalmakból ).</p>
<p><em>többszörözzük</em>: A replikáció segítségével tetszőlegesen sok helyre szétteríthetjük a kívánt adatot, akár ugyanarra a szerverre, csak egy másik adatbázisba, akár a világ másik végére (akár egy másik adatbáziskezelőbe is, némi korlátokkal), szintén egy másik adatbázisba.</p>
<p>Ebből már láthatjuk kicsit, mi is az a replikáció és mire való. Gyakorlati alkalmazása lehet neki például: referenciatáblák adatainak a terjesztése; riportolás; földrajzilag távoli adatok &#8220;közelebb hozása&#8221;; egymással nem mindig kapcsolatban álló adatbázisok szinkronban tartása. Mire nem való? Hát, szöget beverni vele &#8211; arra teljesen alkalmatlan. Szokták nagy rendelkezésreállási megoldásként is reklámozni, erről én azt gondolom, hogy lehet, persze, de azért a log shipping és mirroring létezése erősen rontja ezt a képet. Leginkább annál a résznél, amikor a rugalmassághoz meg a strapabíráshoz érünk. Természetesen el tudok képzelni olyan felállást, amikor ez egy nem rossz ötlet, csak most nem jut eszembe rá példa. A teljesség igénye nélkül két nem túl valószerűtlen történet arra, hogy én miért nem tartom jónak &#8220;tartalékadatbázis&#8221; készítésére: 1) Sémát változtatok az adatbázisban. SQL2000-nél (igen, még létezik) elég jó esélyem van arra, hogy a replikáció miatt nem tehetem meg csak úgy, illetve ha megteszem, nem megy át a replikációval a változtatás (2005-nél erre lényegesen kisebb az esély). 2) A &#8220;replikálódott&#8221; céladatbázis egy teljesen közönséges adatbázis, írható-olvasható, és (a mirroringhoz és log shippinghez képest) viszonylag nagy az esélye annak, hogy valaki valamit módosít az adatbázisban, és így elcsúszik a szinkron. 3) A replikáció erőforrásigénye nagyobb, mint a logshippingé vagy a mirroringé (melyek céleszközök nagyrendelkezésreállásos felállásban).</p>
<h3>A replikáció alapjai</h3>
<p>A bevezető után térjünk a szakmai részre. A replikációban három szerep van, és háromféle replikáció van. Mindhárom replikációban ugyanaz a három szerep. A szerepek előtt azért még a könnyebb feldolgozás kedvéért elmondom, hogy a terminológiában a lapterjesztéssel vontak párhuzamot a fejlesztők, mely párhuzam néha kicsit biceg, de azért nem dől el.</p>
<p>Szóval a három fő szerep a Publisher (kiadó), a Distributor (terjesztő) és a Subscriber (előfizető). Ezek inkább adatbázisokhoz kötődnek, mint szerverekhez, akár mindhárom szerep lehet ugyanazon a szerveren. A Publisher adatbázis az, amelyiknek a tartalmát szeretnénk terjeszteni, egy terjesztési egység a publication (publikáció), ami tartalmaz egy vagy több article-t (cikket). Egy article egy objektumnak felel meg, azaz lehet egy tábla, tárolt eljárás, UDF, stb.) Egy adatbázisban több publikációt is létrehozhatunk, és ugyanazt az objektumot több publikációba is betehetjük. A Distributor felelős azért, hogy a szükséges változások eljussanak a Subscriberekhez, akik pedig nem kell, hogy felelősek legyenek semmiért.</p>
<p>A replikációnak három típusa van, bonyolódó sorrendben: a snapshot, a transactional és a merge. A <strong>snapshot </strong>elég egyszerű, mint a neve is mutatja, egy pillanatfelvételt lehet vele terjeszteni. A Publisher adott időpontban fennálló állapotát osztja meg, a későbbi esetleges változások nem mennek át. A működési elv is egyszerű: a Publisherről készül egy séma-generáló script-csomag, plusz az érintett táblák (igény szerint filterezett) tartalma bcp-vel fájlokba ugrik. Ez a csomag a snapshot, ami hasonló logikával kerül a Subscriberre: a scriptek legenerálják a szükséges sémát, az adatokat pedig a bcp jól betölti. Tipikusan arra való, hogy ritkán változó, nem túl nagy méretű adatokat szinkronizáljunk, például referenciatáblákat (termékkatalógus, cikktörzs, irányítószámadatbázis, stb). Az adatfolyam itt mindig egyirányú: Publishertől a Subscribernek. A <strong>transactional </strong>replikáció egy picit komplexebb, itt már a változások (pontosabban a tranzakciók) is folyamatosan mennek a subsciberek felé, akik így naprakészek (vagyis percrekészek) egyfolytában. Ez használható olyan helyeken, ahol egy adatbázis egy részének <em>olvasható </em>elérésére van szükség, például riportozó/monitorozó alkalmazás. Az adafolyam itt általában egyirányú, de van lehetőség update-elhető publikációkat létrehozni, amikkel a Subscriber vissza tud írni az adatbázisba. Ezt akkor lehet használni, ha nagy ritkán valamiért a Subscribernek is írni kell, de általában (&gt;99,5%) nem. Ezt ugyanis nem erre tervezték elsősorban. A <strong>merge </strong>replikációnak ellenben az a fő funkciója, hogy gyakorlatilag a különböző felek által végzett módosításokat szinkronban tartsa. Itt persze felléphetnek különböző érdekes helyzetek, de erről majd később. Persze vannak kötöttségek is: A transactional esetén csak olyan táblák replikálhatóak, amelyeken van primary key definiálva, hiszen ez lesz a későbbi update-ek esetén hivatott a rekordokat beazonosítani. A merge replikációnak pedig egy egész új oszlop kell: egy GUID, ami a rekordokat azonosítja, mivel itt már a primary key sem elég &#8211; mi történik, ha az egyik helyen pont a primary key módosul, a másikon pedig egy másik mező?</p>
<p>Egy fontos dolog a replikáció működéséről: tele van ágensekkel minden: a snapshotot a Snapshot Agent generálja, a tranzakciókat a tranzakciós naplóból a Log Reader Agent bányássza ki, a subscribereknek a szükséges adatokat a Distribution Agentek terjesztik, a merge replikációt pedig a Merge Agentek végzik. Ha pedig valaki a transactional replikációt update-elni akarja, hogy inzultáljam a magyar nyelvet, akkor még egy Queue Reader Agentre is számítson&#8230;</p>
<p>A replikáció kapcsán még egy dolog szokott előkerülni: a distribution adatbázis. Ez egy rendszer adatbázis, amiben a szerver által kezelt publikációk adatai találhatóak: a publikációk típusa, tartalma, a subscriberek, illetve maguk a terjesztendő adatok is ide kerülnek a transactional replikáció esetén.</p>
<p>Röviden ez a replikáció vázlatos és felületes áttekintése.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rollback.hu/2008/04/replikacio-alapok/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

