Les livres de la Bible, Sally Tagholm, Livres, LaProcure.com\nLes livres de la Bible Sally Tagholm, Andrea Mills Mon panier\nAndrea Bouy, Philippe Charpentier de Beauvillé, Florence Leroy, Emmanuelle Rémond-Dalyac, Julian de Narvaez\nDes récits d'épisodes de l'Ancien et du Nouveau Testament et des informations sur l'histoire, la géographie et l'archéologie bibliques. ©Electre 2021\nUn trésor pour chaque enfant\n133 récits bibliques magnifiquement illustrés.\nUne écriture adaptée aux enfants. Un ouvrage qui raconte avec fidélité\nles principaux épisodes de l'Ancien et du Nouveau Testament.\nUne exceptionnelle documentation :\ncartes, photos, objets archéologiques\npour découvrir la vie quotidienne\ndes habitants de la Terre Promise.\nUne introduction à la richesse\ndu patrimoine chrétien\ndepuis les mosaïques de l'Antiquité\njusqu'aux tableaux des grands maîtres :\nFra Angelico, Raphaël, Rembrandt.


Un gros combat s'annonce à Nantes pour l'ADA Blois ! - ADA Blois Basket\nUn gros combat s’annonce à Nantes pour l’ADA Blois !\n9 janvier 2020 9 janvier 2020 Johan GALLON Equipe Pro B\nAprès une coupure de 15 jours, le championnat de Pro B reprend ses droits vendredi soir avec un déplacement à Nantes pour l’ADA Basket ! Pour ce choc de haut de tableau, Mickaël Hay et Dominique Roinard ne pourront pas compter sur l’intégralité de leur effectif. Mais notre équipe va se battre avec ses armes et fera tout pour poser problèmes à cette formation Nantaise qui n’a concédé qu’une seule défaite dans son antre !\nC’est dans la belle salle de la Trocardière et face à une belle équipe de Nantes que l’ADA Basket va entamer l’année 2020 ! Sur le papier, l’affiche s’annonce en effet prometteuse entre les deux premiers de la Pro B ! Avec 9 victoires pour 4 défaites, Nantes réalise en effet un très début de championnat. Si on ajoute à cela une Finale de Leaders Cup (face à Antibes en Février prochain) et un bon parcours en Coupe de France (Nantes est qualifié pour les 1/8èmes de Finale), on peut presque parler d’un début de saison idéal pour le NBH.\nPas loin de se qualifier pour les playoffs la saison dernière (10ème avec 18V pour 16D), le club Nantais a effectué un recrutement judicieux et cohérent cet été. Parmi les arrivées, on peut noter celle de René Rougeau qui, à presque 34 ans, est le joueur qui présente la meilleure évaluation en Pro B ! (21,9). Très présent au scoring (15,5 points) et au rebond (8,8), le joueur US de Nantes est une sorte de couteau Suisse dont il faudra forcément se méfier ! Son duel avec Tyren Johnson, meilleur scoreur du championnat (19,4 points), s’annonce d’ailleurs explosif ! Mais bien entendu, la rencontre ne se résumera pas à ce simple duel ! Malgré les absences, l’ADA devra trouver des solutions pour rivaliser avec une équipe équipe Nantaise qui va certainement mettre beaucoup d’intensité dès le début de la rencontre !\nNantes, meilleure défense du championnat\nAvec seulement 70,5 points encaissés en moyenne par match, le NBH possède la meilleure défense du championnat. On aura donc face à face la meilleure attaque (85,8 points en moyenne pour l’ADA) face à la meilleure défense.\nThomas Cornely et Kris Joseph forfaits\nVictime d’une entorse à la cheville en début de semaine, Thomas Cornely n’a pas effectué le déplacement à Nantes. Kris Joseph, qui n’a pas pu reprendre l’entrainement avec le groupe, suit toujours un traitement concernant son genou et n’a pas effectué le déplacement à Nantes.\nNantes Basket Hermine vs ADA Blois Basket – Vendredi 10 Janvier à 20h30 – Salle de la Trocardière\nVous êtes déjà très nombreux à être en possession d’un billet pour la prochaine rencontre au Jeu de Paume face à Aix-Maurienne. Ne tardez pas à réserver vos places si vous souhaitez obtenir des places assises.\n← Blois vs Aix-Maurienne – Samedi 18 Janvier : Billetterie ouverte !\nVidéo : Le shoot à 3 pts décisif de Lucas Bourhis à Nantes ! →


