Developpez.com - Rubrique SGBD

Le Club des Développeurs et IT Pro

Quel SGBD choisir : Oracle ou Microsoft SQL-Server ?

Le 2003-03-08 14:55:09, par dellibmdell, Nouveau Candidat au Club
Dois-je choisir Oracle ou MS SQL-Server?

Qui peut me donner les points forts et les points faibles de chacun de ces SGBD?

En fait je voudrais avoir une idée générale sur les points forts d'oracle comparativement à MS sql/server.

Si je dois les comparer quels sont les points essentiels que je dois aborder.

Merci beaucoup
  Discussion forum
94 commentaires
  • orafrance
    Expert éminent sénior
    Et en général c'est l'application qui fait un alter session en fonction du contexte pour éviter d'allourdir les requêtes. Le site web d'Oracle est un parfait exemple pour montrer que l'internationalisation est possible.

    Les clients dont tu parles sont entourés d'incompétents c'est tout
  • TheLeadingEdge
    Membre expert
    Ola Fred,

    Envoyé par SQLPro
    Encore une fois dans la table ne figure pas les chemins inverses... Je te cite :

    On a déjà eu cette discussion il me semble. C'est pas cool de déterrer des vieux topics pour polémiquer.
    Si tu lis attentivement ce que tu as cité tu constateras qu'il existe déjà des aller-retours.

    CLERMONT-FERRAND LYON 206,11
    [..]
    LYON CLERMONT-FERRAND 205,04
    et
    LYON MONTPELLIER 303,6
    [..]
    MONTPELLIER LYON 301,66
    et aussi
    MONTPELLIER TOULOUSE 241,3
    [..]
    TOULOUSE MONTPELLIER 242,34
    et encore
    CLERMONT-FERRAND MONTPELLIER 335,23
    [..]
    CLERMONT-FERRAND TOULOUSE 375,6

    C'est donc 1 graphe valué orienté cyclique comportant plusieurs composantes fortement connexes.
    Ajouter 1 ou plusieurs arêtes ne changera rien à la chose.
    La requête déjà fournie retournera toujours un résultat juste au problème du plus court chemin.
    Donc avec Oracle on peut gèrer les arbres, mais aussi les graphes. Et même les treillis (qui pour le coup est aussi un cycle Hamiltonien) comme dans l'exemple du ''traveller saleman problem de E. Rich'' ci-dessus.
    [HS]Par contre dans ton article (pas mal fait par ailleurs) tu parles du ''problème du voyageur de commerce''. Je ne suis pas d'accord. Il ne s'agit que du plus court chemin ainsi que tu le dis dans cette discussion. [/HS]

    Envoyé par SQLPro
    Allez, courage... Oracle va peut être te permettre de faire cela avec une requête encore plus tordue... ;-)

    chiche ... Tu sais bien que je ne vais pas résister. Mais c'est juste pour le fun. La requête que j'ai donné fonctionne trés bien.
    Dans ma 1ere réponse j'ai dit que je ne voulais pas bricoler la chaîne trajets et que j'avais choisi de le faire en SQL.
    (Petit apparté, si tu trouve tordu un classique appareillage maitre/détail, comment tu qualifies une division relationnelle alors ?)
    En fait j'avais d'abord utilisé les expressions régulières pour faire le total.
    Voilà ce que ça donne (et j'ai rajouté les 2 aller-retours de ton post, dsl, je n'ai pas trouvé le etc..)

    Code SQL :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
      
    SQL> SELECT     * 
      2  FROM               Carte 
      3  ; 
    PARIS                            CLERMONT-FERRAND                        422 
    PARIS                            LYON                                    463 
    CLERMONT-FERRAND                 PARIS                                   422 
    CLERMONT-FERRAND                 LYON                                    206 
    CLERMONT-FERRAND                 MONTPELLIER                             335 
    CLERMONT-FERRAND                 TOULOUSE                                375 
    LYON                             PARIS                                   463 
    LYON                             CLERMONT-FERRAND                        205 
    LYON                             MONTPELLIER                             303 
    MONTPELLIER                      CLERMONT-FERRAND                        332 
    MONTPELLIER                      LYON                                    301 
    MONTPELLIER                      TOULOUSE                                241 
    TOULOUSE                         CLERMONT-FERRAND                        374 
    TOULOUSE                         MONTPELLIER                             242 
      
    14 ligne(s) sÚlectionnÚe(s). 
      
    SQL> WITH T AS 
      2  ( 
      3  SELECT     CONNECT_BY_ROOT depart || SYS_CONNECT_BY_PATH (destination, 
      4             SYS_CONNECT_BY_PATH (km, '+') AS x 
      5  FROM               Carte 
      6  WHERE      CONNECT_BY_ROOT depart = 'PARIS' 
      7  AND                destination = 'TOULOUSE' 
      8  CONNECT BY NOCYCLE PRIOR destination = depart 
      9  AND                destination <> CONNECT_BY_ROOT depart 
     10  ) 
     11  SELECT     CAST (t AS VARCHAR(48)), 
     12             CAST (x AS VARCHAR(16)), 
     13             CAST (SUM (CASE SUBSTR(x, LEVEL, 1) 
     14             WHEN '+' 
     15             THEN REGEXP_SUBSTR (SUBSTR (x, LEVEL, LENGTH(x)), '^[+][0-9 
     16             END) AS VARCHAR(8) ) 
     17  FROM               T 
     18  GROUP BY   t, 
     19             x 
     20  CONNECT BY  x = CONNECT_BY_ROOT x 
     21  AND                LEVEL <= LENGTH(x) 
     22  ; 
    PARIS,CLERMONT-FERRAND,LYON,MONTPELLIER,TOULOUSE +422+206+303+241 1172 
    PARIS,LYON,MONTPELLIER,CLERMONT-FERRAND,TOULOUSE +463+303+332+375 1473 
    PARIS,CLERMONT-FERRAND,MONTPELLIER,TOULOUSE      +422+335+241     998 
    PARIS,LYON,CLERMONT-FERRAND,MONTPELLIER,TOULOUSE +463+205+335+241 1244 
    PARIS,LYON,MONTPELLIER,TOULOUSE                  +463+303+241     1007 
    PARIS,CLERMONT-FERRAND,TOULOUSE                  +422+375         797 
    PARIS,LYON,CLERMONT-FERRAND,TOULOUSE             +463+205+375     1043 
      
    7 ligne(s) sÚlectionnÚe(s).
  • Waldar
    Modérateur
    Un bout d'un post que j'ai mis dans le forum Oracle après l'intervention de SQL Pro, mais il a plus sa place ici.

    ************************************************

    De mon côté j'ai une plus longue expérience SQL avec Oracle qu'avec SQL Server.
    Je travaille dans la BI donc quand j'interviens les applications sont déjà terminées.

    Ce que je trouve déroutant avec SQL Server ce sont les paramètres par défaut suivants :
    - commit implicite si on ne déclare pas de transaction
    - pas de format de date explicite (convert avec des type 101 102 et cetera, ou cast depuis les paramètre locaux ou format ISO si j'ai bien suivi)
    - typage de donnée conservé sans regarder l'opérateur : 5/2 = 2
    - collation CI plus ou moins par défaut : 'Aeé' = 'aEÉ'
    - rtrim plus ou moins par défaut également : 'A' = 'A '

    S'ajoute à celà un peu de retard en SQL sur Oracle :
    - les analytiques de SQL:2008
    - expressions régulières en SQL natif
    - les jointures externes partitionnées
    - la clause model non normative

    Si je dis des inepties n'hésitez pas à me reprendre ça améliorera mon quotidien !
  • SQLpro
    Rédacteur
    Oracle est pas gentil
    Enfin, une vérité vraie !!!

    A +
  • Fabien Celaia
    Rédacteur/Modérateur
    En gros, l'administration d'Oracle est plus complexe que MS-SQL et sa demande en ressources plus importantes.
    Par contre, il fonctionne sous NT et Unix et permet de gérer de gros volumes de données.
    Il y a d'autres alternatives, de type Sybase ASE, qui permettent de gérer ses bases à la mode MS-SQL (c'est renversant de dire ça, compte tenu que MS-SQL vient de Sybase), tout en obtenant des performances élevées et en ayant la possibilité de travailler sur divers OS.

    Ce que Oracle(9i) fait, mais pas MS-SQL(2000)
    - sécurité au niveau ligne
    - JVM inclue dans le moteur (mais sans support JIT)
    - support SQLJ, niveau 0 et 1
    - gestion cluster (optionnel), haute disponibilité (homis WSB)
    - édition des plan d'exécution
    - parallélisme pour insert et update (optionel)
    - backup et restore parallèles
    - tables de résumé
    - roles définis par l'utilisateur
    - gouverneur de ressources
    - attribution de priorités (optionel)

    Ce que MS-SQL(2000) fait, mais pas Oracle(9i)
    - recherche XML (ce n'est plus vrai depuis la 9.0.2)
    - verrouillage au niveau page
    - gestion de données hétérogènes
    - coût moindre

    C'est pas une liste exhausitive... et je me réjouis de la rafraîchir avec les commentaires des autres membres.

    Je suis de plus sûr qu'une des FAQ de SQLPro devrait conmprendre une lsite exhaustive...
  • vanquish
    Membre chevronné
    Aux arguments de Fadade, j'ajouterais qu'à mon sens, MS SQL-Server est d'une prise en main beaucoup plus rapide qu'Oracle.

    D'une façon générale, pour le meilleur et pour le pire on est tous habitué aux interfaces Microsoft.

    MS SQL-Server propose aussi une version Lite gratuite nommé MSDE (gratuite pour peu qu'on utilise un langage MS - mais si ce n'est que cela je te fais un "hello world" en VB, auquel j'adjoint des plugins écrit en ce que je veux).

    Il ne me semble pas qu'il y ai d'équivalent Oracle (en terme de gratuité et de redistribuabilité).
  • Maxence HUBICHE
    Expert éminent
    MSDE, pour etre Lite c'est Lite :
    Optimisé à 5 connexions concomittentes ....
    Je suppose que, s'il faut comparer Oracle et SQL Serveur, c'est qu'il y a plus d'utilisateurs que ça !!!
  • SQLpro
    Rédacteur
    grosso modo : Oracle est plus intègre mais moins rapide
    MS SQL Server est plus rapide mais moins intégre.

    Les volumes traités aujourd'hui sont comparable.

    L'administration de SQL Server est un poil plus facile.
    Le langage procédural de SQL Server est plus simple que celui d'Oracle. En gros le PL/SQL d'ORACLE ressemble à de l'Ada, celui de MS SQL Server (et de Sybase ASE) est plus direct, rapide et facile à écrire...
  • Fabien Celaia
    Rédacteur/Modérateur
    MS-SQL ne gère pas un environement cluster. Il est possible toutefois de l'utiliser sur du NT cluster, et il réagira comme n'importe quel autre service (redémarrage du service sur le noeud valide lors d'un crash), mais cela n'en fait pas un serveur cluster.

    Il n'est par exemple pas possible de travailler sur une même base partant de deux noeuds différents (en mode actif-actif), compte tenu que le service MSSQL ne peut être démarré que sur un noeud à la fois.
  • Epictète
    Membre averti
    Envoyé par SQLpro
    grosso modo : Oracle est plus intègre mais moins rapide
    MS SQL Server est plus rapide mais moins intégre.
    Ca me parais simpliste néamoins.

    Par exemple rapide pour faire quoi ? imaginons que SQL-Server soit plus rapide en transactions simples OLTP (ce qui n'est meme pas sur), oracle est probablement plus rapide en exploitation réelle OLCP (On line Complex Processing) grace à son système de gestion multi version (un système similaire existe dans interbase), ou qu'Oracle grâce à son système intégré de multi-versioning ?

    En effet, sql server n'à pas de système de gestion muti version comme oracle et InterBase, et son utilisation réelle en multi-utilisateurs sur des requetes complexes peut se révéler un problême à cause de son système de verrous page, alors qu'il n'y à jamais de blocages quel que soit le nombre d'utisateurs sous Oracle ou interbase grace au systèle multi-version.

    Donc de dire que l'un ou l'autre soit plus rapide cela me parait etre extrèmement simpliste.

    Ca dépend énormément de l'utilisation qu'on en fait, Sybase (SQL Server ) à été concu au départ pour l'OLTP (les transactions simples), et quand on sort de ce cadre d'utilisation simple (simpliste ?) , qu'en est il ?