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
)
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 :
http://www.techheadbrothers.com/Articles.aspx/sql-server-six-facons-administrer-serveur-sql-server
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 !

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 !
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
Vous les trouverez dans la table __sysSyncArticle
1: Select * from __sysSyncArticles
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:
- Je supprime la base de données sdf existante
- Je “Copie colle” la base de données master en la renommant
- 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 !
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 :
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 :
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
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
Et hop un ti lien pour vous tenir informer :
http://www.microsoft.com/sqlserver/2008/en/us/r2.aspx
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 :
Aprés le SP1 :

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 :
Et dans le deuxième :
Plus parlant non ? :)
Go Go Go !
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
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 :
- ReadUncommitted
- ReadCommitted (niveau par défaut)
- RepeatableRead
- 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 :
- La première met à jour des données en enchainant les opérations d’Update, ou Delete, le tout dans une transaction.
- 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 :
: Vous avez un niveau d’isolation qui permet de lire une donnée dans cet état.
: 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 | |  |  |
ReadCommited | |  |  |
RepeatableRead |  |  |  |
Serializable |  |  |  |
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 :
- Utilisez la vue sys.dm_os_waiting_tasks pour déterminer si un processus est bloqué
- 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
| 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 :)
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

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 !)
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 »