Techniques avancées pour SQL Server 2005 et .NET: 2007\nHands On Labs chez Winwise !\nLe mois prochain, Winwise, en coopération avec le GUSS (Groupe d'Utilisateurs de SQL server), vous propose de découvrir gratuitement SQL Server au travers de plusieurs Hands-On-Labs.\nLes différents ateliers seront présentés par les formateurs de Winwise, dont votre serviteur.\nJe ne peux donc que vous encourager à vous inscrire pour cet événement, et ce très rapidement car les places sont limitées !\nPublié par Doohan à 16:59 1 commentaire:\nLibellés : Analysis Services 2005, Information, Reporting Services 2005, SQL Server 2005, Winwise\nHaute disponibilité avec SQL Server - Quelle solution pour quel résultat ?\nSQL Server est depuis longtemps rompu à la nécessaire disponibilité des données. Mais quelles sont les différentes solutions proposées, et que peut-on en attendre ?\nJe vous propose aujourd'hui un résumé de chaque solution proposée par Microsoft avec SQL Server 2005, et ce que vous pouvez raisonnablement espérer de chacune d'entre elles.\nLOG SHIPPING ET MIRRORING - DEUX SOLUTIONS, UNE FINALITE\nBeaucoup ont entendu parler de Log Shipping, nombreux sont ceux qui ont entendu parler de mirroring... Mais pour quel résultat, quel impact sur l'existant, quelle maintenance ?\nLe Log Shipping est reconnu depuis longtemps comme une solution peu onéreuse, simple à mettre en oeuvre, mais assez délicate à exploiter, en particulier lors d'un basculement de serveur. En effet, le basculement est manuel, la perte des dernières données probable, car le temps d'indisponibilité fluctue en fonction de la réactivité du DBA.\nLe Mirroring peut être vu comme une solution de Log Shipping évoluée. Si le mode SAFETY OFF est sélectionné, le Mirroring se comporte en effet comme le Log Shipping, recopiant le journal de transaction au fil de l'eau. Le temps de latence reste globalement plus faible que dans le cas du Log Shipping, et la mise en oeuvre est totalement automatisée.\nEn revanche, si l'on sélectionne le mode SAFETY FULL, le Mirroring permet de garantir à l'utilisateur une parfaite synchronisation des bases de données, ce que ne permet pas le Log Shipping.\nDe plus, l'utilisation d'un WITNESS permet d'automatiser le processus de basculement des serveurs en cas d'erreur.\nQu'il s'agisse de Log Shipping ou de Mirroring, l'initialisation des bases de données s'effectue par Backup/Restore.\nDevant ces similitudes, je privilégie donc largement le Mirroring sous SQL Server 2005, qui permet un temps de latence bien plus faible que son copain le Log Shipping.\nDe plus l'utilisation d'un WITNESS assure un basculement automatique des plus appréciables, et qui plus est l'un des plus rapides du marché avec un temps d'absence de service inférieur à 5 secondes.\nREPLICATION ET DISTRIBUTION DES DONNEES\nL'utilisation de la distribution des données comme moyen de haute disponibilité est une méthode couramment utilisée.\nIl existe de nombreux moyens de distribuer ses données. Le plus simpliste reste la copie par batch des données à intervalle régulier. Cette méthode très simple à mettre en oeuvre s'apparente dans les applications à du Log Shipping, même si son procédé est radicalement différent. De plus, il est possible d'utiliser la base de données ainsi obtenue en lecture par exemple.\nPour les bases de faible volumétrie et supportant le risque de la perte des données les plus récentes, la réplication snapshot correspond aussi à cette problématique. En revanche, contrairement au batch de recopie, la réplication snapshot supporte difficilement les très grosses volumétries.\nEnfin, pour une distribution assurant une plus grande fraîcheur de données, la réplication transactionnelle offre également un compromis intéressant. Là encore, les données sont accessibles en lecture. En revanche, la publication transactionnelle doit être désactivée pour effectuer quelque changement que ce soit dans la structure des données. De plus, la réplication transactionnelle s'avère souvent très fragile dès qu'une opération de maintenance sur le journal de transactions est nécessaire.\nLa distribution des données, qu'il s'agisse d'un batch ou d'une réplication, aussi faible son temps de latence soit-il, n'est pas à proprement parler une véritable solution de haute disponibilité. En revanche, il peut s'agir d'un compromis efficace pour pallier à une éventuelle défaillance du système tout en conservant l'utilisation de toutes les machines achetées.\nLe clustering reste la méthode reine de la haute disponibilité, permettant entre autres de ne spécifier qu'une seule adresse réseau pour plusieurs ordinateurs physiques, assurant ainsi un basculement transparent pour les applications clientes.\nPour être mis en oeuvre, le clustering demande des connaissances avancées tant sur la partie SQL Server que sur le système d'exploitation.\nLe point noir du clustering proposé par Microsoft reste l'inactivité des serveurs de secours, induisant un coût d'immobilisation supplémentaire. De plus, le clustering n'apporte aucune solution en cas de destruction physique des supports de stockage - incendie par exemple - étant donné que ces ressources physiques sont partagées entre les différents noeuds (je n'évoquerai pas ici les possibilités de géo-cluster pour des raisons de simplification).\nConcernant les surcoûts d'immobilisation, il faut tout de même noter que dans le cadre du clustering, tout comme dans le cadre du mirroring, un serveur de secours actif moins de 30 jours par an ne requiert aucune licence.\nLe délai de basculement de serveur dans le cas du clustering avoisine les 30 secondes, à mettre en parallèle avec les 5 secondes du mirroring.\nContrairement à son grand concurrent ORACLE, SQL Server ne dispose pas d'une réelle solution de clustering Actif-Actif. Microsoft préfère en effet privilégier l'accroissement des performances monoserveurs. Pour ceux dont l'architecture nécessiterait un scale out, il est possible d'implémenter une solution alternative consistant à créer deux clusters Actif-Passif croisés, simulant de fait le clustering Actif-Actif.\nREPLICATION PEER-TO-PEER ET MIRRORING "ACTIF-PASSIF"\nMicrosoft offre également d'autres méthodes permettant d'utiliser les différentes machines tout en limitant les pertes de données potentielles en cas de crash système.\nLa plus ancienne des deux méthodes que je vous présenterai ici est la réplication Peer-To-Peer. Il ne s'agit ni plus ni moins que d'une réplication transactionnelle bi-directionnelle.\nCe type de réplication est extrêmement utile dans le cadre de sites de sauvegarde délocalisés. De plus, tous les serveurs sont actifs. Si l'on multiplie les noeuds de réplication, cette méthode s'avère très efficace et permet même d'envisager un partage de charge (Load Balancing). En revanche, contrairement au clustering, chaque machine est identifiée individuellement, et par conséquent le partage de charge doit être géré à un niveau plus bas, par exemple à l'aide d'un switch actif.\nUne autre technique, s'appuyant sur le mirroring, permet d'avoir accès en lecture aux bases de données. Cette méthode nécessite un partage de ressource à l'aide, par exemple, d'une baie SAN, et un seul serveur accède à la base en écriture. Cette solution peut être très intéressante dans le cas de DataWareHouse nécessitant une grande capacité de calcul lors des lectures. Un des serveurs mirroirs prend le relai en cas de panne du serveur maître.\nLa réplication Peer-To-Peer est une solution largement répandue, mais souvent utilisée pour ses capacités de rapprochement des données des utilisateurs plus que pour la haute disponibilité ainsi procurée.\nJe concluerai ce post en faisant le constat suivant : le besoin métier pilote évidemment le choix technologique, tant par les aspects financiers que par les aspects de criticité des données. Il est donc primordial de bien prendre en compte tous les éléments avant de définir une architecture de serveurs de bases de données, cela conditionnant également le développement des applications gravitant autour de celle-ci.\nPublié par Doohan à 14:39 2 commentaires:\nLibellés : Architecture, Configuration système, Réplication, SQL Server 2005\nMise en oeuvre d'un test de validité avec SQL Server Integration Services\nSi SSIS présente de grands avantages en matière de débugging de part sa conception, il n'en demeure pas moins un outil largement perfectible sur un certain nombre de points.\nLe premier d'entre eux est sans doute la faiblesse des bibliothèques de fonctions accessibles dans les tâches de conversions de données. En effet, les tests classiques permettant d'identifier la bonne typologie de la donnée importée dans un Data Flow (ISDATE, ISNUMERIC, ...) ne peuvent pas être effectués autrement qu'à l'aide d'une tâche Script Component... Une tâche souvent fastidieuse et longue à développer, en particulier si le nombre de champs à tester est particulièrement important.\nSi devant cette lacune importante la solution de redévelopper un composant spécifique pour SSIS vient immédiatement à l'esprit, la réalité du déploiement sur les postes clients nous rattrape inexorablement. En effet, il est nécessaire de déployer le dit composant sur tous les serveurs impactés ce qui peut s'avérer rapidement délicat...\nJe viens donc ici vous proposer une solution alternative, bien que peu satisfaisante pour les perfectionnistes dont je fais partie : l'utilisation de tables temporaires !\nEn effet, si SSIS ne possède pas les fonctions adéquates, le Transact-SQL peut venir à notre secours !\nIl convient donc d'intégrer la source de données dans une table temporaire indépendante du format des données - par exemple des champs VARCHAR - puis d'effectuer les transformations et les vérifications d'intégrité dans le cadre d'une procédure stockée...\nSi cette solution demeure peu reluisante, elle reste réellement la seule solution viable tant que SQL Server Integration Services n'offrira pas une bibliothèque de composants et de fonctions satifaisante...\nPublié par Doohan à 23:23 Aucun commentaire:\nLibellés : Développement, Integration Services 2005, SQL Server 2005\nDéplacement des bases de données système SQL Server 2005...\nVoici un post qui ne devrait pas laisser indifférentes les personnes qui ont procédé au déplacement laborieux de toutes les bases d'une instance SQL, en particulier les bases système !\nEn effet, si le déplacement de ces bases est largement documenté dans la MSDN, il n'en demeure pas moins extrêmement long et fastidieux d'entreprendre une telle opération...\nOn note cependant l'effort important que Microsoft a consenti pour simplifier ce déplacement entre la version SQL Server 2000 et SQL Server 2005.\nPour mémoire, vous trouverez ici la documentation concernant le déplacement des fichiers des bases de données système de SQL Server 2000 et de SQL Server 7.\nSous SQL Server 2005, seul le déplacement des bases de données Master et mssqlsystemresource, nouvelle base de données qui n'existait pas sous SQL Server 2000, nécessite un traitement particulier.\nJe vous propose donc ici un script customisable qui devrait ravir les grands et les petits qui souhaitent déplacer leurs bases de données système SQL Server 2005 en un clic !\nPour exploiter le code suivant, sauvegardez le dans un fichier Visual Basic Script (par exemple c:\_movedb.vbs) et lancez le !\nnewliner = Replace(s,"\_n",VBCrLf)\nshcmd.Run "cmd /C " & s,1,true\nbase(0) = array("ma","","","","master.mdf","mastlog.ldf")\nbase(1) = array("rs","mssqlsystemresource","data","log","mssqlsystemresource.mdf","mssqlsystemresource.ldf")\nbase(2) = array("mo","model","modeldev","modellog","model.mdf","modellog.ldf")\nbase(3) = array("db","msdb","MSDBData","MSDBLog","MSDBData.mdf","MSDBLog.ldf")\nbase(4) = array("tp","tempdb","tempdev","templog","tempdb.mdf","templog.ldf")\nbaseray = array()\nFor Each row in base\nIf row(0) = s Then\nbaseray = row\n' Déplace une base de données autre que "master" et "resource"\nSub movenormal(row, s)\ndatabase = row(1)\nIf s = "d" Then\nnom = row(2)\nfichier = row(4)\nElseif s = "j" Then\nnom = row(3)\nfichier = row(5)\ncommande("sqlcmd -S " & instance & " -Q ""ALTER DATABASE " & database & " MODIFY FILE (name=" & nom & ", FILENAME='" & dest & "\_" & fichier & "')""")\ncommande("net stop " & serviceinstance & " /yes")\ncommande("move """ & src & "\_" & fichier & """ """ & dest & """ ")\ncommande("net start " & serviceinstance)\n' Déplace "master" et "resource"\nrow = base(0)\nfichierd = row(4)\nfichierj = row(5)\n'SEARCH and replace parameters\ncle = "HKEY_LOCAL_MACHINE\_SOFTWARE\_Microsoft\_Microsoft SQL Server\_Instance Names\_SQL\_" & keyinstance\ncleinstance = shcmd.RegRead(cle)\ncle = "HKEY_LOCAL_MACHINE\_SOFTWARE\_Microsoft\_Microsoft SQL Server\_" & cleinstance & "\_MSSQLServer\_Parameters"\nshcmd.RegWrite cle & "\_SQLArg0", "-d" & dest & "\_" + fichierd, "REG_SZ"\ncommande("move """ & src & "\_" & fichierd & """ """ & dest & """ ")\nshcmd.RegWrite cle & "\_SQLArg2", "-l" & dest & "\_" + fichierj, "REG_SZ"\ncommande("move """ & src & "\_" + fichierj & """ """ & dest & """ ")\ncommande("net start " + serviceinstance + " /f /T3608")\nrow = base(1)\nnomd = row(2)\nnomj = row(3)\ncommande("sqlcmd -S " & instance & " -Q ""ALTER DATABASE " & database & " MODIFY FILE (name=" & nomd & ", FILENAME='" & dest & "\_" & fichierd & "')""")\ncommande("sqlcmd -S " & instance & " -Q ""ALTER DATABASE " & database & " MODIFY FILE (name=" & nomj & ", FILENAME='" & dest & "\_" & fichierj & "')""")\ncommande("move """ & src & "\_" & fichierj & """ """ & dest & """ ")\ncommande("sqlcmd -S " & instance & " -Q ""ALTER DATABASE " & database & " SET READ_ONLY""")\nset shcmd = WScript.CreateObject("WScript.Shell")\n' Variables à redéfinir par InputBox ou manuellement:\n' nom du serveur SQL et de l'instance dont on déplace les basese\nserveur = InputBox("Nom du serveur")\nIf serveur = "" Then WScript.Quit\ninstance = InputBox("Nom de l'instance (Pour l'instance par défaut, laisser le champ vide)")\nIf Replace(instance, " ", "") = "" Then\ninstance = serveur\nserviceinstance = "MSSQLSERVER"\nkeyinstance = "MSSQLSERVER"\ninstance = serveur & "\_" & instance\nserviceinstance = "MSSQL$" & instance\nkeyinstance = instance\nsrc = InputBox("Chemin source")\ndest = InputBox("Chemin destination")\nline = "Base(s) à déplacer:\_nmr: master + resource\_ndb: msdbdata\_nmo: model\_ntp: tempdb\_n(ex: 'mr, tp')"\ndb = InputBox(newliner(line))\nline = "Déplacer (d)onnées, (j)ournaux\_n ou les deux (d,j)"\ndj = InputBox(newliner(line))\n'line = "Paramêtres:\_n- source: " + src + "\_n- destination: " + dest + "\_n- bases: " + db + "\_n- objets: " + dj\ndbpar = Split(Replace(db," ",""),",")\ndjpar = Split(Replace(dj," ",""),",")\nFor Each db In dbpar\nIf db <> "mr" Then\nr = baseray(db)\nIf ubound(r) > -1 Then\nFor Each dj in djpar\nmovenormal r, dj\nPublié par Doohan à 22:37 Aucun commentaire:\nLibellés : Administration, SQL Server 2000, SQL Server 2005, SQL Server 7\nGestion des requêtes sur les vues partitionnées...\nSuite à de nombreux problèmes rencontrés avec les vues partitionnées, je souhaite clarifier certaines règles d'usage pour éviter tout problème avec ces éléments capricieux.\nTout d'abord, je voudrai parler du cas des champs date utilisés comme clé de partition. L'optimiseur de SQL Server n'est pas capable d'interpréter correctement les clauses CHECK sur ce type de données.\nLe plus simple est alors de créer un champ acceptant l'optimisation des vues partitionnées. Par exemple, le plus simple avec une clé de partition sur l'année est de créer un champ de type INT contenant cette information.\nAinsi, la clé de partition ne sera plus le champ date qui nous posait problème, mais bien le champ INT qui lui sera supporté sans aucun problème.\nJe souhaiterai ensuite évoquer les problèmes liés au mode de requêtage. En effet, l'optimiseur de requête de SQL Server effectuant le processus de Paramétrisation avant le processus de Planification de la requête, SQL Server ne procède pas aux optimisations nécessaires lors de la requête suivante :\nSET @TEST = 50\nSELECT Id, PartitionCol FROM VALL WHERE PartitionCol = @TEST\nNous pouvons alors privilégier le SQL Dynamique dans ce cas bien particulier, seule solution pour obtenir le résultat escompté.\nEnfin, je voulai attirer ici l'attention sur l'importance des statistiques dans le cadre de l'utilisation des vues partitionnées. En effet, de mauvaises statistiques induisent le stockage d'un mauvais plan d'exécution. Les performances s'en ressentent alors de façon très importante, en particulier dans le cadre de l'utilisation de procédures stockées, où en cas de paramétrisation des requêtes ad hoc.\nPublié par Doohan à 15:10 Aucun commentaire:\nLibellés : Développement, SQL Server 2000, SQL Server 2005\nOptimisation des requêtes à l'aide des vues partitionnées\nLes vues partitionnées, tout comme les tables partagées dans SQL Server 2005, sont un moyen simple de répartir ses données sur plusieurs filegroups afin d'alléger les coûts de maintenance. Il est même possible à l'aide des vues partitionnées distribuées de répartir la charge, tout simplement en stockant les différentes tables sur différents serveurs.\nLes vues partitionnées regroupent donc les données de plusieurs tables dont la structure est identique. Ainsi, toutes les opérations d'insertion, de modification et de suppression peuvent être effectuées sur une vue partitionnée, moyennant une condition sine qua non : la clé de répartion doit faire partie de la clé primaire de chacune des tables aggrégées.\nSi les vues partitionnées sont très couramment utilisées pour aggréger les données dans le cadre d'infocentres multisites, les vues partitionnées n'en demeurent pas moins la seule façon de faire du partitionnement horizontal sous SQL Server 2000.\nDès lors, ces vues s'avèrent incontournables sous SQL Server 2000 pour architecturer une solution à forte volumétrie ou disposant d'une fenêtre de données glissante - dans ce cas particulier, la clé de répartition est couramment la date.\nAfin de mieux comprendre comment optimiser une vue partitionnée, commençons par un exemple. Créons deux tables possédant la même structure.\nCREATE TABLE TB1 (Id INT NOT NULL CONSTRAINT PK_TB1 PRIMARY KEY, PartitionCol INT NOT NULL)\nCREATE TABLE TB2 (Id INT NOT NULL CONSTRAINT PK_TB2 PRIMARY KEY, PartitionCol INT NOT NULL)\nLa vue suivante est alors la vue "partitionnée" qui permet de concaténer les données de ces deux tables :\nCREATE VIEW VALL AS SELECT Id, PartitionCol FROM TB1 UNION SELECT Id, PartitionCol FROM TB2\nCependant, cette vue est loin d'optimiser les performances, effectuant même une tâche de reconnaissance afin d'éviter les doublons.\nAdmettons maintenant que nos données soient réparties de façon bien distincte selon la clé de répartition. Nous pouvons alors de façon sûre écrire :\nALTER VIEW VALL AS SELECT Id, PartitionCol FROM TB1 UNION ALL SELECT Id, PartitionCol FROM TB2\nCette vue est maintenant nettement plus performante, mais reste toujours sans grand intérêt.\nAppliquons maintenant des contraintes de type CHECK afin d'assurer au système la bonne séparation des données, par exemple en séparant les éléments négatifs des éléments positifs :\nALTER TABLE TB1 ADD CONSTRAINT CK_TB1_PartitionCol CHECK (PartitionCol < 0)\nALTER TABLE TB2 ADD CONSTRAINT CK_TB2_PartitionCol CHECK (PartitionCol >= 0)\nEn exploitant notre vue à l'aide de la commande suivante, on obtient enfin le résultat attendu :\nSELECT Id, PartitionCol FROM VALL WHERE PartitionCol = 50\nEn effet, on peut voir dans le plan d'exécution de notre requête que seule la table TB2 est effectivement requêtée.\nNous pouvons maintenant procéder à la dernière étape de l'optimisation de notre vue partitionnée. Pour cela il nous faut ajouter notre clé de répartition dans la clé primaire. Ainsi, nous pourrons utiliser notre vue partitionnée pour insérer et modifier nos données.\nALTER TABLE TB1 DROP CONSTRAINT PK_TB1\nALTER TABLE TB1 ADD CONSTRAINT PK_TB1 PRIMARY KEY (Id, PartitionCol)\nALTER TABLE TB2 DROP CONSTRAINT PK_TB2\nALTER TABLE TB2 ADD CONSTRAINT PK_TB2 PRIMARY KEY (Id, PartitionCol)\nLa commande suivante est alors possible !!!\nINSERT INTO VALL (Id, PartitionCol) VALUES (10, 1000)\nJe conviens aisément que ces vues partitionnées présentent de nombreuses difficultés d'implémentation, et qu'en matière de "fenêtre glissante", rien ne vaut les tables partitionnées de SQL Server 2005. En revanche, qu'il s'agisse d'une architecture sous SQL Server 2000 ou une architecture distribuée sur plusieurs serveurs, les vues partitionnées s'avèrent être une arme redoutable dans l'arsenal du développeur Base de Données.\nA bientôt, et tous à vos benchs !\nPublié par Doohan à 10:05 Aucun commentaire:\nHaute disponibilité et licences SQL Server 2005\nEn attendant que je trouve une solution pour publier un post qui me tient à coeur, je viens vous parler d'un sujet qui intéresse un jour ou l'autre tout le monde : les sous !\nEn effet, la mise en oeuvre d'une solution de haute disponibilité est souvent vue par beaucoup de clients comme un poste financier des plus onéreux. Je viens ici démonter ces préjugés... La politique de licences de SQL Server 2005 permet aux sociétés disposant de moyens financiers limités d'obtenir une solution robuste à faible coût.\nLe premier des préjugés que je voudrais casser ici, sans doute lié à la réalité de la version précédente de SQL Server, c'est que SQL Server 2005 ne nécessite pas l'acquisition d'une édition Entreprise pour permettre de mettre en oeuvre une solution de haute disponibilité. En effet, l'édition Standard supporte les solutions de mirroring, de clustering et de log shipping... Et bien entendu, la distribution des données !\nLe deuxième est un aspect de licence qui revient souvent dans mes entretiens avec mes clients : les solutions de haute disponibilités telles que le mirroring et le clustering étant des solutions dites "Actif-Passif" - comprenez que le serveur de backup est en position d'attente et ne peut servir l'utilisateur - Microsoft considère que vous n'avez pas à investir dans une licence pour votre serveur de backup si celui-ci ne remplace pas le serveur principal plus de 30 jours par an !\nBien entendu, des limites existent, puisque, par exemple, le mirroring proposé dans l'édition Standard ne supporte que 2 noeuds d'au plus 2 processeurs chacun... Mais quand on rappelle que le serveur témoin peut être matérialisé par un simple SQL Server 2005 Express, il apparaît évident que SQL Server 2005 propose une solution de haute disponibilité tout à fait accessible.\nPublié par Doohan à 22:04 Aucun commentaire:\nLibellés : Configuration système, Information, SQL Server 2005\nIncorporer des rapports Reporting Services 2005 dans une application Web\nAu cours des différents ateliers et des formations que j'ai animés sur Reporting Services 2005, une question revient régulièrement : l'interopérabilité.\nEn effet, si Reporting Services est très bien intégré dans le monde .Net, notamment avec le composant ReportViewer, comment peut-on intégrer un rapport dans une page ASP classique ? Comment piloter Reporting Services depuis une simple FRAME ?\nSi l'intégration de Reporting Services à travers l'URL du serveur de rapports est relativement simple, il n'en est en revanche pas de même pour les paramètres permettant de personnaliser l'affichage. Et rares sont les éléments de documentation à notre disposition. Je propose donc ici une sélection de paramètres utiles pour l'intégration de rapports Reporting Services dans des pages Web.\nCréons par exemple le rapport "Mon Rapport.rdl" que l'on stocke dans un nouveau répertoire "Test" de notre serveur Reporting Services.\nDe façon à tester tous les paramètres, nous ajoutons un paramètre à notre rapport nommé "DateDuJour".\nPar défaut, l'URL http://localhost/ReportServer?%2fTest%2fMon+Rapport me permet d'obtenir mon rapport - en partant bien entendu du postulat que le serveur de rapports se trouve bien à l'adresse http://localhost/ReportServer et que le gestionnaire de rapports se situe à l'adresse http://localhost/Reports.\nIl est possible d'éviter à l'utilisateur d'avoir à saisir le paramètre en ajoutant la valeur du paramètre dans l'URL :\nCependant, le rendu obtenu présente toujours une lourde barre d'outils et permet à l'utilisateur de modifier selon sa volonté les paramètres du rapport.\nIl existe en fait de nombreux paramètres permettant de personnaliser l'affichage de notre rapport. Nous en distinguons 2 grandes catégories :\n- Les paramètres du serveur préfixés par le namespace rs,\n- Les paramètres de rendu des composants préfixés par le namespace rc.\nVoici donc les paramètres du serveur les plus utiles :\nCe paramètre définit l'action menée par le serveur. Par défaut, la valeur de ce paramètre est définie à "Render" pour les rapports et "ListChildren" pour les dossiers.\nOn trouve également deux autres valeurs possibles de ce paramètre : "GetRessourceContents" et "GetDataSourceContents".\nSi l'on spécifie ce paramètre, l'URL de notre rapport devient :\nLe format est sans aucun doute l'un des paramètres préférés des utilisateurs. Il permet en effet de définir le format du rendu parmi les formats existants (HTML3.2, HTML4.0, HTMLOWC, MHTML, IMAGE, EXCEL, CSV, PDF, XML) ou d'autres extensions si elles sont disponibles sur le serveur.\nAinsi, si l'on souhaite obtenir notre rapport en PDF, l'URL de notre rapport devient :\nCe paramètre permet de s'affranchir de la culture du navigateur client en spécifiant une culture spécifique. La valeur par défaut est la valeur du navigateur client.\nNous pouvons par exemple forcer la culture de notre rapport en utilisant l'URL suivante :\nLe paramètre Snapshot permet d'utiliser la capture d'un rapport effectuée à une date et une heure précises. Cette capture instantanée est stockée dans la base de données Reporting Services.\nCe paramètre reçoit une date longue sans timezone. Notre URL devient :\nCe paramètre nécessite bien évidemment que l'historique du rapport soit activée.\nCe paramètre permet de forcer le navigateur à vider son cache et à recharger une nouvelle version du rapport.\nDans notre cas, l'URL devient :\nUn paramètre qui permet d'identifier une session active lorsque le serveur de rapport n'utilise pas les cookies.\nL'URL prend alors la forme suivante :\nEtudions maintenant quelques paramètres de rendu utiles :\nCe paramètre permet d'afficher ou de cacher la totalité de la barre d'outils.\nPar exemple, si nous souhaitons cacher la barre d'outils, notre URL devient :\nLa valeur par défaut est évidemment définie à "true".\nCe paramètre permet de ne cacher que la partie édition des paramètres du rapport de la barre d'outils. La valeur de ce paramètre n'a donc pas d'incidence si le précédent est défini à "false".\nAinsi, si nous souhaitons que les paramètres du rapport restent figés, notre URL devient :\nCe paramètre permet d'afficher la page du rapport souhaitée. Par défaut, Reporting Services affiche la première page du rapport.\nPour afficher la deuxième page, nous écrivons :\nCe paramètre est particulièrement utile si l'on souhaite développer sa propre barre d'outils.\nIl s'agit d'un paramètre de rendu ne fonctionnant qu'avec les versions d'Internet Explorer 5.0 ou ultérieures.\nLes valeurs possibles pour ce paramètre sont :\n* "page+width" pour occuper toute la largeur du navigateur,\n* "whole+page" pour optimiser l'espace dans le navigateur pour visualiser le rapport sur une seule page,\n* un entier correspondant à un pourcentage ; la valeur par défaut est "100".\nUtile si votre rapport contient des hyperliens, ce paramètre permet de préciser la fenêtre ou la frame de destination des liens de votre rapport.\nLes différentes valeurs possibles sont entre autres :\n* Ou tout autre nom de cible valide.\n- rc:FindString, rc:StartFind, rc:EndFind\nLe paramètre rc:FindString permet de filtrer les enregistrements du rapport. Ce paramètre est souvent utilisé conjointement avec les paramètres rc:StartFind et rc:EndFind qui permettent de borner la recherche.\nPar exemple, pour rechercher la chaîne de caractères "Test" dans les 2 premières pages du rapport, l'URL sera :\nLe dernier paramètre que je développerai dans ce post permet de définir une feuille de style à appliquer sur le rapport.\nLa feuille de style CSS doit être présente dans le répertoire des styles, par défaut :\nC:\_Program Files\_Microsoft SQL Server\_MSSQL\_Reporting Services\_ReportServer\_Styles\nPour appliquer la feuille de style "MonStyle.css", l'URL devient :\nOn notera tout comme pour l'appel du rapport l'absence d'extension.\nJe concluerai par le fait que la majeure partie des paramètres présentés ici sont valables dès les services packs de Reporting Services 2000, et que par conséquent cet article ne s'adresse pas uniquement aux utilisateurs de Reporting Services 2005.\nPublié par Doohan à 15:38 1 commentaire:\nLibellés : Développement, Reporting Services 2000, Reporting Services 2005\nMaintenance des index SQL Server - Défragmentation et réindexation\nJe rencontre de plus en plus fréquemment le problème de la fragmentation des index.\nEn effet, lorsqu'un fort volume de données est inséré dans une table sans que cela ne soit prévu lors de la conception de la base de données, les index croissent de manière désordonnée...\nPour détecter une telle fragmentation, SQL Server 2000 offre la commande suivante :\nSi cette commande est toujours disponible sous SQL Server 2005 - et sera amenée à disparaitre dans les versions futures -, ce dernier fournit d'autres outils plus ergonomiques et plus précis pour les administrateurs. Parmi ces outils, on notera notamment la fonction dynamique suivante :\nIl existe plusieurs façons de corriger le problème de la fragmentation. Mais avant de voir ces différentes techniques, attachons-nous tout d'abord à la façon dont l'on peut éviter que cette fragmentation ne se produise...\nEn réalité, tout dépend du mode d'alimentation de la base de données. En effet, un batch de chargement sera traité différemment d'une insertion unitaire.\nDe la même manière, le milieu fonctionnel impose des contraites ne permettant pas toujours l'emploi de certaines techniques.\nVoyons tout d'abord le cas du batch de chargement : lors de l'exécution d'un batch, nous insérons généralement de grandes quantité de données. Ces batches s'exécutent habituellement de nuit, période de faible activité pour la base de données.\nDans ce cas, nous privilégierons la suppression de tous les index avant le chargement, et la recréation de ces index à la fin. Ceci présente un double avantage :\n- D'une part les index regénérés ne sont pas fragmentés, puisque tout frais\n- D'autre part le chargement des données est beaucoup plus rapide\nJe rappellerai ici que la clé primaire incluant un index unique doit également être supprimée dans ce cas - parce que non, ça n'arrive jamais qu'il y ait des personnes qui suppriment tous les index sauf celui de la clé primaire ;-).\nBien entendu, cette suppression des index implique une absence d'activité sur la base de données sur une plage horaire donnée.\nDans le cas des insertions unitaires, le volume de ces insertions est généralement prévisible et plus faible. Dans ces conditions, le mieux est de dimensionner le FILLFACTOR de l'index à une valeur assurant un espace suffisant pour son développement.\nAttention à ne pas tomber dans l'excès tout de même : un FILLFACTOR inférieur à 50 dégrade très fortement les performances et s'avère donc plus pénalisant que la fragmentation des index.\nAttachons-nous maintenant à une table dont les index sont largement fragmentés.\nUne solution simple reste la suppression des index pour les recréer. Cette solution présente l'avantage de toujours donner satisfaction et d'éviter l'explosion des groupes de fichiers.\nCette solution peut être effectuée dans un script traditionnel (DROP/CREATE) ou à l'aide de la commande DBCC DBREINDEX.\nL'inconvénient majeur de cette méthode reste la période d'inactivité de la base de données nécessaire pour la reconstruction des index, car ces opérations sont des opérations OFFLINE.\nLa commande DBCC DBREINDEX, toujours présente dans SQL Server 2005, possède un équivalent avec la commande ALTER INDEX avec l'option REBUILD.\nL'autre solution est la défragmentation (DBCC INDEXDEFRAG). Cette solution est une solution ONLINE. C'est la principale raison d'être de l'utilisation de cette commande. Cependant, il faut prendre garde à n'effectuer cette opération qu'après le chargement et non pas en parallèle au risque d'être totalement inefficace.\nLe principal inconvénient de cette solution est la place nécessaire sur les groupes de fichiers. En effet, la défragmentation déplace des blocs de données vers des emplacements libres, et par conséquent pose rapidement des problèmes de taille des groupes de fichiers si la fragmentation est très importante. De plus la défragmentation est une opération entièrement loggée générant de fait de très gros volumes dans les journaux de transactions.\nLà encore, SQL Server 2005 autorise toujours la commande DBCC INDEXDEFRAG, destinée à disparaître au profit du ALTER INDEX avec l'option REORGANIZE.\nEn conclusion, voici un récapitulatif des points importants :\n- La première des choses est de s'assurer dans le cadre du développement de la base de données que notre base de données ne se fragmentera pas ou peu. Pour cela, il ne faut pas hésiter à supprimer les index et à les recréer au cours des processus d'alimentation. La fragmentation des index n'est pas une fatalité.\n- Par la suite, un examen régulier de l'état de la base de données permet de surveiller l'évolution des index et le cas échéant d'entreprendre des actions.\n- Sous SQL Server 2000, on privilégiera la commande atomique DBCC DBREINDEX si l'opération peut être menée OFFLINE. On restreindra donc l'usage de la commande DBCC INDEXDEFRAG aux cas nécessitant que les données restent ONLINE.\n- Sous SQL Server 2005, on utilisera la commande ALTER INDEX avec les options REBUILD et REORGANIZE qui vont bien, cette commande étant la seule destinée à être maintenue dans les prochaines versions de SQL Server.\nPublié par Doohan à 22:06 3 commentaires:\nLibellés : Administration, Développement, SQL Server 2000, SQL Server 2005\nWinwise obtient la compétence Data Management !\nUne bonne nouvelle pour Winwise est tombée aujourd'hui : Winwise obtient la compétence Data Management auprès de Microsoft !\nUne nouvelle certes attendue depuis quelques semaines maintenant, mais une excellente nouvelle pour le pôle Data Management...\nPlein de travail en perspective :D\nPublié par Doohan à 20:24 2 commentaires:\nLibellés : Information, Winwise\nComment connecter SSIS à un classeur Excel 2007 via OLE DB...\nTout d'abord, je tiens à formuler ici un GRAND merci à Radu - bon anniversaire ;-) - pour l'astuce que je vais vous présenter ci-dessous : Comment connecter SSIS à un classeur Excel 2007 via OLE DB.\nEn effet, le fournisseur OLE DB Microsoft Jet ne permet pas de se connecter à Excel 2007.\nEn revanche, il est possible de se connecter à un classeur Excel 2007 via le fournisseur Microsoft Office 12.0 Access Database Engine OLE DB Provider.\nLa première étape consiste à créer la connexion OLE DB et à en spécifier le fournisseur. Puis, la source de données, qui est évidemment le fichier que vous souhaitez utiliser.\nCe qui parait surprenant, c'est qu'à ce stade, la connexion ne fonctionne pas.\nIl vous faut alors prendre vos petites mimines et dans l'onglet All des propriétés de votre connexion OLE DB taper la valeur "Excel 12.0" dans les propriétés étendues...\nOh, miracle de la technologie, la connexion devient alors opérationnelle...\nPublié par Doohan à 19:43 1 commentaire:\nLibellés : Développement, Integration Services 2005, Office 2007\nSQL Server 2005 plus strict que la norme XSD du W3C\nSuite à une question pertinente d'un client, j'ai cherché à comprendre pour quelle raison un schéma XSD me semblant parfaitement valable me générait une erreur à l'insertion des données...\nUne fois le problème isolé, j'ai pu effectuer le test suivant :\nDROP TABLE TestXML\nDROP XML SCHEMA COLLECTION TestDateRestriction\nDROP XML SCHEMA COLLECTION TestDateRestrictionTimeZone\nCREATE XML SCHEMA COLLECTION TestDateRestriction\n<xsd:schema targetNamespace="http://tempuri.org/TestDateRestriction.xsd" attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns="http://tempuri.org/TestDateRestriction.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema">\n<xsd:pattern value=".+T[^Z+-\_.]+" />\nCREATE XML SCHEMA COLLECTION TestDateRestrictionTimeZone\n<xsd:schema targetNamespace="http://tempuri.org/TestDateRestriction.xsd" attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns="http://tempuri.org/TestDateRestriction.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema">\n<xsd:pattern value=".+T[^+-\_.]+Z" />\nCREATE TABLE TestXML\nIdTB INT IDENTITY(1, 1) NOT NULL\nCONSTRAINT PK_TestXML PRIMARY KEY CLUSTERED,\nXMLTB XML (DOCUMENT TestDateRestriction) NULL,\nXMLTBTimeZone XML (DOCUMENT TestDateRestrictionTimeZone) NULL\nINSERT INTO TestXML (XMLTB) VALUES (N'<r:root xmlns:r="http://tempuri.org/TestDateRestriction.xsd">2005-03-22T08:35:00</r:root>')\nINSERT INTO TestXML (XMLTBTimeZone) VALUES (N'<r:root xmlns:r="http://tempuri.org/TestDateRestriction.xsd">2005-03-22T08:35:00Z</r:root>')\nLe résultat est le suivant : SQL Server 2005 n'autorise pas les dates sans spécification du flag Time Zone.\nOr, dans le cadre des types DateTime, la norme XSD n'impose nullement la présence de l'indication TimeZone spécifiée dans la norme ISO 8601 comme le spécifie le W3C dans les spécifications suivantes : http://www.w3.org/TR/2005/WD-xpath-datamodel-20050211/#storing-timezones...\nEn revanche, l'exemple précédent prouve définitivement le choix de SQL Server de se conformer à la norme ISO. Cette information est d'ailleurs confirmée par cet article de la MSDN : http://msdn2.microsoft.com/en-us/library/ms345115.aspx#sql25xmlbp_topic3 (section "Using xs:datetime, xs:date and xs:time").\nLa seule question qui me reste à élucider est la raison de ce choix exigeant qui pose un problème de compatibilité : le XSD dont je dispose est imposé et partagé par de nombreux utilisateurs et ne peut donc pas être modifié...\nPublié par Doohan à 20:19 2 commentaires:\nLibellés : Développement, SQL Server 2005, XML\nModification du blog !\nSuite aux multiples avis des différentes personnes qui m'ont fait de nombreuses remarques, ce blog vient de subir un léger lifting...\nAlors n'hésitez pas à poster vos commentaires et vos idées concernant la nouvelle mise en page !\nTypiquement, je suis à la recherche d'une couleur et d'une police intéressantes pour les blocs de code... Avis bienvenus ;-)\nPublié par Doohan à 18:20 Aucun commentaire:\nAnalysis Services 2000 Service Pack 4 - l'arme anti DSO distant !\nSi le pilotage d'Analysis Services 2000 via le namespace DSO est extrêmement simple, comme nous l'avons vu précédemment, il n'en demeure pas moins surprenant que la connexion s'effectue correctement sans une chaîne de connexion bien formée.\nEn effet, seul le nom du serveur est fourni lors de la connexion avec les objets DSO. La chaîne de connexion est alors récupérée en base de registre, décryptée, et permet d'accéder au Repository d'Analysis Services.\nEn pratique, Analysis Services stocke deux chaînes de connexion encryptées dans la base de registre :\n- une première chaîne pour les connexions locales :\nProvider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\_Program Files\_Microsoft Analysis Services\_Bin\_msmdrep.mdb\n- une deuxième chaîne pour les connexions distantes :\nProvider=Microsoft.Jet.OLEDB.4.0;Data Source=\_\_<NomDuServeur>\_MsOLAPRepository$\_msmdrep. mdb\nVous remarquerez ici que le Repository d'Analysis Services 2000 est stocké dans une base de données Access.\nA partir du Service Pack 3, un bug est apparu concernant la connexion avec les objets DSO. Malheureusement, le HOTFIX réalisé à l'époque n'a pas été incorporé dans le Service Pack 4 d'Analysis Services 2000.\nEn effet, l'encryption de la chaîne de connexion distante est défaillante. Il en résulte que la chaîne de connexion décryptée par les objets DSO n'est pas valide.\nAinsi, lors d'une connexion distante via DSO, le message suivant peut-être obtenu :\nCannot connect to the repository. OLAP Server: Error: <NomDuServeur> [Microsoft][ODBC Driver Manager] Data source name too long\nL'incompréhension vient souvent du fait que la même action effectuée avec une connexion locale ne pose aucun problème, brouillant un peu plus les pistes de correction.\nUn bug incidieux donc, pour lequel vous trouverez un HOTFIX ici. La référence de la description du HOTFIX est KB907323.\nPlus simplement, vous pouvez modifier la valeur de la clé contenant la chaîne de connexion distante en effectuant un click droit sur le nom de votre serveur dans Analysis Manager dans le menu "Edit Repository Connection String".\nBien entendu, il est totalement inutile de passer ce HOTFIX si vous ne rencontrez aucun problème ;-)\nPublié par Doohan à 19:12 Aucun commentaire:\nLibellés : Administration, Analysis Services 2000, Bug\nEffectuer un process de cube dynamiquement...\nBon nombre d'entre vous ont peut-être souhaité un jour pouvoir effectuer un process de cube Analyses Services dynamiquement dans une application.\nLe namespace DSO (Decision Support Objects) permet de se connecter au serveur Analysis Services simplement et offre une API intuitive en s'appuyant sur des composants COM via interop.\nLe namespace DSO est disponible dans le framework 1.1 et permet de piloter Analysis Services 2000 et 2005.\nLe namespace AMO (Analysis Management Object - Microsoft.AnalysisServices) a remplacé avantageusement le namespace DSO dans le framework 2.0.\nVoici quelques bases pour l'utilisation de DSO...\nLe code suivant permet d'effectuer une connexion au serveur local :\nDSO.ServerClass dsoServer = new DSO.ServerClass();\nPuis il est possible de se positionner sur la base "Test" de la façon suivante :\nDSO.Database dsoDB = dsoServer.MDStores.Item("Test");\nEnfin, un cube ou une dimension donnés peuvent être identifiés de la façon suivante :\nDSO.Cube dsoCube = dsoDB.MDStores.Item("MonCube");\nDSO.Dimension dsoDim = dsoDB.Dimensions.Item("MaDimension");\nLe process du cube ou d'une dimension est alors très aisément exécuté :\nSi vous modifiez le cube dynamiquement (ajout ou suppression de dimension, modification des clauses de jointure, ...), il est nécessaire de mettre à jour le cube avant d'en effectuer le process :\nPensez à toujours vous déconnecter - typiquement dans le finally de vos blocs try-catch :\n... Et pour l'utilisation de AMO...\nMicrosoft.AnalysisServices.Server amoServer = new Microsoft.AnalysisServices.Server();\nLe process du cube est tout aussi simple :\nOn notera les noms des collections beaucoup plus propres (Databases au lieu de MDStores).\nUn pilotage simple pour des applications d'administration interactives ! Attention toutefois à ne pas oublier qu'un process de cube peut être une action coûteuse, et qu'il n'est souvent pas de très bon ton de rendre les données indisponibles pendant la journée ;-)\nPublié par Doohan à 19:05 Aucun commentaire:\nLibellés : Analysis Services 2000, Développement\nJe viens vous présenter un nouveau bloggeur de chez nous... Alors gare aux blagues carambar - il est expert en la matière - et bonne lecture à tous !!!\nAu fait, il est fan de DELEGATE anonymes... Surtout quand ça ne sert à rien ;-)\nVous trouverez donc le blog de Matthieu Mezil en cliquant ici... Ou dans le bandeau sur la droite ;-)\nPublié par Doohan à 16:38 2 commentaires:\nLes colonnes calculées persistantes... Une bonne idée ?\nLes colonnes calculées sont supportées par SQL Server depuis la version 7... En revanche, SQL Server 2005 permet désormais de rendre ces colonnes persistantes.\nEn effet, jusque là, les colonnes calculées étaient des colonnes virtuelles, c'est à dire que ces colonnes n'étaient pas écrites sur le disque. Le fait de pouvoir rendre une colonne calculée persistante, c'est le fait de rendre cette colonne physique, et donc de stocker les données inhérentes à cette colonne sur le disque de données.\nSQL Server 2000 avait déjà apporté la possibilité de créer des index sur les colonnes calculées, permettant ainsi d'améliorer grandement les performances de certaines applications, en particulier dans le domaine de la consolidation de données. L'exemple type qui reste gravé dans la mémoire collective est la consolidation du chiffre d'affaire mois par mois.\nEn effet, examinons la table suivante :\nCREATE TABLE dbo.Vente\nVenteID INT IDENTITY (1, 1) NOT NULL\nCONSTRAINT PK_Vente PRIMARY KEY CLUSTERED,\nDateVente SMALLDATETIME NOT NULL,\nMontantVente MONEY NOT NULL\nUne requête pour consolider ces résultats sur le mois de janvier serait :\nDATEPART(MONTH, DateVente) = 1\nCependant, si la volumétrie est importante, cette requête peut rapidement s'avérer très coûteuse. Si la solution d'indexer la colonne DateVente n'apporte rien dans notre cas, il peut être très utile d'employer une colonne calculée :\nALTER TABLE dbo.Vente\nADD MoisVente AS DATEPART(MONTH, DateVente)\nCette colonne n'utilisant qu'une fonction déterministe, il est possible d'y ajouter un index. A cet effet, un certain nombre d'options doivent être correctement positionnées :\nSET ANSI_NULL ON\nPuis, il est possible de créer l'index :\nCREATE NONCLUSTERED INDEX IX_MoisVente ON dbo.Vente\nAvant d'effectuer notre requête optimisée :\nMoisVente = 1\nLe résultat est assez probant, et peut s'avérer extrêmement intéressant.\nLa question qui se pose donc est ce que peut bien apporter la persistance d'une telle colonne calculée. En effet, l'argument régulièrement évoqué de l'indexation de la colonne semble bien tomber à l'eau... Quant aux conditions d'utilisation des index sur les colonnes calculées, elles s'avèrent identiques que la valeur soit persistée ou non, à l'exception du déterminisme de la fonction employée...\nPourquoi donc encombrer les disques de données visiblement inutiles ?\nLa première piste serait donc l'utilisation de fonctions non déterministes, ou dont il serait difficile de savoir si elles le sont, en particulier en ce qui concerne les fonctions CLR.\nMais il faut également se tourner vers des cas plus gourmands en calculs : la persistance prend tout son intérêt lors de calculs complexes nécessitant des ressources CPU importantes, en particulier lorsque la volumétrie de modifications est faible.\nDans ces cas là, le calcul à la volée de notre colonne entraine nécessairement un ralentissement du système, et justifie la persistance de ce calcul.\nSoit, voici donc les applications de ces colonnes calculées persistantes...\nPublié par Doohan à 20:18 1 commentaire:\nSuite à un grand nombre de témoignages de mécontentement, je vais effectuer des essais de couleurs sur le blog... Alors, titulaires d'un compte Google - oui, je sais, il faut un compte Google pour envoyer un commentaire, et je dois dire qu'il faut un compte Developpeur.org sur Developpeur.org, mais ça n'est qu'un détail - merci de me donner votre avis !\nHistoire de savoir à l'avenir si mon site abandonnera son fond noir - pour l'instant, 4 avis pour le noir, 5 contre... - et arborera de nouvelles couleurs !\nPour ceux qui douteraient de mon intention de venir rejoindre leur gentille communauté, vous trouverez ici et là des explications concernant mes choix...\nPublié par Doohan à 11:59 3 commentaires:\nComment choisir le nombre de grappes de disques...\nVoici quelques conseils indémodables sur la séparation des fichiers de bases de données sur des grappes de disques - idéalement sur des contrôleurs - séparés...\nNous noterons tout d'abord que les différentes configurations adaptées aux bases de données isolent systématiquement les journaux de transactions sur un jeu de disques séparé, et cela pour deux raisons :\n- Concernant la sécurité des données, la perte totale des disques de données peut être récupérée à l’aide des journaux de transactions, et inversement ;\n- L’isolation des journaux de transactions assure de meilleures performances globales du système en limitant les files d’attentes sur les différents disques.\nEnsuite, pour des raisons de performance générale de la base de données, il est primordial d'installer la base TempDB sur un jeu de disques isolé... En effet, toutes les bases de données du SGBD utilisent cette base pour créer des objets temporaires aux cours des différentes requêtes. Ceci est particulièrement important dans SQL Server 2005 !\nToujours pour des raisons d'optimisation des performances, il est souhaitable d'isoler les index non ordonnés (NONCLUSTERED) sur un jeu de disque séparé et ainsi accroitre les performances de recherche par ces index. En revanche, séparer les index CLUSTERED est totalement inutile, car cela reviendrait à déplacer la totalité des données...\nIl est également recommandé de déplacer les données volumineuses - souvent baptisées BLOB pour Binary Large OBjects - sur un jeu de disques séparés afin de limiter le fractionnement des données... Pour cela, le partitionnement horizontal des données est nécessaire.\nDe plus en plus de bases de données présentent des volumes de données extrêmement important, ce qui peut grever grandement les performances. La solution du partitionnement vertical assure que les données soient séparées sur des espaces de données différents... Il est souvent intéressant d'isoler ces filegroups sur des jeux de disques séparés.\nEnfin, il est important de rappeler que :\n- Les disques systèmes ne sont pas des disques de données, et doivent être réservés à l'usage du système d'exploitation et des exécutables,\n- Les disques servant de stockage de fichiers de backup lorsque cela s'applique doivent également être des disques dédiés pour éviter toute dégradation des performances de la base de données,\n- Et que pour mettre en place ce type d'architecture, rien ne vaut le RAID... Alors bonne lecture !\nPublié par Doohan à 17:43 Aucun commentaire:\nLibellés : Administration, Configuration système\nIl est donc temps pour moi d’en venir aux conclusions…\nSi les différents niveaux de RAID sont si nombreux, la raison en est bien simple : chaque système possède des points forts et des points faibles à mettre en avant en fonction des besoins de chacun.\nCependant, il faut bien reconnaitre qu’un compromis est souvent nécessaire.\nEn la matière, le RAID 5 s'impose souvent comme le maître incontesté du rapport performance/coût... En revanche, les difficultés de sizing des bandes grevent les performances en écriture dans la majorité des systèmes de bases de données, entrainant de fait son rejet par les DBA puristes...\nQui eux, sans aucun doute feront le choix du RAID 10, certes plus coûteux, mais assurant des performances constantes quelques soient les modes d'accès. Un avantage indéniable, quand on peut aisément lui associer une meilleure vitesse de reconstruction des données, une dégradation des performances inférieure en cas de panne, une meilleure tolérance de panne... Et une installation plus simple à réaliser !\nEnfin, il ne faut pas négliger les disques destinés au système d'exploitation, qui mérite sans aucun doute de bénéficier d'un bon RAID 1, peu coûteux, et répondant idéalement aux prérequis de disponibilité du système.\nAlors, à vos marques... Configurez !\nPublié par Doohan à 17:33 Aucun commentaire:\nActuellement, bon nombre de sociétés sont à la recherche d’une solution permettant d’améliorer les performances en écriture du RAID 10, son point faible. Ces solutions intègrent également des niveaux de sécurité extrêmement importants.\nDes solutions complexes du type RAID 103 et RAID 105 sont actuellement à l’étude. Si leur mise en œuvre parait extrêmement complexe, les performances obtenues n’en demeurent pas moins très prometteuses.\nAucune carte contrôleur disponible sur le marché ne permet actuellement de gérer de telles configurations physiquement qui sont uniquement du domaine de la recherche pour l’instant… A suivre ;-)\nPublié par Doohan à 17:32 Aucun commentaire:\nL’intérêt majeur de mutualiser ces deux types de RAID réside dans la robustesse de ce modèle en termes de sécurité des données ; la tolérance de panne ainsi obtenue s’avère impressionnante. On peut ainsi perdre la plupart des disques sur un RAID 15 (7/9 disques par exemple). C’est le meilleur niveau de RAID en termes de tolérance de panne et en termes de disponibilité. Mais c’est un RAID très coûteux, en raison du coût important des cartes contrôleurs qui lui sont adaptées d’une part, et en raison d’une capacité de stockage très fortement réduite – présentant des pertes de plus de 70% de l’espace disque total dans certaines de configurations – d’autre part. Les performances de ces types de RAID ne sont jamais exceptionnelles, mais ne s’avèrent jamais catastrophiques pour autant. Il s’agit d’un excellent compromis pour des cas où la sécurité est primordiale.\nToutefois, la plupart du temps, les RAID 15 et 51 peuvent avantageusement être remplacés par du RAID 10. En effet, un système nécessitant un tel niveau de sécurité pose toujours la question de la fiabilité de ses équipements.\nPublié par Doohan à 17:31 Aucun commentaire:\nComme pour les RAID 01 et 10, et les RAID 03 et 30, on privilégiera ici le RAID 50, car il s’agit du niveau le plus fiable en termes de dégradation des performances en cas de panne et de temps de reconstruction des disques de données. Le RAID 50 s’avère beaucoup plus cher que le RAID 10, mais présente des performances très comparables à celui-ci (excellentes performances en lecture et en écriture). Son intérêt majeur réside dans sa capacité de disque qui n’est pas réduite de 50%. On peut par exemple, avec 6 disques, conserver 80% de l’espace de ceux-ci !\nComme pour tous les RAID composites, un contrôleur performant est nécessaire, et le RAID 50 est souvent utilisé avec du duplexing afin de gérer la problématique des pannes de contrôleurs. Les performances en lecture sont excellente, permettant de considérer le RAID 50 comme l’un des meilleurs RAID composites en écriture séquentielle, malgré une légère faiblesse en écriture aléatoire en comparaison du RAID 10 par exemple à cause de son besoin de tout relire pour, comme toujours, des problèmes de calcul de parité.\nMalgré sa légère déperdition de performances en lecture due à la présence des informations de parité, le RAID 50 s’impose également comme un excellent niveau concernant les accès en lecture, ne voyant pas ses performances diminuées par le choix technique des cartes contrôleurs RAID 10 de privilégier les accès concurrentiels.\nPublié par Doohan à 17:29 Aucun commentaire:\nIl n’y a que très peu de différences entre ces deux types de RAID, sauf en ce qui concerne la dégradation des performances suite à une éventuelle panne. Le RAID 30 a en effet des vitesses de reconstruction inférieures au RAID 03, mais toujours supérieures à du RAID 10. Il est cependant très utilisé pour de très larges bases de données stockées sur de très larges serveurs de fichiers. C’est un RAID cher, que je n’aime pas du tout parce que ses performances sont mauvaises en termes d’écriture, notamment aléatoire, en particulier dues au goulot d’étranglement dû au RAID 3 qui présente un disque de parité dédié. Ce RAID peut s’avérer intéressant en lecture, surtout aléatoire, si la taille de la bande est suffisamment large. En revanche, ce RAID est une véritable catastrophe en écriture…\nNous noterons l’appellation commerciale usurpée RAID 53 qui est en réalité un RAID 03. Je ne m’attarde pas ici sur les piètres performances de ce niveau réservé au stockage de volumes importants de fichiers présentant un faible taux de rafraichissement.\nRAID 01 – Mirrored stripes – et 10 – striped mirrors\nLa grande différence entre le RAID 10 et le RAID 01 est évidemment l’ordre dans lequel les RAID sont implémentés.\nDans les deux cas, le coût en termes de disques est identique, à savoir relativement élevé compte tenu de la capacité qui est divisée par le nombre de miroirs ; dans tous les cas, on perd donc au moins 50% de la capacité disque achetée ! En revanche, le coût des cartes contrôleurs peut s’avérer très différent : la majorité des cartes grand public permettent d’implémenter uniquement le RAID 01.\nEn ce qui concerne les résultats obtenus, ils sont évidemment très différents entre les deux types de RAID. On s’aperçoit en fait rapidement que le RAID 10 est bien supérieur au RAID 01 dans un certain nombre de domaines : en effet, le RAID 10 a tout d’abord une bien meilleure tolérance de panne égale au (([nombre de disques en RAID 1] - 1) * [nombre de jeux de disques en RAID 0]) en RAID 10 alors qu’elle n’est que du ([nombre de jeux de disques en RAID 1] - 1) pour le RAID 01. Ensuite, le RAID 01 n’apporte pas de meilleures performances que le RAID 10, alors qu’il s’avère plus lent au cours de la reconstruction des données après une panne. De même, la perte d’un disque peut grever de façon beaucoup plus perceptible un système reposant sur du RAID 01.\nEnfin, et même si toutes les cartes contrôleurs ne le supportent pas, le RAID 10 présente d’excellentes performances en lecture (vitesse divisée par n) et en écriture (vitesse divisée par le nombre de jeu de disques en RAID 0).\nAinsi, le RAID 10 est recommandable pour tout type de bases de données… Même si son coût plus élevé qu’un RAID 5, par exemple, le relègue souvent au second plan.\nNous noterons les formules théoriques suivantes pour le RAID 10, en fonction du nombre de disques n et en supposant que le RAID 1 n’est employé que par paires de disques :\n- Nombre de disques au minimum : 4\n- Espace disque : (n/2) * [Espace disque du plus petit des disques]\n- Temps d'écriture : (2/n) * [Temps d'accès en écriture du plus lent des disques]\n- Temps de lecture : n * [Temps d'accès en lecture du plus lent des disques]\n- Tolérance de panne : n/2\nNous en conclurons de façon évidente une certaine supériorité de ce modèle sur le RAID 5 pour toutes les écritures aléatoires. Nous noterons également la propension des cartes contrôleurs gérant ce niveau de RAID à privilégier des accès concurrentiels aux données en lecture plutôt qu’une parallélisation d’une lecture, grevant de fait les performances théoriques présentées ci-dessus.\nPublié par Doohan à 17:27 Aucun commentaire:\nIl est impossible depuis quelques années de s’attaquer à la description des niveaux de RAID si l’on omet l’existence de la possibilité de les composer. Ainsi, il est envisageable de cumuler les avantages des différents niveaux de RAID.\nLe principe est donc d’appliquer un niveau de RAID sur un autre niveau de RAID ; par exemple, si on fait du RAID xy (ou x+y, même si cette notation commerciale s’avère souvent mensongère), c’est qu’on applique du raid y sur du raid x.\nEt voici maintenant un série de posts sur les niveaux les plus courants de RAID composite !\nPublié par Doohan à 17:25 Aucun commentaire:\nRAID 7 - Asynchronous, cached striping with dedicated parity...\nIl s'agit d'un niveau de RAID propriétaire développé par Storage Computer Corporation. Si le RAID 7 permet de faire preuve d'un niveau de performances exceptionnel, il n'en demeure pas moins rare... et très cher !\nC’est un RAID qui utilise le cache du contrôleur à outrance, ce qui fait de lui le plus performant des RAID simples : il obtient ainsi les meilleures performances en termes de lectures aléatoires (cache power !!), et d’écritures aléatoires (il est en striping avec parité dédiée en cache). Les performances sont remarquables mais excessivement chères. Pour la plupart des utilisateurs, le coût prohibitif de ce niveau de RAID le rende inaccessible.\nJe ne m’étendrai donc pas non plus sur ce niveau si particulier.\nPublié par Doohan à 17:24 Aucun commentaire:\nRAID 6 - Block-level striping with dual distributed parity...\nC’est un RAID 5 qui est un peu amélioré en termes de sécurité des données. Il autorise en effet la perte de 2 disques au lieu d’un. Toutefois, dans la majeure partie des cas, il demeure trop cher par rapport au RAID 5, pour des performances légèrement moins bonnes (les calculs se font en double parité, ce qui engendre une grande complexité). Il devrait en théorie être utilisé dans des systèmes sensibles, mais il faut bien avouer qu’il est très rare que deux disques tombent en panne en même temps, d’où un aspect « gadget » du RAID 6. En effet, les cas de panne de plus d’un disque simultanément résultent généralement d’une panne majeure qui risque d’endommager plus de 2 disques. Si une forte tolérance de panne est nécessaire, on privilégiera de fait l’utilisation du mirroring beaucoup plus sécurisant, rendant le RAID 6 assez inutile.\nEnfin, outre le coût important des cartes contrôleurs gérant ce niveau de RAID, sa plus grande perte d’espace disque en font l’un des plus chers des niveaux définis par Berkeley.\n- Espace disque : (n-2) * [Espace disque du plus petit des disques]\n- Temps d'écriture : (1/(n-2)) * [Temps d'accès en écriture du plus lent des disques]\n- Temps de lecture : (1/(n-2)) * [Temps d'accès en lecture du plus lent des disques]\n- Tolérance de panne : 2\nPublié par Doohan à 17:20 Aucun commentaire:\nRAID 5 - Block-level striping with distributed parity...\nLe RAID 5 fonctionne comme le RAID 4, selon un “block-level” qui permet de définir la taille des bandes d’enregistrement. La grande différence avec le RAID 4, c’est que la parité est distribuée : le RAID 5 écrit ainsi ses bits de parité sur chaque disque à tour de rôle. Ce concept permet donc de supprimer le goulot d’étranglement sur le disque de parité.\nBeaucoup moins cher, parce que très utilisé et très commun sur le marché, le RAID 5 présente de nombreux avantages. C’est d'ailleurs selon moi le meilleur compromis coût/performance pour un grand nombre de raisons.\nSa tolérance de panne d’un disque lui assure un niveau de sécurité satisfaisant.\nAu niveau théorique, les capacités du RAID 5 en termes de stockage sont de n-1 disques, et ses vitesses d’écriture et de lecture sont divisées par n-1, ce qui lui confère des performances honorables.\nIl se trouve donc supérieur au RAID 1 pour l’écriture, même s’il lui est légèrement inférieur en lecture ; à priori, il est donc plus performant pour des disques où le volume d’écritures est important. Ceci n’est totalement vrai que si l’on ne fait que de l’écriture séquentielle. En effet, au cours d’une écriture aléatoire, certains blocs sont modifiés, et nécessitent donc la modification de la parité de la bande. Il faut donc lire l’ensemble de la bande pour reconstituer la parité ; chaque écriture aléatoire donne donc lieu à deux entrées/sorties. Et avec 2 I/O, le système se voit très ralenti ! C’est le gros point noir…\nCependant, dans la pratique, on s’aperçoit que le RAID 5 reste très employé, en particulier dans les bases de données ; alors même que celles-ci ont énormément d’écritures aléatoires !\nEnfin, en termes de coûts, le RAID 5 se fait la part belle grâce à sa bonne capacité de stockage et un coût relativement faible des cartes contrôleurs adaptées.\nAu final, le RAID 5 me paraît donc plutôt adapté, voire idéal, pour les journaux de transactions, compte tenu de l’utilisation quasi exclusive d’écritures séquentielles, pour lesquelles la problématique du calcul de parité ne se présente pas. Il faut cependant s’assurer de la taille des blocs de données afin d’éviter d’écrire une transaction sur moins d’une bande revenant alors à des écritures aléatoires. Les spécifications actuelles qui préconisent d’appliquer du RAID 10 apparaissent donc comme sous performantes, même si les difficultés de mise en œuvre d’un RAID 5 bien dimensionné expliquent sans aucun doute ce choix. En revanche, l’utilisation de ce niveau de RAID s’avère beaucoup plus discutable en ce qui concerne les bases de données auxquelles je privilégierai un RAID 10.\n- Nombre de disques au minimum : 3\n- Espace disque : (n-1) * [Espace disque du plus petit des disques]\n- Temps d'écriture : (1/(n-1)) * [Temps d'accès en écriture du plus lent des disques]\n- Temps de lecture : (1/(n-1)) * [Temps d'accès en lecture du plus lent des disques]\n- Tolérance de panne : 1\nAuxquelles nous ajouterons le temps d’écriture aléatoire théorique, le temps de lecture restant identique quelque soit le mode :\n- Temps d’écriture : (2/(n-1)) * [Temps d'accès en écriture du plus lent des disques]\nPublié par Doohan à 17:17 Aucun commentaire:\nRAID 4 - Block-level striping with dedicated parity...\nLe RAID 4, comme nous l’avons dit, s’apparente au RAID 3 à un (gros !) détail près : la largeur de bande est divisée en blocs et non pas en octets. On peut ainsi définir la largeur des bandes, ce qui est particulièrement utile pour les écritures aléatoires, parce qu’il est possible de calculer la taille des blocs de l’enregistrement afin d’optimiser l’espace disque.\nSouvent confondu avec le RAID 3, moins utilisé, le RAID 4 est un compromis sans cible sur le marché. Il ne doit selon moi jamais être utilisé parce qu’il n’a pas vraiment d’intérêt en termes de gains de performance. On retrouve le goulot d’étranglement du RAID 3, il coûte encore plus cher et peu de cartes contrôleurs supportent le RAID 4.\nPublié par Doohan à 17:15 Aucun commentaire:\nEn RAID 3, les bandes ont une largeur fixe d’un octet, et ne sont donc pas modulables. Le terme « Dedicated parity » du titre signifie que les informations de parité sont écrites sur un disque dédié. Les informations de parité sont le résultat d’un calcul à base de « ou exclusifs » permettant de reconstituer les données d’un disque à l’aide des données présente dans les autres disques.\nLe RAID 3 est un niveau de RAID qui est, à tort, souvent confondu avec le RAID 4. La seule différence réside en effet dans la taille des bandes pour le striping : si le RAID 3 dispose de bandes de largeur fixe, le RAID 4 permet de configurer la largeur de celles-ci.\nLe RAID 3 offre une tolérance à la panne assez bonne, étant donné que l’on peut perdre un disque.\nLa vitesse d’écriture théorique, de 1/(n-1), reste toutefois largement fantaisiste : en effet, pour atteindre ces résultats, il faudrait que le disque de parité soit (n-1) fois plus rapide que les autres disques ; comme il est dédié, à chaque fois que l’on écrit sur un disque, on est supposé écrire sur le disque de parité, ce qui ralentit considérablement les choses, en particulier en écriture aléatoire. Il existe donc un goulot d’étranglement sur le disque de parité, qui est par ailleurs beaucoup plus sensible aux pannes en raison de sa beaucoup plus forte utilisation.\nPublié par Doohan à 17:13 Aucun commentaire:\nC’est le seul striping qui n’utilise pas un aspect de parité. Il s’agit ici d’un striping au niveau des bits, les bandes ne pouvant pas être étendues, puisqu’elles n’ont qu’un bit. Il est intéressant de noter qu’elles sont validées par un code de contrôle d’erreur de Hamming (ECC ou Error Correcting Code).\nLe gros avantage du RAID 2 était sa disponibilité parce qu’il effectuait des corrections « on the fly », à chaud… mais cela ne sert aujourd’hui plus à grand-chose étant donné que la quasi-totalité des disques durs actuels utilisent le code ECC.\nAinsi, le RAID 2, qui est par ailleurs très mauvais en écriture et lecture aléatoires, n’est absolument plus utilisé.\nJe ne m'étendrai donc pas plus sur ce niveau obsolète.\nPublié par Doohan à 17:11 Aucun commentaire:\nLe RAID 1 peut être appelé de différentes façons : mirroring, shadowing ou encore duplexing... Il s'agit tout simplement de copier l'intégralité des données sur chacun des disques. Ainsi, le RAID 1 est un système possédant une grande tolérance de panne. Par exemple, si l'on dispose de 3 disques en RAID 1, les données restent disponibles malgré la perte de 2 disques. Dans le cas du duplexing, il s’agit également de redonder les contrôleurs afin de gérer une tolérance de panne à ce niveau également.\nLors de la phase de lecture des données, le RAID 1 permet de paralléliser la lecture et ainsi d'obtenir, en théorie, des performances 3 fois plus rapides avec 3 disques ! En pratique, les gains en performance en lecture sont très proches des gains observés en RAID 0 lorsque la lecture est parallélisée. Toujours dans la pratique, le RAID 1 permet également d’effectuer deux lectures simultanées pour deux espaces disques différents ce qui offre la possibilité d’améliorer les files d’attentes disques. Le RAID 1 est particulièrement efficace pour la lecture aléatoire, où il est bien meilleur qu’un disque simple, même s’il reste inférieur dans ce domaine à d’autres types de RAID. Le RAID 1 ne brille pas en écriture mais se distingue en lecture : en effet, lorsqu’on écrit, on écrit la même chose sur tous les disques, donc le temps d’écriture est le même que pour un disque simple. En revanche, en lecture, on lit n fois plus vite, en parallélisant la lecture et les accès.\nToutefois, beaucoup de contrôleurs de disques ne savent pas paralléliser les lectures, ce qui engendre de faibles gains de performance en lecture in fine. Au final, l’on peut penser que le RAID 1 est extrêmement sensible au type de contrôleur fourni. Si celui-ci est de bonne qualité, comme cela est généralement le cas dans le milieu professionnel, il est possible de paralléliser les lectures, ce qui rend le RAID 1 intéressant pour un faible niveau d’écriture et un gros volume de lecture, qu’elle soit séquentielle ou aléatoire.\nEnfin, il est intéressant de noter qu’un RAID 1, en écriture aléatoire, s’avère parfois plus efficace que beaucoup de RAID avec calcul de parité parce qu’il n’est pas obligé de relire les données sur les différents disques.\nIl est à noter que le RAID 1, tout comme le RAID 0 aligne ses performances sur les disques les plus faibles.\nL'inconvénient majeur du RAID 1 est sans aucun doute son coût élevé compte tenu de la perte importante de capacité totale des disques : la capacité finale est en effet logiquement d’un seul disque quel que soit le nombre de disques mis en place. Par exemple, monter 5 disques en RAID 1 n’offre qu’une capacité d’un seul disque !\nLe RAID 1 est très utilisé en milieu professionnel pour tous les systèmes nécessitant un fort niveau de disponibilité. De plus, le RAID 1 offre une vitesse de reconstruction des données extrêmement performante puisqu’il s’agit d’une simple copie de disque. Cela assure également de minimiser les impacts sur les performances au cours de cette reconstruction. La majorité des serveurs disposent donc de ce niveau de RAID pour les disques systèmes.\n- Espace disque : [Espace disque du plus petit des disques]\n- Temps d'écriture : [Temps d'accès en écriture du plus lent des disques]\n- Tolérance de panne : n-1\nPublié par Doohan à 17:07 Aucun commentaire:\nPublié par Doohan à 17:03 Aucun commentaire:\nIl s'agit d'une simple "concaténation" d'un ensemble de disques physiques pour former un disque logique plus important, et en aucun cas ne peut être considéré comme un RAID.\n- Espace disque : [Somme de l'espace disque de l'ensemble des disques]\n- Temps d'écriture : >=[Temps d'accès en écriture du plus lent des disques]\n- Temps de lecture : >=[Temps d'accès en lecture du plus lent des disques]\nPublié par Doohan à 16:38 Aucun commentaire:\nLorsque l'on parle de stockage de données, on parle forcément de disques durs. Et en la matière, depuis 1987, tout le monde parle du RAID - Redundant Array of Inexpensive Disks or Redundant Array of Independant Disks. Lors de sa création, le RAID était destiné à rassembler plusieurs disques durs physiques en une seule unité logique afin de remplacer les très coûteux disques 6.5 et 9.5 pouces.\nDès 1988, Berkeley définit 5 niveaux de RAID de 1 à 5, puis rajoute au cours des années suivantes le RAID 0 et le RAID 6...\nOn ne distingue maintenant pas moins de 8 niveaux simples de RAID différents... Et cela sans tenir compte de toutes les combinaisons pouvant y être apportées... Une véritable jungle technologique, rarement bien expliquée, et souvent très mal utilisée... De plus, il nous faut distinguer les performances théoriques des performances réelles de ces niveaux. Et je ne parle pas bien sûr des problématiques concernant l'utilisation de RAID logique ou physique !\nAu final, impossible de déterminer quand utiliser quoi, ni comment...\nAfin de mieux appréhender le sujet, voici un récapitulatif rapide des différents niveaux de RAID simple...\nPublié par Doohan à 16:24 Aucun commentaire:\nTout le monde connaît un jour ce problème : quelle est LA bonne configuration pour mon serveur ?\nIl est difficile de répondre à cette question en matière de processeurs et de mémoire tant le marché évolue rapidement et tant les besoins de chacun sont différents. En revanche, il est possible d'apporter des éléments de réponse plus pérennes en matière de configuration pour les disques de données. Les arguments permettant d'établir un choix s'articulent essentiellement autour de trois grands axes :\n- les performances,\n- les coûts.\nJe vous propose donc une série de post présentant les solutions en la matière, à savoir les différents niveaux de RAID...\nPublié par Doohan à 16:21 1 commentaire:\nPour annoncer un futur article sur les différents niveaux de RAID, leurs points forts... Et leurs points faibles !\nAlors encore un peu de patience... L'accouchement est long ;-)\nPublié par Doohan à 10:13 2 commentaires:\nHaute disponibilité avec SQL Server - Quelle solut...\nMise en oeuvre d'un test de validité avec SQL Serv...\nDéplacement des bases de données système SQL Serve...\nGestion des requêtes sur les vues partitionnées......\nOptimisation des requêtes à l'aide des vues partit...\nIncorporer des rapports Reporting Services 2005 da...\nMaintenance des index SQL Server - Défragmentation...\nComment connecter SSIS à un classeur Excel 2007 vi...\nSQL Server 2005 plus strict que la norme XSD du W3...\nAnalysis Services 2000 Service Pack 4 - l'arme ant...


