<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://blog.djeepy1.net/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>Business Geek</title>
  <link>http://blog.djeepy1.net/</link>
  <description>Journal d'un consultant en informatique, spécialisé en technologies Microsoft (et le tout à Toulouse)</description>
  <language>fr</language>
  <pubDate>Thu, 09 Oct 2008 14:42:10 +0200</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>MS Days à Toulouse</title>
    <link>http://blog.djeepy1.net/post/2008/09/28/MS-Days-a-Toulouse</link>
    <guid isPermaLink="false">urn:md5:bb80f853d785ba581f61a357b75fadd9</guid>
    <pubDate>Sun, 28 Sep 2008 10:43:00 +0200</pubDate>
    <dc:creator>Djeepy1</dc:creator>
        <category>Business Intelligence</category>
        <category>SQL Server 2008</category><category>Séminaire</category>    
    <description>    &lt;p&gt;Encore un nouvel événement Microsoft me direz-vous... Et bien oui et on ne
s'en lasse pas, même si c'est événement n'est autre que le Microsoft Technet
Tour de la fin d'année.&lt;/p&gt;
&lt;p&gt;&lt;img title=&quot;MTT2008.png, sep 2008&quot; alt=&quot;&quot; src=&quot;http://blog.djeepy1.net/public/microsoft/MTT2008.png&quot; /&gt;&lt;img title=&quot;MSDays.jpg, sep 2008&quot; alt=&quot;&quot; src=&quot;http://blog.djeepy1.net/public/microsoft/MSDays.jpg&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Au menu, des sessions et des échanges avec les speakers Microsoft sur les
dernières technologies Microsoft : &lt;strong&gt;SQL Server 2008&lt;/strong&gt;,
&lt;strong&gt;Hyper-V&lt;/strong&gt;, &lt;strong&gt;Visual Studio 2008&lt;/strong&gt;, le
&lt;strong&gt;Framework .NET 3.5&lt;/strong&gt;, etc.&lt;/p&gt;
&lt;p&gt;Le session sur la &lt;strong&gt;Business Intelligence&lt;/strong&gt; avec SQL Server
2008 et Performance Point sera animée par votre serviteur. Je vous invite
aussi à aller voir la session de Patrick Guimonet de Microsoft sur SQL Server
2008 dont le lancement en version finale a eu lieu pendant les vacances.&lt;/p&gt;
&lt;p&gt;L'événement est gratuit et a lieu ces lundi et mardi (oui, le post arrive au
dernier moment). Il vous reste donc quelques heures pour valider votre
inscription et venir découvrir ou poser des questions sur les solutions
Microsoft.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;</description>
    
    
    
          <comments>http://blog.djeepy1.net/post/2008/09/28/MS-Days-a-Toulouse#comment-form</comments>
      <wfw:comment>http://blog.djeepy1.net/post/2008/09/28/MS-Days-a-Toulouse#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.djeepy1.net/feed/rss2/comments/281405</wfw:commentRss>
      </item>
    
  <item>
    <title>Retour aux affaires</title>
    <link>http://blog.djeepy1.net/post/2008/09/28/Retour-aux-affaires</link>
    <guid isPermaLink="false">urn:md5:77f7a4d75da40107fd78ca56e6251c78</guid>
    <pubDate>Sun, 28 Sep 2008 09:55:00 +0200</pubDate>
    <dc:creator>Djeepy1</dc:creator>
        <category>Perso</category>
            
    <description>    &lt;p&gt;Je suis rentré de congés il y a une semaine et le retour a été très chargé
ce qui explique l'absence de post.&lt;/p&gt;
&lt;p&gt;Comme habituellement, je fais le petit post qui va bien avec une belle photo
ensoleillée de mon lieu de vacances : la &lt;strong&gt;Toscane&lt;/strong&gt; en
&lt;strong&gt;Italie&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img title=&quot;blog-chianti-toscane.JPG, sep 2008&quot; style=&quot;DISPLAY: block; MARGIN: 0 auto&quot; alt=&quot;&quot; src=&quot;http://blog.djeepy1.net/public/perso/blog-chianti-toscane.JPG&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Je m'y suis bien reposé, c'était beau et bon mais je n'ai pas
réussi à redresser la tour de Pise.&lt;/p&gt;
&lt;p&gt;Allez, &lt;strong&gt;STOP&lt;/strong&gt; sur les vacances, c'est la rentrée et il faut
se remettre au turbin. Comme je n'aime pas mélanger les sujets, rendez-vous sur
le prochain post pour parler &lt;strong&gt;séminaire technique&lt;/strong&gt;...&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.djeepy1.net/post/2008/09/28/Retour-aux-affaires#comment-form</comments>
      <wfw:comment>http://blog.djeepy1.net/post/2008/09/28/Retour-aux-affaires#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.djeepy1.net/feed/rss2/comments/281401</wfw:commentRss>
      </item>
    
  <item>
    <title>Analysis Services - Support du format monétaire dans Excel</title>
    <link>http://blog.djeepy1.net/post/2008/08/30/Analysis-Services-Support-du-format-monetaire-dans-Excel</link>
    <guid isPermaLink="false">urn:md5:483a17f04a0b6d3f6c8817048aec79b3</guid>
    <pubDate>Sun, 31 Aug 2008 17:49:00 +0200</pubDate>
    <dc:creator>Djeepy1</dc:creator>
        <category>Business Intelligence</category>
        <category>Analysis Services</category><category>Excel</category><category>MDX</category>    
    <description>    &lt;p&gt;Dans un projet décisionnel, il est nécessaire lors de la restitution des
données de les formater. Par exemple, si vous présentez des données
financières, il va falloir les afficher correctement.&lt;/p&gt;
&lt;p&gt;Dans une architecture applicative classique, on laisse ce travail à la
couche de présentation. Dans un contexte décisionnel, cette couche de
présentation peut être Reporting Services qui gère le formatage mais ce
peut-être aussi un &lt;strong&gt;client OLAP&lt;/strong&gt; autonome comme
&lt;strong&gt;Excel&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Excel sait gérer aussi le formatage mais c'est aux utilisateurs de le
configurer via les options de la PivotTable :&lt;img title=&quot;excel-olap-format.PNG, aoû 2008&quot; style=&quot;FLOAT: right; MARGIN: 0 0 1em 1em&quot; alt=&quot;&quot; src=&quot;http://blog.djeepy1.net/public/sql2008/excel-olap-format.PNG&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Cette manipulation n'est pas à faire par les utilisateurs finaux, surtout
pour des formats triviaux comme des devises.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Analysis Services&lt;/strong&gt; permet d'ajouter des informations de
formatage sur chaque cellule pour guider les clients OLAP dans leur
réprésentation des données. Ainsi, quand on déclare un membre calculé par
exemple, on ajoute la clause &lt;strong&gt;FORMAT_STRING&lt;/strong&gt; décrivant le membre
:&lt;/p&gt;
&lt;p style=&quot;BACKGROUND-COLOR: #eee&quot;&gt;&lt;code&gt;CREATE MEMBER
CURRENTCUBE.[Measures].[Prix TTC]&lt;br /&gt;
AS [Measures].[Prix Vendu]*1.196,&lt;br /&gt;
FORMAT_STRING = &amp;quot;Currency&amp;quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Cette configuration se fait aussi via l'assistant :&lt;/p&gt;
&lt;p&gt;&lt;img title=&quot;excel-olap-format-2.PNG, aoû 2008&quot; alt=&quot;&quot; src=&quot;http://blog.djeepy1.net/public/sql2008/excel-olap-format-2.PNG&quot; /&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Un client OLAP peut récupérer cette information en précisant une clause dans
la requête MDX qu'il fait à Analysis Services.&lt;/p&gt;
&lt;p style=&quot;BACKGROUND-COLOR: #eee&quot;&gt;&lt;code&gt;SELECT {[Measures].[Prix TTC]} ON
COLUMNS&lt;br /&gt;
FROM [CubSales]&lt;br /&gt;
CELL PROPERTIES VALUE, FORMAT_STRING&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Excel précise bien cette clause dans ses échanges avec SSAS. Or il se peut
qu'il n'arrive pas à représenter un membre calculé de type monétaire malgré
l'information provenant du cube.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Une des solutions pour résoudre ce problème serait d'ajouter la clause
&lt;strong&gt;FORMATTED_VALUE&lt;/strong&gt; pour forcer le formatage des cellules par
Analysis Services avant de renvoyer les données. On peut le vérifier avec une
requête MDX dans Management Studio :&lt;/p&gt;
&lt;p style=&quot;BACKGROUND-COLOR: #eee&quot;&gt;&lt;code&gt;SELECT {[Measures].[Prix TTC]} ON
COLUMNS&lt;br /&gt;
FROM [CubSales]&lt;br /&gt;
CELL PROPERTIES VALUE, FORMAT_STRING, FORMATTED_VALUE&lt;/code&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Mais Excel ne permet pas de préciser ce paramètre donc il nous faut trouver
une solution. Dans le cadre de données monétaires, il est important de
connaître le pays pour déterminer la bonne devise. En effet, si mon cube
contient des montants en euros, je ne veux pas voir des dollars si le client ou
le serveur est en version US. En conséquence, il faut préciser la culture
(&lt;em&gt;Locale&lt;/em&gt;) en plus du formatage dans les méta-données des cellules.
Ainsi, corrigeons notre membre calculé :&lt;/p&gt;
&lt;p style=&quot;BACKGROUND-COLOR: #eee&quot;&gt;&lt;code&gt;CREATE MEMBER
CURRENTCUBE.[Measures].[Prix TTC]&lt;br /&gt;
AS [Measures].[Prix Vendu]*1.196,&lt;br /&gt;
FORMAT_STRING = &amp;quot;Currency&amp;quot;, LANGUAGE = 1036 //fr-FR&lt;/code&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Et là, plus de problème dans Excel pour afficher vos membres calculés en €
de façon automatique. Attention, cette manipulation n'est pas possible avec le
formulaire d'édition du membre calculé, il vous faudra passé par le script MDX
de création.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.djeepy1.net/post/2008/08/30/Analysis-Services-Support-du-format-monetaire-dans-Excel#comment-form</comments>
      <wfw:comment>http://blog.djeepy1.net/post/2008/08/30/Analysis-Services-Support-du-format-monetaire-dans-Excel#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.djeepy1.net/feed/rss2/comments/272422</wfw:commentRss>
      </item>
    
  <item>
    <title>Transactions - REPEATABLE READ</title>
    <link>http://blog.djeepy1.net/post/2008/08/30/Transactions-REPEATABLE-READ</link>
    <guid isPermaLink="false">urn:md5:d838d8560ffd9de816b77061275882cc</guid>
    <pubDate>Sat, 30 Aug 2008 08:17:00 +0200</pubDate>
    <dc:creator>Djeepy1</dc:creator>
        <category>SQL Server</category>
        <category>Locks</category><category>SQL Server 2008</category><category>Transactions</category>    
    <description>    &lt;p&gt;Voici le problème que je vais traiter : je veux pouvoir m'assurer dans une
