Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

SQL Server : Copier les entêtes de colonnes depuis la grille de Management Studio

Avez vous déjà voulu avoir les entêtes de colonnes lorsque vous faites un copier / coller depuis la grille de résultat de Management Studio ?

Personnellement un certain nombre de fois et à chaque fois je rageais de ne pouvoir avoir la entêtes des colonnes en mode grille. En fait j'ai découvert hier qu'il y a une option dans ce même Management Studio qui permet de réaliser la copie avec ces entêtes :

Avec cette option cochée le tour est joué. Merci à Vincent Guerci de cette astuce très utile.

Bonne copie...

Posté le par christian | 2 commentaire(s)
Classé sous : ,

SQL Server : Envoyer une sauvegarde vers le périphérique NUL

Vous allez voir ici une méthode qui permet de sauvegarder une base de données complète ou les journaux de transaction et d’envoyer cette sauvegarde vers : rien. En fait j’ai eu besoin de cela car je n’avais besoin exclusivement des journaux de transaction d’une base de données (de la sauvegarde de ces journaux aussi), mais pour permettre de réaliser la sauvegarde de ces derniers j’ai besoin tout d’abord de faire une sauvegarde complète.

 

Je l’avoue c’est un cas un peu particulier et vous n’aurez pas à réaliser la plupart du temps. Même si cela peut être un palliatif à la disparition de TRUNCATE_ONLY / NO_LOG (http://blogs.codes-sources.com/christian/archive/2008/02/28/sql-server-2008-un-point-bloquant-pour-une-mise-jour-depuis-2005.aspx) dans SQL Server 2008. Même si la sauvegarde des journaux à de nombreux avantages sur lesquels je ne reviendrais pas ici.

 

On s’appuie sur un périphérique particulier qui s’appelle « NUL » (eh oui, un seul L) qui ne débouche tout simplement nulle part !

 

-- Pour une sauvegarde de données

BACKUP DATABASE MaBase TO DISK = 'NUL'

-- ou pour les journaux

BACKUP LOG MaBase TO DISK = 'NUL'

 

Une fois ces commandes exécutées (l’une ou l’autre) vous aurez virtuellement sauvegardé des données ou des journaux pour SQL Server, mais envoyé le tout vers le néant. Attention à nouveau au fait que SQL Server va se souvenir de cette sauvegarde et risque de vous demander le support correspondant lors d’une restauration. N’utilisez cette technique que pour de la maintenance exceptionnelle.

 

Bonne sauvegarde…

Posté le par christian | 0 commentaire(s)
Classé sous : ,

Séminaire : Apprenez en plus sur SQL Server 2005 et 2008 avec les séminaires TechNet

Si vous êtes sur Paris les 5 et 17 juin prochain, vous pourrez que assistez à 2 séminaires sur SQL Server 2005 et 2008 que j'aurais le plaisir d'animer. Ils se dérouleront rue de l'université dans le centre de conférence Microsoft.

Les thèmes et les liens pour vous y inscrire...

17 juin 2008 après midi
Découverte de la plateforme SQL Server : versions gratuites & payantes, administration, développement et décisionnel  :
http://www.microsoft.com/france/events/event.aspx?EventID=1032372716

5 juin 2008 après midi
Dernières évolutions de SQL Server, apports des versions 2005 et 2008 :
http://www.microsoft.com/france/events/event.aspx?EventID=1032372719

J'espère vous voir nombreux.

Plus de détails sur les séminaires TechNet se déroulant en cette période:
http://technet.microsoft.com/fr-fr/bb498011.aspx

Bonne inscription...

Posté le par christian | 0 commentaire(s)
Classé sous :

SQL Server : Indexer les documents Office 2007 et les PDF

Je viens de découvrir 2 téléchargements qui datent un peu, mais utile dans le contexte de la recherche Full Text (texte intégral) dans les produits Microsoft.

Les iFilter sont des composants servant à déchiffrer le contenu de certains fichiers stockés dans le cas de SQL Server à même les champs de type binaire.

Microsoft met à disposition les composants permettant de déchiffrer le contenu des documents Office 2007, les fichiers ZIP. Le téléchargement est disponible ici en 32 bits et 64 bits pour SQL Server 2005 et 2008 :
http://www.microsoft.com/downloads/details.aspx?FamilyID=60c92a37-719c-4077-b5c6-cac34f4227cc&DisplayLang=en

De plus Adobe a mis à disposition un article dans sa base de support pour utiliser son iFilter pour les documents PDF en 64 bits :
ttp://labs.adobe.com/wiki/index.php/PDF_iFilter_8_-_64-bit_Support

Sinon vous pouvez vous retourner vers le iFilter de Foxit dont j'avais parlé qui est nativement 64 bits :
http://blogs.codes-sources.com/christian/archive/2007/07/18/sql-server-et-autres-ifilter-pour-le-pdf-en-64-bits.aspx

Bon téléchargement...

Posté le par christian | 3 commentaire(s)
Classé sous : ,

SQL Server 2005 : Impossible de créer le diagramme / schéma de base de données

Un cas classique d'rreur depuis Management Studio. Vous allez dans une base de données, et essayez de créer un schéma ou diagramme de base de données et le message suivant s'affiche (ou la même version en Français) :

Il suffit de faire ce que le message indique, c'est-à-dire modifier le propriétaire de la base de données sur laquelle se produit l'erreur. Le plus simple étant de faire en sorte que le Login (Connexion) « sa » soit le propriétaire de la base de données en question (Ce login existe toujours d'une manière ou d'une autre, au pire il est renommé mais son Id existe toujours).

On utilise la syntaxe suivante :

ALTER AUTHORIZATION ON DATABASE::[MaBase] TO sa

Pourquoi se problème se produit il ? Généralement le déplacement d'une base de données d'un serveur sur un autre produit se symptôme. Je l'ai déjà aussi constaté sur des installations faites sur une machine liée à un domaine quand le compte sui a servit à la création de la base de données et un login (Connexion) du domaine, c'est tout de même assez rare, mais embêtant quand on tombe dessus.

Bon diagramme...

Posté le par christian | 0 commentaire(s)
Classé sous : ,

Divers : C'était il y 6 ans jour pour jour...

C'était un 1er mai, un jour de manif (c'est original pour un 1er mai ;o)), en faisait des photos avec une amie...

