Mim

Select * from Seb where Sujets in (SQL Server 2008, ADO.NET, Visual Studio 2008)
Sync Framework 2 CTP2

La version CTP2 de Sync Framework 2 vient de voir le jour.

Première bonne nouvelle, on peut ENFIN installer la version Sync Framework 2 en side by side avec la version 1, ce qui n’était pas le cas avec la CTP1.

Bref, au niveau des nouveautés :

Un provider Complet pour SQL Server. Aprés moult demandes de la part des utilisateurs, l’équipe Sync Framework intègre enfin en natif un provider SQL SERVER basé sur le provider Peer to Peer.

Nouvelles API’s pour générer automatiquement les instructions SQL de synchronisation.

Batching amélioré et automatisé sur les providers SQL et SQL CE

Snapshot Initialisation : Pouvoir répliquer un snapshot complet sur SQL Server CE ( Ca, ça poutre ! )

Amélioration des performances du provider SQL Server CE : Ca il était temps ;) Espérons qu’ils ont enfin poolé les connections CE, et passé par des instructions d’insertion optimisé.

Pour une description complète, je vous conseil le blog de Liam C.

Bref, que du bon, à tester trés vite ! (J’y vais fingerscrossed)

[Article] 6 façons d’administrer son serveur SQL SERVER 2008

Et hop, un nouvel article sur TechHeaBrothers :

Sql Server : 6 façons d’administrer votre serveur SQL SERVER

Dans cet article, vous en apprendrez davantage sur les différentes méthodologies pour interagir avec votre Serveur SQL, dont notamment :

  • Sql Server management studio (la méthode dite '”facile” :))
  • ADO.NEt
  • SMO
  • SqlCmd
  • PowerShell, le petit nouveau dans la cours des grands ;)

Une photo résumant un peut tout ça :

image20[1]

http://www.techheadbrothers.com/Articles.aspx/sql-server-six-facons-administrer-serveur-sql-server

Posted: juin 01 2009, 11:31 par Mimetis | avec no comments
Classé sous :
Sql Server 2008 Training Kit Dependency Checker Windows Seven

Je fais suite à mon dernier Post.

Je viens d’installer le training kit et aprés le Setup, vous devez lancer un Dependency Checker qui va vérifier votre configuration.

Le problème c’est que chez moi, un vieux message d’erreur vient me dire, en substance:

Votre OS n’est PAS supporté !

C’est balot, je suis sur Windows Seven

Bon allez hop, un ti coup de reflector par ci par là, je me rends compte que le Dependency Checker exécute une suite de taches définies dans un fichier de configuration XML.

Soit, il ne reste plus qu’à indiquer dans ce fichier XML que ma config est bonne, en substance ;)

Donc, à la racine de votre répertoire d’installation, vous avez un fichier XML : Dependencies.xml

Il vous suffit de rajouter une section pour Windows Seven avec la bonne Build, mais en le laissant passer pour du Windows Vista, comme suit :

   1: <os type="Vista" buildNumber="6000">
   2:   <dependency
   3:                   value=".\scripts\Dependencies\Check\CheckVistaSP1.ps1"
   4:                   enabled="true"
   5:                   optional="false"
   6:         required="true"
   7:                   title="Windows Vista SP1"
   8:                   explanation="Microsoft SQL Server 2008 for Developers Training Kit requires Windows Vista Service Pack 1"
   9:         scriptName=""
  10:         downloadUrl="http://www.microsoft.com/downloads/details.aspx?FamilyID=f559842a-9c9b-4579-b64a-09146a0ba746" />
  11: </os>
  12: <os type="Vista" buildNumber="7100">
  13:   <dependency
  14:                   value=".\scripts\Dependencies\Check\CheckVistaSP1.ps1"
  15:                   enabled="true"
  16:                   optional="false"
  17:         required="true"
  18:                   title="Windows Vista SP1"
  19:                   explanation="Microsoft SQL Server 2008 for Developers Training Kit requires Windows Vista Service Pack 1"
  20:         scriptName=""
  21:         downloadUrl="http://www.microsoft.com/downloads/details.aspx?FamilyID=f559842a-9c9b-4579-b64a-09146a0ba746" />
  22: </os>

C’est bidouille mais ça fonctionne !

image

Posted: mai 24 2009, 04:00 par Mimetis | avec no comments
Classé sous :
Sql Server 2008 Training Kit