transaction qu'un jeu d'enregistrements ne sera pas touché pendant que j'opère
une série de modifications. Par exemple, je ne veux pas qu'on puisse modifier
une série d'adresses pendant que je mets à jour le contact qui les
possède. Pour être plus concret, je veux bloquer les adresses 31 et 52
pendant que je modifie le contact John Smith. Par exemple :&lt;/p&gt;
&lt;p style=&quot;BACKGROUND-COLOR: #eee&quot;&gt;&lt;code&gt;BEGIN TRAN&lt;br /&gt;
&lt;br /&gt;
SELECT * INTO #TempTable FROM Person.Address Where AddressID in
(31,52)&lt;br /&gt;
&lt;br /&gt;
UPDATE Person.Person Set Title = 'Lord' Where LastName = 'Smith' and FirstName
= 'John'&lt;br /&gt;
UPDATE Person.PersonPhone Set [...]&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Par défaut, le niveau d'isolation de transaction de SQL Server est
&lt;strong&gt;READ COMMITED&lt;/strong&gt;. En d'autres termes, cela signifie que l'on ne
peut lire ou modifier que des données qui ont validées (&lt;em&gt;comitées&lt;/em&gt; pour
reprendre le barbarisme franglais). Selon le moteur de transactions, les
adresses peuvent être modifiées pendant que ma transaction a lieu.&lt;/p&gt;
&lt;p&gt;Techniquement, dans le moteur SQL, cela se traduit par des
&lt;strong&gt;locks partagés&lt;/strong&gt; (&lt;strong&gt;Shared&lt;/strong&gt;) sur la table
Address qui durent le temps du premier SELECT et des &lt;strong&gt;locks
exclusifs&lt;/strong&gt; (&lt;strong&gt;eXclusive&lt;/strong&gt;) sur les tables modifiées. Une
fois le SELECT passé, les locks Shared sont libérés, laissant la
place pour des modifications. En revanche les locks exclusifs sont
maintenus jusqu'au COMMIT (ou ROLLBACK), empêchant les modifications. On
peut le vérifier en regardant les verrous sur les tables en question :&lt;/p&gt;
&lt;p style=&quot;BACKGROUND-COLOR: #eee&quot;&gt;&lt;code&gt;SET TRANSACTION ISOLATION LEVEL READ
COMMITTED --mode par défaut&lt;br /&gt;
&lt;br /&gt;
BEGIN TRAN&lt;br /&gt;
&lt;br /&gt;
SELECT *&lt;br /&gt;
FROM Person.Address&lt;br /&gt;
WHERE AddressID IN (31,52)&lt;br /&gt;
&lt;br /&gt;
select resource_type, resource_description, request_mode, request_type&lt;br /&gt;
from sys.dm_tran_locks&lt;br /&gt;
&lt;br /&gt;
ROLLBACK&lt;/code&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;img title=&quot;lock-read-commited.PNG, aoû 2008&quot; alt=&quot;&quot; src=&quot;http://blog.djeepy1.net/public/sql2008/lock-read-commited.PNG&quot; /&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Lors de la consultation des locks, il n'y en a aucun donc une instruction
parallèle peut modifier les adresses. Nous allons donc utiliser un autre niveau
de transaction pour changer le comportement du moteur.&lt;/p&gt;
&lt;p&gt;En choisissant le niveau juste au dessus, &lt;strong&gt;REPEATABLE READ&lt;/strong&gt;,
le moteur va poser des locks Shared et les maintenir le temps de la
transaction. C'est ce que l'on appelle des lectures répétables. Pour
modifier un enregistrement, le moteur doit poser un lock exclusif et donc
doit attendre de n'avoir plus de locks Shared. Voyons le comportement des
verrous, pour cela, il suffit de changer le niveau d'isolation dans la première
ligne : &lt;/p&gt;
&lt;p style=&quot;BACKGROUND-COLOR: #eee&quot;&gt;&lt;code&gt;SET TRANSACTION ISOLATION LEVEL
&lt;ins&gt;&lt;strong&gt;REPEATABLE READ&lt;/strong&gt;&lt;/ins&gt;&lt;br /&gt;
&lt;br /&gt;
BEGIN TRAN&lt;br /&gt;
&lt;br /&gt;
SELECT *&lt;br /&gt;
FROM Person.Address&lt;br /&gt;
WHERE AddressID IN (31,52)&lt;br /&gt;
&lt;br /&gt;
select resource_type, resource_description, request_mode, request_type&lt;br /&gt;
from sys.dm_tran_locks&lt;br /&gt;
&lt;br /&gt;
ROLLBACK&lt;/code&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;img title=&quot;lock-repeatable-read.PNG, aoû 2008&quot; alt=&quot;&quot; src=&quot;http://blog.djeepy1.net/public/sql2008/lock-repeatable-read.PNG&quot; /&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;On voit bien que des locks Shared (&lt;strong&gt;S et IS&lt;/strong&gt;) sont maintenus
après le SELECT. Ceci garantie que ces enregistrements ne seront pas modifiés
le temps de ma transaction. De plus, du fait que ce soit des locks Shared,
une autre transaction peut lire ces enregistrements.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Bien évidemment, la gestion des locks est très fine dans SQL Server et se
complexifie avec l'ensemble des requêtes à un instant T. SQL Server va tenter
de verrouiller le niveau le plus fin et le moins contraignant pour respecter
vos niveaux d'isolation et garantir la transactionalité. Et tout ceci se
combine avec les différents objets liés à la table (index, allocations,
etc.).&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Vous aurez noté au passage l'utilisation de la vue système
&lt;strong&gt;sys.dm_tran_locks&lt;/strong&gt; qui remplace depuis 2005 l'ancien
&lt;strong&gt;sp_lock&lt;/strong&gt; et qui vous aidera à comprendre le fonctionnement du
moteur transactionnel et à minimiser la contention sur vos bases.&lt;/p&gt;
&lt;p&gt;Bonne optimisation...&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.djeepy1.net/post/2008/08/30/Transactions-REPEATABLE-READ#comment-form</comments>
      <wfw:comment>http://blog.djeepy1.net/post/2008/08/30/Transactions-REPEATABLE-READ#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.djeepy1.net/feed/rss2/comments/272334</wfw:commentRss>
      </item>
    
  <item>
    <title>Agrégat CLR – Nouveauté 2008</title>
    <link>http://blog.djeepy1.net/post/2008/08/28/Agregat-CLR-Nouveaute-2008</link>
    <guid isPermaLink="false">urn:md5:71548e394691671b2099edd8d74bf228</guid>
    <pubDate>Thu, 28 Aug 2008 19:36:00 +0200</pubDate>
    <dc:creator>Djeepy1</dc:creator>
        <category>SQL Server</category>
        <category>SQL Server 2008</category><category>SQLCLR</category><category>TSQL</category>    
    <description>    &lt;p&gt;En ce moment, je teste pas mal SQL Server 2008 et en particulier les
