SQL Server groupes de disponibilités AlwaysOn et abonnements SSRS

Mis en avant

Il y a quelques jours, j’ai eu l’occasion de travailler sur une infrastructure incluant des groupes de disponibilités AlwaysOn 2014 et un rapport de serveur Reporting Services en mode natif et en scale-out. Gérer Reporting Services dans une infrastructure AlwaysOn n’est pas toujours une tâche facile et cela dépend notamment des fonctionnalités utilisées dans SSRS. Ceci est particulièrement vrai lorsque des planifications et abonnements sont en jeu.

> Pour la lire la suite (en anglais)

David Barbarin
MVP & MCM SQL Server

SQL Server 2014 : sortie du livre « Développer et administrer pour la performance »

Mis en avant

2e1ax_default_entry_sqlserver2014_livre

Un billet en cette fin d’année qui approche à grand pas pour vous annoncer la sortie prochaine (fin décembre 2014) du livre SQL Server 2014 : Développer et administrer pour la performance en français et auquel j’ai eu l’immense plaisir de participer avec Frédéric Brouard (alias SQLPro – MVP SQL Server), Nicolas Souquet (alias Elsuket – MVP SQL Server) et Christian Soutou.

Ce livre est destiné aussi bien aux développeurs qu’aux administrateurs débutants ou confirmés soucieux de la performance et couvre un ensemble complet de domaines (l’administration, le développement, la sécurité ou encore la haute disponibilité).

Bonne lecture !

David BARBARIN (Mikedavem)
MVP et MCM SQL Server

SQL Server 2014: sys.dm_exec_query_profiles, une fonctionnalité prometteuse

Mis en avant

Parmi les fonctionnalités cachées de SQL Server 2014 il y a une nouvelle DMV intéressante nommée sys.dm_exec_query_profiles. En effet, cette dernière permet aux administrateurs de bases de données et aux développeurs expérimentés de pouvoir diagnostiquer les requêtes longues en temps réel. Je suis sûr que vous avez déjà eu à répondre à ce genre de questions: Quand est-ce que cette requête va se terminer ? Quel est le pourcentage de progression de cette requête ? Quelles étapes ont pris le plus de temps ? Avant SQL Server 2014, autant dire que cela était impossible.

Cependant je dois admettre que cette nouvelle DMV a suscité pas mal de questions et d’étonnement de ma part. Je partagerais avec vous cela durant ce billet.

Pour lire la suite (en anglais)

David BARBARIN (Mikedavem)
MVP et MCM SQL Server

SQL Server 2014 : Statistiques incrémentales

Mis en avant

Est-ce que vous utilisez le partitionnement SQL Server ? Si oui, ce post est fait probablement pour vous parce qu’il y a une bonne nouvelle avec le partitionnement SQL Server 2014 ! Je me souviens d’une ancienne mission avec un client dans le domaine de la santé ou nous avions décidé d’implémenter une stratégie de partitionnement pour une grosse table d’archivage contenant des entrées médicales. Nous utilisions SQL Server 2005 et nous devions déjà relever certains défis comme la mise à jour de statistiques. Les administrateurs de bases de données savent de quoi je parle …

Lire la suite (en anglais)

David BARBARIN (Mikedavem)
MVP et MCM SQL Server

SQL Server 2014 : SELECT ALL USERS SECURABLES & DB admins

Mis en avant

Microsoft a introduit 4 nouvelles permissions. L’un d’entre elles (SELECT ALL USERS SECURABLES) peut permettre à un administrateur de bases de données de pouvoir gérer une instance SQL Server sans forcément voir les données sensibles. Cependant cette phrase est à prendre avec du recul pour éviter des erreurs d’interprétations.

Lire la suite (en anglais)

Bonne lecture !

David BARBARIN (Mikedavem)
MVP et MCM SQL Server

SQL Server AlwaysOn : Considérations sur l’ajout d’un fichier de bases de données

Mis en avant

