Archive pour mars 2008

Reporting Services SP2 sur Windows SP1: Erreur 401

28 mars 2008

Un post pour relayer un problème (et sa résolution) que j’ai rencontré chez un client récemment.

Pour résoudre quelques bugs que nous avions sur Reporting Services (rsInternalError sur un drill-through, mauvais raffraichissement des données et de la Document Map au changement de paramètres), je décide [enfin] de passer le Service Pack 2 de SQL Server 2005 sur la production.

Après l’installation, tout semble fonctionner correctement sauf une application qui attaque le Web Service de Reporting Services (reportservice2005.asmx). Chaque appelle se solde par une erreur d’authentification (HTTP 401). A noter que le site web qui attaque le Web Service est sur la même machine.

C’est là que je m’aperçois que le serveur est loin d’être mis à jour régulièrement puisque Windows est encore en Service Pack 1. Bien convaincu, d’après différentes discussions dans les newsgroups, que le problème vient du système obsolescent, j’allais planifier une coupure pour la mise à jour quand mon collègue Nicolas a trouvé LE patch de derrière les fagots :

dans la base de registre, ajouter la clé DisableLoopbackCheck (DWORD) avec une valeur de 1 dans HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa

Bon, cela ne me dispense pas de passer les patchs sur Windows mais ça nous a permis de corriger rapidement (merci Nico).

Voici la KB correspondante :
http://support.microsoft.com/default.aspx/kb/896861/en-us

De l’instruction COALESCE

27 mars 2008

Ce petit post pour faire découvrir ou, je l’espère,  redécouvrir, une instruction T-SQL : COALESCE. La définition de cette instruction est :

retourne la première valeur non nulle.

Quand je parle de cette instruction que j’utilise depuis 2001, on me dit toujours : ben t’as qu’à utiliser ISNULL… Ce n’est pas faux car ISNULL fait la même chose mais uniquement entre 2 valeurs.

Récemment, je suis tombé sur ce code T-SQL, assez illisible : 

ISNULL(matable.Col1, ISNULL(maTable.col2, ISNULL(DefTable.Col1, @ValeurParDefaut))

En "correction", j'ai proposé :

COALESCE(matable.Col1, maTable.col2, DefTable.Col1, @ValeurParDefaut)

Voila, ça fait la même chose mais c'est plus propre et plus simple à maintenir.

TechDays 2008 – Les sessions en Webcast

25 mars 2008

Comme l’an passé, vous pouvez revivre l’expérience des TechDays via les Webcasts des sessions. A ma connaissance, toutes les sessions (environ 300) ont été webcastées. Ca va en faire des heures devant l’écran…

J’en profite pour faire de la promo pour ma session, co-animé avec Sébastien Pertus, sur les nouveautés en termes de stockage avec FileStream et Remote BLOB, les nouveautés de la recherche Full-Text et les nouveautés XML dans SQL Server 2008. Vous pouvez la visionnez à l’adresse suivante :

http://www.microsoft.com/france/vision/mstechdays08/WebcastTechNet.aspx?EID=fb17a388-7d57-4339-bd35-d357e7090600

On bafouille un peu les 5 premières minutes mais une fois dans la technique… bref, on va dire que c’est parceque ce sont les premiers TechDays ;-)

Un autre lien utile, l’accès direct aux Webcasts du parcours SQL Server 2008 : http://www.microsoft.com/france/vision/mstechdays08/Parcours.aspx?Oid=64379656-8b55-4158-a660-f840e29290c9

Et puis, rappelons le, si vous préférez échanger en direct avec des spécialistes, l’équipe DGD, quelques experts Microsoft et les consultants Bewise vous attendent tous à la Bewise Developer Conference à Toulouse le 10 avril.

UPDATE : j’oubliais, les sources de nos démos sont ICI

BDC 2008 – Les sessions DGD

23 mars 2008

La BDC 2008 fait la part belle au domaine métier de Bewise Décisionnel & Gestion de Données (appelé dans le langage courant DGD). En effet, DGD aura le plaisir de vous présenter 2 sessions, de vous accueillir sur 4 espaces de démonstration avec pas moins de 6 spécialistes et accompagnera aussi techniquement les speakers des pleinières.