Une photo prise Place de la Bastille avec mon Pentax de l'époque (depuis j'ai un peu mis la photo entre parenthèses, à mon grand regret), d'une inconnue qui fait très Marianne. C'est ma photo préférée accessoirement...

Bon 1er mai...

Posté le par christian | 1 commentaire(s)

GUSS : Prochaine réunion le 29 Mai 2008

La prochaine réunion du Groupe des Utilisateurs francophones de SQL Server (GUSS) aura lieu le jeudi 29 Mai 2008 rue de l'Université au Centre de conférence Micorosft à Paris dans le 7ème arrondissement.

Inscriptions gratuites ici : http://www.guss.fr/inscription.aspx

Le programme :

-  La gestion des transactions et des verrous avec SQL Server (présenté par Christian Robert (MVP) - Winwise)

Un sujet brûlant pour les développeurs et la qualité des applications de base de données : la concurrence d’accès sous SQL Server.

  • Principe des transactions dans SQL Server
  • Pourquoi isoler les données, quels sont les niveaux d’isolation
  • A quoi servent les verrous et comment fonctionnent-t-ils
  • Qu’est ce que le versioning de ligne et comment fonctionne-t-il
  • Que sont les causes des interblocages (deadlock), comment les éviter

- Les outils Apex SQL (présenté par notre partenaire Software Technology Resources)

 Un de nos objectifs est de pouvoir vous présenter des produits compagnons à SQL Server qui offrent une valeur ajoutée. Nous avons fait appel à notre partenaire STR, distributeur des produits ApexSQL, pour vous permettre de découvrir à travers des démonstrations techniques les outils de cet éditeur américain. Les produits présentés seront :

  • ApexSQL Audit : Auditez les fonctions "Insert", "Update", "Delete" par utilisateur, machine, date, application... Une architecture personnalisable avec interface de configuration et module de reporting.
  • ApexSQL Log : Un outil d'analyse de logs et de récupération de données pour Microsoft SQL Server 2000 et 2005. Vous pourrez facilement tracer la source de toutes les modifications apportées à vos bases de données et annuler des mises à jour effectuées par les utilisateurs.
  • ApexSQL Clean : Un outil d’analyse des bases de données et d’identification des objets inutilisés et non référencés par d'autres objets. Il permet aussi d'afficher toutes les relations et les dépendances dans un outil graphique.

 - Panorama découverte de la Business Intelligence avec SQL Server (présenté par Arian Papillon - Guss et Sébastien Madar – Mcnext/Guss)