Grâce à l'association Super Rêve, une jeune ébroïcienne malade rencontre son humoriste préféré\nmercredi 10 janvier 2018 à 12:30 Par Amélie Bonté, France Bleu Normandie (Seine-Maritime - Eure)\nCe mercredi, Lorélei, ébroïcienne de 14 ans, atteinte du syndrome de pfeiffer réalise son rêve grâce à une association. Elle va rencontrer son humoriste favori, le ventriloque Jeff Panacloc lors de son spectacle au Havre.\nL'humoriste ventriloque Jeff Panacloc et sa marionette Jean-Marc © Maxppp - PHOTOPQR/VOIX DU NORD\nC'est un véritable rêve qui va se réaliser pour une jeune ébroïcienne. Laurélei, 14 ans est atteinte du syndrome de Pfeiffer, une maladie génétique qui touche le visage et la boîte crânienne. Cette adolescente a donc subit de très lourdes interventions chirurgicales depuis sa naissance, la dernière date d' il y a 2 ans. Pour oublier un peu ce lourd quotidien, l'association Super Rêve réalise ce mercredi soir, l'une de ses demandes : rencontrer l'humoriste ventriloque Jeff Panacloc (et Jean-Marc , sa marionette!). Toute la famille va donc se déplacer d'Evreux au Havre, pour le spectacle qui a lieu ce mercredi aux Docks.\nC'est en septembre que Laurélei apprend qu'elle va rencontrer son humoriste préféré grâce à l'association Super Rêve. Il aura fallu plus d'un an à l'association pour mettre en place la rencontre.\nSa soeur a pris l'initiative de contacter diverses associations pour réaliser ses rêves de rencontres avec des artistes" - Virginie, la maman\nLaurélei a déjà pu voir le chanteur Kendji Girac mais Jeff Panacloc, Jean-Marc sa marionette et leur humour décalé promettent une belle soirée. D'autant que Lorélei est une vraie fan d'après Viriginie, sa maman :\nElle adore, elle a la marionette"\nCe mercredi , c'est le grand jour Laurélei a hâte et aimerait que la rencontre et la soirée durent une éternité :\nJe suis très heureuse de pouvoir le voir, c'était un rêve, je vais lui demander de faire un calin"\nUn calin et beaucoup de photos avec son idole, une belle façon pour cette ado de commencer l'année !\nLorélei et sa maman Virginie chez elles à Evreux (photo transmise par Virginie Lebourgeois)\nEn 2016 l'association Super Rêve a réalisé 116 rêves d'enfants malades partout en France et 160 en 2017. Actuellement l'association tente de réaliser les rêves de deux autres enfants de la région : aller à Disneyworld en Floride pour l'un et aller au musée Harry Potter de Londres pour l'autre.


