<?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>David Barbarin &#187; Linked server</title>
	<atom:link href="https://blog.developpez.com/mikedavem/ptag/linked-server/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/mikedavem</link>
	<description>MVP DataPlatform - MCM SQL Server</description>
	<lastBuildDate>Thu, 09 Sep 2021 21:19:50 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Cr&#233;er un serveur li&#233; avec une connexion en lecture seule vers un r&#233;plica secondaire SQL Server 2012 AlwaysOn</title>
		<link>https://blog.developpez.com/mikedavem/p12017/sql-server-2012/crer-un-serveur-li-avec-une-connexion-en-lecture-seule-vers-un-rplica-secondaire-sql-server-2012-alwayson</link>
		<comments>https://blog.developpez.com/mikedavem/p12017/sql-server-2012/crer-un-serveur-li-avec-une-connexion-en-lecture-seule-vers-un-rplica-secondaire-sql-server-2012-alwayson#comments</comments>
		<pubDate>Tue, 04 Jun 2013 20:32:39 +0000</pubDate>
		<dc:creator><![CDATA[mikedavem]]></dc:creator>
				<category><![CDATA[SQL Server 2012]]></category>
		<category><![CDATA[AlwaysOn]]></category>
		<category><![CDATA[Linked server]]></category>

		<guid isPermaLink="false">http://blog.developpez.com/mikedavem/?p=521</guid>
		<description><![CDATA[Petite question que je me posais aujourd&#8217;hui vu qu&#8217;en ce moment je travaille souvent sur des environnements haute disponibilité avec SQL Server 2012 et AlwaysOn. Est-il possible de créer un serveur lié qui se connecte sur un réplica secondaire en &#8230; <a href="https://blog.developpez.com/mikedavem/p12017/sql-server-2012/crer-un-serveur-li-avec-une-connexion-en-lecture-seule-vers-un-rplica-secondaire-sql-server-2012-alwayson">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Petite question que je me posais aujourd&rsquo;hui vu qu&rsquo;en ce moment je travaille souvent sur des environnements haute disponibilité avec SQL Server 2012 et AlwaysOn. Est-il possible de créer un serveur lié qui se connecte sur un réplica secondaire en lecture et profiter du coup d&rsquo;une redirection transparente en cas de changement de rôle de réplica lors d&rsquo;un basculement automatique par exemple ? </p>
<p>Le meilleur moyen de le savoir est de faire un test. </p>
<p>Créons tout d&rsquo;abord un serveur lié en utilisant le provider SQL Server Native Client 11.0 pour pouvoir utiliser le paramètre de connexion applicationintent=readonly. Le script de création du serveur lié est le suivant :</p>
<p>&#160;</p>
<p><div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">EXEC</span> master<span style="color: #66cc66;">.</span>dbo<span style="color: #66cc66;">.</span>sp_addlinkedserver &nbsp; &nbsp;<br />
&nbsp;@server <span style="color: #66cc66;">=</span> N<span style="color: #ff0000;">'LST_APPLIX'</span><span style="color: #66cc66;">,</span><br />
&nbsp;@srvproduct<span style="color: #66cc66;">=</span>N<span style="color: #ff0000;">''</span><span style="color: #66cc66;">,</span> &nbsp; &nbsp;<br />
&nbsp;@provider<span style="color: #66cc66;">=</span>N<span style="color: #ff0000;">'SQLNCLI'</span><span style="color: #66cc66;">,</span> <span style="color: #808080; font-style: italic;">-- Provider SQL Native Client &nbsp; &nbsp;</span><br />
&nbsp;@datasrc<span style="color: #66cc66;">=</span>N<span style="color: #ff0000;">'LST_APPLIX'</span><span style="color: #66cc66;">,</span> <span style="color: #808080; font-style: italic;">-- Availability group listener &nbsp; &nbsp;</span><br />
&nbsp;@provstr<span style="color: #66cc66;">=</span>N<span style="color: #ff0000;">'applicationintent=readonly'</span><span style="color: #66cc66;">,</span>  <span style="color: #808080; font-style: italic;">-- Readonly intent parameter &nbsp; &nbsp; </span><br />
&nbsp;@catalog<span style="color: #66cc66;">=</span>N<span style="color: #ff0000;">'ApplixEnterprise'</span> <span style="color: #808080; font-style: italic;">--Target database to connect</span></div></div>
</p>
<p>&#160;</p>
<p><a href="http://blog.developpez.com/mikedavem/files/2013/06/icon_arrow.gif"><img title="icon_arrow" style="border-top: 0px;border-right: 0px;border-bottom: 0px;padding-top: 0px;padding-left: 0px;border-left: 0px;padding-right: 0px" border="0" alt="icon_arrow" src="http://blog.developpez.com/mikedavem/files/2013/06/icon_arrow_thumb.gif" width="15" height="15" /></a> Mon groupe de disponibilité est composé de 3 réplicas avec :</p>
<ul>
<li>REPLICA1 (réplica primaire)</li>
<li>REPLICA2 (réplica secondaire en lecture seule utilisé en priorité)</li>
<li>REPLICA3 (réplica secondaire en lecture seule utilisé si REPLICA2 n&rsquo;est plus joignable)</li>
</ul>
<p>&#160;</p>
<p><a href="http://blog.developpez.com/mikedavem/files/2013/06/icon_arrow1.gif"><img title="icon_arrow" style="border-top: 0px;border-right: 0px;border-bottom: 0px;padding-top: 0px;padding-left: 0px;border-left: 0px;padding-right: 0px" border="0" alt="icon_arrow" src="http://blog.developpez.com/mikedavem/files/2013/06/icon_arrow_thumb1.gif" width="15" height="15" /></a> Mon serveur lié est quant à lui configuré sur un serveur standalone à part.</p>
<p>&#160;</p>
<p>La requête suivante illustre l&rsquo;état de note scénario :</p>
<p>&#160;</p>
<p><div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">SELECT</span> &nbsp; <br />
&nbsp;g<span style="color: #66cc66;">.</span>name <span style="color: #993333; font-weight: bold;">AS</span> group_name<span style="color: #66cc66;">,</span> &nbsp; &nbsp;<br />
&nbsp;r<span style="color: #66cc66;">.</span>replica_server_name<span style="color: #66cc66;">,</span> &nbsp; &nbsp;<br />
&nbsp;rs<span style="color: #66cc66;">.</span>role_desc<span style="color: #66cc66;">,</span> &nbsp; &nbsp;<br />
&nbsp;rs<span style="color: #66cc66;">.</span>operational_state_desc<span style="color: #66cc66;">,</span> &nbsp; &nbsp;<br />
&nbsp;ro<span style="color: #66cc66;">.</span>replica_server_name <span style="color: #993333; font-weight: bold;">AS</span> replica_ro_server_name<span style="color: #66cc66;">,</span> &nbsp; &nbsp;<br />
&nbsp;rol<span style="color: #66cc66;">.</span>routing_priority<span style="color: #66cc66;">,</span> &nbsp; &nbsp;<br />
&nbsp;r<span style="color: #66cc66;">.</span>secondary_role_allow_connections_desc &nbsp; &nbsp;<br />
<span style="color: #993333; font-weight: bold;">FROM</span> sys<span style="color: #66cc66;">.</span>dm_hadr_availability_replica_states <span style="color: #993333; font-weight: bold;">AS</span> rs &nbsp; &nbsp;<br />
&nbsp;<span style="color: #993333; font-weight: bold;">JOIN</span> sys<span style="color: #66cc66;">.</span>availability_groups <span style="color: #993333; font-weight: bold;">AS</span> g &nbsp; &nbsp;<br />
&nbsp; <span style="color: #993333; font-weight: bold;">ON</span> rs<span style="color: #66cc66;">.</span>group_id <span style="color: #66cc66;">=</span> g<span style="color: #66cc66;">.</span>group_id &nbsp; &nbsp;<br />
&nbsp;<span style="color: #993333; font-weight: bold;">JOIN</span> sys<span style="color: #66cc66;">.</span>availability_replicas <span style="color: #993333; font-weight: bold;">AS</span> r &nbsp; &nbsp;<br />
&nbsp; <span style="color: #993333; font-weight: bold;">ON</span> r<span style="color: #66cc66;">.</span>replica_id <span style="color: #66cc66;">=</span> rs<span style="color: #66cc66;">.</span>replica_id &nbsp; &nbsp;<br />
&nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">AND</span> r<span style="color: #66cc66;">.</span>group_id <span style="color: #66cc66;">=</span> rs<span style="color: #66cc66;">.</span>group_id &nbsp; &nbsp;<br />
&nbsp;<span style="color: #993333; font-weight: bold;">JOIN</span> sys<span style="color: #66cc66;">.</span>availability_read_only_routing_lists rol &nbsp; &nbsp;<br />
&nbsp; <span style="color: #993333; font-weight: bold;">ON</span> rol<span style="color: #66cc66;">.</span>replica_id <span style="color: #66cc66;">=</span> r<span style="color: #66cc66;">.</span>replica_id &nbsp; &nbsp;<br />
&nbsp;<span style="color: #993333; font-weight: bold;">JOIN</span> sys<span style="color: #66cc66;">.</span>availability_replicas <span style="color: #993333; font-weight: bold;">AS</span> ro &nbsp; &nbsp;<br />
&nbsp; <span style="color: #993333; font-weight: bold;">ON</span> ro<span style="color: #66cc66;">.</span>replica_id <span style="color: #66cc66;">=</span> rol<span style="color: #66cc66;">.</span>read_only_replica_id &nbsp; &nbsp;<br />
<span style="color: #993333; font-weight: bold;">WHERE</span> g<span style="color: #66cc66;">.</span>name <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'ApplixGrp'</span> &nbsp; &nbsp;<br />
&nbsp;<span style="color: #993333; font-weight: bold;">AND</span> r<span style="color: #66cc66;">.</span>replica_server_name <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'REPLICA1'</span></div></div>
</p>
<p>&#160;</p>
<p><a href="http://blog.developpez.com/mikedavem/files/2013/06/image.png"><img title="image" style="border-top: 0px;border-right: 0px;border-bottom: 0px;padding-top: 0px;padding-left: 0px;border-left: 0px;padding-right: 0px" border="0" alt="image" src="http://blog.developpez.com/mikedavem/files/2013/06/image_thumb.png" width="832" height="80" /></a></p>
<p>&#160;</p>
<p>Tentons de retrouver le serveur sur lequel le serveur lié pointe :</p>
<p><div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> &nbsp; &nbsp;<br />
<span style="color: #993333; font-weight: bold;">FROM</span> OPENQUERY<span style="color: #66cc66;">&#40;</span>LST_APPLIX<span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'SELECT @@SERVERNAME AS SERVER_NAME'</span><span style="color: #66cc66;">&#41;</span>;</div></div>
</p>
<p>qui donne </p>
<p><a href="http://blog.developpez.com/mikedavem/files/2013/06/image1.png"><img title="image" style="border-top: 0px;border-right: 0px;border-bottom: 0px;padding-top: 0px;padding-left: 0px;border-left: 0px;padding-right: 0px" border="0" alt="image" src="http://blog.developpez.com/mikedavem/files/2013/06/image_thumb1.png" width="145" height="56" /></a></p>
<p>&#160;</p>
<p>Ok visiblement cela fonctionne. En utilisant le listener la requête est automatiquement redirigée vers le REPLICA2 comme le stipule notre configuration. </p>
<p>&#160;</p>
<p>On lance maintenant un basculement manuel de groupe de disponibilité ApplixGrp de REPLICA1 vers REPLICA2. REPLICA2 devient donc le nouveau primaire.REPLICA1 et REPLICA3 deviennent les réplicas secondaires. On exécute à nouveau nos requêtes :</p>
<p>&#160;</p>
<p><div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">SELECT</span> &nbsp; <br />
&nbsp;g<span style="color: #66cc66;">.</span>name <span style="color: #993333; font-weight: bold;">AS</span> group_name<span style="color: #66cc66;">,</span> &nbsp; &nbsp;<br />
&nbsp;r<span style="color: #66cc66;">.</span>replica_server_name<span style="color: #66cc66;">,</span> &nbsp; &nbsp;<br />
&nbsp;rs<span style="color: #66cc66;">.</span>role_desc<span style="color: #66cc66;">,</span> &nbsp; &nbsp;<br />
&nbsp;rs<span style="color: #66cc66;">.</span>operational_state_desc<span style="color: #66cc66;">,</span> &nbsp; &nbsp;<br />
&nbsp;ro<span style="color: #66cc66;">.</span>replica_server_name <span style="color: #993333; font-weight: bold;">AS</span> replica_ro_server_name<span style="color: #66cc66;">,</span> &nbsp; &nbsp;<br />
&nbsp;rol<span style="color: #66cc66;">.</span>routing_priority<span style="color: #66cc66;">,</span> &nbsp; &nbsp;<br />
&nbsp;r<span style="color: #66cc66;">.</span>secondary_role_allow_connections_desc &nbsp; &nbsp;<br />
<span style="color: #993333; font-weight: bold;">FROM</span> sys<span style="color: #66cc66;">.</span>dm_hadr_availability_replica_states <span style="color: #993333; font-weight: bold;">AS</span> rs &nbsp; &nbsp;<br />
&nbsp;<span style="color: #993333; font-weight: bold;">JOIN</span> sys<span style="color: #66cc66;">.</span>availability_groups <span style="color: #993333; font-weight: bold;">AS</span> g &nbsp; &nbsp;<br />
&nbsp; <span style="color: #993333; font-weight: bold;">ON</span> rs<span style="color: #66cc66;">.</span>group_id <span style="color: #66cc66;">=</span> g<span style="color: #66cc66;">.</span>group_id &nbsp; &nbsp;<br />
&nbsp;<span style="color: #993333; font-weight: bold;">JOIN</span> sys<span style="color: #66cc66;">.</span>availability_replicas <span style="color: #993333; font-weight: bold;">AS</span> r &nbsp; &nbsp;<br />
&nbsp; <span style="color: #993333; font-weight: bold;">ON</span> r<span style="color: #66cc66;">.</span>replica_id <span style="color: #66cc66;">=</span> rs<span style="color: #66cc66;">.</span>replica_id &nbsp; &nbsp;<br />
&nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">AND</span> r<span style="color: #66cc66;">.</span>group_id <span style="color: #66cc66;">=</span> rs<span style="color: #66cc66;">.</span>group_id &nbsp; &nbsp;<br />
&nbsp;<span style="color: #993333; font-weight: bold;">JOIN</span> sys<span style="color: #66cc66;">.</span>availability_read_only_routing_lists rol &nbsp; &nbsp;<br />
&nbsp; <span style="color: #993333; font-weight: bold;">ON</span> rol<span style="color: #66cc66;">.</span>replica_id <span style="color: #66cc66;">=</span> r<span style="color: #66cc66;">.</span>replica_id &nbsp; &nbsp;<br />
&nbsp;<span style="color: #993333; font-weight: bold;">JOIN</span> sys<span style="color: #66cc66;">.</span>availability_replicas <span style="color: #993333; font-weight: bold;">AS</span> ro &nbsp; &nbsp;<br />
&nbsp; <span style="color: #993333; font-weight: bold;">ON</span> ro<span style="color: #66cc66;">.</span>replica_id <span style="color: #66cc66;">=</span> rol<span style="color: #66cc66;">.</span>read_only_replica_id &nbsp; &nbsp;<br />
<span style="color: #993333; font-weight: bold;">WHERE</span> g<span style="color: #66cc66;">.</span>name <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'ApplixGrp'</span> &nbsp; &nbsp;<br />
&nbsp;<span style="color: #993333; font-weight: bold;">AND</span> r<span style="color: #66cc66;">.</span>replica_server_name <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'REPLICA2'</span></div></div>
</p>
<p>&#160;</p>
<p><a href="http://blog.developpez.com/mikedavem/files/2013/06/image2.png"><img title="image" style="border-top: 0px;border-right: 0px;border-bottom: 0px;padding-top: 0px;padding-left: 0px;border-left: 0px;padding-right: 0px" border="0" alt="image" src="http://blog.developpez.com/mikedavem/files/2013/06/image_thumb2.png" width="844" height="70" /></a></p>
<p>&#160;</p>
<p>et </p>
<p><div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> &nbsp; &nbsp;<br />
<span style="color: #993333; font-weight: bold;">FROM</span> OPENQUERY<span style="color: #66cc66;">&#40;</span>LST_APPLIX<span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'SELECT @@SERVERNAME AS SERVER_NAME'</span><span style="color: #66cc66;">&#41;</span>;</div></div>
</p>
<p>qui donne </p>
<p><a href="http://blog.developpez.com/mikedavem/files/2013/06/image3.png"><img title="image" style="border-top: 0px;border-right: 0px;border-bottom: 0px;padding-top: 0px;padding-left: 0px;border-left: 0px;padding-right: 0px" border="0" alt="image" src="http://blog.developpez.com/mikedavem/files/2013/06/image_thumb3.png" width="149" height="53" /></a></p>
<p>&#160;</p>
<p>Comme on peut le voir l&rsquo;utilisation d&rsquo;un serveur lié vers une architecture SQL Server 2012 AlwaysOn avec une redirection des connexions en lecture seule vers les réplicas secondaires fonctionne très bien !</p>
<p>&#160;</p>
<p>Bon paramétrage de serveurs liés</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