Ce billet fait suite à quelques discussions échangés lors d’un cours sur SQL Server AlwaysOn que j’ai pu donner ces derniers temps. Une des parties du cours ciblaient certaines tâches qu’un administrateur pouvait avoir à effectuer sur une base de données concernée par un groupe de disponibilité dans un environnement complètement asymétrique. Je tiens à dire tout de suite que Microsoft conseille d’avoir des environnements similaires entre réplicas pour une administration plus simple. Maintenant que cela est dit, prenons une situation où un administrateur de bases de données doive ajouter un fichier de données supplémentaire à une base de données faisant parti d’un groupe de disponibilité dont l’architecture en place est la suivante :

 

image

Une architecture avec 4 réplicas. Je précise de suite que cette architecture est tout à fait fictive et que le placement de fichier pas forcément optimale pour une telle architecture mais le principe est de bien comprendre les problèmes qu’impliquent une telle asymétrie dans notre architecture. La convention de placement de fichier suivante : <LETTER>:\<SQLSERVER>\<INSTANCE>\<TYPEF_FICHIER>. Pour l’instance SQL141\IRONMAN pour les fichiers de données qui seront hébergés sur le disque E: nous aurons le placement suivant E:\SQLSERVER\IRONMAN\DATA.

L’ajout du fichier doit se faire en respectant la convention de placement en place. La question à 1 euros est-ce que je peux ajouter un fichier de données sans perturber l’architecture en place ?

…….

….

.

Pour le savoir rendez-vous dans la suite de ce billet !

La base de données concernée se nomme AGDB avec le schéma de répartition suivant :

image 

Côté groupe de disponibilité voici ce que nous avons :

image

 

Ajoutons maintenant un fichier supplémentaire …

image

et voilà le résultat côté groupe de disponibilité :

image

… et côté instance :

image

 

Comme dirait l’autre, ça c’est fait !!! Bon reprenons nos esprits et regardons un peu ce qui se passe dans le journal des erreurs SQL Server d’une des instances SQL Server concernées :

image

On voit rapidement que le problème est la convention de placement des fichiers de données. En effet SQL Server tente de propager la création de fichier depuis le primaire vers les secondaires qui n’ont pas du tout les mêmes chemins de fichiers. Une erreur est levée et tant que le problème n’est pas réglé la réplication est suspendue.

Ok … que doit-on faire ici ? Réinitialiser le tout en supprimant la base de données AGDB du groupe de disponibilité et repartir d’une nouvelle sauvegarde en prenant soin de changer les chemins de fichiers ? Possible mais cela veut dire qu’il faut tout rependre … avec des bases de données de petite taille c’est jouable mais imaginez seulement une base de données de plus d’une centaine de Go, le tout multiplié par 3 car nous avons 3 réplicas secondaires … Une autre solution ?  En fait oui .. on peut récupérer une sauvegarde de journal et la restaurer sur chacun des réplicas. Mais comment faire car il n’est pas possible d’appliquer des sauvegardes sur une base de données d’un groupe de disponibilités sur un réplica secondaire. En fait il faut supprimer la base de données du groupe de disponibilité sur chaque secondaire de la manière suivante :

image

Il se peut que des messages d’erreurs apparaissent stipulant un problème de création de fichiers sur un mauvais chemin mais on peut les ignorer. L’important est de pouvoir retrouver nos bases de données sur les réplicas secondaires en mode de restauration :

image

On peut maintenant appliquer une restauration du journal effectuée après avoir rencontré notre problème en veillant à restaurer notre fichier (AGDB2) qui pose problème vers le bon chemin :

image

et en ajoutant à nouveau la base de données au groupe de disponibilité pour le réplica concerné

image

… ainsi de suite pour les autres réplicas et le tour est joué :

image

… avec une répartition qui respecte la convention en vigueur :

image

Bien qu’il est possible de revenir à une situation pérenne plus ou moins facilement cela reste à mon avis fortement déconseillé car ce genre de configuration ne peut que compliquer l’administration courante d’un administrateur de bases de données. Ici nous avons ajouté un fichier de données mais que se passerait-il si nous devions ajouter en urgence un fichier journal en urgence dans un environnement SQL Server AlwaysOn complètement asymétrique ? …

David BARBARIN (Mikedavem)
MVP et MCM SQL Server

SQL Server 2014 : AlwaysOn, chiffrement TDE et chiffrement des sauvegardes

Mis en avant