améliorations par rapport à la version précédente. Aujourd’hui, je me suis
intéressé aux fonctionnalités de la &lt;strong&gt;SQLCLR&lt;/strong&gt; et j’ai voulu
savoir si une des limitations de 2005 était levée.&lt;/p&gt;
&lt;p&gt;Le problème était le suivant (le fait que je parle à l’imparfait devrait
vous aiguiller sur la réponse) : dans une &lt;strong&gt;fonction d’agrégat
CLR&lt;/strong&gt;, il n’était possible de fournir qu’un seul paramètre à la méthode
&lt;strong&gt;Accumulate&lt;/strong&gt;. Ceci était pénalisant pour certaines fonctions à
double entrée ou pour paramétrer le comportement d’autre.&lt;/p&gt;
&lt;p&gt;Par exemple, sur une fonction de concaténation (très utile dans les
reports), il était impossible de préciser le caractère à utiliser comme
séparateur. Cela a entraîné (chez nous en tout cas) de grands débats sur le
choix caractère à utiliser dans le code .NET. Cela impliquait aussi
l’utilisation de méthodes de Replace dans les couches supérieures pour traiter
le caractère.&lt;/p&gt;
&lt;p&gt;Venons-en à la solution que propose &lt;strong&gt;SQL Server 2008&lt;/strong&gt;
maintenant.  Je suis en fait tombé sur la documentation suivante :&lt;/p&gt;
&lt;p style=&quot;BACKGROUND-COLOR: #eee&quot;&gt;&lt;code&gt;CREATE AGGREGATE [ schema_name . ]
aggregate_name&lt;br /&gt;
        (@param_name
&amp;lt;input_sqltype&amp;gt; &lt;br /&gt;
        [ ,...n ] )&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;J’ai été intrigué et admiratif sur le &lt;strong&gt;&lt;em&gt;..n&lt;/em&gt;&lt;/strong&gt; dans la
liste de paramètres qui suppose que les fonctions d’agrégat de 2008 supportent
le multi-paramètre.&lt;br /&gt;
Je me suis empressé de modifier quelque peu l’agrégat de concaténation des
exemples de SQL Server et j’ai modifié la méthode Accumulate de cette façon
:&lt;/p&gt;
&lt;p style=&quot;BACKGROUND-COLOR: #eee&quot;&gt;
&lt;code&gt;[Microsoft.SqlServer.Server.SqlUserDefinedAggregate(…)]&lt;br /&gt;
public struct Concat {&lt;br /&gt;
    […]&lt;br /&gt;
    public void Accumulate(SqlString Value, SqlString
separator)&lt;br /&gt;
    {&lt;br /&gt;
        if (!isFirst)&lt;br /&gt;
           
sb.Append(separator);&lt;br /&gt;
        else&lt;br /&gt;
            isFirst =
false;&lt;br /&gt;
        sb.Append(Value.Value);&lt;br /&gt;
    }&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Après avoir intégré l’Assembly dans ma base, je mappe la fonction d’agrégat
:&lt;/p&gt;
&lt;p style=&quot;BACKGROUND-COLOR: #eee&quot;&gt;&lt;code&gt;CREATE AGGREGATE [dbo].[Concat] (&lt;br /&gt;
  @value [nvarchar](4000),&lt;br /&gt;
  @separator [nvarchar](10))&lt;br /&gt;
RETURNS[nvarchar](4000)&lt;br /&gt;
EXTERNAL NAME [BewiseUtils].[Bewise.SqlServer.Concat]&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Et le test final :&lt;/p&gt;
&lt;p style=&quot;BACKGROUND-COLOR: #eee&quot;&gt;&lt;code&gt;SELECT dbo.Concat(LastName, ', ')&lt;br /&gt;
FROM Person.Person&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img title=&quot;aggregate-clr-separator.PNG, aoû 2008&quot; height=&quot;66&quot; alt=&quot;&quot; src=&quot;http://blog.djeepy1.net/public/sql2008/aggregate-clr-separator.PNG&quot; width=&quot;306&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Et voila le travail… Chacun peu choisir son séparateur dans la fonction de
concaténation.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.djeepy1.net/post/2008/08/28/Agregat-CLR-Nouveaute-2008#comment-form</comments>
      <wfw:comment>http://blog.djeepy1.net/post/2008/08/28/Agregat-CLR-Nouveaute-2008#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.djeepy1.net/feed/rss2/comments/271976</wfw:commentRss>
      </item>
    
  <item>
    <title>Indexation - Gérer la fragmentation</title>
    <link>http://blog.djeepy1.net/post/2008/08/13/Indexation-Gerer-la-fragmentation</link>
    <guid isPermaLink="false">urn:md5:97501675641b9b4becaf9ada3c5fa7de</guid>
    <pubDate>Wed, 13 Aug 2008 00:35:00 +0200</pubDate>
    <dc:creator>Djeepy1</dc:creator>
        <category>SQL Server</category>
        <category>index</category><category>sql server 2005</category><category>sql server 2008</category>    
    <description>    &lt;p&gt;Je continue ma série sur les index avant de faire une petite pause pour
préparer une traduction d'article sur les clauses WHERE dynamiques d'un
collègue MVP suédois.&lt;/p&gt;
&lt;p&gt;Dans ce post, je vais m'intéresser à la fragmentation des index. J'espère
que le terme fragmentation rappelera à certains le temps où on passait notre
samedi après midi à défragmenter nos disques de 40Mo (oui, méga-octets) pour
gagner quelques octets et installer Phantasmagoria.&lt;/p&gt;
&lt;p&gt;Le principe est le même, l'idée est de &amp;quot;ranger&amp;quot; un index pour gagner un peu
de place et &lt;strong&gt;surtout&lt;/strong&gt; qu'il soit plus performant. La
fragmentation est un processus &amp;quot;naturel&amp;quot;, dû aux modifications des données. La
base vit, grandit et donc il faut opérer de la maintenance
régulièrement.&lt;/p&gt;
&lt;p&gt;On a 2 types de fragmentation :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;celle qui touche le niveau &lt;em&gt;feuille&lt;/em&gt; de l'index et qui correspond à
un ordre sur le disque différent de l'ordre logique dans l'index. Le résultat
est trop d'accès disque lors de scans sur ce niveau&lt;/li&gt;
&lt;li&gt;celle qui touche l'arbre de l'index et qui correspond à des pages trop
vides ou trop pleines&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On peut utiliser 2 approches pour traiter avec la fragmentation :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Traiter systématiquement l'ensemble de sa base de données. C'est la méthode
que j'utilise pour des petites volumétries et quand on dispose d'une fenêtre de
tir pour faire les opérations de maintenance sans gêner personne (par exemple
une base qui est utilisée avec des horaires de bureau).&lt;/li&gt;
&lt;li&gt;Traiter uniquement les index fragmentés et de façon intelligente. C'est la
méthode que j'utilise pour des grosses volumétries et des bases en accès
24/7.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour le premier cas, on fait juste un plan de maintenance dans lequel on
demande une réorganisation ou une reconstruction des index sur toute la base.
Sauf cas contraire, je fais un REORGANIZE tous les soirs et un REBUILD le
week-end (cela ne reste qu'une stratégie parmi d'autres). Pour les puristes,
les instructions T-SQL sont :&lt;/p&gt;
&lt;p style=&quot;BACKGROUND-COLOR: #eee&quot;&gt;&lt;code&gt;ALTER INDEX IX_abcd ON maTable
REORGANIZE&lt;br /&gt;
&lt;br /&gt;
ALTER INDEX IX_abcd ON maTable REBUILD&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Pour le second cas, il faut déterminer si un index a besoin d'une
reconstruction ou d'une réorganisation et connaître la volumétrie (et par
conséquent le temps que ça va prendre) pour limiter l'impact sur la
production.&lt;/p&gt;
&lt;p&gt;On connait la fragmentation d'un index avec la vue système
&lt;strong&gt;sys.dm_db_index_physical_stats&lt;/strong&gt; et plus précisément le champ
&lt;strong&gt;avg_fragmentation_in_percent&lt;/strong&gt;. Ainsi on peut connaître pour
chaque index son niveau de fragmentation :&lt;/p&gt;
&lt;p style=&quot;BACKGROUND-COLOR: #eee&quot;&gt;&lt;code&gt;SELECT DB_NAME(database_id),
OBJECT_NAME(object_id), index_id, avg_fragmentation_in_percent&lt;br /&gt;
FROM sys.dm_db_index_physical_stats(&lt;br /&gt;
   DB_ID('MaBase'),&lt;br /&gt;
   OBJECT_ID('MaTable'),&lt;br /&gt;
   NULL, NULL, NULL)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Je ne vais pas rentrer ici dans le détail du pourcentage remonté par SQL
