Bonjour,
En réponse à notre dernier interlocuteur.
Ne pas vouloir connaître une plate-forme n'est pas sage professionnellement. Les autres plate-formes ont parfois de bonnes idées et cela permet une comparaison plus nuancée en fonction de l'adéquation entre l'offre (ce que la plate-forme offre) et les besoins (les problèmes applicatifs qu'on doit résoudre).
---L'information sur SQL.
Elle ne manque pas : Voici d'excellents sites de départ:
http://www.winnetmag.com/SQLServer/
http://www.sqljunkies.com
Le site d'acceuil SQL Server chez Microsoft offre toutes sortes de renvois dont des études de cas, et des grosses implantations SQL Server.
http://www.microsoft.com/sql/
Et pour les white paper / astuces SQL Server :
http://msdn.microsoft.com/sql/
En plus il y a l'excellente documentation électronique de SQL Server : Books Online qu'on peut directement récupérer de
www.microsoft.com/SQL. Elle est en format .CHM
Je ne reproche à personne d'être fan d'une technologie de BD particulière, les technologies de BD son devenues très intéressantes depuis les dernières années. Donc je peux vous comprendre d'être fan d'Oracle, moi même je fais encore des découvertes passionnantes sur SQL Server malgré mes dix ans d'expérience sur cette plate-forme. Chaque plate-forme offre ses avantages et ses manières de faire.
---Au sujet de l'installation de SQL Server.
Installer un serveur SQL2000 ne demande pas d'arrêter l'OS et si votre intention est d'installer une nouvelle instance, il ne demande pas d'arrêter les autre instances SQL Server. Je l'ai déjà fait et le fait encore régulièrement. Etant de background Oracle, j'imagine que votre intention est d'installer une instance SQL supplémentaire. Avec SQL Server c'est moins nécessaire car un seul moteur SQL Server en mémoire supervise plusieurs databases. Le moteur Oracle est spécifique à un database. C'est une différence avec laquelle les experts des deux côtés savent tirer partie. De plus deux instances SQL Server peuvent rouler à des versions et services packs différents. Peut être que votre impression provient d'une expérience passée avec SQL7 ou sur NT.
En parlant de Clustering, je reconnais qu'Oracle se vante d'offrir bien des option$$$ à ce sujet. Je pense que leur offre a ses mérites techniques, et qu'elle est aussi assez dispendieuse. Cependant en ce qui concerne les grosses implantations SQL Server (présentées sur le site de Microsoft) il y a des cas dont l'envergure est telle que 98% des développeurs n'auront jamais à toucher.
---Au sujet des backups restore.
Pour ce qui est des backups restore, je réaffirme que la comparaison se fait très bien avec Oracle. SQL Server rend très simple la restoration à un point dans le temps. L'archivage des logs de génère pas une multitude de fichiers car il n'y a pas de nécessité d'avoir des redo log. En fait l'archivage des log est simplement l'affaire d'une simple commande SQL dont l'exécution est cédulé par l'agent SQL (un service qui roule en parralèle avec SQL Server). La commande SQL et sa cédule peuvent être générée via l'interface graphique de Entreprise Manager. La destination du backup partiel peut se combiner au fichier de backup total ou à un fichier de backup partiels, car SQL Serveur peut mettre plusieurs backups dans un même fichier et s'y retrouver. De même lors du restore il se rappelle où il a mis ses backups et génère les requêtes appropriées pour revenir à la version désirée de la base de donnée.
---La récupération de master / msdb.
Votre prétention à savoir qu'une perte de MSDB demande de reconstruire la base de données master est complètement contraire à mon expérience. Cette base de données se restore comme les autres. En théorie je le savais et j'ai même essayé au cas en simulant sa perte.
La reconstruction de la base de donnée master n'est requis que si l'on en perd les fichiers. C'est la même problèmatique que de perdre les fichier contrôle avec Oracle mais c'est plus simple sur SQL Server. SQL Server ne garde que peu de lien entre cette BD et les autres, de sorte que le retour en arrière sur master n'empêche pas l'instance SQL de fonctionner. Une fois les fichiers récupérés (soit par une copie valide faite après installation ou par reconstruction) on réapplique le backup le plus récent qu'on a. Même là on peut s'en tirer facilement sans backup très récent. La reconstruction du fichier master se fait en deux clic de souris. Il n'y rien là qui demande de s'arracher les cheveux. Une fois les fichiers reconstruits (une affaire de quelques minutes) on réapplique nos backups les plus récents. Il faudrait être pas mal négligent pour ne pas avoir de backup de BD, surtout qu'il est possible via l'interface graphique de mettre en place les backups automatiques avec gestion des fichiers sans écrire une seule commande SQL ou script.
---Le retour en arrière et l'intégrité.
Si Oracle vous permet de revenir en arrière avec la fonction flashback (par exemple revenir en arrière d'une heure), c'est à condition que les fichiers qui contiennent cette information soit assez gros. Si une période de grosse activité produit de l'information en excédent de la capacité de ces fichiers un retour en arrière sera j'imagine impossible.
Avec SQL Server on procède simplement à un restore du database sous un autre nom de BD avec du point in time restore du fichier de backup (total + partiel). C'est assez rapide car il n'y a pas de nécessité à installer une autre instance comme sous Oracle car SQL Server est multi-database. Dans ce cas là tu est sûr de trouver l'information. En ce qui concerne la possibilité de corriger une erreur passée, vous voulez sans doute parler de la possibilité de la diagnostiquer, de retourner en arrière et de reprendre le traitement. J'imagine mal quelqu'un affirmer être en mesure de jouer dans une table et de ne pas tenir compte que les modifications à cette table dépendent de d'autres règles d'intégrité référentielles.
SQL Server permet une restoration partielle d'une base de données par filegroup et les filegroup ainsi restorés sont disponibles. Si on parle au futur (SQL 2005) il sera possible d'accèder la base de données encore plus rapidement avant même la fin du backup, mais cette affirmation me laisse perplexe car elle doit imposer des restrictions d'accès. C'est à voir...
---SQL Server 2000 n'offre pas la possibilité d'examiner le log, mais des produits complémentaires le font et ils sont relativement bon marché.
En ce qui concerne la gestion des backups totaux et des logs aucun script n'est requis. Peut-être que votre situation l'a requis et si vous daignez me l'expliquer il me fera plaisir d'y répondre. Sur SQL Server tout est aisément automatisable, sur Oracle on peut automatiser pas mal de trucs mais peut-on le faire aisément ? Après bien de la formation sans doute....
En ce qui concerne la restoration d'un block, vous avez parlé de bloc corrompu. D'habitude sur SQL Server un tel problème survient à cause du hardware (des contrôleurs qui on des write cache sans tolerance aux pannes). J'espère que ça n'arrive pas sur Oracle que pour une raison autre que le hardware. Mais je parirais fort que ceux qui se paient des DBA capables de le faire des restoration de block sont aussi capable de se payer un raid-1 qui prévient ce genre de problème sans casse-tête. C'est bien théorique comme avantage. SQL Server est capable aussi de corriger lui-même certains problèmes d'intégrité dans les index, sans passer par un restore et en même temps que tout le monde travaille.
---Le versionning est ses réels avantages.
En ce qui concerne le versionning, malgré ses avantages, il vous permet aussi de lire des données qui ne sont pas à jour, c'est à dire qu'elles réflètent le passé qui est en train d'être modifié au présent. Dans le contexte d'une transaction, votre code prendra donc une décision sur des valeurs passées au lieu que le serveur vous fasse attendre juste un peu la fin de la transaction pour vous laisser lire quelquechose qui est à jour. Le "read consistency" est au passé, pas au présent. Il faut en tenir compte dans sa manière de coder. Il existe sans doute un truc Oracle pour contourner ce genre de problème, mais c'est le comportement par défaut.
Sur SQL Server 7-2000 on peut lire quelquechose de verrouillé via l'option noLock au niveau du Select, mais ce n'est pas aussi intéressant que le versionning. On peut aussi de faire un snapshot de l'image des données par un select avec l'option into pour créer une table temporaire dans tempdb. Dasn un cas ou l'autre, quand le rare besoin se fait sentir on a des solutions.
Nous avons une expérience valable avec une GROSSE application bi-serveur qui nous montre que les SGBD SQL Server ou Oracle desservent bien l'application et avec une performance comparable. Nous avons fait notre développement avec Oracle premièrement (requis par certains clients) puis nous l'avons adaptée pour SQL Server (requis par d'autres clients). Le port à consisté à écrire des triggers / stored procedures compatibles pour SQL 7. A mon avis, sachant ce que nous utilisons avec SQL Server, l'inverse aurait été plus difficile. Les triggers SQL Server sont After trigger avec accès à toute l'information modifiée dans des pseudo-tables. Oracle aurait requis des After-row qui ont des contraintes d'accès aux données (mutating tables) qui nous ont donné des casse-tête. Le jour où Oracle permettra d'écrire des After trigger style sql server, ce sera un gros plus pour lui.
En ce qui concerne les rollback segments (chose du passé), je suis allé au support d'Oracle, il ont demandé toutes sortes de trucs, les paramètres des tablespaces, et on fait tracer des tas de trucs sur Oracle sans succès. On a résolu le cas avec des rollback segments très très gros, puis un jour le problème s'est résorbé. J'ai posé la question à des DBA Oracle plein temps qui étaient bien embêtés compte tenu des informations que je pouvais leur fournir. Personne n'avait d'explication valable à ce phénomène sinon que le versionning était évidemment en cause (erreur snapshot too old). Je parirais fort que cette erreur risque encore de survenir même avec la technologie actuelle, car il s'agit d'une question de volume de transactions passées.
---Les verrous
Votre test à propos du versionning je le connais bien. Nous avons une version d'application qui supporte à la fois SQL Server et Oracle. En passant c'est se leurrer de croire le versionning élimine tous les deadlocks. Il en réduit toutefois les chances si une des opérations participantes au deadlock est une lecture. Cependant toutes les opérations de modifications sont toutes aussi sujettes à faire des deadlock entre elles sur n'importe quelle technologie de BD.
Votre test quoiqu'exact est très loin de la réalité d'une application réelle. Depuis quand on commence une transaction sans la finir ? Ne cherche-t-on pas non plus à faire les transactions les plus petites possibles car même sur Oracle une donnée modifiée dans une transaction demeure inaccessible à une autre modification tant que la transaction ne se termine pas.
Sur SQL Server votre select attendra jusqu'au commit c'est à dire une micro-fraction de seconde plus tard, et sur Oracle il n'attendra pas. L'escalade des locks sur SQL Serveur survient seulement si une proportion significative des données est bloquée et elle est variable en différents endroits de la table. Par exemple si une porportion significative de la page est verrouillé, il peut l'augmenter en verrou de page, sinon les verrous par rangées demeurent. Si une grosse proportion de la table est verrouillée, le verrou s'étend au niveau de la table, mais SQL Server fait cela de manière ordonnée, et son extension de verrou ne sera pas acquise avant la libération des verrous existants. Il s'agit d'un compromis acceptable, qui rend l'opération massive très performante de manière à laisser le chemin libre aux autres le plus rapidement possible. Nous avons des applications totalisant des millions de lignes de code avec SQL Server, et les rares causes de deadlock proviennent du fait d'un plan d'accès défectueux qui demande un balayage de table dans une opération de modification qui aurait dû utiliser un index. Quand je dis rares, je parle d'une fois par an et ils sont dûs à de nouveaux développements.
---La mécanique des locks sur oracle est basée sur des slots au niveau des block qui limitent le nombre de transactions possibles simultanées sur le block.
Dans un cas comme dans l'autre notre expérience nous montre qu'on peut développer des applications d'envergure avec un effort très équivalent puisque nous supportons le même code source pour les deux plate-formes. Il est rare qu'une plate-forme exige des efforts supplémentaire sur l'autere. Une fonctionnalité d'Oracle qui nous aurait bien servi est celle des séquenceurs. Avec SQL Server il aurait fallu développer différemment de manière à utiliser les colonnes auto-incrément. A l'époque nous ne pouvions le faire à cause d'une faiblesse dans SQL 7 à garantir la provenance de la dernière valeur attribuée, avec SQL 2000 cette provenance est garantie. Donc développer avec SQL Server 2000 ne requiert plus l'usage de séquenceurs.
---La configuration de SQL Server
En ce qui concerne la configuration de SQL Server, elle est basée sur le principe de l'auto-tuning. L'engin de BD examine continuellement son utilisation des resources et réalloue dynamiquement ses paramètres. Ceux qui l'ont programmé connaissenent mieux leur engin que nous. Ça ne demande pas d'intervention humaine, et ça s'ajuste tout seul au fur et à mesure des besoins des traitements ce qui implique une meilleure réutilisation des ressources de la machine qui ne sont pas bloquées par des paramètres statiques. Une forme d'intelligence artificielle.
---Deux SGBD de même classe.
Désolé de vous apprendre que SQL Server et Oracle jouent maintenant dans la même catégorie. En ce qui concerne la présence des OS sur le marché, c'est pas plus sérieux que de dire que DB2 va disparaître un jour ou que Oracle va remplacer MS SQL et vice et versa. Ces produits vont maintenir leur niche, simplement parce que il font le travail là où on leur demande. Si vous doutez que SQL Server est incapable de faire le travail dans de gros environnements allez voir les études de cas que Microsoft présente aux liens que je vous ai fournis.
Déjà que des applications de la dimension de SAP roulent aussi avec SQL Server qu'Oracle en dit assez long.
---Quelques questions...
En passant faut-il encore écrire des scripts compliqués pour repérer/arranger les chained-rows d'Oracle. J'espère que cette époque est révolue parce que c'était archaïque en pas pour rire. Sur SQL Server il suffit de céduler des tâches de réorganisation (qui laissent quand même la BD accessible). De plus cette réorganisation peut être même ciblée a de plus petits ensembles telle des tables.
--- Et d'autres affirmations.
Sur SQL Server tout ce qui n'est pas couvert par l'interface graphique peut généralement être réalisé au moyen de stored procedures assez simples. Définitivement SQL Server est pas mal plus simple à administrer.
En passant es-que l'optimiseur cost-based d'Oracle est devenu assez fiable pour être utilisé, parce que dans ce domaine c'est Oracle qui est le dernier arrivé. Sybase l'a originalement introduit et Microsoft l'a fait bien progressé dans son propre produit. Je ne peux pas dire pour Sybase que je l'ai perdu de vue depuis pas mal longtemps. De plus Microsoft tient compte que ce genre d'optimiseur a besoin d'avoir des statistiques de distribution réalistes et à jour (et il les met à jour tout seul). L'optimiseur rule-based Oracle fait un travail adéquat et prédictible mais pas toujours optimum. Par exemple SQL Server exécute un requête qui donne un plan d'accès X une première fois et immédiatement après améliore le plan d'accès à cause de ce qu'il a vu dans les données en passant dessus dans la première requête. Dans mon exemple il y a eu réduction immédiate du travail de 75%.
Si vous parlez de SQL Server dites donc à quelle version vous situez votre opinion.
P.S. La syntaxe de SQL Server et d'Oracle au niveau des requêtes s'est rapporchée de sorte qu'il est de plus en plus facile de faire des applications comparables (ansi join, énoncé case). Pour le reste les fonctions PS/SQL ou SQL Server peuvent compléter la compatibilité des deux plates-formes.
SVP : Si vous voulez poursuivre cette comparaison veuillez cerner un seul sujet à la fois car ça prend un temps fou répondre à tout cela.