Du coté des sesssions, au programme :

Les nouveautés de SQL Server 2008

Cette session se place au coeur du moteur relationnel de SQL Server 2008. On y verra notamment les nouveaux types (spatial, geography, hierarchyID, etc.), les nouveaux modes de stockage (FileStream, RemoteBlob), les améliorations du langages T-SQL, la nouvelle recherche Full-Text (iFTS), les nouveautés pour l’administration (Policy Framework, Resource Governor) et bien d’autes nouveautés encore. 
Elle sera présentée par Sébastien Pertus (l’auteur de DotMim) et Julien Duprat.

Les solutions décisionnelles avec SQL Server 2008  

Cette session se focalise sur les fonctionnalités décisionnelles de SQL Server 2008. En plus de revenir sur les solutions qu’offre SQL Server en matière de Business Intelligence, seront présentées les nouveautés de Integration Services, les nouveautés de Analysis Services, la nouvelle architecture de Reporting Services et nous concluerons sur une méthode originale de faire de la restitution de données géographiques avec Virtual Earth.
Elle sera présentée par votre serviteur accompagné par Philippe Lonvaud.

Du coté des espaces de démonstration, venez découvrir :

Biztalk 2006 R2, le serveur de gestion de processus

Eric Ortiz, chef de produit Biztalk Server chez Microsoft, vous attend pour vous présenter Biztalk et les nouveautés de la version R2

Microsoft Business Intelligence

Philippe Blondet, chef de produit Performance Point chez Microsoft, vous parlera de l’offre de Microsoft sur le sujet et particulièrement de PerformancePoint Server avec les tableaux de bords, l’analyse avancée et la planification financière.

SQL Server 2008 et la mobilité

Pascal Belaud, évangéliste Microsoft qu’on ne présente plus, sera présent pour vous montrer toutes les solutions mobiles et déconnectées qu’offre SQL Server 2008.

Select * From [SQL Server 2008]

Un titre original pour l’espace de démonstration consacré à SQL Server dans sa globalité. Venez rejoindre 3 consultants de Bewise (Sébastien Pertus, Philippe Lonvaud et moi-même) pour découvrir plus en détail SQL Server et les nouveautés de sa prochaine édition.

 

Un beau programme et une bonne présence du domaine métier DGD à la Bewise Developer Conference. Mais la BDC 2008, c’est aussi toutes les nouvelles technologies Microsoft comme Silverlight 2.0, Sharepoint, Team System 2008, .NET 3.5, etc.

Il vous reste quelques jours pour vous INSCRIRE… Attention, il reste peu de places pour les pleinières.

Intellisense très lente dans Visual Studio 2008

21 mars 2008

Par deux fois chez des clients je me suis retrouvé avec l’intellisense de Visual Studio 2008 qui se met à ralentir au point de stopper complètement ma productivité.

J’ai d’abord cru que ce problème de performance venait de mon OS non-déterministe (ie. Vista) mais non, le problème venait bien de Visual Studio.

Le problème est apparu dans les cas suivants :

  • utilisation d’un “gros” Dataset typé
  • utilisation d’une grosse référence de Web Service (ReportService2006.asmx vous connaissez ?)

Après quelques investigations, j’ai trouvé d’autres personnes avec le même problème d’intellisense que moi. C’est bien un bug de Visual Studio 2008; la preuve ici http://support.microsoft.com/default.aspx/kb/946344/en-us et ici http://www.chadgreen.com/post/2008/02/Visual-Studio-2008-Performance-Issues.aspx.

Heureusemet, un hotfix est disponible :

https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=11026&wa=wsignin1.0

Voila, mes problèmes sont maintenant résolus. Et j’ai pu rassurer mes clients sur le choix de Visual Studio 2008 :-)

Migrer un cube Analysis Services 2000 vers 2005

16 mars 2008

Le propos de ce billet n’est pas de fournir un tutoriel complet sur la migration de cubes entre AS 2000 et 2005 mais juste de présenter les méthodes pour le faire. Je ne présenterai que les points d’entrée, je ne rentrerai pas dans le détails des incompatibilités entre les versions.