Server, je vais lui faire confiance pour le calcul (note : SQL Server
2008 est plus précis dans le calcul car il prend en compte plus de cas).&lt;br /&gt;
Sur l'action a mener en fonction de la fragmentation, on trouve toutes les
stratégies. Selon Microsoft, on réorganise pour une fragmentation &amp;lt; 30% et
on reconstruit au-delà. Moi je n'ai pas de seuil arrêté, il m'arrive de faire
un REBUILD quand la fragmentation est &amp;gt; 10%.&lt;/p&gt;
&lt;p&gt;Voila, ce post est loin d'être exhaustif car je ne parle pas de la
fragmentation par niveau de l'index, du paramètre FILL_FACTOR ou de la
reconstruction ONLINE qui permet de reconstruire un index avec peu d'impact sur
la production (version Enterprise uniquement).&lt;/p&gt;
&lt;p&gt;PS : pour connaître le nom de l'index visé (la requête ci-dessus ne remonte
que l'id), il va falloir faire une jointure sur sys.indexes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;ins&gt;Mise à Jour&lt;/ins&gt;&lt;/strong&gt; : pour illustrer le problème de la
fragmentation d'un index, voici 2 images montrant un index &amp;quot;propre&amp;quot; et un index
fragmenté.&lt;/p&gt;
&lt;p&gt;&lt;img title=&quot;index-non-fragmente.gif, aoû 2008&quot; style=&quot;DISPLAY: block; MARGIN: 0 auto&quot; alt=&quot;&quot; src=&quot;http://blog.djeepy1.net/public/sql2008/index-non-fragmente.gif&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;ins&gt;Index non-fragmenté&lt;/ins&gt;&lt;/p&gt;
&lt;p&gt;&lt;img title=&quot;index-fragmente.gif, aoû 2008&quot; style=&quot;DISPLAY: block; MARGIN: 0 auto&quot; alt=&quot;&quot; src=&quot;http://blog.djeepy1.net/public/sql2008/index-fragmente.gif&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;ins&gt;Index fragmenté&lt;/ins&gt;&lt;/p&gt;
&lt;p&gt;Et comme il faut rendre à César ce qui lui appatient, voici mes sources :
&lt;a href=&quot;http://technet.microsoft.com/en-us/magazine/cc671165.aspx&quot;&gt;http://technet.microsoft.com/en-us/magazine/cc671165.aspx&lt;/a&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.djeepy1.net/post/2008/08/13/Indexation-Gerer-la-fragmentation#comment-form</comments>
      <wfw:comment>http://blog.djeepy1.net/post/2008/08/13/Indexation-Gerer-la-fragmentation#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.djeepy1.net/feed/rss2/comments/268445</wfw:commentRss>
      </item>
    
  <item>
    <title>BACKUP WITH COPY_ONLY</title>
    <link>http://blog.djeepy1.net/post/2008/08/12/BACKUP-WITH-COPY_ONLY</link>
    <guid isPermaLink="false">urn:md5:e7c7d2cf0ae733b2f5f22f6acc465da0</guid>
    <pubDate>Tue, 12 Aug 2008 00:32:00 +0200</pubDate>
    <dc:creator>Djeepy1</dc:creator>
        <category>SQL Server</category>
        <category>backup</category><category>sql server 2008</category>    
    <description>    &lt;p&gt;Trop souvent je vois en consulting les développeurs faire eux-mêmes des
backups de la base de production pour les remonter sur un environnement de
développement. Et bien évidemment, mauvaise habitude, ils le font avec le
wizard de Management Studio.&lt;/p&gt;
&lt;p&gt;Le souci c'est que la version 2005 de cet outil ne prend pas en charge une
option essentielle pour la création de ce type de backup : &lt;strong&gt;WITH
COPY_ONLY&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Cette option permet de ne pas &lt;strong&gt;casser la stratégie de backup&lt;/strong&gt;
que le DBA, votre collègue ou même vous, auriez mis en place. Sans cette
option, SQL Server garde des traces de la sauvegarde et vide le LOG, comme
si elle était une continuité du plan en cours.&lt;/p&gt;
&lt;p&gt;La conséquence à cela est que si votre base plante entre cette manipulation
et le prochain BACKUP FULL &amp;quot;planifié&amp;quot;, il manquera à l'administrateur des
pièces du puzzle pour remonter la base puisque votre manip sera considérée
comme le dernier backup complet valide. Et comme en général, ce fichier part à
la poubelle...vous risquez de ne pas pouvoir remonter votre base.&lt;/p&gt;
&lt;p&gt;Bien sûr, l'idée n'est pas de brider ces chers développeurs mais de leur
enseigner l'art des choses bien faites. La solution :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;apprendre le T-SQL&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;BACKGROUND-COLOR: #eee&quot;&gt;&lt;code&gt;BACKUP DATABASE DataWarehouse TO
DISK = 'c:\temp\dw.bak' WITH COPY_ONLY, NAME = 'Copie pour Dev'&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Utiliser &lt;strong&gt;Management Studio 2008&lt;/strong&gt; qui inclut cette option
dans le wizard&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img title=&quot;backup_with_copy.png, aoû 2008&quot; style=&quot;DISPLAY: block; MARGIN: 0 auto&quot; height=&quot;267&quot; alt=&quot;&quot; src=&quot;http://blog.djeepy1.net/public/sql2008/backup_with_copy.png&quot; width=&quot;433&quot; /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.djeepy1.net/post/2008/08/12/BACKUP-WITH-COPY_ONLY#comment-form</comments>
      <wfw:comment>http://blog.djeepy1.net/post/2008/08/12/BACKUP-WITH-COPY_ONLY#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.djeepy1.net/feed/rss2/comments/268231</wfw:commentRss>
      </item>
    
  <item>
    <title>Indexation - Faites la chasse aux index HEAP</title>
    <link>http://blog.djeepy1.net/post/2008/08/12/Indexation-Faites-la-chasse-aux-index-HEAP</link>
    <guid isPermaLink="false">urn:md5:75f3b008d5d93db4799f01d7986a238f</guid>
    <pubDate>Tue, 12 Aug 2008 00:12:00 +0200</pubDate>
    <dc:creator>Djeepy1</dc:creator>
        <category>SQL Server</category>
        <category>index</category><category>sql server 2005</category><category>sql server 2008</category>    
    <description>    &lt;p&gt;&lt;em&gt;Un premier post qui j'espère me conduira à une série sur l'indexation