Beaucoup d’entre vous l’ont demandé : cette présentation a pour but de vous offrir une vue d’ensemble sur l’offre de Business Intelligence de Microsoft.
A travers des exemples pratiques et vécus, vous découvrirez l’ensemble des outils que propose Microsoft pour bâtir des solutions BI et reporting, et à quels besoins d’entreprise répondent chacun des outils proposés.

  • Comment concevoir son projet décisionnel ?
  • Les fondations  : l’ETL (SSIS), le moteur Olap et Datamining (Analysis Services), les services de reporting (Reporting Services)
  • Les outils de restitution et pour quels besoins : reporting de masse, rapports personnalisés, analyse de données, tableaux de bord, portail décisionnel…

A bientôt...

Posté le par christian | 0 commentaire(s)
Classé sous : ,

SQL Server : Quels comptes de service choisir ?

SQL Server est un moteur de base de données fonctionnant en tant que services, c'est-à-dire que vous avez juste à démarrer le serveur pour que l’application démarre. Nul besoin de se connecter au serveur, ni de démarrer un quelconque programme.

 

Par contre, ce service, comme tout autre service nécessite un utilisateur pour s’exécuter. Le choix de cet utilisateur est loin d’être anodin, un mauvais choix peut potentiellement être une brèche de sécurité dans l’entreprise, ou vous faire arracher les cheveux de la tête lors de la mise en place de réplications, ou autre système nécessitant de communiquer entre les serveurs.

 

En tout vous avez 5 choix pour chacun des services de SQL Server :

 

  • LocalSystem
  • LocalService (Windows 2003 et +)
  • NetworkService (Windows 2003 et +)
  • Compte Utilisateur Local
  • Compte Utilisateur du Domaine

 Les autres choix sont volontairement exclus, mais je vous en cite 2 qui sont à proscrire coûte que coûte :

 

  • Invité local ou du domaine
    • Tout simplement déconseillé car ce compte a son profil local recréé à chacune se ses connexion et dispose de droits très limités (à la limite il est fortement bridé et particulièrement depuis Windows 2003) et peu poser des problèmes avec un service. D’une manière générale ou ne donnera jamais moins de privilèges que celui d’utilisateur à un service.
  • Administrateur du domaine
    • Dans ce cas, c’est au contraire que les droits accordés sont beaucoup trop élevés. D’une part SQL Server ne nécessite en aucuns cas des privilèges administrateurs sur une machine, mais encore moins sur un domaine. Utiliser ce type de compte de service est une faille de sécurité majeure, toute personne étant sysadmin (login sa entre autres) bénéficie indirectement de ce type de droits et de l’accès total au domaine de l’entreprise.

 Les comptes utilisables et leurs particularités :

 

  • Compte LocalSystem

 Ce compte est un compte prédéfini (BUILTIN) qui existe sous toutes les versions de Windows NT (NT x, 2000, 2003, XP, Vista et 2008).

 

C'est en général l'option par défaut dans beaucoup d’installation de SQL Server. SQL Server dispose de permission « administrateur » local de la machine avec ce compte et même un peu plus étant donné que ce compte dispose de quelques privilèges systèmes supplémentaires que n’ont pas les administrateurs.

Ses droits sont locaux uniquement, ce compte n'a pas de réel contexte utilisateur en cas de connexion à une machine distante, c'est une demande d’ouverture de session (null) qui  faites sur celle-ci (qui est en général refusée).

 

C’est un assez mauvais choix car il procure des droits très importants à SQL Server et potentiellement à des personnes malveillantes connectées sur ce même serveur de base de données (possibilités entre autres de redémarrer Windows, etc.). SQL Server n’a pas besoin de privilèges aussi élevé, on préfèrera l’une des autres options plus « sécurisé ».

 

  • Compte LocalService (nouveauté Windows 2003)

Ce compte est un compte prédéfini (BUILTIN) qui existe sous toutes les versions de Windows à partir de 2003 / XP (2003, XP, Vista et 2008).

 