Le training Kit de SQL SERVER 2008 vient juste d’être publié.

Je vous conseille fortement de télécharger les quelques 60 mégas du Kit, dans lequel vous trouverez de multiples ressources dont 6 présentations, 12 démos et 3 “Hands on Lab” :

Voici le détail du Kit (In english in the text :))

  • Presentations (6)
    • Filestream
    • Spatial
    • T-SQL
    • Date and Time Types
    • SQLCLR
    • Reporting Services
  • Demos (12)
    • AdventureWorks Racing All-Up SQL Server 2008 Demo
    • SQL Server 2008 All-Up Spatial Demo
    • Spatial Types Demo
    • Intro to Filestream Demo
    • SQL CLR Nullable Types Demo
    • Programming with Filestream Demo
    • Reporting Services Web Application Integration Demo
    • Date and Time Support in SQL Server 2008 Demo
    • T-SQL Table-Valued Parameters Demo
    • T-SQL Row Constructors Demo
    • T-SQL Grouping Sets Demo
    • T-SQL Merge Demo
  • Hands-on Labs (3)
    • Using Spatial Data in TSQL
    • Using Spatial Data in Managed Code
    • Using SQL CLR in SQL Server 2008

Un MUST HAVE !

Posted: mai 24 2009, 02:58 par Mimetis | avec no comments
Classé sous :
Sync Services : Resynchro totale

Je viens de recevoir un mail me posant la question d’une resynchro totale entre une base de données “client” SQL Server CE et une base de données “server” Sql Server (2005 oou 2008)
Je n’arrive pas à répondre à ce monsieur, l’adresse mail est invalide, alors tant qu’à faire, je vous fais partager la réponse que j’ai faite, ici :

Le problème de réinitialisation des bases clientes reste à ce jour un des grands soucis à mon sens de Sync Services.

Forcer la resynchronisation totale d’une base de données SDF, soyons franc, ça n’est pas simple.

Le problème :

Vous voulez faire une resynchronisation totale de votre base windows mobile:

Pour cela, il va falloir réinitialiser les métadatas de la base de données SQL Server CE, afin d’indiquer lors de la synchro une nouvelle ancre de synchronisation.

C’est données sont stockée dans les tables systèmes de la base de données Sql Server CE

Ces tables sont interrogeables via la requête suivante :

   1: select * from INFORMATION_SCHEMA.TABLES


image

Vous les trouverez dans la table __sysSyncArticle

   1: Select * from __sysSyncArticles

image

Pour chaque table, vous avez l’ancre de dernier envoi et l’ancre de dernière réception. Malheureusement, ces données ne sont pas modifiable par code, ce sont des tables systèmes.

Ce petit outil vous permet de voir les données plus simplement : http://blogs.msdn.com/agujjar/archive/2008/11/22/sync-inspector-tool-inspecting-client-db-state-for-pending-changes.aspx

La seule solution à mon sens, certes ça reste de la bidouille, consiste à … supprimer la base de données cliente et la recréer.

1ère Solution :

Ecraser le schéma:

Si vous écraser le schéma, lors de la prochaine synchronisation; le schéma de votre base sdf va être recréé, et vos données entièrement rapatriées.

Pour récupérer le schéma, il vous suffit d’appeller la méthode GetSchema() sur le DbProvider Server

Un exemple de code :

   1: MyServerSyncProviderProxy server = 
                this.RemoteProvider as MyServerSyncProviderProxy;
   2:  
   3: Collection<String> lstTables = new Collection<string>();
   4:  
   5: foreach (SyncTable st in this.Configuration.SyncTables)
   6:      lstTables.Add(st.TableName);
   7:  
   8: SyncSession ss = new SyncSession();
   9: var schema = server.GetSchema(lstTables, ss);

Le problème, c’est la présence ou non d’autres tables ne faisant pas partie de votre synchronisation. Vous risquez de ne pas pouvoir recréer le schéma, dû peut être à des relations inter tables ou autre. Dans ce cas, il faudra passer à une autre méthode

2eme solution :

Créer une base pour les tables synchronisées, et une base pour les tables non synchronisées. C’est cette solution que j’utilise pour gérer ce cas particulier.

Dans ce cas, un simple Delete de la base de données, puis une recréation par code de la synchro et le tour est joué.

