Oracle ODP.Net и пул соединений - PullRequest
4 голосов
/ 03 февраля 2012

это действительно два вопроса в одном, я думаю.

Мы разработали приложение .Net, которое обращается к базе данных Oracle, и заметили, что после изменения пароля Oracle пользователя приложение продолжает работать длякороткое время со старым паролем в строке подключения.Предположительно, это как-то связано со способом объединения существующих соединений?

При первом исследовании мы попытались отключить пул в строке соединения, однако приложение не сработало, выдав ошибку «Невозможно подключиться враспределенная транзакция "в точке, где он пытается открыть соединение.Хотя нам, вероятно, не хотелось бы отключать пул соединений в производственном приложении, мне любопытно, почему MSDTC, похоже, нуждается в этом?Нетто (11,2 я думаю).

Заранее спасибо

Энди

1 Ответ

4 голосов
/ 03 февраля 2012

Пожалуйста, ознакомьтесь с некоторыми выводами ниже:

Для первого вопроса: (приложение все еще связано со старым паролем БД)

Если мыПри подключении базы данных с помощью пула соединений менеджер пула соединений будет создавать и поддерживать количество сеансов соединений при первом вызове объекта open или close из OracleConnection.( количество сеансов подключения зависит от размера пула "min" и "max" в строке подключения ).В Oracle, я думаю, вы могли бы проверить активный сеанс, например:

SELECT s.inst_id,
       s.sid,
       s.serial#,
       p.spid,
       s.username,
       s.program
FROM   gv$session s
       JOIN gv$process p ON p.addr = s.paddr AND p.inst_id = s.inst_id
WHERE  s.type != 'BACKGROUND';

И в соответствии с Oracle doc, эта служба пула соединений закроет сеансы соединения после 3 минут неактивного состояния.[http://docs.oracle.com/html/E10927_01/featConnecting.htm]

  1. Таким образом, наиболее вероятная причина может заключаться в том, что ваше приложение все еще подключено к базе данных с помощью этого пула и все еще подключено в течение короткого времени, даже после изменения базы данныхпароль.
  2. Возможна также одна возможность «Oracle Client Cache» в ODP.net.Но не совсем уверен, вы можете проверить по адресу, [http://www.oracle.com/technetwork/issue-archive/2008/08-jul/o48odpnet-098170.html]

Для второго вопроса: (зачем нужен MSDTC)

Если выиспользуете в своем коде соединение с вложенной базой данных, оно будет переведено в DTC.[http://petermeinl.wordpress.com/2011/03/13/avoiding-unwanted-escalation-to-distributed-transactions/] На самом деле была служба Oracle для Microsoft Transaction Server (OraMTS), действующая как ODP.net, DTC и база данных Oracle.

Но вы не сталкивались с этой проблемой (MSDTC) до того, как отключили пул соединений.Похоже, что ваш код повторно использует одно и то же соединение из невыделенного пула соединений, и это может устранить необходимость в продвижении DTC.Был похожий вопрос по StaffOverflow.[ Почему моя транзакция не переходит в DTC? ]

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