MySQL 5 : osCSS 1.2.1\npar yvesgirod » Mer 17 Déc 2008, 17:53\nLorsque je clique sur un produit de mon catalogue, j'obtiens l'erreur suivante :"Database reported: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 (Errno: 1064)".\nLa création des catégories et sous-catégories a fonctionné parfaitement.\nJ'utilise oscss 1.2.1 nouvellement installé. Le serveur utilise php 4 et MySQL 5. Mon hébergeur me dit qu'il existe un correctif à apporter à oscommerce pour cette version de MySQL. Je n'ai trouvé que des correctifs anciens et antérieurs à oscss1.2.1.\nQuelqu'un a-t-il rencontré ce problème et trouvé une solution ?\nInscription: Sam 23 Fév 2008, 17:59\npar j4k » Mer 17 Déc 2008, 18:20\nles correctifs php5/mysql5 sont appliqués pour osCSS 1.2.1\nIl faudrait regarder quelle requête pose ce problème et essayer de l'injecter directement dans phpmyadmin pour voir comment traiter le problème.\npar yvesgirod » Mer 17 Déc 2008, 21:16\nMerci pour votre réponse, mais je crains de ne pas avoir de connaissances suffisantes dans la syntaxe des requêtes MySQL pour résoudre mon problème.\nJ'envisage de revenir à la version oscss 1.2. qui ne me posai pas de problème. Est-elle encore téléchargeable ? Je ne la trouve plus y compris sur sourceforge.\npar yvesgirod » Jeu 18 Déc 2008, 10:36\nPetite remarque : le serveur est sous php4. Cela peut-il être une explication ?\npar j4k » Jeu 18 Déc 2008, 12:02\nCe qui est curieux c'est que le message d'erreur te dis : la requête sql est incorrecte à l'endroit ''... en général il ne donne pas une indication vide.\nAs-tu tenter d'installer plusieurs fois avec la même erreur ?\nAucune raison que cela ne passe pas sous php4, je pense plus à une install qui s'est mal passée au niveau de la bdd.\nVérifie aussi si tous les fichiers se sont bien uploadés sur ton serveur, il est possible qu'une erreur de transfert ai pété un fichier (regarde précisément le fichier qui pose problème)\nCe problème se produit-il avec tout les templates?\nAs-tu désactivé le redimensionnement automatique des images (au cas ou GD ne soit pas installé sur on serveur) -- je ne pense pas que ce message sql vienne de la mais au cas ou.\nPour télécharger les version antérieure de osCSS :\nhttp://sourceforge.net/project/showfile ... _id=151115\npar yvesgirod » Jeu 18 Déc 2008, 20:51\n- je n'ai pas eu de message d'erreur à l'installation\n- avec les template d'exemples le message apparait sur la page d'accueil. Avec mon template personnel, il apparait seulement lorsque je clique sur un produit du catalogue . A noter que les attributs du produit (poids, prix, références,etc...) n'apparaissent pas, mais son image oui !!\n- le redimensionnement automatique des images est désactivé.\nJe crois que je vais refaire une installation.\npar oscim » Jeu 18 Déc 2008, 23:19\nLes constante de debug du fichier application_top ne renverrai pas plus d'info ?\npar yvesgirod » Dim 21 Déc 2008, 12:59\nL'hébergeur du site a cherché d'où venait le problème .La requête sur la page principale dans les menus n'est pas bonne :\nselect products_id, products_image, products_tax_class_id, products_price from osc_products where products_status = '1' order by products_date_added desc limit\nIl semblerait que lorsqu'on spécifie LIMIT a la fin de la requête il faut que la limite soit indiqué ex : LIMIT 0,30 pour afficher 30 enregistrements a partir de la ligne 0\nLe problème est identique sur chaque requête ou il y a l'erreur par exemple sur le faux produit plage : http://www.deco-provence.com/catalog/plage-p-14.html\npar j4k » Dim 21 Déc 2008, 13:59\nl'erreur sur cette page est sur la requete des produits également acheté (includes/modules/also_purchased_products.php)\ntu peux vérifier si la valeur limite est correctement renseignée dans l'admin : /admin/configuration.php?gID=3&cID=51\npar yvesgirod » Dim 21 Déc 2008, 15:24\nEffectivement, il manquait cette valeur limite et d'autres. Ce problème là est réglé et je t'en remercie mais j'en ai d'autres en particulier l'absence d'affichage des caractéristiques d'un produit (prix, poids, modèle) et un tout nouveau l'impossibilité d'enregistrer un nouveau client.\nQuelque chose a du mal se passer lors de mon installation. Je pense que j'ai intérêt à la refaire.\nMerci à tous pour votre coup de mains.\npar j4k » Dim 21 Déc 2008, 17:59\noui et si ça se reproduit après une nouvelle installation, tu peux essayer d'injecter directement la base dans phpmyadmin.\ntu trouveras les fichiers sql dans le dossier install.\npar yvesgirod » Sam 27 Déc 2008, 14:39\nAprès réinstallation de oscss 1.2.1 , réinjection par phpmyadmin des tables catégories de ma base de données qui fonctionnaient bien, conservation des tables clients d'origine, je peux enregistrer de nouveaux clients et donc presque tout marche parfaitement. Seules les url sont réécrites en attachant tous les mots. Par exemple linge de maison devient dans la barre d'adresses lingedemaison. Est-ce normal ?\nMerci à tous pour vos réponses et bonne fin d'année.\npar bruno » Jeu 12 Fév 2009, 21:39\nJeu 12 Fév 2009, 23:06\ninstall osCSS et configuration mysql en local\npar polong » Ven 13 Mar 2009, 17:33\nSam 21 Mar 2009, 03:50