Pour éviter de recréer systèmatiquement le schéma, ce qui peut provoquer une perte de temps non négligeable, j’ai pris l’habitude d’embarquer dans ma solution une base “vide” appellée master, qui contient toutes les tables à synchroniser vide.

Pour le coup, lors de la demande de resynchro complète, je procède en 3 étapes:

  1. Je supprime la base de données sdf existante
  2. Je “Copie colle” la base de données master en la renommant
  3. Je relance une synchro “classique”

3eme solution

Alors là on sort de la juridiction de Sync Services, c’est passer par la réplication Sql Server.

Ca reste à mon sens la solution la plus robuste, si vous être sûr d’avoir entre votre client et votre serveur, du SQL Server Compact et du SQL Server 2005 (2008)

Voilà, j’espère que tout ceci vous parait plus clair à présent.

Sync Services Future

Attention à l’arrivée de la nouvelle mouture de Sync Services, d’ici la fin d’année, basée sur la nouvelle version de Sync Framework, qui apporte autant d’améliorations du core que de nouveautés.

On parle notamment de synchronisation par Snapshot, et de meilleur performance, il faudra donc jeter un coup d’oeil dessus rapidemment pour savoir si ce cas particulier ne pourra pas à terme etre gérer beaucoup plus facilement !

 
Bon courage !

[SQL SERVER] Sp_who2 et sp_WhoIsActive

 

Beaucoup de DBA connaissent la fameuse procédure stockée système “Sp_Who”. En allant plus loin, on peut même utiliser sp_Who2, certes non documentée mais tout aussi efficace pour trouver des locks potentiels.

Je viens de mettre la main sur un petit bijou, une procédure stockée bien charnue, écrite par Mr Adam Machanic, MVP Sql Server. Il s’agit d’une procédure stockée nommé sp_WhoIsActive, et permet de bien mieux appréhender les problèmes de locks et de process actifs au sein de votre serveur SQL Server.

Un petit exemple d’utilisation du système :

Supposons une procédure stockée qui, transactionnellement, n’est pas terminée :

use adventureworks
go
begin tran
update production.product
set name = name
go

Le résultat d’un Sp_Who2 donne :

image 

Bon, soit, c’est déjà pas mal, mais on s’y perd un peu !

Voici le résultat de l’éxécution de la procédure sp_WhoIsActive :

(Note : J’ai inclus quelques options, je vous laisse voir le post de l’auteur pour connaitre l’immensité des possibilités :))

exec sp_whoisactive
@get_transaction_info = 1,
@GET_PLANS =1,
@output_column_list =  '[login_name],[dd hh:mm:ss.mss],[sql_text],[reads],[writes],
        [context_switches],[physical_io],[wait_info],[blocking_session_id],
        [tempdb_writes],[tran_log_writes],[query_plan],[session_id]';

Et voilà le résultat :

image

Voilà, on a de sacrés informations pertinentes. La durée du lock actif, la requête sql en cours d’éxécutions , le Session ID (SPID), le plan d’éxécution etc ….

Bref, un must have pour une maintenance active de votre base de données ;)

Je vous rappelle l’adresse du post de Adam Machanic :

Sp_Who_IsActive

Sql Server 2008 R2

Et voilà c’est officiel, la nouvelle mouture de Sql Server (Kilimanjaro) se nommera Sql Server 2008 R2

Ne vous attendez donc pas à d’importantes innovations, la majeur partie des améliorations se feront coté BI et Clustering de Servers

ProcessorUtilization[1] Dashboard[1]

Et hop un ti lien pour vous tenir informer :

http://www.microsoft.com/sqlserver/2008/en/us/r2.aspx

Sql Server 2008 Service Pack 1, ServerProperty productlevel

Vous le savez suremment (ou non :)) mais le service pack 1 de Sql Server 2008 est sorti il y a peu.

Il est même embarqué dans Windows Update en tant que mise à jour optionnelle.

Bref, Il se peut fortement que vous ayez installé le service pack sur votre machine (ou serveur) ou tu du moins que vous êtes en passe de le faire :)

Une fois installé, tout bon admin réseau (ou développeur) aime bien vérifier que le Service pack est effectivement bien installé.

Première réponse

Aller voir les propriétés du serveur SQL, Via le Sql Server Management Tool :

Avant le SP1 :

image

Aprés le SP1 :

image

