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