11
votes

Meilleures pratiques lorsque vous utilisez Oracle DB et .NET

Quelles sont les meilleures pratiques ou les bêtes de fosse que nous devons être conscientes lorsque vous utilisez Microsoft Oracle Fournisseur d'une application de service Web de service Web?


0 commentaires

3 Réponses :


18
votes

Certaines pratiques que nous utilisons la base de notre expérience de la production:

  • Connexions Valider lorsque les récupérer à partir du pool de connexion.
  • Écrivez votre code de service pour ne pas supposer que les connexions sont valides - défaut de le faire peut causer un peu de douleur en particulier dans des environnements de production
  • Dans la mesure du possible, de façon explicite à proximité et les connexions après leur utilisation Dispose ( en utilisant (conn) {} blocs fonctionnent bien)
  • Dans un service, vous devez utiliser des connexions pour les plus brefs délais -. Surtout si vous cherchez à créer une solution évolutive
  • Envisagez d'utiliser timouts explicites sur les demandes appropriées à la durée typique d'une demande. La dernière chose que vous voulez est d'avoir un type de demande qui se bloque pour bloquer potentiellement votre système.
  • Dans la mesure du possible des variables liées à l'utilisation pour éviter Parsis dur à la base de données (cela peut être un cauchemar de performances si vous ne commencez pas avec cette pratique). En utilisant les variables de liaison vous protègent des attaques par injection SQL de base.
  • Assurez-vous que vous avez un soutien adéquat de diagnostic intégré dans votre système -. Envisager de créer un wrapper autour de l'Oracle ADO appelle afin que vous puissiez instrument, journal, et de localiser tous les
  • Envisagez d'utiliser des procédures stockées ou des vues si possible de pousser la sémantique de la requête et la connaissance du modèle de données dans la base de données. Cela permet plus facile profileing et le réglage requête.
  • Vous pouvez également envisager d'utiliser une bonne ORM (EF, Hibernate, etc) pour encapsuler l'accès aux données - en particulier si vous effectuez les opérations de lecture et d'écriture .
  • L'extension au-dessus - ne pas agrémenteront votre code avec des dizaines de fragments SQL écrits individuellement. Cela devient rapidement un cauchemar de maintenabilité.
  • Si vous êtes engagé à Oracle comme base de données, ne pas avoir peur d'utiliser des fonctionnalités spécifiques de Oracle. La bibliothèque ODP donne accès à la plupart des fonctionnalités -. Telles que les curseurs de table de retour, les opérations par lots, etc
  • Oracle de chaînes vides ( "") et NULLs comme équivalent - ne pas .NET. Normaliser votre traitement de chaîne selon le cas pour Oracle.
  • Envisagez d'utiliser NVARCHAR2 au lieu de VARCHAR2 si vous stockerez chaîne .NET Unicode directement dans votre base de données. Dans le cas contraire, convertir toutes les chaînes unicode pour se conformer au sous-ensemble ASCII de base. Ne pas le faire peut causer toutes sortes de confusion et des problèmes de corruption de données mal.

3 commentaires

+1 C'est très utile. Je laisserai la question ouverte afin que d'autres puissent contribuer à cela aussi.


@Lbushkin - ne ferme pas une connexion assez? Pourquoi devrais-je disposer?


En général, si un type implémente Idisposable, c'est une bonne idée d'appeler () sur celui-ci lorsque vous avez terminé - c'est la chose conviviale à faire, de sorte que si le code sous-jacent effectue une optimisation (par exemple, une libération précoce des ressources) a la possibilité de le faire. Dans le cas spécifique des connexions de base de données, certaines bibliothèques optimisent en interne en réponse à la cession de connexion - ce qui est une bonne chose pour l'application et la base de données, car dans la plupart des cas, les connexions sont en réalisation en commun. La fermeture de la connexion n'est pas toujours suffisante pour indiquer au fournisseur sous-jacent que vous avez terminé.



3
votes

Les fournisseurs Oracous fonctionnent bien dans une application ASP.NET, mais soyez au courant de:

  • correspondant à la version droite du client Oracle 32 bits ou 64 bits avec votre pool d'applications
  • Client 32 bits pour un pool d'applications 32 bits, client 64 bits pour un pool d'applications 64 bits.
  • Autorisations - Accorder le pool d'applications Droits utilisateur sur le répertoire client Oracle (C: \ Oracle \ Product \ 10.2.0 \ client_1)

    Cela n'a rien à voir avec ASP.NET, mais il est important de noter que Oracle stocke Vide String et null à la fois comme NULL, donc si vous avez besoin de savoir que quelque chose était vide et non null, vous devez Ajoutez une colonne supplémentaire à suivre qui ...


0 commentaires

4
votes

Quelques astuces supplémentaires:

  • Évitez d'utiliser le fournisseur Microsoft Oracle car il sort du support ( http://blogs.msdn.com/adonet/archive/2009/06/15/system-data-oracleclient-update.aspx )
  • Si vous êtes engagé par Oracle, utilisez des fonctionnalités spécifiques à Oracle et liez l'assemblage Oracle.Dataaccess à votre code
  • Si vous n'êtes pas sûr et que vous voulez être flexible, utilisez des classes System.Data.common et chargez le fournisseur Oracle via

2 commentaires

De plus, le fournisseur Microsoft Oracle (qui est livré avec la framework .NET) a des problèmes pour analyser de grandes valeurs aux propagines stockées. Grands articles (plus grand puis 32000 octets, je crois) causer des erreurs sur les types de désaccordement. Cela peut causer de gros problèmes lorsque vous travaillez avec des blobs et une longue (qui stocke de longs textes). Les requêtes paramétrées sont toutefois capables de recevoir de gros éléments (actuellement l'un de mes projets utilise un hack pour contourner ce problème).


La longueur maximale d'une chaîne dans une procédure stockée est de 32k caractères (ou d'octets). Tous les plus grands doivent être de type LOB (blob, clob ou nclob). Un lob peut être> 2 Go de taille.