88 votes

Différences de base entre Oracle et SQL Server?

Je vais passer un entretien d'embauche et je n'ai aucune expérience avec MS SQL Server. Cependant, j'ai 1 an d'expérience avec Oracle. Y a-t-il une énorme différence entre les deux ? Quelles questions de programmation puis-je m'attendre à ?

123voto

Guy Points 5465

Je suis un administrateur de base de données Oracle et SQL Server qui passe maintenant trop de temps sur SQL Server.

Pas pour être impoli, mais pour quelqu'un qui a seulement 1 an d'expérience Oracle, je doute que vous soyez totalement ancré dans Oracle, mais les différences les plus évidentes sont:

  • La PLUS grande différence: Contrôle de transaction. En Oracle, TOUT est une transaction et ce n'est pas permanent jusqu'à ce que vous fassiez un COMMIT. Dans SQL Server, il n'y a (par défaut) aucun contrôle de transaction. Une erreur à mi-chemin d'une procédure stockée NE FERA PAS DE ROLLBACK de la DDL dans les étapes précédentes.

Évidemment, si vous enveloppez le DML TSQL dans BEGIN TRANSACTION et COMMIT, alors cela se fera rollback mais c'est rare dans le code SQL Server que j'ai vu.

  • La DEUXIÈME plus grande différence: MVCC. En SQL Server et Oracle est différent. SQL Server permet les lectures sales, et les écritures peuvent bloquer les lectures dans MS SQL (encore une fois, c'est configurable mais par défaut dans SQL Server c'est pour la performance et non pour la cohérence de la lecture, contrairement à Oracle où la cohérence de la lecture est par défaut et inébranlable.

Considérez aussi:

  • Lorsque vous configurez un serveur Oracle, vous avez tendance à avoir une base de données avec de nombreux "utilisateurs/schémas", et des espaces de table partagés par tous vos utilisateurs. SQL Server a des bases de données séparées qui ne partagent pas les fichiers disque.

  • SQL Server utilise des "logins" pour vous donner accès à l'instance SQL Server et chaque base de données a des "utilisateurs" qui se mappent à un login pour obtenir un accès individuel aux tables et vues, etc.

  • Typiquement, tous les objets dans une base de données sont détenus par dbo.

  • TSQL est similaire à PL/SQL, mais (à mon avis) moins puissant. Vous devrez peut-être simplifier votre SQL pour le faire fonctionner aussi bien que vous vous y attendez dans Oracle.

  • Le SQL Server Management Studio (2008 SP1) est fantastique!

  • Si vous aimez Oracle, toute la "destruction" et l'optimisation du plan d'exécution, alors cette formation et cette expérience fonctionneront bien pour vous par rapport aux personnes qui codent uniquement en SQL Server TSQL et qui s'attendent à ce que le serveur fonctionne rapidement par magie.

  • SQL Server n'a pas de packages. Cela pourrait commencer comme un avantage (les packages PL/SQL peuvent être ennuyeux) mais finalement vous commencerez à avoir un grand ensemble de procédures stockées de noms similaires dans la base de données et vous souhaiterez qu'il existe un moyen de les organiser et de les regrouper mieux.

Dernier conseil, jouez toujours sur vos forces. Admettez que vous n'avez pas beaucoup d'expérience avec SQL Server mais mettez en avant le fait que vous connaissez les principes de fonctionnement d'un SGBDR, comment développer une application dirigée par les données et comment concevoir la performance dès le départ, etc.

41voto

PstScrpt Points 519

Points forts d'Oracle :

  • un meilleur système de transaction
  • packages
  • Cursor For Loops
  • déclarations ancrées (variables déclarées en tant que table.colonne%type)
  • valeurs initiales pour les déclarations de variables
  • variables %rowtype
  • overhead beaucoup plus faible pour les curseurs
  • déclencheurs BEFORE
  • déclencheurs FOR EACH ROW
  • Alors que les séquences nécessitent soit de la discipline, soit des déclencheurs avant chaque ligne, elles sont plus flexibles que les colonnes identité de SQL Server.

Points forts de SQL Server :

  • Transact-SQL est juste un langage, donc vous n'avez pas à vous soucier de ce qui est SQL, de ce qui est SQL*PLUS et de ce qui est PL/SQL.
  • Parce que T-SQL est juste un langage, les collections T-SQL fonctionnent en réalité assez bien avec SQL. Vous pouvez joindre des variables de table T-SQL à de vraies tables. Cela signifie que, même si PL/SQL est plus puissant pour la programmation procédurale, vous n'avez tout simplement pas besoin de faire de la programmation procédurale en T-SQL.
  • Si vous effectuez une requête SELECT sans cible, les résultats sont automatiquement renvoyés au client. Pour du code de production, cela signifie que vous n'avez pas besoin de déclarer et de passer sys_refcursor. Pour des travaux de recherche ad-hoc, cela signifie que vous pouvez facilement créer des scripts qui effectuent des recherches et affichent plusieurs jeux d'enregistrements.
  • SQL Server Management Studio est bien meilleur que SQL*Plus ou SQL Developer. Parce qu'il affiche tout jeu d'enregistrements renvoyé, les procédures de récupération de données sont très faciles à tester.
  • configuration plus facile de la connectivité client (rien d'aussi mauvais que tnsnames)
  • moins de confusion quant aux pilotes à utiliser, en dehors de JDBC
  • Déclarez une colonne "Int Identity Not Null Primary Key" et ensuite vous pouvez l'oublier.
  • Chaque nom de variable commence par un sigil "@" qui a l'air terrible, mais évite les collisions de noms entre variables et colonnes.
  • Le cas que vous avez déclaré pour une table ou une colonne sera retenu, mais il n'est pas sensible à la casse et vous n'êtes pas limité à 30 caractères.
  • Crystal Reports peut appeler des procédures stockées SQL Server, tandis que vous êtes généralement obligé de passer par une vue avec Oracle.

13voto

mjv Points 38081

Voici une comparaison des concepts, de la terminologie et de la syntaxe, etc. et une comparaison des performances / limitations

De plus, recherchez sur SO avec des balises ou des mots-clés comme [sql-server], [oracle], "différence" etc. car je suppose que ce sujet a été largement abordé, même si je n'ai pas trouvé rapidement de telles références.

12voto

Coxy Points 5256

Honnêtement, la plus grande différence que j'ai le plus souvent rencontrée est qu'Oracle est sensible à la casse et que MS SQL est insensible à la casse par défaut. Cela conduit à plus de surprises et de bugs que vous ne le pensez!

10voto

OMG Ponies Points 144785

Oracle et SQL Server ont des extensions différentes de SQL. Oracle a PL/SQL, tandis que SQL Server a Transact-SQL (T-SQL). Cela signifie que bien que SQL (SELECT, INSERT, UPDATE, DELETE) soit similaire au niveau de base, la syntaxe diverge rapidement en fonction de ce que vous essayez de faire.

Lorsque je travaille avec la structure de décision et le contrôle de flux de T-SQL, je crois qu'elle est moins accommodante que PL/SQL - CASE est une expression en T-SQL donc il ne peut pas être utilisé pour le contrôle de flux alors que ce n'est pas le cas dans Oracle. Une autre irritation que j'ai avec T-SQL est que si vous souhaitez effectuer plus d'une opération dans une branche IF - toute la branche doit être contenue dans un bloc BEGIN END. Oracle s'en moque, mais vous devez définir le END IF.

Les types de données sont similaires, mais Oracle ne fait pas de différence entre les types entier/décimal - tout est NUMBER avec la possibilité de spécifier le degré de précision. Les fonctions de date dans SQL Server sont plus accommodantes.

Étant tous deux des produits populaires, il est facile de rechercher des fonctionnalités équivalentes dans l'un pour l'autre. Cela ne signifie pas que cela existe, mais quelqu'un a probablement posté la solution de contournement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X