dans SQL Server. Je traiterai les points un peu dans le désordre mais n'est-ce
pas là l'attrait d'un blog ? Je sais que je ne commence pas par les bases mais
bon, j'attend vos questions :-).&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Un index de type &lt;strong&gt;HEAP&lt;/strong&gt; indique en réalité le fait qu'il n'y
ait &lt;strong&gt;aucun index sur la table&lt;/strong&gt; et surtout pas d'index
CLUSTERED. C'est à dire que seul le CREATE TABLE a été exécuté, sans
aucune option, sans PRIMARY KEY.&lt;/p&gt;
&lt;p&gt;Cela signifie que les données sont rangées n'importe comment ou
plutôt dans l'ordre de leur création. C'est comme si je prenais un annuaire et
que je mélangais les villes et les noms.&lt;/p&gt;
&lt;p&gt;La conséquence d'avoir ce type d'indexation dans sa base de données est
très souvent d'avoir des performances catastrophiques lors de la selection
de données. D'autant plus quand la volumétrie augmente. Ceci vient du fait que
l'opération qui est faite sur la table pour récupérer un jeu d'enregistrement
est un TABLE SCAN (aussi appelé Full Scan).&lt;/p&gt;
&lt;p&gt;Pour en revenir à mon annuaire, c'est comme si je vous demandais de me
trouver toutes les personnes qui habitent au 12, rue des saules, quelque soit
la ville. Vous seriez obligé de lire (scanner) toutes les pages.&lt;/p&gt;
&lt;p&gt;Pour limiter cela, on peut mettre un index clustered ou une PRIMARY KEY
(équivalent d'un index unique non null) pour optimiser la recherche.&lt;/p&gt;
&lt;p&gt;Pour retrouver toutes les tables concernées :&lt;/p&gt;
&lt;p style=&quot;BACKGROUND-COLOR: #eee&quot;&gt;&lt;code&gt;select
OBJECT_NAME(sys.indexes.object_id)&lt;br /&gt;
from sys.indexes&lt;br /&gt;
  inner join sys.tables on sys.tables.object_id =
sys.indexes.object_id&lt;br /&gt;
where sys.indexes.[type] = 0 --0 = HEAP&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Donc faite un petit check-up de vos bases et vérifier vos tables stockées
sur un index HEAP... Et pourquoi pas les mettre sur un index CLUSTERED... mais
je reviendrai sur ce point &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;-)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;</description>
    
    
    
          <comments>http://blog.djeepy1.net/post/2008/08/12/Indexation-Faites-la-chasse-aux-index-HEAP#comment-form</comments>
      <wfw:comment>http://blog.djeepy1.net/post/2008/08/12/Indexation-Faites-la-chasse-aux-index-HEAP#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.djeepy1.net/feed/rss2/comments/268230</wfw:commentRss>
      </item>
    
  <item>
    <title>SQL Server 2008 est RTM...</title>
    <link>http://blog.djeepy1.net/post/2008/08/07/SQL-Server-2008-est-RTM</link>
    <guid isPermaLink="false">urn:md5:a8cf6c34f700f7c416dcc59b23601b05</guid>
    <pubDate>Thu, 07 Aug 2008 12:27:00 +0200</pubDate>
    <dc:creator>Djeepy1</dc:creator>
        <category>SQL Server</category>
            
    <description>    &lt;p&gt;...depuis quelques heures déjà.&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;Désolé de ne pas plus m'étendre plus sur cette nouvelle mais je suis chez un
client en plein audit de perfs alors je développerai ce soir, pendant
l'installation &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;-)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.djeepy1.net/post/2008/08/07/SQL-Server-2008-est-RTM#comment-form</comments>
      <wfw:comment>http://blog.djeepy1.net/post/2008/08/07/SQL-Server-2008-est-RTM#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.djeepy1.net/feed/rss2/comments/266974</wfw:commentRss>
      </item>
    
  <item>
    <title>Alignement des disques</title>
    <link>http://blog.djeepy1.net/post/2008/08/06/Alignement-des-disques</link>
    <guid isPermaLink="false">urn:md5:b1db53f1a2f8db7edd8b7dd2f264304f</guid>
    <pubDate>Wed, 06 Aug 2008 21:55:00 +0200</pubDate>
    <dc:creator>Djeepy1</dc:creator>
        <category>Infrastructure</category>
        <category>Infrastructure</category>    
    <description>    &lt;p&gt;En parlant baie de disques avec un client, je me suis souvenu de quelques
tips pour optimiser les performances que j'avais lu dans un vieux SQL Server
Magazine. L'idée de ce petit post est de vous en livrer un (oui, je sais je
pourrais faire un article complet mais là, j'ai la flemme).&lt;/p&gt;
&lt;p&gt;Nous allons donc parler &lt;strong&gt;Disk Sector Alignment&lt;/strong&gt;, ou en
français, alignement des secteurs du disque. Avant de commencer, on va faire
une révision rapide sur le vocabulaire associé aux disques :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Plateaux : un disque dur est composé de plusieurs plateaux empilés sur un
axe (spindle)&lt;/li&gt;
&lt;li&gt;Pistes (tracks) : ce sont les cercles concentriques qui composent un
plateau&lt;/li&gt;
&lt;li&gt;Secteur (sector) : chaque piste est divisée en secteurs (entre 60 et
120 en fonction du formattage de bas niveau et du fabricant). Les secteurs
contiennent les données, en général 512 octets&lt;/li&gt;
&lt;li&gt;Bloc (ou cluster) : c'est l'unité d'allocation minimum qui correspond à
plusieurs secteurs (ex: des blocs de 4ko entrainent une allocation minimum de 8
secteurs). C'est définit au formatage de haut niveau (par Windows)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le problème d'alignement vient du fait que, dans un système NTFS, le MBR
utilise 63 secteurs. Or si vos pistes font 64 secteurs, il y a un décalage d'un
secteur. Ceci va impliquer 2 opérations physiques pour écrire/lire un bloc de
données quand on tombe en bout de piste, puisque la tête va devoir changer de
piste.&lt;/p&gt;
&lt;p&gt;Pour palier ce problème, on peut préciser à Windows de décaler une partition
pour la faire démarrer en début d'une piste et ainsi être alignée pour les
opérations d'IO. Pour ce faire, on doit utiliser un utilitaire qui s'appelle
&lt;strong&gt;DISKPART.EXE&lt;/strong&gt;. On le trouve sous Vista et avec Windows
2003.&lt;/p&gt;
&lt;p&gt;A noter que Windows 2008 décale automatiquement et correctement les
partitions pour pallier le problème.&lt;/p&gt;
&lt;p&gt;Décalez bien...&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.djeepy1.net/post/2008/08/06/Alignement-des-disques#comment-form</comments>
      <wfw:comment>http://blog.djeepy1.net/post/2008/08/06/Alignement-des-disques#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.djeepy1.net/feed/rss2/comments/266797</wfw:commentRss>
      </item>
    
  <item>
    <title>Récupérer la taille d'une base de données</title>
    <link>http://blog.djeepy1.net/post/2008/08/03/Recuperer-la-taille-d-une-base-de-donnees</link>
    <guid isPermaLink="false">urn:md5:055c756afedb61b7f35c4532391fe2eb</guid>
    <pubDate>Sun, 03 Aug 2008 22:35:00 +0200</pubDate>
    <dc:creator>Djeepy1</dc:creator>
        <category>SQL Server</category>
        <category>TSQL</category>    
    <description>    &lt;p&gt;ll existe différentes techniques pour récupérer la taille d'une base de
données. Je vous en livre ici une que j'utilise. Elle se base sur la vue
système &lt;strong&gt;sys.database_files&lt;/strong&gt; qui nous renseigne sur les fichiers
de la base de données.&lt;/p&gt;
&lt;p style=&quot;BACKGROUND-COLOR: #eee&quot;&gt;&lt;code&gt;SELECT dbname, [ROWS]*8 as Donnees,
[LOG]*8 as Journaux&lt;br /&gt;
FROM&lt;br /&gt;
   (SELECT DB_NAME() as dbname, type_desc, size&lt;br /&gt;
   FROM sys.database_files) as p&lt;br /&gt;
PIVOT&lt;br /&gt;
   (SUM(size) FOR type_desc IN ([ROWS], [LOG])) as
pvt&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Grâce à la fonction PIVOT, j'aggrège les fichiers de données et journaux.
Vous noterez aussi que je multiplie la taille par 8 car la valeur de cette vue
correspond à un nombre de pages (8KB). Nous obtenons donc une taille en
kilo-octets.&lt;/p&gt;
&lt;p&gt;Pour connaître les tailles de toutes les bases de données d'un serveur, on
peut utiliser se script combiné avec la fonction système
&lt;strong&gt;sp_MSforeachDB&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;BACKGROUND-COLOR: #eee&quot;&gt;&lt;code&gt;CREATE TABLE #TMP_DB_Sizes (&lt;br /&gt;
  dbname sysname,&lt;br /&gt;
  datasizeinkb int,&lt;br /&gt;
  logsizeinkb int)&lt;br /&gt;
&lt;br /&gt;
EXECUTE sp_msforeachdb '&lt;br /&gt;
INSERT INTO #TMP_DB_Sizes&lt;br /&gt;
SELECT dbname, [ROWS]*8 as Donnees, [LOG]*8 as Journaux&lt;br /&gt;
FROM&lt;br /&gt;
   (SELECT ''[?]'' as dbname, type_desc, size&lt;br /&gt;
   FROM [?].sys.database_files) as p&lt;br /&gt;
PIVOT&lt;br /&gt;
   (SUM(size) FOR type_desc IN ([ROWS], [LOG])) as pvt'&lt;br /&gt;
