<?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>Cap Data Team SGBD Blog : Oracle, SQL Server, MySQL, Sybase... &#187; replication</title>
	<atom:link href="http://blog.capdata.fr/index.php/tag/replication/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.capdata.fr</link>
	<description>Le blog technique sur les bases de données de CAP DATA Consulting</description>
	<lastBuildDate>Wed, 01 Feb 2012 17:21:53 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Retrouver une transaction en échec</title>
		<link>http://blog.capdata.fr/index.php/replication-sql-server-retrouver-la-vilaine-transaction-en-echec/</link>
		<comments>http://blog.capdata.fr/index.php/replication-sql-server-retrouver-la-vilaine-transaction-en-echec/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 09:05:00 +0000</pubDate>
		<dc:creator>David BAFFALEUF</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[replication]]></category>

		<guid isPermaLink="false">https://www.alldb.fr/blogs/?p=203</guid>
		<description><![CDATA[Aujourd&#8217;hui la réplication transactionnelle est en panne. Un coup d&#8217;oeil rapide au moniteur de réplication nous confirme que l&#8217;agent de distribution est en échec:
Command attempted:
if @@trancount &#62; 0 rollback tran
(Transaction sequence number: 0x0000CD53000011DE001000000000, Command ID: 1)

Error messages:
Syntax error, permission violation, or other nonspecific error (Source: MSSQLServer,
Error number: 20025)
Get help: http://help/20025
Syntax error, permission violation, or other [...]]]></description>
			<content:encoded><![CDATA[<p>Aujourd&#8217;hui la réplication transactionnelle est en panne. Un coup d&#8217;oeil rapide au moniteur de réplication nous confirme que l&#8217;agent de distribution est en échec:</p>
<pre><em>Command attempted:
if @@trancount &gt; 0 rollback tran
(Transaction sequence number: 0x0000CD53000011DE001000000000, Command ID: 1)

Error messages:
Syntax error, permission violation, or other nonspecific error (Source: MSSQLServer,
Error number: 20025)
Get help: http://help/20025
Syntax error, permission violation, or other nonspecific error (Source: MSSQLServer,
Error number: 42000)
Get help: http://help/42000</em></pre>
<p>Ce n&#8217;est même pas la peine d&#8217;essayer de voir ce qu&#8217;il y a au bout des deux liens <em>http://help/&#8230;</em> proposés. En gros l&#8217;agent de distribution a trouvé une erreur en essayant d&#8217;appliquer une transaction. Le but est de retrouver le code SQL qui correspond à la transaction en échec. Lancer une trace Profiler sur le distributeur ne servira pas à grand chose car la transaction en question sera noyée dans le flot de mises à jour sur les tables systèmes de la réplication. En fait la chose la plus importante dans le log d&#8217;erreur est le numéro de transaction: <strong><em></em><em>0&#215;0000CD53000011DE001000000000</em></strong></p>
<p>Pour retrouver l&#8217;ordre correspondant sur le distributeur, utiliser <strong>sp_browsereplcmds</strong>, regarder la première ligne:</p>
<pre>use distribution
sp_browsereplcmds @xact_seqno_start = '0x0000CD53000011DE001000000000'

0x0000CD53000012EE000E	NULL	NULL	1	30	0	0	NULL	NULL
0x00000000000000000000
{CALL sp_MSins_EMAIL MOBILE DATA ('MICHAEL.HEARSLEY#TATOINE.COM', 'J74K6L')}	1

0x0000CD5300001304000F	NULL	NULL	1	30	0	0	NULL	NULL
0x00000000000000000000
{CALL sp_MSins_EMAIL MOBILE DATA ('EDUARDO.ALFONSO#JPMM.COM', 'J91RCX')}	1

0x0000CD530000131A0018	NULL	NULL	1	30	0	0	NULL	NULL
0x00000000000000000000
{CALL sp_MSins_EMAIL MOBILE DATA ('MARK.D.SPELLMAN#ATTACH.CO.UK', 'J731FZ')} 1

0x0000CD530000133B000E	NULL	NULL	1	30	0	0	NULL	NULL
0x00000000000000000000
{CALL sp_MSins_EMAIL MOBILE DATA ('XAVIER.BARTOLDI#NRJ.PICATRIX.COM', 'J92HBF')} 1

...</pre>
<p>Effectivement si on lance l&#8217;exécution de la proc à la main sur le subscriber:</p>
<pre>CALL sp_MSins_EMAIL MOBILE DATA ('MICHAEL.HEARSLEY#TATOINE.COM', 'J74K6L')

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'MOBILE'.</pre>
<p>Il y a des espaces dans le nom de la proc. L&#8217;assistant graphique de mise en place de la réplication créera la procédure avec des underscores, donc pas de souci, c&#8217;est juste pour l&#8217;exemple.</p>
<p>[ David B. ]</p>
<p><script type="text/javascript" src="http://tcr.tynt.com/javascripts/Tracer.js?user=d4FlbGI04r35lZadbi-bpO"></script><strong>Continuez votre lecture sur le blog :</strong>
<ul class="similar-posts">
<li><a href="http://blog.capdata.fr/index.php/replication-sql-server-attention-publication-transactionnelle-et-indexes-non-clusters/" rel="bookmark" title="18 juin 2009">Attention : publication transactionnelle et indexes non clusters</a> (David BAFFALEUF) [SQL Server]</li>
<li><a href="http://blog.capdata.fr/index.php/suppression-accidentelle-de-ligne-comment-retrouver-le-coupable/" rel="bookmark" title="6 octobre 2011">Suppression accidentelle de ligne : comment retrouver le coupable ?</a> (David BAFFALEUF) [SQL Server]</li>
<li><a href="http://blog.capdata.fr/index.php/pourquoi-il-faut-sauvegarder-les-bases-systemes/" rel="bookmark" title="3 juillet 2011">Pourquoi il faut sauvegarder les bases systèmes</a> (David BAFFALEUF) [SQL Server]</li>
<li><a href="http://blog.capdata.fr/index.php/point-in-time-recovery-et-fn_dump_dblog/" rel="bookmark" title="13 juillet 2011">Point-in-time recovery et fn_dump_dblog()</a> (David BAFFALEUF) [SQL Server]</li>
<li><a href="http://blog.capdata.fr/index.php/oracle-les-rpms-et-les-dependances-avec-yum/" rel="bookmark" title="6 novembre 2009">Oracle, les Rpms plus de souci avec YUM</a> (Thierry GASCARD) [Oracle]</li>
</ul>
<p><!-- Similar Posts took 3.230 ms -->
<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.capdata.fr%2Findex.php%2Freplication-sql-server-retrouver-la-vilaine-transaction-en-echec%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.capdata.fr%2Findex.php%2Freplication-sql-server-retrouver-la-vilaine-transaction-en-echec%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.capdata.fr/index.php/replication-sql-server-retrouver-la-vilaine-transaction-en-echec/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Attention : publication transactionnelle et indexes non clusters</title>
		<link>http://blog.capdata.fr/index.php/replication-sql-server-attention-publication-transactionnelle-et-indexes-non-clusters/</link>
		<comments>http://blog.capdata.fr/index.php/replication-sql-server-attention-publication-transactionnelle-et-indexes-non-clusters/#comments</comments>
		<pubDate>Thu, 18 Jun 2009 08:28:06 +0000</pubDate>
		<dc:creator>David BAFFALEUF</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[replication]]></category>

		<guid isPermaLink="false">https://www.alldb.fr/blogs/?p=125</guid>
		<description><![CDATA[Récemment, en resynchronisant une publication transactionnelle avec un éditeur 2005 vers un abonné 2005, on s&#8217;est aperçu que le snapshot ne générait que les index clusters pour chaque article, pas les indexes non clusters. Enorme ! Nous avons revérifié avec un éditeur en 2000, et les indexes non clusters sont bien générés en même temps [...]]]></description>
			<content:encoded><![CDATA[<p>Récemment, en resynchronisant une publication transactionnelle avec un éditeur 2005 vers un abonné 2005, on s&#8217;est aperçu que le snapshot ne générait que les index clusters pour chaque article, pas les indexes non clusters. Enorme ! Nous avons revérifié avec un éditeur en 2000, et les indexes non clusters sont bien générés en même temps que les clusters.</p>
<p><strong>Explication: </strong>lorsque l&#8217;agent de snapshot doit extraire le DDL des articles et sortir les données par bcp en parrallèle, il se base sur deux options passées lors du sp_addarticle:<br />
- <strong>@type</strong>: qui va indiquer à quel type de publication on a affaire. Dans notre cas, ce sera <em><strong>logbased </strong></em>(=transac)<br />
- <strong>@schema_option</strong> : bitmask qui va indiquer ce qui doit être généré au niveau DDL.</p>
<p>D&#8217;après les BOLs 2005, si <strong>@type = &#8216;logbased&#8217;</strong>, alors <strong>@schema_option</strong> doit être à <strong>0&#215;30F3</strong>, qui décomposé contient bien à la fois le bitmask pour les index clusterisés (0&#215;10) et celui pour les indexes NC (0&#215;40).</p>
<p>Je vous engage à tester ça depuis SSMS, en créant une publication transac bidon et en jetant un coup d&#8217;oeil aux propriétés de l&#8217;article:</p>
<p><a href="https://www.alldb.fr/blog/wp-content/uploads/2009/06/moz-screenshot-176.jpg"><img class="alignnone size-medium wp-image-126" src="https://www.alldb.fr/blog/wp-content/uploads/2009/06/moz-screenshot-176-269x300.jpg" alt="" /></a></p>
<p>Dans le script généré, effectivement on a bien un problème:</p>
<p><tt>exec    sp_addarticle<br />
@publication = N'pubtest1',</tt><tt><br />
@article =    N'Address',<br />
</tt><tt> </tt><tt>@source_owner = N'dbo',<br />
</tt><tt> </tt><tt>@source_object = N'Address',<br />
<strong>@type = N'logbased'</strong>,<br />
</tt><tt> </tt><tt>@description = null,<br />
</tt><tt> </tt><tt>@creation_script = null,<br />
</tt><tt> </tt><tt>@pre_creation_cmd = N'drop',<br />
<strong>@schema_option = 0x000000000803509F</strong>,<br />
</tt><tt> </tt><tt>@identityrangemanagementoption =    N'manual',<br />
</tt><tt> </tt><tt>@destination_table = N'Address',<br />
@destination_owner = N'dbo',<br />
</tt><tt> </tt><tt>@vertical_partition = N'false',<br />
</tt><tt> </tt><tt>@ins_cmd = N'CALL    sp_MSins_dbo</tt><tt>Address</tt><tt>',<br />
@del_cmd =    N'CALL sp_MSdel_dbo</tt><tt>Address</tt><tt>',<br />
</tt><tt> </tt><tt>@upd_cmd = N'SCALL    sp_MSupd_dbo</tt><tt>Address</tt><tt>'<br />
GO</tt></p>
<p>Le bitmask 0&#215;803509F contient bien le 0&#215;10, mais pas le 0&#215;40.  Pour en avoir le coeur net, utilisez le ET logique  en transac (<tt>134434975=0x803509, 64=0x40, 16=0x10):</tt></p>
<p><tt>select 134434975 &amp;    64<br />
select 134434975 &amp; 16</tt></p>
<p><tt>-----------<br />
0</tt></p>
<p><tt>-----------<br />
16<br />
</tt><br />
Suite à une petite discussion avec Paul Randal, il se trouve que nombre de ses clients ont eu le même problème en migrant. Donc si vous migrez une réplication de 2000 vers 2005, et que vous constatez des problèmes de perfs sur les abonnés, vérifiez si vous avez tous vos indexes NC, juste comme ça&#8230; <img src='http://blog.capdata.fr/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>A+ [ David B. ]<br />
<tt><br />
</tt><br />
 <script type="text/javascript" src="http://tcr.tynt.com/javascripts/Tracer.js?user=d4FlbGI04r35lZadbi-bpO"></script><strong>Continuez votre lecture sur le blog :</strong>
<ul class="similar-posts">
<li><a href="http://blog.capdata.fr/index.php/replication-sql-server-retrouver-la-vilaine-transaction-en-echec/" rel="bookmark" title="21 septembre 2009">Retrouver une transaction en échec</a> (David BAFFALEUF) [SQL Server]</li>
<li><a href="http://blog.capdata.fr/index.php/regenerer-le-ddl-des-indexes-full-text/" rel="bookmark" title="12 octobre 2011">Regénérer le DDL des indexes FULL TEXT</a> (David BAFFALEUF) [SQL Server]</li>
<li><a href="http://blog.capdata.fr/index.php/bench-avec-netapp-datacore-esx/" rel="bookmark" title="26 avril 2011">Bench avec NetApp / Datacore / ESX</a> (David BAFFALEUF) [SQL Server]</li>
<li><a href="http://blog.capdata.fr/index.php/attention-aux-requetes-en-double-avec-windev-et-mysql/" rel="bookmark" title="15 juillet 2010">Attention aux requêtes en double avec Windev et MySQL !</a> (Cédric PEINTRE) [MySQL]</li>
<li><a href="http://blog.capdata.fr/index.php/xtradb-sauvegarde-votre-cache-et-ca-marche/" rel="bookmark" title="9 mars 2010">XtraDB sauvegarde votre cache, et ça marche !</a> (Cédric PEINTRE) [MySQL]</li>
</ul>
<p><!-- Similar Posts took 3.070 ms -->
<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.capdata.fr%2Findex.php%2Freplication-sql-server-attention-publication-transactionnelle-et-indexes-non-clusters%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.capdata.fr%2Findex.php%2Freplication-sql-server-attention-publication-transactionnelle-et-indexes-non-clusters%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.capdata.fr/index.php/replication-sql-server-attention-publication-transactionnelle-et-indexes-non-clusters/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