Ses droits sont ceux d'un utilisateur simple local. Les privilèges dont il dispose sont locaux uniquement, en cas de tentative de connexion à une machine distante, c'est une demande d’ouverture de session (null) qui  faites sur celle-ci (qui est en général refusée).

 

A savoir que ses droits sont restreints volontairement en vue de l’utilisation comme compte de service, ce qui en fait un choix meilleur que LocalSystem. Cependant il cumule les droits de tous les services qui l’utilisent : Si SQL server et IIS s’en servent comme compte de service il aura accès à la fois aux répertoires de SQL Server et à ceux de IIS.

 

C’est un assez bon compromis en termes de sécurité, même si les droits dont il dispose sont très fonctions de l’utilisation de celui-ci avec d’autres services. Suivant le rôle de votre serveur vous aurez un compte LocalService avec des privilèges plus ou moins élevés, ce qui n’en fait pas un choix parfait.

 

  • Compte NetworkService (nouveauté Windows 2003)

Ce compte est un compte prédéfini (BUILTIN) qui existe sous toutes les versions de Windows à partir de 2003 / XP (2003, XP, Vista et 2008).

 

Identique au précédent, sauf que les accès réseau sont possibles. Si une tentative de connexion à un autre serveur est faite, ce serveur verra une tentative de connexion du compte de la machine. Exemple : SRVSQL fait une connexion vers SRVWEB, SRVWEB verra une tentative de connexion de \\SRVSQL, qu’il doit autoriser pour qu’elle réussisse.

 

Ce type de compte de service permet au serveur de se reconnaître entre eux sans pour autant nécessiter un domaine. Une DMZ est l’endroit idéal où utiliser ce type de compte.

 

Les limitations restent les même que pour LocalService, les droits de ce type de compte étant fonction de son utilisation pour d’autres services. Il faut considérer qu’il n’a pas d’équivalent, dans le cas de serveurs non connectés à un domaine sont choix peut s’avérer judicieux.

 

  • Compte Utilisateur Local Windows

 Ce compte est à créer manuellement, sa création est possible sous toutes versions de Windows.

 

Ce compte ne dispose que des privilèges « utilisateur » local. En cas de tentative de connexion à une machine distante, c'est une demande d’ouverture de session (null) qui  faites sur celle-ci (qui est en général refusée).

 

Les privilèges accordés à ce compte sont uniquement ceux que vous lui accordez (et que l’installation de SQL Server lui accorde). Il faudra lui donner un mot de passe complexe et interdire son expiration si vous souhaitez éviter tout problème.

 

Ce choix est généralement le meilleur en termes de sécurité pour SQL Server il est équivalent à LocalService, mais ne souffre pas du principal problème de ce dernier : les droits de ce comptes ne sont partagés que par les services où vous l’utilisé, et rien ne vous interdit d’un créer un par service. Cependant si vous avez besoin de réaliser des accès distant à d’autres serveurs ce choix n’est pas intéressant.

 

C’est le choix parfait pour le service SQL Server (moteur relationel), celui-ci n’ayant pas besoin de se connecter à d’autres machines.

 

  • Compte Utilisateur du Domaine Windows

 Ce compte est à créer manuellement, sa création est possible sous toutes versions de Windows à condition que votre serveur soit joint à un domaine.

 

Ce compte ne dispose que des privilèges « utilisateur » sur le domaine. En cas de tentative de connexion à une machine distante, c’est le compte de service qui réalise cette connexion, à vous de donner les privilèges nécessaire à cette connexion sur la machine distante (exemple : accordez les droits en écriture sur le partage \\SRVFILES\SAV à DOMAINE\compte_sql_server pour permettre la sauvegarde à distance sur ce partage).

 

Les privilèges accordés à ce compte sont uniquement ceux que vous lui accordez (et que l’installation de SQL Server lui accorde). Il faudra lui donner un mot de passe complexe et interdire son expiration si vous souhaitez éviter tout problème.

 

Option la plus courante lorsque vous êtes relié à un domaine, permet plus de facilité au niveau de la gestion des droits entre les serveurs. Nécessite pas contre que SQL Server soit joint à un domaine pour en profiter totalement.

 

C’est un très bon choix pour l’Agent SQL, ce service ayant très souvent besoin de se connecter à d’autres postes au d’autres serveurs de base de données.

 

Quels choix faire ?

 

Une petite synthèse des options intéressantes par situation.

 