Syrie : Bachar el-Assad convoque des élections\n16h11 , le 13 mars 2012, modifié à 12h29 , le 19 juin 2017\nMis au ban de la communauté internationale, Bachar el-Assad a annoncé mardi la tenue d'élections législatives le 7 mai prochain. Une annonce qui intervient alors que la communauté internationale attendait mardi une réponse du président syrien aux "propositions concrètes" formulées par l'émissaire de l'ONU, Kofi Annan, le week-end dernier à Damas.\nBachar el-Assad veut organiser des élections législatives en mai. (Reuters)\nAprès avoir présenté la tenue d'un référendum factice fin février comme élément de détente, Bachar el-Assad compte désormais sur l'organisation d'un scrutin législatif le 7 mai prochain pour relâcher la pression que la communauté internationale fait peser sur son régime depuis le début de la répression de la révolte populaire, il y a un an. Ainsi, alors que la communauté internationale attendait mardi une réponse du président syrien aux "propositions concrètes" formulées par l'émissaire Kofi Annan, en visite à Damas le week-end dernier, l'agence de presse officielle Sana a annoncé mardi la publication d'un "décret fixant les élections de l'Assemblée du peuple au 7 mai prochain".\nCe scrutin, censé se tenir en septembre 2011, avait été reporté en raison du processus de réformes annoncées par le régime syrien, présenté à l'époque comme une réponse à la contestation populaire. Parmi ces réformes, figurent notamment une refonte de la Constitution, prévoyant, entre autres, la fin de la primauté du parti Baas, au pouvoir. Cette nouvelle loi fondamentale avait été approuvée lors du référendum du 27 février dernier, qualifié de "plaisanterie" par Washington. La Maison-Blanche a d'ailleurs mardi jugé "ridicule" l'idée d'organiser "au milieu des violences" un scrutin législatif.\nMoscou veut des observateurs en Syrie\nSi ce scrutin est confirmé, il s'agirait du troisième scrutin législatif en Syrie depuis l'accession au pouvoir de Bachar el-Assad en 2000. Lors des dernières élections, en avril 2007, le Front national progressiste - coalition de partis dirigée par le parti Baas - avait remporté, sans surprise, la majorité des 250 sièges du Parlement. Un scrutin d'ores et déjà rejeté par l'opposition, réunie au sein du Conseil national syrien (CNS), qui réclame le départ du président Assad.\nSur le plan diplomatique, la Russie et la Chine, qui ont opposé, par deux fois, leur veto à une résolution contraignante au Conseil de sécurité de l'ONU, ont fait un pas vers la communauté internationale. Ainsi, l'émissaire chinois dans le dossier syrien, Zhang Ming, a estimé mardi qu'il y avait "une grande entente" entre Pékin et la Ligue arabe pour parvenir à "une résolution politique de la crise syrienne". Et d'ajouter que la Chine soutient "le rôle constructif" de Kofi Annan.\nDe son côté, la Russie a fait savoir qu'elle souhaitait convaincre Damas d'accepter des observateurs internationaux indépendants chargés de surveiller l'arrêt "simultané" des violences des deux côtés. Le ministre russe des Affaires étrangères, Sergueï Lavrov, a précisé que cette proposition était actuellement sur la table de la Ligue arabe et des Nations unies. Mais Pékin et Moscou refusent toujours ce qu'ils considèrent être de l'ingérence dans les affaires intérieures syriennes, à savoir une demande de changement de régime.


