<?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; DAC</title>
	<atom:link href="http://blog.rollback.hu/tag/dac/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>Dedicated Admin Connection és a TCP port</title>
		<link>http://blog.rollback.hu/2009/09/dedicated-admin-connection-es-a-tcp-port/</link>
		<comments>http://blog.rollback.hu/2009/09/dedicated-admin-connection-es-a-tcp-port/#comments</comments>
		<pubDate>Tue, 15 Sep 2009 21:13:52 +0000</pubDate>
		<dc:creator>Erik</dc:creator>
				<category><![CDATA[Magyar]]></category>
		<category><![CDATA[DAC]]></category>
		<category><![CDATA[network]]></category>

		<guid isPermaLink="false">http://blog.rollback.hu/?p=113</guid>
		<description><![CDATA[A DAC-ról már írtam legalább kétszer, és említettem, hogy a DAC egy véletlenszerűen választott porton figyel. Na, ez természetesen így ebben a formában nem igaz, csak mérnöki szemlélettel egyszerűsítettem (a matematikusok szerint meg hazudtam).
Szóval a DAC portját a következőképpen találja ki az SQL Server: ha a default instance-ről van szó, akkor ő alapból a TCP [...]]]></description>
			<content:encoded><![CDATA[<p>A DAC-ról <a href="http://blog.rollback.hu/tag/dac/">már írtam legalább kétszer</a>, és említettem, hogy a DAC egy véletlenszerűen választott porton figyel. Na, ez természetesen így ebben a formában nem igaz, csak mérnöki szemlélettel egyszerűsítettem (a matematikusok szerint meg hazudtam).</p>
<p>Szóval a DAC portját a következőképpen találja ki az SQL Server: ha a default instance-ről van szó, akkor ő alapból a TCP 1434 portra akar ráülni, amennyiben az szabad (ezért lehet praktikus a TCP 1434-et nem odaadni named instance-nak). Ha nem szabad az a port, vagy named instance-ról van szó, akkor választ magának véletlenszerűen egy portot.</p>
<p>Ez persze felvet egy csomó kellemetlen problémát, mindenekelőtt azt, hogy honnan a francból fogom tudni, hogy hol a DAC. Erre a következő megoldások léteznek:</p>
<ul>
<li>Elindítod az SQL Browser service-t, ami feltérképezi az adott oprendszeren futó összes SQL instance-ot, és kérdés esetén megmondja. Ez kényelmes, de én rühellem az SQL Browsert, mert szerintem van elég baj anélkül is, hogy egy beépített biztonsági rést használok.</li>
<li>Felolvasod az SQL Server errorlogjának az első pár tucat sorát, konkrétan a Dedicated admin connection support was established for listening locally on port XXXX. (PowerShell:<strong> Select-String &#8220;Dedicated admin connection support&#8221; [errorlog helye]</strong>) Direktben arra a portra kapcsolódsz, mintha csak egy SQL lenne ott (ideális esetben van is).</li>
<li>Keresel egy szabad portot, amit semmilyen alkalmazás nem bitorol. Ezt te lefoglalod a DAC részére, leírod, kiragasztod az ajtóra, stb. Majd megkéred a DAC-ot, hogy használja is azt a portot. Ezt ugyanis be lehet állítani a registryben, és akkor az SQL Server a 1434 helyett a registryben szereplő értéket fogja defaultnak tekinteni. A kulcs helye pedig a <strong>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.X\MSSQLServer\SuperSocketNetLib\AdminConnection\Tcp</strong> gombócban lakó <strong>TcpDynamicPorts</strong> érték (X= az instance-unk sorszáma). Ami alapból 1434.</li>
</ul>
<p>Természetesen az egész bejegyzést az egy szem registry kulcsért írtam. Ez egyébként tűzfalas környezetben is nagy segítség lehet, mert jelentősen lehet növelni az esélyét annak, hogy elérjük a SQL-t DAC-on keresztül.</p>
<p>(a megoldás egy <a href="http://support.microsoft.com/kb/823938/en-us">MS KB cikkből </a>származik, de sajnos elég kereshetetlen, én célirányos kereséssel nem találtam meg fél óra alatt. Se bing, se gugli.)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rollback.hu/2009/09/dedicated-admin-connection-es-a-tcp-port/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DAC és SQL cluster</title>
		<link>http://blog.rollback.hu/2009/04/dac-es-sql-cluster/</link>
		<comments>http://blog.rollback.hu/2009/04/dac-es-sql-cluster/#comments</comments>
		<pubDate>Sun, 05 Apr 2009 20:24:48 +0000</pubDate>
		<dc:creator>Erik</dc:creator>
				<category><![CDATA[Magyar]]></category>
		<category><![CDATA[DAC]]></category>
		<category><![CDATA[mssql]]></category>
		<category><![CDATA[üzemeltetés]]></category>

		<guid isPermaLink="false">http://blog.rollback.hu/?p=71</guid>
		<description><![CDATA[Igazából az előző postot a DAC-ról emiatt a kis szösszenet miatt írtam: ha van egy SQL clusterünk, akkor azon alapból nincsen DAC sehol sem, ezt tartsuk észben. Egy standalone SQL-nél alapból fut, csak belologunk az oprendszerbe, és már kapcsolódunk is, ha esetleg nem engedélyeztük volna a remote DAC-ot. Ilyenkor ugyanis a 127.0.0.1-es IP valamely portján [...]]]></description>
			<content:encoded><![CDATA[<p>Igazából az előző postot a DAC-ról emiatt a kis szösszenet miatt írtam: ha van egy SQL clusterünk, akkor azon alapból nincsen DAC sehol sem, ezt tartsuk észben. Egy standalone SQL-nél alapból fut, csak belologunk az oprendszerbe, és már kapcsolódunk is, ha esetleg nem engedélyeztük volna a remote DAC-ot. Ilyenkor ugyanis a 127.0.0.1-es IP valamely portján figyel a DAC. </p>
<p>Egy clusternél viszont ez nyilvánvalóan nem működhet, ha végiggondoljuk a cluster concepcióját. Az SQL Server csak olyan erőforrásokat használhat, amiken dependál a service (közvetve vagy közvetlenül). Így például maga a SQL Server csak a cluster IP megadott portján tud figyelni, a cluster node-ok saját IP-jén vagy bármi egyében, beleértve a localhostot, nem igazán. Hát így történt. Ha clusterünk van, és akarunk DAC-ot használni, akkor muszáj engedélyeznünk a remote admin connectiont, aminek eredményeképpen a standalone gépen minden IP-n, a clustered instance-nál a cluster IP-n fog figyelni a DAC. Ajánlom mindenkinek, hogy kapcsolja be. Emlékeztetőül a bekapcs:</p>
<pre class="brush: sql;">
sp_configure 'remote admin connections', 1;
GO
RECONFIGURE;
</pre>
<p>Azonnal érvényre jut, lehet ellenőrizni az errorlogban, illetve kapcsolódni DAC-ra előtte-utána.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rollback.hu/2009/04/dac-es-sql-cluster/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dedicated Admin Connection röviden</title>
		<link>http://blog.rollback.hu/2009/04/dedicated-admin-connection-roviden/</link>
		<comments>http://blog.rollback.hu/2009/04/dedicated-admin-connection-roviden/#comments</comments>
		<pubDate>Sun, 05 Apr 2009 20:13:40 +0000</pubDate>
		<dc:creator>Erik</dc:creator>
				<category><![CDATA[Magyar]]></category>
		<category><![CDATA[DAC]]></category>
		<category><![CDATA[mssql]]></category>
		<category><![CDATA[sql2005]]></category>
		<category><![CDATA[üzemeltetés]]></category>

		<guid isPermaLink="false">http://blog.rollback.hu/?p=70</guid>
		<description><![CDATA[SQL 2005-öt (vagy 2008-at) használsz? Olvastad az új fícsörök listáját? Akkor tudod, hogy van egy úgynevezett Dedicated Administrator Connection, barátok közt DAC, mely kiskapu egy üzemeltetőnek kínál hátsó bejáratot arra az esetre, ha valami rettenetes dolog történik, és egyébként már nem lehet belogolni se az SQL-be. Tipikus esetek lehetnek: valami durván kihajtja/széjjellockolja az SQL szervert [...]]]></description>
			<content:encoded><![CDATA[<p>SQL 2005-öt (vagy 2008-at) használsz? Olvastad az új fícsörök listáját? Akkor tudod, hogy van egy úgynevezett Dedicated Administrator Connection, barátok közt <strong>DAC</strong>, mely kiskapu egy üzemeltetőnek kínál hátsó bejáratot arra az esetre, ha valami rettenetes dolog történik, és egyébként már nem lehet belogolni se az SQL-be. Tipikus esetek lehetnek: valami durván kihajtja/széjjellockolja az SQL szervert vagy valaki elizélt logon triggereket alkalmaz, melyek nem tudnak lefutni, és így senki nem tud belogolni, még azért sem, hogy kikapcsolja a logon triggereket. Érezhető, hogy a klasszikus &#8220;újraindítom, az segíteni szokott&#8221; szemlélet az első két esetben segíthet (de soha nem tudod meg, hogy ki vágta haza a szervert és mivel), de az utóbbi esetben csak elodázza az elkerülhetetlent. </p>
<p>DAC-hoz való kapcsolódás alapból csak lokálisan engedélyezett, ez azért jó, mert ha kell a DAC, akkor nem kell azon agyalnod, hogy vajon ki használja az egy darab kapcsolatodat, csak valaki lokálisan lehet, azt meg könnyű kirúgni. Hogyan is működik a DAC? Az SQL Server indulásakor ő is elkezd figyelni egy porton, amit ő véletlenszerűen talál ki (sejtsük, hogy ez tűzfal mögül nem feltétlenül fog jól működni). Amikor hozzá akarunk csatlakozni, akkor a szerver neve elé be kell írnunk az <strong><em>admin:</em></strong> prefixet, azaz a SQL1 szerver DAC kapcsolatához az <strong>admin:SQL1</strong> nevet kell megadnunk. <span id="more-70"></span></p>
<p>A DAC default instance esetén szeret a 1434-es TCP porton figyelni, ha teheti. Ha nem, akkor mást választ, tehát amikor kapcsolódunk, ezt valahonnan meg kell tudnunk. Az SQL Browser hivatott arra, hogy megadja ezt az információt, de ha valamilyen oknál fogva ez nem jön össze, vagy csak szereted letiltani a browsert, akkor sincs minden veszve:</p>
<pre class="brush: plain;">
sqlcmd -Stcp:SQL1,3247
</pre>
<p>Ahol a 3247-es portot kiolvastuk az SQL errorlogjából (indulás környékén lehet megtalálni, a példában a 6-7. sor):</p>
<pre class="brush: plain;">
...
2009-04-05 13:03:20.03 Server      Server is listening on [ 'any' &lt;ipv4&gt; 1433].
2009-04-05 13:03:20.03 Server      Server local connection provider is ready to accept connection on [ \\.\pipe\SQLLocal\MSSQLSERVER ].
2009-04-05 13:03:20.03 Server      Server local connection provider is ready to accept connection on [ \\.\pipe\sql\query ].
2009-04-05 13:03:20.04 spid9s      Starting up database 'model'.
2009-04-05 13:03:20.04 Server      Server is listening on [ 127.0.0.1 &lt;/ipv4&gt;&lt;ipv4&gt; 3247].
2009-04-05 13:03:20.04 Server      Dedicated admin connection support was established for listening locally on port 3247.
...
</pre>
<p>A fenti példából láthatjuk, hogy a DAC a 127.0.0.1-en, azaz a localhoston figyel, tehát nem elérhető máshonnan, csak belogolva az SQL Servert futtató host oprendszerbe. </p>
<p>Ha esetleg kényszert éreznénk arra, hogy engedélyezzük a DAC-hoz való kapcsolódást távolról is, akkor azt az sp_configure tárolt eljárással tehetjük meg:</p>
<pre class="brush: sql;">
-- ez már advanced opció, előbb azt be kell kapcsolnunk
sp_configure 'show advanced options', '1';
RECONFIGURE;
GO
-- olvassuk ki a pillanatnyi értéket, ez gyárilag nulla
sp_configure 'remote admin connections'
-- és most kapcsoljuk be
GO
sp_configure 'remote admin connections', 1;
GO
RECONFIGURE;
GO
</pre>
<p>És már mehetünk is neki távolról azon nyomban. A fenti tevékenység az alábbi bejegyzéseket generálja az errorlogban:</p>
<pre class="brush: plain;">
...
2009-04-05 15:30:23.29 spid76      Configuration option 'show advanced options' changed from 0 to 1. Run the RECONFIGURE statement to install.
2009-04-05 15:30:23.62 spid76      Configuration option 'remote admin connections' changed from 0 to 1. Run the RECONFIGURE statement to install.
2009-04-05 15:30:23.65 Server      Server is listening on [ 'any' &lt;/ipv4&gt;&lt;ipv4&gt; 3247].
2009-04-05 15:30:23.65 Server      Dedicated admin connection support was established for listening remotely on port 3247.
...
</pre>
<p>Láthatjuk, hogy a localhost helyett minden lehetséges IP-n figyel a DAC mostantól fogva.</p>
<p> Tartsuk észben: egyetlen darab DAC kapcsolat engedélyezett, tehát vagy egy database engine query vagy egy sqlcmd fog összejönni, az object browsert felejtsük el. Ezért praktikus alapbeállítás az, hogy nem lehet használni távolról. Ne legyen probléma, hogy esetleg valaki belépett, úgy maradt, és amikor nagy a baj, még meg is kell keresni, hogy ki az, és honnan. Hogyan keressük meg, hogy ki az, ha már kapcsolódni sem tudunk? Hát, felnyitjuk az errorlogot, megkeressük benne a fenti logdarabka utolsó bejegyzését, ebből látjuk a portot, aztán utána <strong>netstat -n |find &#8220;3247&#8243;</strong>, ebből látni fogjuk a kapcsolat túlsó végét, valami ilyesmit: </p>
<pre class="brush: plain;">
TCP    192.168.1.101:3247     192.168.1.25:1843       ESTABLISHED
</pre>
<p> és a 192.168.1.25 gépen egy <strong>netstat -no | find &#8220;1843&#8243;</strong> paranccsal megnézhetjük, hogy melyik processz fogja az adott portot (Linuxos kliens esetén <strong>netstat -np|grep 1843</strong>), és kis szerencsével van jogunk legyilkolni, így felszabadíthatjuk a DAC-ot, és végre kapcsolódhatunk. Ez érezhetően kissé körülményes, ezért jobb nem kerülni ilyen helyzetbe.</p>
<p>A DAC-nak vannak bizonyos korlátai, ugyanis alapvetően gyors hibaelhárításra és diagnosztikára tervezték, véges erőforrás áll rendelkezésünkre, és csak egy szálon dolgozhatunk (egy több szálon futó utasítás, mint pl. RESTORE, elhal). A tipikus tevékenység a különféle DMV-k lekérdezgetése és a kill parancs szisztematikus használata, illetve <del>elcs</del> vicces logon triggerek letiltása/törlése.</p>
<p>Összességében azért érdemes gondolni rá, DE: egy jótanács: rakjátok össze előre a diagnosztikai lekérdezéseiteket (és tegyétek jól elérhető helyre, akár bele a master adatbázisba is custom SP képében), mert akkor és ott ezzel bénázni nyakatokban a hörgő ügyféllel/üzlettel/akárkivel az álmoskönyv szerint lúzerséget jelent.</p>
<p>Hazudtam. Nem volt annyira rövid.</ipv4></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rollback.hu/2009/04/dedicated-admin-connection-roviden/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