SQL Server 2014 commence à pointer le bout de son nez avec la CTP2. Cette nouvelle version va apporter pas mal de nouveautés côté moteur notamment la plus attendue Hekaton mais d’autres seront également de la partie comme une amélioration continue de la haute disponibilité avec SQL Server AlwaysOn, la sécurité avec le chiffrement des sauvegardes ou encore la limitation des actions possibles pour un administrateur de bases de données, les index columstore index pouvant être mis à jour et bien d’autres. Dans ce billet j’ai choisi de parler de SQL Server AlwaysOn et du chiffrement des bases de données et des sauvegardes. Un premier billet sur la possibilité de chiffrer les sauvegardes avec SQL14 a déjà par Christophe Laporte. Je vous invite à le lire si vous voulez en savoir un peu plus sur cette fonctionnalité.

En testant SQL Server 2014, AlwaysOn et le chiffrement certaines questions me sont venus à l’esprit.  Ces questions sont les suivantes :

  • Est-ce qu’une table Hekaton (In memory) est chiffrée si la base de données qui l’héberge utilise TDE ?
  • Est-ce qu’il est possible d’implémenter TDE avec une base de données déjà membre d’un groupe de disponibilité ?
  • Quel avantage à avoir du chiffrement de sauvegardes de bases de données si celles-ci le sont déjà avec TDE ?

 

icon_arrow Est-ce qu’une table Hekaton (In memory) est chiffrée si la base de données qui l’héberge utilise TDE ?

Tout dépend ici de quoi l’on parle. Une table Hekaton réside en mémoire mais selon sa durabilité les données la concernant peuvent être stockées sur disque. TDE chiffre les données sur disque et pas en mémoire. Un processus de chiffrement et déchiffrement opère en temps réel sur les fichiers de données et journaux de transactions (cf la BOL) . Donc ici on peut se demander si le chiffrement s’effectue pour les tables Hekaton durables car celles-ci utilisent des fichiers de données et des fichiers delta afin de pouvoir remonter les données en cas de problème.

 

alwayson_tde_0

Activons maintenant TDE sur la base de données AdventureWorks2012.

alwayson_tde_01

… et là SQL Server nous donne rapidement la réponse attendue :

alwayson_tde_03

Les tables Hekaton durables en réalité reposent sur un stockage de type filestream. On peut le voir sur l’image ci-dessous :

alwayson_tde_04

Un coup d’œil sur la documentation en ligne de SQL Server à propos de TDE nous permet de confirmer que le chiffrement n’est pas valable pour ce type de conteneur. Cela est également confirmé par ce lien pour SQL14. –> TDE n’est donc pas supporté avec l’utilisation des tables Hekaton.

 

icon_arrow  Est-ce qu’il est possible d’implémenter TDE avec une base de données déjà membre d’un groupe de disponibilité ?

Nous avons implémenté une belle architecture AlwaysOn et une des bases de données d’un groupe de disponibilité requiert maintenant d’être chiffré pour des raisons de sécurité. Comment dois je procéder dans ce cas ? Est-ce qu’il suffit d’activer TDE sur la base de données située sur le réplica primaire ? Dois-je effectuer des manipulations sur les secondaires ? Dois-je repartir de zéro en supprimant cette base de données du groupe de disponibilité, chiffrer la base de données et refaire tout le processus d’ajout à un groupe de disponibilité (backup, restauration sur les secondaires et ajout au groupe de disponibilité) ?

Soyons un peu feignant et partons du principe que tout est à faire depuis le réplica primaire et que tout sera répliqué par la suite par AlwaysOn .. après tout ca sert à cela la réplication non ? :-) . Précédemment nous avons implémenté TDE sur la base de données AdventureWorks2012 qui faisait parti d’un groupe de disponibilité lst_adv. On pourrait conclure que tout est fini mais si l’on jette un rapide coup d’œil à l’état de synchronisation de notre groupe de disponibilité on s’aperçoit vite qu’un problème est survenu suite à la mise en place de TDE et que la base de données Adventureworks2012 est même dans un état suspect sur les serveurs secondaires sur SSMS.

alwayson_tde_1

 