Machine autonome sur le réseau :

 

  • Compte Utilisateur local Windows
  • Compte LocalService

 Machine sur DMZ nécessitant la connexion à d’autres serveurs

 

  • Compte NetworkService

 Machine sur domaine nécessitant la connexion à d’autres serveurs

 

  • Compte Utilisateur du Domaine

 Bon choix…

Posté le par christian | 0 commentaire(s)
Classé sous : ,

SQL Server : Pourquoi @toto IS NULL OR Champ = @toto pose problème ou l’intérêt du SQL dynamique

Prenons le cas d’une table ayant 5 champs :

 

CREATE TABLE [dbo].[MaTable](

      [Id] [int] IDENTITY(1,1) PRIMARY KEY,

      [Nom] [varchar](50) NOT NULL,

      [Param1] [int] NULL,

      [Param2] [int] NULL,

      [Param3] [int] NULL

)

GO

 

Je positionne un index sur chacun des champs ParamX :

 

CREATE INDEX Index1 ON MaTable(Param1)

CREATE INDEX Index2 ON MaTable(Param2)

CREATE INDEX Index3 ON MaTable(Param3)

 

J’ai une procédure stockée ayant 3 paramètre elle aussi : @P1, @P2 et @P3 dont la valeur par défaut est NULL et je souhaite pouvoir rechercher les enregistrements de ma table tel que Param1 = @P1, etc. si le paramètre correspondant est bien passé dans ma procédure stockée. Ce qui donne le code suivant, si l’un des paramètres est à NULL on a la condition complète qui évaluée à vrai grâce à la condition logique OR indiqué et on ignore ainsi le paramètre.

 

CREATE PROC [dbo].[MaProc] @P1 int = NULL, @P2 int = NULL, @P3 int = NULL

AS

 

SELECT *

  FROM [Database1].[dbo].[MaTable]

WHERE (@P1 IS NULL OR Param1 = @P1)

  AND (@P2 IS NULL OR Param2 = @P2)

  AND (@P3 IS NULL OR Param3 = @P3)

GO

 

Cette construction est assez logique, mais une surprise nous attend lors de l’exécution. Je charge cette table avec 500 000 enregistrements avec des valeurs uniques et j’exécute tout simplement :

 

-- Nombre de pages lues 871

EXEC dbo.MaProc 1

 

Résultat 871 pages lues (alors que la table fait 3394 pages), ce qui est énorme et représente la taille totale de Index1. Pour s’en convaincre jetez un coup d’œil au plan d’exécution qui est un Index Scan non ordonnée et complet sur l’index Index1, là où idéalement on devrait avoir une recherche sur Index1 ! Essayons maintenant sur @P2 :

 

-- Nombre de pages lues 1500871

EXEC dbo.MaProc @P2 = 1

 

