2009-08-05 7 views

Répondre

17

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, fermer explicitement et éliminer les connexions après leur utilisation (using(conn){} blocs fonctionnent bien)
  • Dans un service, vous devez utiliser les connexions le plus rapidement possible, en particulier si vous souhaitez créer une solution évolutive.
  • Envisagez d'utiliser des délais explicites sur les demandes correspondant à la durée type d'une demande. La dernière chose que vous voulez est d'avoir un type de requête qui bloque potentiellement votre système entier.
  • Dans la mesure du possible, utilisez des variables de liaison pour éviter les analyses dures dans la base de données (cela peut être un cauchemar de performance si vous ne commencez pas cette pratique). L'utilisation de variables de liaison vous protège également des attaques par injection SQL de base.
  • Assurez-vous que la prise en charge du diagnostic est intégrée à votre système. Vous pouvez créer un wrapper autour des appels Oracle ADO afin de pouvoir les instrumentaliser, les consigner et les localiser.
  • Envisagez d'utiliser des procédures stockées ou des vues lorsque cela est possible pour pousser la sémantique des requêtes et la connaissance du modèle de données dans la base de données. Cela facilite le profilage et l'optimisation des requêtes.
  • Vous pouvez également utiliser une bonne bibliothèque ORM (EF, Hibernate, etc.) pour encapsuler l'accès aux données, en particulier si vous effectuez des opérations de lecture et d'écriture. Extension de ce qui précède - ne peignez pas votre code avec des dizaines de fragments SQL écrits individuellement. Cela devient rapidement un cauchemar de maintenabilité.
  • Si vous êtes intéressé par Oracle en tant que base de données, n'ayez pas peur d'utiliser des fonctionnalités spécifiques à Oracle. La bibliothèque ODP permet d'accéder à la plupart des fonctionnalités, telles que les curseurs de table retournés, les opérations par lots, etc.
  • Oracle traite les chaînes vides ("") et les valeurs NULL comme équivalentes, ce qui n'est pas le cas avec .NET. Normaliser votre traitement de chaîne comme approprié pour Oracle.
  • Envisagez d'utiliser NVARCHAR2 au lieu de VARCHAR2 si vous stockez la chaîne Unicode .NET directement dans votre base de données. Sinon, convertissez toutes les chaînes Unicode pour qu'elles soient conformes au sous-ensemble ASCII principal. Ne pas le faire peut causer toutes sortes de problèmes de corruption de données confus et mauvais.
+0

+1 cela assez utile. Je vais laisser la question ouverte afin que d'autres puissent y contribuer également. – Vivek

+0

@LBushkin - La fermeture d'une connexion n'est-elle pas suffisante? Pourquoi devrais-je disposer? –

+0

En général, si un type implémente IDisposable, c'est une bonne idée d'appeler Dispose() quand vous avez terminé - c'est la chose amicale à faire, de sorte que si le code sous-jacent effectue une optimisation (par ex. il a l'opportunité de le faire. Dans le cas spécifique des connexions de bases de données, certaines bibliothèques optimisent en interne en réponse à l'élimination des connexions - ce qui est une bonne chose tant pour l'application que pour la base de données, car dans la plupart des cas, les connexions sont regroupées. La simple fermeture de la connexion n'est pas toujours suffisante pour indiquer au fournisseur sous-jacent que vous avez terminé. – LBushkin

3

Les fournisseurs Oracle fonctionnent très bien dans une application ASP.NET, mais méfiez-vous:

  • Adaptation de la bonne version 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.
  • Permissions - accorder les droits des utilisateurs de la piscine app dans 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 qu'Oracle stocke la chaîne vide et null comme null, donc si vous avez besoin de savoir que quelque chose était vide et non nul, vous devez ajouter une colonne supplémentaire pour suivre cela ...

4

quelques conseils:

  • Évitez d'utiliser le fournisseur Microsoft Oracle, car il va de support (http://blogs.msdn.com/adonet/archive/2009/06/15/system-data-oracleclient-update.aspx)
  • Si vous êtes engagé à Oracle d'utiliser Oracle caractéristiques spécifiques et un lien assemblage Oracle.DataAccess à votre code
  • Si vous n'êtes pas sûr et que vous voulez être flexible, utilisez les classes System.Data.Common et chargez orac le fournisseur par
+0

De même, le fournisseur Microsoft Oracle (fourni avec le framework .NET) rencontre des problèmes lors de l'analyse de grandes valeurs dans StoredProcedures. Les gros objets (plus gros que 32000 octets, je crois) provoquent des erreurs sur les types de mésappariement. Cela peut causer de gros problèmes lorsque vous travaillez avec blobs et long (qui stocke de longs textes). Les requêtes paramétrées sont cependant capables de recevoir de gros items (actuellement un de mes projets utilise un hack pour contourner ce problème). – Gertjan

+0

La longueur maximale d'une chaîne dans une procédure stockée est de 32 k caractères (ou octets). Toutes les plus grandes devraient être de type LOB (BLOB, CLOB ou NCLOB). Un objet LOB peut avoir une taille supérieure à 2 Go. – Christian13467

Questions connexes