On remarque bien les deux numéros de versions différents :

  • Sql Server 2008 RTM : 10.0.1600.22
  • Sql Server 2008 SP1 : 10.0.2531.0

Bon c’est sûr, faut le savoir que la version .2531. c’est le service pack 1…

Deuxième réponse 

Utilisez la fonction Système ServerProperty() qui retourne quelques informations intéressantes !

SELECT    SERVERPROPERTY('productversion') as 'Version SQL SERVER',
               SERVERPROPERTY ('productlevel') as 'Service Pack appliqué',
               SERVERPROPERTY ('edition') as 'Edition'

Ce qui donne dans le premier cas :

image

Et dans le deuxième :

image

Plus parlant non ? :)

Posted: mai 05 2009, 03:58 par Mimetis | avec no comments
Classé sous :
Windows 7 Release Candidate

image

Go Go Go !

Le Secret d’Edouard !

image 

Découvrez comment Edouard est devenu “le cador de l’open space”  et comment un produit qui commence par SQL et finit par 2008 a changé sa vie (huhu !!)

www.lesecretdedouard.com

Posted: avr. 27 2009, 11:31 par Mimetis | avec no comments
Classé sous :
ReadCommited, ReadUncommited, NoLock

Je Viens de tomber (encore) sur un mauvais cas d’utilisation du NoLock.

Malheureusement, et comme dans 90% des cas, l’utilisation du NoLock est faite “à défaut” pour palier à un problème de blocage…

Ceci n’engage que moi, mais le NoLock, c’est le mal ! (enfin pas que moi dis donc :))

Mais revenons tout d’abord aux bases :

NoLock correspond à l’alias de ReadUncommitted qui est un Niveau d’Isolation.
Qu’est ce qu’un niveau d’isolation (ou “Verrou”) : C’est l’isolation d’une transaction en cours, pour éviter qu’une autre transaction ne lise des données non validées (Un – Commit)

Il existe plusieurs niveaux d’isolation :

  1. ReadUncommitted
  2. ReadCommitted (niveau par défaut)
  3. RepeatableRead
  4. Serializable

Par défaut SQL SERVER utilise sur toutes ses transactions le niveau ReadCommitted

Il existe deux niveaux particuliers disponibles depuis SQL SERVER 2005

  • Read_Committed_Snapshot
  • Snapshot

Ces deux niveaux s’appliquent sur la base de données complète. Le premier est relativement proche de ReadCommited, le second plutôt proche du niveau Serializable. Ces deux niveaux, globaux, sont basés sur les versions de lignes.

Snapshot est le niveau par défaut sur Oracle.

Attention, le mode Snapshot a tendance à créer beaucoup d’activité sur la base TempDB, qu’il vous faut donc surveiller et tailler en conséquence

Pourquoi utiliser des verrous ?

Pour bien comprendre le mécanisme, il faut imaginer l’exécution en parallèle de deux requêtes :

  1. La première met à jour des données en enchainant les opérations d’Update, ou Delete, le tout dans une transaction.
  2. La deuxième lit en parallèle ces même données, dans une transaction.

Il existe 3 cas de lecture de données qui sont très vite problématiques, si on ne fait rien contre :

Cas 1  : Dirty Read (Lecture incorrecte)

Vous lisez une donnée, écrite par une autre transaction qui n’est pas encore validée (imaginez que la transaction qui écrit cette donnée ne soit pas validée (Rollback), vous avez lu une donnée non valide !!)

Cas 2 : NonReapableRead (Lecture non reproductible)

Une transaction lit une donnée une première fois, puis dans la même transaction; essaie de relire cette donnée.. Celle ci a évolué, dû à une autre transaction validée qui l’a modifiée entre temps.

Cas 3 : Phantom Read (lecture fantôme)

Sur ce coup là une transaction lit un ensemble de données, puis dans la même transaction essaie de relire ce même ensemble de lignes, mais trouve un nombre de lignes différents. Une des lignes a été supprimée par une autre transaction validée.

Que peut on faire suivant le niveau d’utilisation ?

C’est ici qu’intervient le niveau d’isolation. Il s’agit d’empêcher qu’une transaction ne lise des données non valides. Le verrou appliquée va bloquer la transaction de lecture en la mettant en attente de déverrouillage. Une fois le verrou levé, la transaction de lecture effectue sa lecture cohérente.

Voici un tableau récapitulatif des comportements des différents niveaux d’isolations suivant les cas de lecture :