Ici encore plus, ceci est du au comportement de la mise en cache du plan d’exécution et sa réutilisation. N’oubliez pas que c’est une procédure stockées et à ce titre le moteur reprend « bêtement » le précédent plan qui utilise le mauvais index :o(

 

Pourquoi ce comportement ? On pourrait croire que la requête est formulée correctement, eh bien non cet IS NULL OR est à proscrire du code SQL car engendre des dégradations très importantes. Une autre formulation à bannir est ChampA IS NOT NULL AND ChampA = X qui pose des problèmes similaires en termes de performances.

 

Quelles sont les alternatives ?

 

Branchement multiples :

 

ALTER PROC [dbo].[MaProc] @P1 int = NULL, @P2 int = NULL, @P3 int = NULL

AS

 

IF @P1 IS NOT NULL

      SELECT *

        FROM [Database1].[dbo].[MaTable]

      WHERE Param1 = @P1

 

IF @P2 IS NOT NULL

      SELECT *

        FROM [Database1].[dbo].[MaTable]

      WHERE Param2 = @P2

       

IF @P3 IS NOT NULL

      SELECT *

        FROM [Database1].[dbo].[MaTable]

      WHERE Param3 = @P3

 

GO

 

Cette requête n’est pas un bon remplaçant de ma précédente, mais c’est pur l’exemple et limiter le nombre de lignes de codes. Je teste la présence du paramètre dans les blocs IF, si il est passé je l’utilise dans la bonne requête.

 

-- Nombre de pages lues 3

EXEC dbo.MaProc 1

 

-- Nombre de pages lues 3

EXEC dbo.MaProc @P2 = 1

 

Et là le plan est correct dans les 2 cas… On a bien une recherche sur Index1 dans le premier et sur Index2 dans le second, soit une requête 500 000 fois plus performante que dans le pire des cas précédent.

 

SQL Dynamique :

 

ALTER PROC [dbo].[MaProc] @P1 int = NULL, @P2 int = NULL, @P3 int = NULL

AS

 

      DECLARE @param nvarchar(500)

      DECLARE @sql nvarchar(max)

 

      set @param = N''

      set @sql = N'SELECT * FROM [Database1].[dbo].[MaTable] WHERE 1 = 1 '

 

      IF @P1 IS NOT NULL

            SET @param = @param + N' AND Param1 = ' + CAST(@P1 as nvarchar(12))

 

      IF @P2 IS NOT NULL

            SET @param = @param + N' AND Param2 = ' + CAST(@P2 as nvarchar(12))

 

      IF @P3 IS NOT NULL

            SET @param = @param + N' AND Param3 = ' + CAST(@P3 as nvarchar(12))

 

      SET @sql = @sql + @param

     

      EXEC(@sql)

 

GO

 

Cette fois ci la requête remplace à 100% celle de départ, on concatène une chaîne qui est la requête à exécuter avec son paramètre. Regardons maintenant les performances :

 

-- Nombre de pages lues 3

EXEC dbo.MaProc 1, 2, 3

 

Dans tous les cas, que vous passiez 1 ou plusieurs paramètres le nombre pages lues est toujours de 3 et le plan utilise la recherche sur les bons index. On a ici le résultat optimal… Bon ok je peux faire encore un peu mieux avec un sp_executesql au lieu du EXEC(), mais pour rester concis cette requête là ira bien.

 

L’intérêt du SQL dynamique est ici énorme il vous évite la création d’une procédure qui aurait due tester toutes les combinaisons de passage de paramètre, qui croissent en fonction du nombre de ce dernier. On n’aura donc ici pas d’autres choix que de générer la requête qui va bien !

 

Bonnes requêtes…

 

SQL Server : Interdire l’exécution de requêtes de plus de X secondes

Cette fonctionnalité existe depuis très longtemps dans SQL Server, elle permet de prévenir (la requête ne sera pas exécutée) les requêtes dont le temps d’exécution estimé dépasse le seuil spécifié.

 

Cela se paramètre avec l’option Query Gouvernor Limit :

 

  -- Soit au niveau serveur, pas de redémarrage nécessaire

 

  exec sp_configure 'show advanced options', 1

  reconfigure

  exec sp_configure 'query governor cost limit', 10

  reconfigure

  exec sp_configure 'show advanced options', 0

  reconfigure

 

  -- Soit au niveau de la connexion

 

  SET QUERY_GOVERNOR_COST_LIMIT 10

 

Le chiffre spécifié dans cette option est le seuil limite en seconde au-delà duquel la requête se trouvera refusé son exécution sur le serveur de base de données. Le temps estimé d’exécution de la requête est basé sur une machine qui a très vraisemblablement une configuration différente de la votre (c’est une machine de test Microsoft dont j’ignore la configuration), je ne saurais que trop vous conseiller de tester cette valeur avec quelques requêtes pour calibrer cette valeur en fonction de votre configuration.

 

Msg 8649, Level 17, State 1, Line 4

The query has been canceled because the estimated cost of this query (1090057) exceeds the configured threshold of 10. Contact the system administrator.

 

Autre point positif avec SQL Server 2008, il est possible de définir cette valeur par Pool d’utilisateur grâce au Resource Gouvernor. Il devient possible choisir le seuil en fonction du type d’application. Par exemple 0 pour les batchs (désactivé si 0), 10 pour les développeurs en production, 60 pour l’application, etc.

 

L’effet au final c’est que vous avez moins de risque de dégrader les performances sur du long terme à cause de requêtes mal optimisées ou trop gourmande.

 

Bonne limite…

SQL Server 2005 : Service Pack 3 annoncé pour la fin de l'année... Une victoire des communautés !

Grande nouvelle que l'on savait déjà en privé depuis 2 semaines, il y aura un Service Pack 3 pour SQL Server 2005. C'est un revirement de situation face au discours passé : http://blogs.codes-sources.com/christian/archive/2008/02/02/sql-server-2005-pas-de-service-pack-3.aspx

Pourquoi est ce que Microsoft fait machine arrière et souhaite au final proposer un Service Pack pour cette version ? (Alors que les correctifs cumulatifs vont bon train, le 7ème datant d'avant-hier : http://blogs.codes-sources.com/christian/archive/2008/04/15/sql-server-2005-correctif-cumulatif-n-7-pour-sql-server-2005-service-pack-2-hotfix-build-3239.aspx)

C'est en fait le nombre important de votes (920 la dernière fois que j'y suis passé) et la volonté de la plupart des MVP SQL Server d'avoir une Service Pack (qui permettra une mise à jour vers une version stable sans avoir recours aux Hotfix cumulatifs) qui a fait changer la position des équipes SQL Server.

Ce Service Pack n'intègrera pas de nouvelles fonctionnalités, et ce sera d'ailleurs le cas de tous les futurs Service Pack de SQL Server. Ceci prouve la volonté de limiter le plus possible les risques de régression lors des patchs des versions de SQL Server, comme cela s'était malheureusement produit par le passé. Le fait que les Services Packs n'intégreront plus de fonctionnalités additionnelles est compensé par le fait que Microsoft s'était déjà engagé dans des cycles de sortie des produits plus courts (2 à 3 ans entre 2 versions).

Le Service Pack 3 de SQL Server 2005 devrait sortir d'ici la fin de cette année, certainement peu de temps après la sortie de SQL Server 2008.

Bonne nouvelle...

SQL Server 2005 : Correctif cumulatif n 7 pour SQL Server 2005 Service Pack 2 (Hotfix - Build 3239)

Sorti hier le dernier correctif cumulatif pour SQL Server 2005 Service Pack 2. C'est le 7ème de la série que Microsoft a prévu de sortir, à un rythme de 2 mois, reprenant toutes les correctifs depuis le Service Pack 2 de SQL Server 2005.

Vous n'aurez donc à installer que SQL Server 2005, le Service Pack 2 et ce correctif si vous faites une installation à partir de 0 et que vous souhaitez installer ce correctif. Notez que Microsoft recommande toujours d'installer ce correctif uniquement si un des bugs listés dans ses correctifs vous concerne.

Le détail du correctif, la liste des corrections apportées et le lien pour le télécharger (en passant par le support ou le formulaire en ligne) :

http://support.microsoft.com/kb/949095/en-us

Le lien pour accéder au formulaire de demande du correctif est le suivant :

http://go.microsoft.com/?linkid=6294451

Bon téléchargement?

Posté le par christian | 0 commentaire(s)

MVP Summit 2008 : J - 2 avant le départ pour Seattle

Cette année encore un petit tour à Seattle pour le MVP Summit sauce 2008, où vous aurez le droit en exclusivité a plein de photo du campus de MS ;o)