Méthode 1 : In-place upgrade

C’est la méthode qui paraît la plus simple mais qui pour moi s’avère la plus risquée. En effet, j’ai toujours l’impression de tout miser sur un coup de dé.

J’appelle cette méthode la Next->Next->Next, car c’est tout simplement le setup d’installation de SQL Server 2005 qui va effectuer la migration du cube en 2005 et faire la bascule en redémarrant le service. Le processus de migration est équivalent à la méthode présentée ci-dessous sauf que tout est automatisé. La coupure de service est donc assez réduite (hormis le fait qu’il faille refaire une process du cube).

Avantages : pas de modification des clients, courte coupure de service
Inconvénients : risque d’incompatibilités

PS : utilisez l’Upgrade Advisor de SQL Server 2005 pour avoir un aperçu des problèmes que vous pourriez rencontrer.

Méthode 2 : la migration

Contrairement à ce qu’on pourrait penser, la migration n’est pas une méthode compliquée. On ne doit pas refaire complètement ses cubes. Un assistant livré avec Analysis Services 2005 permet de monter un cube à partir des méta-données d’un cube sous 2000.

Cet assistant s’appelle le MigrationWizard.exe et se trouve dans %programfiles%\Microsoft SQL Server\90\Tools\Binn\VSShell\Common7\IDE.
On y accède aussi dans Management Studio avec un clic-droit sur l’instance Analysis Service 2005 comme présenté dans ce screenshot.

L’assistant est très intuitif et le résultat est très bien (mis à part les incompatibilités connues).
Il ne reste plus qu’à ouvrir notre nouveau cube dans Business Intelligence Development Studio (oui, je sais, Visual Studio) pour apporter si besoin des petits correctifs et le tour est joué.

Avantages : simplicité, on maîtrise le passage entre les versions
Inconvénients : changement de la chaîne de connexion des clients

 

Conclusion

Le choix de la méthode dépend de nombreux facteurs comme les utilisateurs et l’utilisation qu’ils font du cube, les données sources, la volumétrie, la conception initiale sous 2000, les incompatibilités remontées par l’Upgrade Advisor… Dans tous les cas, une migration se planifie et se prépare : audit, test, test, test, migration !

Il y a tout dans la BDC 2008

13 mars 2008

SQL Server 2008, Virtual Earth, Linq, Silverlight 2.0, MOSS, Nova, Team System, WPF, Performance Point, Sync Services, … Toutes les nouvelles technologies se trouvent à la Bewise Developer Conference.

Et niveau marketing, l’équipe commerciale de Bewise s’est surpassée. Séquence…autopromo.

BDC 2008 - Les coulisses 3
BDC 2008 – Les coulisses 3

Toutes les coulisses : http://www.bewise.fr/bdc2008/actualite.aspx

Bewise Developer Conference 2008 : c’est parti !!

11 mars 2008

Et voila, la nouvelle édition de la Bewise Developer Conference est sur les rails. C’est l’événement informatique de référence autour des technos Microsoft dans tout le sud-ouest et plus particulièrement à Toulouse.

Reservez dès maintenant la date du 10 avril dans vos agendas pour venir voir toute l’équipe de Bewise assistée de quelques speakers Microsoft.
Toutes les informations son sur le site de la Bewise : http://www.bewise.fr/bdc2008/

En plus, la BDC aura lieu cette année dans un lieu toulousain mythique : le stade Ernest Wallon. Inscrivez vous dès maintenant.

Ne faites pas confiance au designer de requête

9 mars 2008

Chez presque tous mes clients, tout le monde utilise le Query Designer pour écrire un SELECT en T-SQL, que ce soit pour faire une vue, une simple recherche ou encore pour créer un Dataset dans Reporting Services. Nombre de mes collègues utilise cet outil également.

A chaque fois je fais la même remarque qui me fait passer pour un vieux con has been :

Evitez d’utiliser le designer de requête ou bien refaite une passe sur le T-SQL généré.