Green Check checkmark okay : Vous avez un niveau d’isolation qui permet de lire une donnée dans cet état.
Disable disabled x bad : Vous avez une donnée dans un état ne pouvant pas être lu dans ce niveau d’isolation.

Isolation Dirty Read Non Repeatable Read Phantom Read
ReadUncommited

Green Check checkmark okay

Green Check checkmark okay

Green Check checkmark okay

ReadCommited

Disable disabled x bad

Green Check checkmark okay

Green Check checkmark okay

RepeatableRead

Disable disabled x bad

Disable disabled x bad

Green Check checkmark okay

Serializable

Disable disabled x bad

Disable disabled x bad

Disable disabled x bad

Quel niveau pour quel cas ?

Au final le plus sécurisant, si vous voulez éviter de lire des données non transactionnellement stable, c’est le niveau Serializable.
Alors pourquoi ne pas utiliser de base, ce niveau ?

Lorsqu’une transaction débute, elle applique un verrou sur l’ensemble des données qui sont modifiées lors de cette transaction.

Si vous décidez de lire cette donnée avec un niveau d’isolation très haut (genre Serializable), SQL SERVER n’autorisera sa lecture qu’une fois que la première transaction sera terminée.

La transaction se bloque, dans l'attente de la libération du verrou existant.

Par défaut, il n'existe pas de délai d'expiration obligatoire, vous avez donc un risque de blocage infini.
Note :

  1. Utilisez la vue sys.dm_os_waiting_tasks pour déterminer si un processus est bloqué
  2. Déterminez le temps limite (par défaut illimité) via l’instruction Set Lock_Timeout 

Exemple d’utilisation

Les niveaux d’isolation peuvent être considérés comme un “hint” à placer à la suite de la requête :

Select * from dbo.Client With(NoLock)

Comme nous avons précisé que NoLock = ReadUncommited, on peut donc écrire :

Select * from dbo.Client With(ReadUncommitted)

Effectuer un lot de requêtes sur un niveau particulier:

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ

BEGIN TRANSACTION
SELECT * FROM Client
SELECT * FROM Employe

COMMIT TRANSACTION

SET TRANSACTION ISOLATION LEVEL READ COMMITTED

Des ressources !

Msdn biensur : http://msdn.microsoft.com/fr-fr/library/tcbchxcb(VS.80).aspx

Mon pote JP : http://blog.djeepy1.net/post/2008/04/24/De-lutilisation-de-NOLOCK

Christian Robert, MVP SQL SERVER : http://blogs.codes-sources.com/christian/archive/2007/03/08/sql-server-les-verrous-et-l-utilisation-de-nolock.aspx

Craig Freedman : http://blogs.msdn.com/craigfr/archive/tags/Isolation+Levels/default.aspx

MVP, one more time !
Et voilà, j’en reprends pour un an !
Je viens de recevoir mon renouvellement MVP, ce qui constitue LA bonne nouvelle de la journée :)

Et non, ce n’est toujours pas un poisson d’Avril, mais que voulez vous, j’ai été nommé MVP l’année dernière le 1er Avril et il en sera ainsi de mon renouvellement chaque année :)

BDC 2009 : Bewise Day Conference 2009 !

Les innovations technologiques Microsoft pour les développeurs et les IT pro présentées par les meilleurs experts de Bewise et Microsoft !
Evénement gratuit destiné aux professionnels du développement et de l'IT, aux enseignants et étudiants, venez découvrir:

  • 2 Sessions Plénières
  • 8 Sessions Dédiées IT Pro et Développeurs
  • 25 Espaces de démonstration
  • 40 Experts Bewise & Microsoft

clip_image001

Pour ma part vous trouverez au stand DGD et en session autour de AZURE pour la partie Dev et Powershell pour la partie IT !

See you là bas (con !)

Posted: mars 24 2009, 03:11 par Mimetis | avec no comments
Classé sous :
Devinez la suite.. sinon rendez vous demain !

clip_image001

http://www.dailymotion.com/StateToujours/video/14719473

Rendez vous demain :)

WebCast TechDays 2009 Dispo

Bonjour à tous,

Les webcasts des techdays 2009 sont disponibles.

Concernant ma session, vous pouvez maintenant la consulter directement à cette adresse.

Vous y trouverez aussi les sources et les slides

Bon visionnage !

Plus de Messages Page suivante »