Cette année on est assez nombreux dans la promo Winwise, à savoir :

L'occasion de glaner encore plein d'infos et de fournir des retours sur les produits. Je vous confirme d'ailleurs que çà marche en plus et que MS nous écoute, voire même dans certains cas change de discours sur certains points, il y un sujet tout frais là-dessus mais dont je vous parlerais quand çà sera possible.

Pour profiter un peu à distance de Seattle vu du Ciel :
http://flightaware.com/live/airport_status_bigmap.rvt?ident=KSEA&airport=KSEA&key=af9ee42365dd0d899fa706396144bbf63c7ebd74

Application sympas, dommage que je n'ai rien trouvé de tel sur un aéroport français. Il y a même moyen d'avoir la route réelle empruntée par un avion.

Bon summit?

Posté le par christian | 4 commentaire(s)
Classé sous :

SQL Server : Comment savoir quel Login (Connexion) est pris en compte lorsque vous vous connectez avec l?authentification Windows ?

Le cas se présente quand par exemple vous êtes membre de plusieurs groupes Windows, par exemple :

  • INTRA\RH
  • INTRA\Compta
  • INTRA\dba

Sous SQL Server on vous a créé autant de login (connexion) que de groupe Windows. C'est tout à fait possible cela peut même se révéler assez pratique pour la gestion des droits :

CREATE LOGIN [INTRA\RH] FROM WINDOWS

CREATE LOGIN [INTRA\Compta] FROM WINDOWS