· Le Moyen Âge a vu l"exploitation de mines dans presque tous les pays d"Europe que ce soit des mines de fer ou de non ferreux. Très abondant à la surface de la planète le minerai de fer est disponible dans de petits gisements à la surface du sol ou à faible profondeur.\nProcedé de traitement de minerai de fer. 2.Le minerai de fer broyé plus petit est introduit dans un broyeur à billes pour le broyage. A l intérieur du broyeur à boulets le minerai de fer écrasé va broyer le minerai à environ 0 2 mm avec des billes d acier de 3 pouces. 3.Ce minerai de fer suspension est pompé dans le\nle minerai de fer à une aciérie . le minerai de fer domestique . est l une des aciéries du pays à avoir . La Chine a Le prix moyen de la tonne de minerai de fer varie pour la machine de\nMachine à laver le minerai or wash plant à vendreJXSC\n· Machine à laver le minerai est largement utilisé pour nettoyer divers types de minerais difficiles à laver la pierre le sable et le gravier il est divisé en types de cylindre et de type bande matériau d alimentation en fonction de la taille des particules. L alimentation dont la taille est de -40 mm peut ensuite être divisée en 2 mm et -2 mm par un laveur de minerai à double spirale.\n· machine à laver le minerai de fer porcelaine. fournisseurs de minerai Concasseur centrifuge à choc vertical dele minerai de fer minerais de fer Broyeur Machine à laver le minerai de fer. chat en direct. broyeur de grains en inde à l aide de la maison.\n· Le minerai est concassé et broyé puis transformé en concentrés à 65 p. 100 de fer par une méthode de concentration gravitationnelle et magnétique. Selon la grosseur du grain le concentré est ensuite expédié tel quel ou aggloméré en boulettes d environ un centimètre de diamètre puis fusionné pour produire des granules dures de\nComment faire pour extraire le minerai de fer à partir du sol Le minerai de fer est une partie importante de l économie manufacturière. Ce est le principal ingrédient dans la fabrication de l acier utilisé pour faire tout des ponts aux voitures à casseroles. Le minerai de fer est la forme organique du fer\nminerai utilisé la machine de concassagepentictonlegion.ca. or concasseur de minerai machine d . carbonate utilisé en france machine de concassage de pierre la ligne. utilisé pour le minerai dor de concassage passmineral . prix pour la machine concasseur de minerai de fer . à la construction ce qui est le minerai dor princ. utilisé concassage nouvellezélandefournisseur mondial.\nMachine De Séparation De Sable En Tartan Appareil\nNos distinctif produits comprennent table à secousses Gabarit séparateur En Spirale concentrateur D or broyeur à boulets concasseur à mâchoires flottation séparateur magnétique Séparateur électrostatique tamis vibrant casserole en or Mangeoire classificateur machine à laver le minerai et équipement de laboratoire etc. Nos machines sont populaires dans séparer L OR le\nL histoire de la machine à laver Il ya quatre ans le lavage des vêtements était une tâche qui a exigé du temps et était une procédure fastidieuse. Article précédent le minerai de la mine de fer de traitement graphique Suivant concasseur a percussion occasion.\nConcasseur de Fer Broyeur de Fer Concasseur de May 6 2013Posté à l"adresse minerai de fer de concassage lavage malaisie Cas de Contacter le fournisseur site minier de minerai de fer eucadis sur site machine a laver le sable site de la minier concasseur à Matériel Minerai de fer Minier et du de minerai de fer de . Get Price\nLe gisement de fer de l Ouenza (Nor-Est algérien\n· Le minerai carbonaté est constitué par des sidérites et des ankérites dont les teneurs pondé rales moyennes en fer sont respectivement de 42 et 19 dè Fe. Le minerai oxydé montre des variations de teneur en ferd un quartier à l autre de lamine.Ces variations sont dues à la composi tion minéralogique etchimique du minerai\nmachines a laver de fer a sable en indonesie. Extraction de sable de fer sur une île indonésienne. Minerai de fer Recherche des produits de qualité supérieure Minerai de fer Minerai de fer Fabricants Fournisseurs et exportateurs sur alibaba Minerai de fer sable machines à laver de fer indonésie afcpincorg Type Clay journal rondelle pour minerai de fer à laver Obtenez le prix machine\nfrittage et granulation de minerai de fer. statut de frittage et la granulation en inde (porcelaine briqu) une 22 Mécanismes de frittage en phase solide 23 Frittage Granulation et . comment est le minerai de fer classée comme la Il sert principalement à l éoration de différents types d acier comme par magie sur le bain de porcelaine et des Minerai de fer de fer en strates .\nmachine qui ecrase les minerais de ferpearlinmotion\nmachine Indonésie concentrer le minerai de fer. Broyeur à cône hydraulique à un cylindre OH. Le concasseur à cône hydraulique OH à un cylindre qui intègre des technologies mécaniques hydrauliques électriques d automatisation et de contrôle intelligent représente la technologie de broyage du monde et peut être largement utilisé dans les minerais métalliques et non\nle concassage et le broyage des minerais de fer minevik déc le minerai de fer de concassage et de broyage pour minerai de fer australie admission. le broyeur a boulets mm passmineraltop mm concasseur à cône broyeur le minerai de fer fabrithyion de boulet pour broyeur bou.statique quel est le but de la machine de broyage pour les\nSeule une quarantaine de Pays dans le Monde extraie du minerai de fer 78 ans de réserves mondiales de minerai machine à extraire le minerai de fer dans la get price. Distribution et la production de minerai de fer\nReportage Je patouille Hélène Morin-Hamon\n· servait à briser et laver le minerai. L appareil se composait de deux parties le patouillet proprement dit qui sert au lavage et une machine destinée à le mettre en mouvement. Cette machine pouvait être une roue hydraulique un manège à chevaux ou plus tard vers le milieu du XIXe siècle une machine à vapeur fixe ou mobile.\nCommentaire de Ulrikekekeka Okay. Levels for smelting and mining are not exactly the same. Almost but not quite. For example Smelting shows copper going yellow at 25 but it doesn t actually state that it can be mined at level 1 .\nTrouvez ici les fabricants et fournisseurs professionnels de machines à laver le minerai de silice en Chine. Nous vous invitons chaleureusement à acheter une machine à laver de minerai de silice de haute qualité à vendre ici dans notre usine. Pour une consultation des prix contactez-nous.\nmeilleure machine pour broyer le minerai de fer meule à grains wikipédia. une meule à grains est un objet technique traditionnellement en pierre qui permet le broyage la trituration le concassage ou plus spécifiquement la mouture de diverses substances. selon les lieux et les époques la meule de\nPrécédent：concasseur sud samacProchain：presse à billes de charbon de bois en mongolie


