Каковы наилучшие практики или падения ямы, о которых нам нужно знать при использовании поставщика Microsoft Oracle в веб-службе, ориентированной на .NET?
Рекомендации по использованию Oracle и .NET
Ответ 1
Некоторые практики, которые мы используем на основе нашего производственного опыта:
- Проверять соединения при извлечении их из пула соединений.
- Напишите свой код обслуживания, чтобы не предполагать, что соединения действительны - неспособность сделать это может вызвать довольно много горя, особенно в производственных средах.
- По возможности явным образом закрываю и удаляю соединения после их использования (
using(conn){}
блокирует работу хорошо) - В службе вы должны использовать соединения в кратчайшие сроки - особенно если вы хотите создать масштабируемое решение.
- Рассмотрите возможность использования явных сообщений о запросах, соответствующих типичной длительности запроса. Последнее, что вы хотите, это иметь один тип запросов, который зависает, чтобы потенциально заблокировать всю вашу систему.
- По возможности используйте переменные связывания, чтобы избежать жестких разборов в базе данных (это может быть кошмар производительности, если вы не начинаете с этой практики). Использование переменных привязки также защищает вас от основных атак SQL-инъекций.
- Удостоверьтесь, что у вас есть адекватная диагностическая поддержка, встроенная в вашу систему, - подумайте над созданием обертки вокруг вызовов Oracle ADO, чтобы вы могли использовать инструмент, регистрировать и находить все из них.
- Рассмотрим возможность использования хранимых процедур или представлений, когда это возможно, чтобы передать семантику запроса и знание модели данных в базу данных. Это позволяет упростить настройку и настройку запросов.
- В качестве альтернативы рассмотрите возможность использования хорошей библиотеки ORM (EF, Hibernate и т.д.) для инкапсуляции доступа к данным - особенно если вы выполняете операции чтения и записи.
- Расширяясь выше - не переполняйте свой код десятками индивидуально написанных фрагментов SQL. Это быстро становится кошмаром в ремонтопригодности.
- Если вы привержены Oracle как базе данных, не бойтесь использовать функции, специфичные для Oracle. Библиотека ODP обеспечивает доступ ко многим функциям, таким как возврат указателей на таблицы, пакетные операции и т.д.
- Oracle обрабатывает пустые строки ("") и NULL как эквивалентные -.NET нет. Нормализовать обработку строк в соответствии с требованиями Oracle.
- Рассмотрите возможность использования NVARCHAR2 вместо VARCHAR2, если вы будете хранить строку Unicode.NET непосредственно в своей базе данных. В противном случае преобразуйте все строки unicode в соответствие с базовым подмножеством ASCII. Несоблюдение этого требования может привести к разным проблемам, связанным с запутанностью и сбоем данных.
Ответ 2
Еще несколько советов:
- Избегайте использования поставщика Microsoft Oracle, потому что он выходит из поддержки (http://blogs.msdn.com/adonet/archive/2009/06/15/system-data-oracleclient-update.aspx)
- Если вы используете Oracle, используйте специальные функции oracle и свяжите сборку Oracle.DataAccess с вашим кодом.
- Если вы не уверены и хотите быть гибкими, используйте классы System.Data.Common и загрузите поставщика оракула через
Ответ 3
Поставщики Oracle отлично работают в приложении ASP.NET, но имейте в виду:
- Соответствие правильной версии клиента oracle 32-разрядной или 64-разрядной версии с пулом приложений
- 32-разрядный клиент для 32-битного пула приложений, 64-разрядный клиент для 64-битного пула приложений.
- Разрешения. Предоставьте права пользователя пула приложений в каталоге клиента oracle (c:\oracle\product\10.2.0\client_1).
Это не имеет ничего общего с ASP.NET, но важно отметить, что Oracle хранит пустую строку и null как null, поэтому, если вам нужно знать, что что-то пустое и не пустое, вам нужно добавьте дополнительный столбец для отслеживания этого...