CREATE LOGIN [INTRA\dba] FROM WINDOWS

Le problème maintenant est de savoir dans quel Login SQL Server va considérer que je suis avec mon compte Windows (INTRA\crobert) ?

La réponse vous l'aurez avec la procédure stockées étendu (code C/C++ se trouvant généralement nommé xp_xxxxx) xp_logininfo. Executée sans paramètre elle se contente de vous renvoyer la liste des login présent sur le serveur de base de données.

Si par contre je lui fournis le compte avec lequel j'ai l'intention de me connecter :

xp_logininfo 'INTRA\crobert'

J'obtiens une ligne :

INTRA\crobert    user    user    INTRA\crobert    INTRA\RH

C'est donc les droits du login RH que j'obtiens? Comment est ce que c'est déterminé ? Tout simplement en fonction de l'ordre de création des login. A une exception près?

        EXEC sp_addsrvrolemember 'INTRA\dba', 'sysadmin'

Si je re-execute mon xp_logininfo :

INTRA\crobert    user    admin    INTRA\crobert    INTRA\dba

Les droits d'admin tels que le rôle serveur sysadmin prédomine toujours quelques soit l'ordre de création des logins.

Maintenant vous saurez tout sur la manière de s'authentifier via Windows sur SQL Server.

Bonne connexion?

Posté le par christian | 0 commentaire(s)
Classé sous : ,

SQL Server : Fin du support pour SQL Server 2000 et SQL Server 2005 SP1

Eh oui c'est aujourd'hui (en fait hier) que le support de SQL Server 2000 s'arrête après 10 ans de loyaux services. Idem pour le Service Pack 1 de SQL Server 2005.

Dans les 2 cas vous serez prié par le support technique de bien vouloir avoir un SQL Server 2005 Service Pack 2 qui de fait est la seule version de SQL Server supportée actuellement.

Une recommandation si vous faites le pas d'un SQL Server 2000 ou 2005 SP1 vers SQL Server 2005 SP2, installé l'un des derniers correctifs en date. Je n'ai pas l'habitude de recommander l'installation d'un correctif sur une installation existante, mais uniquement si vous migrez ou faites une nouvelle installation.

Le dernier en date :
http://blogs.codes-sources.com/christian/archive/2008/02/21/sql-server-2005-correctif-cumulatif-n-6-pour-sql-server-2005-service-pack-2-hotfix-build-3228.aspx

Vivement 2008?

Posté le par christian | 0 commentaire(s)
Classé sous :

SQL Server : Dépanner les problèmes de connexion au serveur en TCP/IP

Comment détecter les problèmes courant de connexion au serveur, voici une petite liste non exhaustive mais qui est bien utile lorsque la connexion ne se fait à SQL Server.

 

  • Vérifiez la résolution de nom

 

Un simple « ping » ou la commande « nslookup » vous permettrons de savoir si le serveur que vous essayer de joindre est bien le bon

 

            ping monserveur

 

Si jamais la résolution de nom ne se fait pas correctement, essayer d?utiliser le nom totalement qualifié

 

            ping monserveur.mondomaine.com

 

Si le fonctionnement est toujours incorrect, soit il s?agit d?un problème de DNS ou d?un problème de route (voir ci-dessous). Vous pouvez toujours ajouter le nom de la machine en question dans le fichier Host de la machine pour palier au problème de DNS.

 

  • Vérification du ping / tracert

 

Prenons le cas où à la place du nom de la machine on renseigne cette fois l?adresse IP directement

 

            ping 192.168.56.23

 

Ici s?il est impossible de joindre le serveur c?est peut un problème de routage, que l?on pourra vérifier par le biais de la commande « tracert » qui permet de suivre le cheminement des paquets. Autre cas probable, un Firewall installé sur la machine empêchant la réponse au Ping.

 

            tracert 192.168.56.23

 

Si vous passez par un chemin réseau non prévu (par exemple vous souhaitez vous connecter sur un serveur local, mais le tracert vous montre que vous passez sur Internet) il faudra contacter votre administrateur système.

 

 

  • Vérification de l?ouverture du port

 

Attention Telnet n?est plus installé par défaut sur Windows Vista. Ici la commande essaye de déterminer si le port d?écoute TCP/IP du serveur de base de données est ouvert.

 

            telnet 192.168.56.23 1433