Mes arguments étant les suivants : ordre des jointures, lisibilité du code généré et une expérience avec la bête ayant développée ma mauvaise impression à son égard.

Mais depuis SQL Server 2005, j’ai dû souvent avaler mon chapeau car la qualité de l’optimiseur de requêtes faisait passer mon argumentaire pour un discours de bonimenteur.

Mais j’ai enfin trouvé un cas reproductible où le designer de requête ne ramène pas le résultat escompté et où l’optimiseur de requêtes ne peut pas corriger le tir. En plus, pour appuyer mon discours, je tiens à préciser que cette imprécision du designer a conduit à des erreurs dans des rapports de synthèse.

Explication de texte :

Nous allons travailler avec AdventureWorks. Mon besoin est le suivant : je veux récupérer les produits bleus et, si j’ai l’info, afficher leur prix en juillet 2002. Il y a 26 produits bleus dans la table Product.

 Voici la requête fournie par l’éditeur de requête :

SELECT Production.Product.ProductNumber, Production.Product.Name, Production.ProductCostHistory.StandardCost AS Cost200112
FROM Production.Product LEFT OUTER JOIN
Production.ProductCostHistory ON Production.Product.ProductID = Production.ProductCostHistory.ProductI
WHERE (Production.ProductCostHistory.StartDate = CONVERT(DATETIME, '2002-07-01 00:00:00', 102)) AND
(Production.Product.Color = N'Blue')

Et en résultat, je n’ai qu’un seul produit bleu au lieu de 26. Le problème est que le designer ajoute la condition de la date à l’ensemble du jeu de résultat, or s’il n’y a pas de prix disponible à la date demandée, la valeur sera NULL à cause de la jointure externe.

Pour corriger le problème, il faut remonter la condition sur la jointure pour filter la table ProductCostHistory avant de faire la jointure.

ON Production.Product.ProductID = Production.ProductCostHistory.ProductID AND
(Production.ProductCostHistory.StartDate = CONVERT(DATETIME, '2002-07-01 00:00:00', 102))

 Ainsi, le LEFT JOIN est correctement interprété à l’exécution et on obtient bien les 26 produits bleus. On utilisait cette  technique pour optimiser sous SQL Server 2000 car il arrivait que l’optimiseur ordonne mal les opérations dans le plan d’exécution.

Si on réouvre la requête avec l’éditeur, il représente bien la condition mais de façon assez… bizarre. D’ailleurs, je ne saurais même pas le refaire à la souris. 

Aussi, le designer écrit les tables de la clause FROM dans l’ordre où vous posez les tables sur la surface de travail, ce qui lui fait mettre un RIGHT JOIN au lieu d’une lecture plus naturelle avec un LEFT JOIN. Ceci entraîne une maintenance plus complexe, déjà que se plonger dans une grosse requête n’est pas forcément trivial…

Autre problème que j’ai rencontré quelques fois, quand il y a trop de jointures, LEFT, RIGHT et INNER, en essayant de les mettre bout à bout il arrive qu’il se rate sur le résultat global (bien souvent avec des données non remontées) :-( .

En conclusion, même si le designer vous fait gagner du temps de rédaction, pensez à vérifier les jointures (ordre, condition) et en particulier les jointures externes.

Connection String et Application Name

6 mars 2008

Je voudrais passer un message à tous les développeurs. Dans tous vos développements, lorsque vous avez des chaînes de connexion…

utilisez la propriété “application name” !!

 

En effet, quand on profile une base de données pour auditer les performances ou pour recenser les utilisateurs en vue d’un migration par exemple, cette information est importante pour voir plus facilement qui fait quoi. Sinon, vous verrez apparaître dans vos traces l’application .NET SqlClient Data Provider qui est tout simplement la valeur par défaut de ADO.NET.

Pour pallier à cela, voilà à quoi doit ressembler votre chaîne de connexion :

Data Source=SERVER;Initial Catalog=DATABASE;Integrated Security=SSPI;Application Name=www.bewise.fr

Merci d’avance pour les gens qui travaillent sur la BD.


Suivre

Get every new post delivered to your Inbox.

Joignez-vous à 203 followers