&lt;br /&gt;
select * from #TMP_DB_Sizes&lt;br /&gt;
&lt;br /&gt;
drop table #TMP_DB_Sizes&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;J'utilise une table temporaire pour n'avoir qu'un jeu de résultat. Vous
noterez l'utilisation de '[?]' pour injecter le nom de la base en cours dans le
script&lt;/p&gt;
&lt;p&gt;Il existe bien évidemment d'autres solutions, venant de 2000 ou de 2005,
certaines apportant d'autres informations comme le pourcentage d'espace
inutilisé.&lt;/p&gt;
&lt;p&gt;Bon audit !!&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.djeepy1.net/post/2008/08/03/Recuperer-la-taille-d-une-base-de-donnees#comment-form</comments>
      <wfw:comment>http://blog.djeepy1.net/post/2008/08/03/Recuperer-la-taille-d-une-base-de-donnees#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.djeepy1.net/feed/rss2/comments/266104</wfw:commentRss>
      </item>
    
  <item>
    <title>Transactions imbriquées et SAVE TRANSACTION</title>
    <link>http://blog.djeepy1.net/post/2008/08/03/Transactions-imbriquees-et-SAVE-TRANSACTION</link>
    <guid isPermaLink="false">urn:md5:a0a6c9cb8fa935a667f5698496a163d7</guid>
    <pubDate>Sun, 03 Aug 2008 22:00:00 +0200</pubDate>
    <dc:creator>Djeepy1</dc:creator>
        <category>SQL Server</category>
        <category>TSQL</category>    
    <description>    &lt;p&gt;Lorsque l'on travaille avec des transactions imbriquées, on veut parfois
pour voir annuler une transaction intermédiaire mais garder les précédentes
opérations.&lt;/p&gt;
&lt;p&gt;En T-SQL, l'opération de ROLLBACK annule l'ensemble des niveaux de
transactions (scopes). Pour s'en convaincre, cette citation de la documentation
(ROLLBACK) :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;When nesting transactions, this same statement rolls back all inner
transactions to the &lt;strong&gt;outermost&lt;/strong&gt; BEGIN TRANSACTION
statement.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Le code suivant montre un exemple du problème. Le premier ROLLBACK annule
tout depuis la transaction A. La variable @@trancount permet de voir qu'il n'y
a plus de transaction en cours&lt;/p&gt;
&lt;p style=&quot;BACKGROUND-COLOR: #eee&quot;&gt;&lt;code&gt;BEGIN TRAN A&lt;br /&gt;
-------on démarre le premier niveau de transaction&lt;br /&gt;
&lt;br /&gt;
INSERT INTO [AdventureWorks].[dbo].[truc]([a],[b])&lt;br /&gt;
VALUES ('transaction A','transaction A')&lt;br /&gt;
&lt;br /&gt;
select @@trancount --returns 1&lt;br /&gt;
&lt;br /&gt;
BEGIN TRAN B&lt;br /&gt;
-------on démarre le deuxième niveau de transaction&lt;br /&gt;
&lt;br /&gt;
INSERT INTO [AdventureWorks].[dbo].[truc]([a], [b])&lt;br /&gt;
VALUES ('transaction B','transaction B')&lt;br /&gt;
&lt;br /&gt;
select @@trancount --returns 2&lt;br /&gt;
&lt;br /&gt;
ROLLBACK TRANSACTION B&lt;br /&gt;
--on annule la transaction intermédiaire&lt;br /&gt;
&lt;br /&gt;
select @@trancount&lt;br /&gt;
--returns 0 : plus de transaction en cours&lt;br /&gt;
&lt;br /&gt;
COMMIT TRAN A --génère une erreur&lt;br /&gt;
--Msg 6401, Level 16, State 1, Line 19&lt;br /&gt;
--Cannot roll back B. No transaction or savepoint of that name was
found.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Ce comportement ne nous permet donc pas d'annuler une partie du traitement
tout en gardant le reste. Heureusement, l'instruction SAVE TRANSACTION nous
permet de corriger le tir. SAVE TRANSACTION permet de mettre un point de
sauvegarde dans la transaction en cours pour pouvoir y revenir par la suite,
avec l'instruction ROLLBACK.&lt;/p&gt;
&lt;p&gt;Voici le script modifié. A la fin, la ligne A est insérée mais pas la B.&lt;/p&gt;
&lt;p style=&quot;BACKGROUND-COLOR: #eee&quot;&gt;&lt;code&gt;BEGIN TRAN A&lt;br /&gt;
-------on démarre le premier niveau de transaction&lt;br /&gt;
&lt;br /&gt;
INSERT INTO [AdventureWorks].[dbo].[truc]([a],[b])&lt;br /&gt;
VALUES ('transaction A','transaction A')&lt;br /&gt;
&lt;br /&gt;
select @@trancount --returns 1&lt;br /&gt;
&lt;br /&gt;
BEGIN TRAN B&lt;br /&gt;
-------on démarre le deuxième niveau de transaction&lt;br /&gt;
&lt;br /&gt;
SAVE TRANSACTION B_Saved&lt;br /&gt;
--on met un point de sauvegarde&lt;br /&gt;
&lt;br /&gt;
INSERT INTO [AdventureWorks].[dbo].[truc]([a], [b])&lt;br /&gt;
VALUES ('transaction B','transaction B')&lt;br /&gt;
&lt;br /&gt;
select @@trancount --returns 2&lt;br /&gt;
&lt;br /&gt;
ROLLBACK TRANSACTION B_Saved&lt;br /&gt;
&lt;br /&gt;
COMMIT B&lt;br /&gt;
--on force quand même un commit pour valider la transaction B&lt;br /&gt;
&lt;br /&gt;
select @@trancount --returns 1&lt;br /&gt;
&lt;br /&gt;
COMMIT TRAN A&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;A noter que l'on doit quand même faire un COMMIT de la transaction enfant
car le retour à un point de sauvegarde ne termine pas la transaction.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.djeepy1.net/post/2008/08/03/Transactions-imbriquees-et-SAVE-TRANSACTION#comment-form</comments>
      <wfw:comment>http://blog.djeepy1.net/post/2008/08/03/Transactions-imbriquees-et-SAVE-TRANSACTION#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.djeepy1.net/feed/rss2/comments/266092</wfw:commentRss>
      </item>
    
  <item>
    <title>MVP SQL Server</title>
    <link>http://blog.djeepy1.net/post/2008/07/06/MVP-SQL-Server</link>
    <guid isPermaLink="false">urn:md5:aee19ea13ac65a5769a60d7a6030170e</guid>
    <pubDate>Sun, 06 Jul 2008 23:11:00 +0200</pubDate>
    <dc:creator>Djeepy1</dc:creator>
        <category>Bewise</category>
        <category>Bewise</category>    
    <description>    &lt;p&gt;Je viens d'être nommé par Microsoft &lt;strong&gt;Most Valuable
Professional&lt;/strong&gt; (MVP) sur la technologie SQL Server. C'est une grande
nouvelle dans ma vie professionnelle mais aussi pour Bewise.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Les MVP (Most Valuable Professionals) Microsoft sont des leaders de
communautés techniques exceptionnels dans le monde entier qui sont récompensés
pour partager, de leur propre initiative, leurs grandes connaissances pratiques
dans les communautés techniques, qu'elles soient en ligne ou non. Les MVP
Microsoft sont des experts reconnus qui incarnent l'excellence des communautés
techniques et qui s'investissent largement auprès d'une communauté dans une
volonté d'aider les autres.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Cette reconnaissance est le fruit d'un an d'invetissement sous la forme
d'articles, de webcasts, de conférences et par ce blog. Biensur, cela ne
signifie pas que je vais relâcher la pression, bien au contraire.&lt;/p&gt;
&lt;p&gt;Vous pouvez consulter mon profil sur le site des MVP Microsoft à cette
adresse :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mvp.support.microsoft.com/profile/Jean-Pierre.Riehl&quot;&gt;&lt;strong&gt;https://mvp.support.microsoft.com/profile/Jean-Pierre.Riehl&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img title=&quot;MVP-moyen.png, juil 2008&quot; style=&quot;DISPLAY: block; MARGIN: 0 auto&quot; alt=&quot;&quot; src=&quot;http://blog.djeepy1.net/public/bandeaux/MVP-moyen.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Avec cette nomination, Bewise se voit dotée maintenant de 6 MVP dans
différents domaines dont 2 pour SQL Server. Bien que c'était le cas avant, cela
souligne nos compétences sur SQL Server tant au niveau de la gestion des
données qu'au niveau décisionnel.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.djeepy1.net/post/2008/07/06/MVP-SQL-Server#comment-form</comments>
      <wfw:comment>http://blog.djeepy1.net/post/2008/07/06/MVP-SQL-Server#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.djeepy1.net/feed/rss2/comments/257967</wfw:commentRss>
      </item>
    
  <item>
    <title>Comparaison SQL Server 2008 et Oracle 11g</title>
    <link>http://blog.djeepy1.net/post/2008/06/26/Comparaison-SQL-Server-2008-et-Oracle-11g</link>
    <guid isPermaLink="false">urn:md5:30a579e91b9df08d6fe4f49a4c5898fe</guid>
    <pubDate>Thu, 26 Jun 2008 01:05:00 +0200</pubDate>
    <dc:creator>Djeepy1</dc:creator>
        <category>SQL Server</category>
        <category>Sql Server 2008</category>    
    <description>    &lt;p&gt;Un très bon article forcément partisan mais qui permet de lister les atouts
