Лучшие практики при использовании Oracle Oracle и .NET - PullRequest
10 голосов
/ 05 августа 2009

Каковы наилучшие практики или недостатки, которые нам необходимо знать при использовании поставщика Microsoft Oracle в приложении .NET, ориентированном на веб-службы?

Ответы [ 3 ]

17 голосов
/ 05 августа 2009

Некоторые методы, которые мы применяем на основе нашего производственного опыта:

  • Проверка соединений при извлечении их из пула соединений.
  • Напишите свой сервисный код, чтобы не предполагать, что соединения действительны - невыполнение этого может вызвать немало горя, особенно в производственных средах
  • По возможности, явно закрывайте и удаляйте соединения после их использования (using(conn){} блоки работают хорошо)
  • В службе вы должны использовать соединения в кратчайшие сроки, особенно если вы хотите создать масштабируемое решение.
  • Рассмотрите возможность использования явных тайм-аутов в запросах, соответствующих типичной продолжительности запроса. Последнее, что вам нужно, - это один тип запросов, который зависает, чтобы потенциально заблокировать всю вашу систему.
  • По возможности используйте переменные связывания, чтобы избежать жесткого анализа в базе данных (это может быть кошмаром производительности, если вы не начинаете с этой практики). Использование переменных связывания также защищает вас от основных атак SQL-инъекций.
  • Убедитесь, что в вашу систему встроена соответствующая диагностическая поддержка - рассмотрите возможность создания оболочки для вызовов Oracle ADO, чтобы вы могли обрабатывать, регистрировать и находить все из них.
  • Рассмотрите возможность использования хранимых процедур или представлений, когда это возможно, для передачи семантики запросов и знания модели данных в базу данных. Это позволяет упростить профилирование и настройку запросов.
  • В качестве альтернативы рассмотрите возможность использования хорошей библиотеки ORM (EF, Hibernate и т. Д.) Для инкапсуляции доступа к данным, особенно если вы выполняете операции чтения и записи.
  • Расширяя вышесказанное - не засыпайте свой код десятками индивидуально написанных фрагментов SQL. Это быстро становится кошмаром по ремонту.
  • Если вы привержены Oracle как базе данных, не бойтесь использовать специфичные для Oracle функции. Библиотека ODP обеспечивает доступ к большинству функций, таких как возврат курсоров таблицы, пакетные операции и т. Д.
  • Oracle обрабатывает пустые строки ("") и NULL как эквивалентные .NET не делает. Нормализуйте обработку строк в соответствии с требованиями Oracle.
  • Попробуйте использовать NVARCHAR2 вместо VARCHAR2, если вы будете хранить строку Unicode .NET непосредственно в вашей базе данных. В противном случае преобразуйте все строки Unicode, чтобы они соответствовали основному подмножеству ASCII. Невыполнение этого требования может привести к всевозможным сбивающим с толку и злым проблемам с повреждением данных.
4 голосов
/ 05 августа 2009

Еще несколько советов:

  • Избегайте использования поставщика Microsoft Oracle, поскольку он выходит из поддержки (http://blogs.msdn.com/adonet/archive/2009/06/15/system-data-oracleclient-update.aspx)
  • Если вы привержены Oracle, используйте специальные функции Oracle и свяжите сборку Oracle.DataAccess с вашим кодом
  • Если вы не уверены и хотите проявить гибкость, используйте классы System.Data.Common и загрузите провайдера оракула через
3 голосов
/ 05 августа 2009

Поставщики Oracle прекрасно работают в приложении ASP.NET, но имейте в виду:

  • Соответствие правильной версии клиента oracle 32-битной или 64-битной с вашим пулом приложений
  • 32-разрядный клиент для 32-разрядного пула приложений, 64-разрядный клиент для 64-разрядного пула приложений.
  • Полномочия - предоставить права пользователя пула приложений на каталог клиента oracle (c: \ oracle \ product \ 10.2.0 \ client_1)

Это не имеет ничего общего с ASP.NET, но важно отметить, что Oracle хранит пустую строку и null как null, так что если вам нужно знать, что что-то было пустым, а не null, вам нужно добавить дополнительный столбец для отслеживания этого ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...