cloueuse topcraft. 23/09/2015\nBonjour , Ce weekend il y a une cloueuse top craft pas cher en promo chez aldi .\nCa tombe bien ce weekend je commence à faire le bardage de ma maison .\nVa t elle tenir le coup car +ou- 2km de planche à mettre ?\nPeut on mettre des clous brad inox dedans ? Ou vaut il mieux louer ou trouver quelqu'un qui a une bonne cloueuse ?\nBonjour, il faut voir le calibre (gauge ) des brads que l'on peut utiliser .\nEn général, si c'est du 21 G, c'est plus pour des moulures Dernière modification par Kmichel 23/09/2015 à 20h57.\nj'en ai une de l'année passée, elle fait des ratés et je l'utiliserai pour des plinthes et autres connerie. Pour mon bardage j'ai emprunté une cloueuse sur accu, bien moins chiant que sur compresseur.\nBonsoir je l’ai achetée il y a un an plus ou moins , perso pas de problème pour des travaux legers , plinthes moulures lambris . Pour les clous ou agrafes, les power plus du H##o fonctionne dessus parfaitement . Voila, moi j en suis satisfait par rapport au prix d’achat, bonne soirée\nperso moi j'ai celle de Lidl. J'en suis super content, par contre leur agrafes c'est de la merde.... avec des bonnes agrafes ca fonctionne super\nun point a faire attention, c'est le regulateur de pression du compresseur. j'utilise un petit compresseur lidl aussi et le regulateur etait trop petit il ne suivait pas.\nla premiere agrafes allait bien et si on allait trop vite apres 5 agrafes ca ne marchait plus...\ndepuis j'ai mis une sortie en direct sur le compresseur, un vrai bon regulateur, et ca marche du tonnerre.\nScie à onglets Topcraft\nPar remandco dans Outillage, +5 26/11/2014\ncloueuse ou aggrafeuse\nPar m_vincent dans Outillage, +9 29/01/2012