de SQL Server 2008 (et pourquoi pas même 2005) par rapport à son grand rival
Oracle.&lt;/p&gt;
&lt;p&gt;Le livre blanc est accessible à cette adresse : &lt;a href=&quot;http://download.microsoft.com/download/6/9/d/69d1fea7-5b42-437a-b3ba-a4ad13e34ef6/SQL2008_vs_Oracle11g.docx&quot;&gt;
SQL Server 2008 Compared to Oracle Database 11g&lt;/a&gt; &lt;img style=&quot;FLOAT: right; MARGIN: 0 0 1em 1em&quot; height=&quot;75&quot; alt=&quot;&quot; src=&quot;http://blog.djeepy1.net/public/SQL/logo-header-sql08-dg.gif&quot; width=&quot;363&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Moi j'aime bien la comparaison des prix &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;-)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.djeepy1.net/post/2008/06/26/Comparaison-SQL-Server-2008-et-Oracle-11g#comment-form</comments>
      <wfw:comment>http://blog.djeepy1.net/post/2008/06/26/Comparaison-SQL-Server-2008-et-Oracle-11g#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.djeepy1.net/feed/rss2/comments/253914</wfw:commentRss>
      </item>
    
  <item>
    <title>Webcasts des sessions SQL Server disponibles</title>
    <link>http://blog.djeepy1.net/post/2008/06/19/Webcasts-des-sessions-SQL-Server-disponibles</link>
    <guid isPermaLink="false">urn:md5:87c1cdcf4aebe681c58cf896e882eacd</guid>
    <pubDate>Thu, 19 Jun 2008 18:57:00 +0200</pubDate>
    <dc:creator>Djeepy1</dc:creator>
        <category>Bewise</category>
            
    <description>    &lt;div class=&quot;ExternalClassAF3CC6DB1FB84EF1859ED1F4EC5A08AC&quot;&gt;
&lt;div&gt;Tout n’est pas encore dans la boîte mais les premiers Webcasts des
sessions SQL Server sont en ligne. Au programme deux séries sur les
nouveautés du moteur relationnel et les nouveautés en matière de décisionnel de
SQL Server 2008.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 0cm 0cm 0&quot;&gt;Pour visionner ces Webcasts,
suivez ce lien :&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 0cm 0cm 0&quot;&gt; &lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 0cm 0cm 0; text-align: center&quot;&gt;&lt;a href=&quot;http://www.bewise.fr/fr-FR/business/DGD/Pages/BDC2008-Webcasts.aspx&quot;&gt;&lt;strong&gt;Webcasts
Décisionnel &amp;amp; Gestion des Données&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 0cm 0cm 0&quot;&gt; &lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 0cm 0cm 0&quot;&gt;N’hésitez pas à poser des
questions aux consultants Bewise sur les sujets traités ou tout autre points de
SQL Server 2008.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 0cm 0cm 0&quot;&gt; &lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 0cm 0cm 0&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://www.bewise.fr/fr-FR/PublishingImages/BDC-Sessions.jpg&quot; /&gt;&lt;/p&gt;
&lt;div&gt; &lt;/div&gt;
&lt;/div&gt;</description>
    
    
    
          <comments>http://blog.djeepy1.net/post/2008/06/19/Webcasts-des-sessions-SQL-Server-disponibles#comment-form</comments>
      <wfw:comment>http://blog.djeepy1.net/post/2008/06/19/Webcasts-des-sessions-SQL-Server-disponibles#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.djeepy1.net/feed/rss2/comments/252352</wfw:commentRss>
      </item>
    
  <item>
    <title>De belles références</title>
    <link>http://blog.djeepy1.net/post/2008/06/12/De-belles-references</link>
    <guid isPermaLink="false">urn:md5:64599be2e02f62bee32ca7093cc0fa80</guid>
    <pubDate>Thu, 12 Jun 2008 23:04:00 +0200</pubDate>
    <dc:creator>Djeepy1</dc:creator>
        <category>SQL Server</category>
            
    <description>    &lt;p&gt;Non, ce n'est pas un jeu de mot pour présenter une nouvelle Assembly. Je
parle ici de références clients qui utilisent avec succès SQL Server.&lt;br /&gt;
Le tout présenté dans une petite application Silverlight.&lt;/p&gt;
&lt;p&gt;Le site est ici : &lt;a href=&quot;http://www.microsoft.com/france/sql/ilslontfait/&quot;&gt;http://www.microsoft.com/france/sql/ilslontfait/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://blog.djeepy1.net/public/SQL/.ilslontfait_m.jpg&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Les références sont :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;JCDecaux (plus connu sous le nom de Velib') : 400 000 locations par
jour&lt;/li&gt;
&lt;li&gt;Premier Bankcard : un datawarehouse de 20 To (27 milliards de lignes)&lt;/li&gt;
&lt;li&gt;AFP : 4000 utilisateurs en simultanés&lt;/li&gt;
&lt;li&gt;Xiti : 17 milliards d'enregistrements par mois&lt;/li&gt;
&lt;li&gt;AXA : Business Intelligence temps réel&lt;/li&gt;
&lt;li&gt;Nancy-Université : réduction des coûts de SAP&lt;/li&gt;
&lt;/ul&gt;</description>
    
    
    
          <comments>http://blog.djeepy1.net/post/2008/06/12/De-belles-references#comment-form</comments>
      <wfw:comment>http://blog.djeepy1.net/post/2008/06/12/De-belles-references#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.djeepy1.net/feed/rss2/comments/250418</wfw:commentRss>
      </item>
    
  <item>
    <title>SQL Server 2008 Web Edition</title>
    <link>http://blog.djeepy1.net/post/2008/06/09/SQL-Server-2008-Web-Edition</link>
    <guid isPermaLink="false">urn:md5:e641d14e13ae4fac3f8eda07fe06ab71</guid>
    <pubDate>Mon, 09 Jun 2008 15:17:00 +0200</pubDate>
    <dc:creator>Djeepy1</dc:creator>
        <category>SQL Server</category>
        <category>SQLServer 2008</category>    
    <description>    &lt;p&gt;Tellement excité à l'idée d'installer la RC0 de SQL Server 2008, j'ai écarté
un détail pourtant visible dès la page de téléchargement...&lt;/p&gt;
&lt;p&gt;Il y a une nouvelle édition de SQL Server qui complète la gamme :&lt;/p&gt;
&lt;h4 style=&quot;TEXT-ALIGN: center&quot;&gt;SQL Server 2008 Web Edition&lt;/h4&gt;
&lt;p&gt;En discutant avec différents camarades de jeu, nous nous sommes posés cette
simple question : &lt;ins&gt;mais qu'est ce que c'est ???&lt;/ins&gt;&lt;/p&gt;
&lt;p&gt;Aux premières informations, ce serait une édition spéciale pour
les hébergeurs pour faire baisser les prix du hosting basé sur SQL Server.
Bien qûr, je reste à l'affût dès que j'en sais plus..&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Plus d'infos : &lt;a href=&quot;http://mshostingsummit08.spaces.live.com/blog/cns!4308FE7290C0AF4!195.entry&quot;&gt;http://mshostingsummit08.spaces.live.com/blog/cns!4308FE7290C0AF4!195.entry&lt;/a&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.djeepy1.net/post/2008/06/09/SQL-Server-2008-Web-Edition#comment-form</comments>
      <wfw:comment>http://blog.djeepy1.net/post/2008/06/09/SQL-Server-2008-Web-Edition#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.djeepy1.net/feed/rss2/comments/249208</wfw:commentRss>
      </item>
    
  <item>
    <title>Premiers pas dans l'espace</title>
    <link>http://blog.djeepy1.net/post/2008/06/09/Premiers-pas-dans-lespace</link>
    <guid isPermaLink="false">urn:md5:c0b98585146b80168b95b7cb1719d865</guid>
    <pubDate>Mon, 09 Jun 2008 00:24:00 +0200</pubDate>
    <dc:creator>Djeepy1</dc:creator>
        <category>SQL Server</category>
            
    <description>    &lt;p&gt;Il y a plusieurs semaines, j'ai terminé un article d'introduction aux