Parfait … on active TDE et on se retrouve avec une base de données suspecte !! Bravo TDE !! :-) Ne paniquons pas et regardons un peu plus loin dans les logs d’erreurs SQL on peut voir ceci :

alwayson_tde_2

La cause du problème est la suivante : après avoir chiffré notre base de données sur le réplica primaire, les réplicas secondaires ne trouvent pas le certificat dont l’emprunte correspond à celle utilisé par le certificat créé initialement pour le chiffrement TDE. Dans ce cas la réplication du flux de données du réplica primaire vers réplicas secondaires est donc naturellement suspendue. Ce comportement est tout à fait normal puisque nous essayons de répliquer une base de données chiffrée vers une base de données qui ne peut pas être chiffrée. Ce fameux certificat est hébergé dans la base de données master et n’est pas répliqué automatiquement par AlwaysOn contrairement à la clé de chiffrement de bases de données située dans la base de données AdventureWorks2012. Il ne nous reste plus qu’à sauvegarder ce certificat, le restaurer sur les réplicas secondaires et relancer la réplication des données pour AdventureWorks2012 :

alwayson_tde_05

Après quelques secondes ou minutes (en fonction de la quantité de données à répliquer car l’état de synchronisation est suspendue) on peut voir sur le dashbord du groupe de disponibilité lst_adv que tout est rentré dans l’ordre :

alwayson_tde_3 

Pour résumé, il est possible d’implémenter TDE sur une topologie AlwaysOn existante à condition de bien penser à restaurer le certificat servant au chiffrement de la clé de chiffrement de la base de données pour TDE. Le mode feignant est donc à proscrire :-)

 

icon_arrow Quel avantage à avoir du chiffrement de sauvegardes de bases de données si celles-ci le sont déjà avec TDE ?

La documentation en ligne concernant TDE explique qu’une sauvegarde provenant d’une base chiffrée par TDE est également chiffrée par le même certificat de serveur. Quel intérêt à chiffrer de nouveau le média de backup par la nouvelle fonctionnalité de chiffrement proposée avec SQL Server 14 si celle-ci est déjà initialement chiffrée par TDE ? Je me suis posé la question en pensant qu’une fois qu’une base était chiffrée par TDE, le chiffrement des sauvegardes n’avaient aucun effet. Mais je me trompais bien sûr : le chiffrement des sauvegardes avec SQL14 agit indépendamment de TDE et chiffrera une seconde fois le média de sauvegarde. Cela nous permet d’ajouter une protection supplémentaire au média de sauvegarde à savoir que chaque chiffrement peut utiliser un algorithme différent. Voyons comment cela se passe.

On commence donc par créer un certificat dédié aux chiffrement des sauvegardes dans la base de données master :

image

On effectue une sauvegarde de notre base de données AdventureWorks2012 avec le nouveau mot clé ENCRYTION pour la commande BACKUP :

image

On a maintenant un média de sauvegarde doublement chiffré. Si maintenant on tente de lire le contenu de ce média depuis une nouvelle instance SQL on se retrouve avec le message d’erreur suivant :

alwayson_tde_6

La lecture de l’entête du média de sauvegarde est impossible si le serveur SQL ne possède pas un certain certificat avec l’emprunte décrite ci-dessus. Par déduction, on peut aussi affirmer que la restauration ne sera pas impossible pour le moment.

Restaurons le certificat utilisé pour le chiffrement des sauvegardes dans la base de données master de la nouvelle instance SQL et essayons à nouveau de lire le contenu du média de sauvegarde :

alwayson_tde_7

Cela ne fonctionne toujours pas … on peut remarquer que l’emprunte du certificat manquant est différent cette fois. Il correspond en réalité à celle du certificat créé initialement pour activer TDE sur AdventureWorks2012. Après avoir restauré ce certificat il est possible de lire le contenu du média de sauvegarde et donc de restaurer notre base de données :

alwayson_tde_4 

Pour un nouveau réplica AlwaysOn, il faudra donc bien penser à restaurer tous les certificats nécessaires à la restauration d’une base de données avant de la joindre au groupe de disponibilité concerné.

Bon chiffrement !!

David BARBARIN (Mikedavem)
MVP et MCM SQL Server