Quelles sont les meilleures pratiques ou les pièges que nous devons prendre en compte lorsque vous utilisez un fournisseur Microsoft Oracle dans une application Web Service Centric .NET?Meilleures pratiques lors de l'utilisation de Oracle DB et .NET
Répondre
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.
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 ...
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
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
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
- 1. 'Appartient à' db meilleures pratiques de relation?
- 2. Rails DB Requêtes et Mise en cache les meilleures pratiques
- 3. Meilleures pratiques de NGen et Gacutil
- 4. Flex workflow et meilleures pratiques
- 5. Meilleures pratiques de classe C++
- 6. Meilleures pratiques pour Entity Framework et ASP.NET
- 7. Meilleures pratiques lors de l'inclusion/utilisation d'une "vue partielle"?
- 8. Meilleures pratiques de Webrequest asynchrones
- 9. Les meilleures pratiques lors de l'utilisation httplib2.Http() objet
- 10. ASP meilleures pratiques Overhead
- 11. Pattern Repository meilleures pratiques
- 12. Les meilleures pratiques lors du retour d'un tableau de valeurs (.NET)
- 13. meilleures pratiques lors de la création de tests et du déploiement de services Windows?
- 14. Meilleures pratiques de gestion des exceptions de base de données
- 15. Normes de base de données SQL Server et meilleures pratiques
- 16. Commandes de base de données et meilleures pratiques
- 17. DI de printemps, modèle de domaine et meilleures pratiques
- 18. Meilleures pratiques ASP.NET MVC
- 19. NAnt meilleures pratiques
- 20. Delphi: initialisation de l'application - meilleures pratiques/approche
- 21. Meilleures pratiques Google Maps?
- 22. ThreadPool Meilleures pratiques, Correct
- 23. Meilleures pratiques NHibernate Transactions
- 24. HTML Traverse et trouver les meilleures pratiques
- 25. Middleware JAVA fiable et sécurisé - Meilleures pratiques
- 26. Meilleures pratiques Maven
- 27. Dénomination DataContext Meilleures pratiques
- 28. meilleures pratiques d'organigramme
- 29. Meilleures pratiques LDAP
- 30. Meilleures pratiques WYSIWYG du navigateur
+1 cela assez utile. Je vais laisser la question ouverte afin que d'autres puissent y contribuer également. – Vivek
@LBushkin - La fermeture d'une connexion n'est-elle pas suffisante? Pourquoi devrais-je disposer? –
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