fonctionnalités spatiales de SQL Server 2008. Voici quelques extraits pour vous
mettre en appétit. Et pour aller directement sur l'article complet :&lt;/p&gt;
&lt;p&gt;      &lt;a href=&quot;http://www.bewise.fr/fr-FR/technos/Pages/DetailArticle.aspx?ID=107&quot;&gt;Premiers
pas dans l'espace (&lt;/a&gt;&lt;a href=&quot;http://www.bewise.fr/&quot;&gt;www.bewise.fr&lt;/a&gt;)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;ins&gt;Introduction&lt;/ins&gt;&lt;/strong&gt;&lt;br /&gt;
Cet article se veut une première introduction aux nouveaux types spatiaux de
SQL Server 2008. Je vais vous les présenter et nous les manipulerons. Nous
aborderons aussi leur utilisation avec du code .NET. Enfin, nous utiliserons
Virtual Earth pour présenter les données géographiques mais nous ne rentrerons
pas dans le détail de cette technologie.&lt;/p&gt;
&lt;p&gt;[...]&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;ins&gt;Premières requêtes&lt;br /&gt;&lt;/ins&gt;&lt;/strong&gt;Les 2 nouveaux types
proposent toute une série de méthodes pour manipuler des données spatiales.
Aire de la surface, surface circonscrite, inscrite, périmètre, intersection,
union, barycentre… Le but n’est pas de vous les décrire ici une à une. Nous
allons toutefois en utiliser quelques unes dans des requêtes simples mais
indispensables dans une application gérant des types spatiaux.&lt;/p&gt;
&lt;p&gt;Tout d’abord, voyons comment retrouver les points contenus dans une zone
donnée. Comme cas concret, on peut imaginer une recherche d’appartements ou
d’hôtels dans une zone définie. Pour cela, nous avons plusieurs possibilités
avec les méthodes STContains, STIntersects et STWithin. La méthode STIntersects
serra utilisée pour le type geography car les 2 autres n’existent que sur le
type geometry. Voici le code T-SQL permettant cette requête :&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN-BOTTOM: 0; LINE-HEIGHT: normal&quot;&gt;&lt;span style=&quot;FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'&quot;&gt;Declare&lt;/span&gt;
&lt;span style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'&quot;&gt;@zone &lt;span style=&quot;COLOR: blue&quot;&gt;geography&lt;/span&gt; &lt;span style=&quot;COLOR: gray&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;COLOR: blue&quot;&gt;geography&lt;/span&gt;&lt;span style=&quot;COLOR: gray&quot;&gt;::&lt;/span&gt;STPolyFromText&lt;span style=&quot;COLOR: gray&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;COLOR: red&quot;&gt;'POLYGON((43 3.2, 43 3.5, 43.2
3))'&lt;span style=&quot;COLOR: gray&quot;&gt;,&lt;/span&gt; 4326&lt;span style=&quot;COLOR: gray&quot;&gt;)&lt;br /&gt;
&lt;br /&gt;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'&quot;&gt;Select&lt;/span&gt; &lt;span lang=&quot;EN-US&quot; style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'&quot;&gt;&lt;span style=&quot;COLOR: gray&quot;&gt;*&lt;/span&gt;&lt;br /&gt;&lt;/span&gt; &lt;span lang=&quot;EN-US&quot; style=&quot;FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'&quot;&gt;From&lt;/span&gt; &lt;span lang=&quot;EN-US&quot; style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'&quot;&gt;CustomerPlaces&lt;br /&gt;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'&quot;&gt;Where&lt;/span&gt; &lt;span lang=&quot;EN-US&quot; style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'&quot;&gt;@zone&lt;span style=&quot;COLOR: gray&quot;&gt;.&lt;/span&gt;STIntersects&lt;span style=&quot;COLOR: gray&quot;&gt;(&lt;/span&gt;CustomerPlaces&lt;span style=&quot;COLOR: gray&quot;&gt;.&lt;/span&gt;Localization&lt;span style=&quot;COLOR: gray&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;COLOR: gray&quot;&gt;=&lt;/span&gt; 1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;[...]&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;ins&gt;ADO.NET&lt;br /&gt;&lt;/ins&gt;&lt;/strong&gt;Après avoir vu un aperçu des types
spatiaux et de leur utilisation dans SQL dans Management Studio, intéressons
nous à la manipulation depuis une application .NET.&lt;/p&gt;
&lt;p&gt;[...]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Et comme d'habitude, n'hésitez pas pour les questions...&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.djeepy1.net/post/2008/06/09/Premiers-pas-dans-lespace#comment-form</comments>
      <wfw:comment>http://blog.djeepy1.net/post/2008/06/09/Premiers-pas-dans-lespace#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.djeepy1.net/feed/rss2/comments/249086</wfw:commentRss>
      </item>
    
  <item>
    <title>SQL Server 2008 RC0</title>
    <link>http://blog.djeepy1.net/post/2008/06/09/SQL-Server-2008-RC0</link>
    <guid isPermaLink="false">urn:md5:41def92f01c609eeb8d2df177845762d</guid>
    <pubDate>Mon, 09 Jun 2008 00:07:00 +0200</pubDate>
    <dc:creator>Djeepy1</dc:creator>
        <category>SQL Server</category>
            
    <description>    &lt;p&gt;On y est presque... Ce n'est pas encore la RTM mais on s'en approche. La
1ère Release Candidate (RC0) de SQL Server 2008 est disponible pour les abonnés
MSDN et Technet. Cette version a &lt;em&gt;normalement&lt;/em&gt; le même périmètre que la
version finale.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://blog.djeepy1.net/public/SQL/.rc0_m.jpg&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Il y a un seul Setup pour toutes les versions et le téléchargement se passe
ici : &lt;a href=&quot;https://msdn.microsoft.com/en-us/subscriptions/securedownloads/details/default.aspx?pm=pid%3a334%7CLk:t&quot;&gt;
https://msdn.microsoft.com/en-us/subscriptions/securedownloads/details/default.aspx?pm=pid%3a334%7CLk:t&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Je suis en pleine installation, en mode side-by-side. Je ferai des retours
réguliers sur cette version quasi-finale.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.djeepy1.net/post/2008/06/09/SQL-Server-2008-RC0#comment-form</comments>
      <wfw:comment>http://blog.djeepy1.net/post/2008/06/09/SQL-Server-2008-RC0#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.djeepy1.net/feed/rss2/comments/249076</wfw:commentRss>
      </item>
    
  <item>
    <title>Retour de vacances</title>
    <link>http://blog.djeepy1.net/post/2008/06/08/Retour-de-vacances</link>
    <guid isPermaLink="false">urn:md5:d0e2f9c8bee44be651150a7da62b0d5e</guid>
    <pubDate>Sun, 08 Jun 2008 23:41:00 +0200</pubDate>
    <dc:creator>Djeepy1</dc:creator>
        <category>Perso</category>
            
    <description>    &lt;p&gt;Me voila de retour aux affaires après 2 bonnes semaines de vacances. Les
dernières semaines ont été intensives avec des projets super intéressants et
pas mal de consulting.&lt;/p&gt;
&lt;p&gt;Pour recharger les batteries, je suis allé m'exiler sur une île écossaise,
Islay, pour un festival local autour des distilleries. Cela me permet de faire
une petite promo pour mon club de dégustation de Single Malt sur Toulouse : Les
Passionnés du Malt (&lt;a href=&quot;http://passionnesdumalt.free.fr/&quot;&gt;http://passionnesdumalt.free.fr&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Nous avons eu un temps magnifique, ce qui est rare dans cette région, ce qui
a rendu le voyage magique.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.djeepy1.net/public/perso/Feis_Isle_2008_057.JPG&quot;&gt;&lt;img border=&quot;0&quot; alt=&quot;&quot; src=&quot;http://blog.djeepy1.net/public/perso/.Feis_Isle_2008_057_m.jpg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Je suis parti un peu comme un voleur donc je m'excuse pour les lecteurs
assidus qui auraient pu s'inquiéter :-).&lt;/p&gt;
&lt;p&gt;Pour me rattraper, le programme des prochains posts est le suivant :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;le debrief de la BDC 2008 que j'avais promis, avec des webcasts et des
sources&lt;/li&gt;
&lt;li&gt;le MSDN Technet Tour à Marseille&lt;/li&gt;
&lt;li&gt;un article sur le spatial que j'ai publié avant de partir en congés (sur
&lt;a href=&quot;http://www.bewise.fr/&quot;&gt;http://www.bewise.fr&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;la RC0 de SQL Server 2008 qui est sortie ce week-end&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Voila, c'est reparti sur les chapeaux de roue !!&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.djeepy1.net/post/2008/06/08/Retour-de-vacances#comment-form</comments>
      <wfw:comment>http://blog.djeepy1.net/post/2008/06/08/Retour-de-vacances#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.djeepy1.net/feed/rss2/comments/249070</wfw:commentRss>
      </item>
    
</channel>
</rss>