Кто-нибудь еще слышал об ошибке базы данных в Coldfusion T-SQL? - PullRequest
0 голосов
/ 15 февраля 2011

У нашего администратора производственного сайта нашей компании есть небольшой инструмент для создания дампов, и я, не зная, пытаясь получить данные из базы данных, отличной от основной, использовал команду use database.

А вот и кикер, он мгновенно завершил работу каждой страницы Coldfusion с запросом.

, поскольку он каким-то образом кэширует эту команду базы данных.

Кто-нибудь еще слышал об этой странной ошибке?

Как мы можем остановить это поведение?

Если я использую команду «use database», я хочу, чтобы она существовала только до тех пор, пока текущий запрос, который я выполняю, после того, как я это сделаю, вернется к нормальному использованию базы данных.

Это странная и потенциально опасная проблема.

Есть мысли?

Ответы [ 2 ]

2 голосов
/ 15 февраля 2011

Я предполагаю, что это как-то связано с пулами соединений.Когда вы вызываете close, он не закрывает соединение, он просто помещает его обратно в пул.Когда вы вызываете open, ему не нужно открывать новое соединение, оно просто берет существующее соединение из пула.Если вы измените базу данных, на которую указывает соединение, ColdFusion может не знать об этом.Вот почему некоторые платформы (например, MySQL на .Net) сбрасывают соединение каждый раз, когда вы извлекаете его из пула, чтобы убедиться, что вы запрашиваете правильную базу данных, и чтобы у вас не было временных таблиц и других сеансов.Информация бродит вокруг.Недостатком такого рода поведения является то, что он должен совершать обходные пути к базе данных, даже при использовании объединенных соединений, что на самом деле может и не потребоваться.

1 голос
/ 15 февраля 2011

Kibbee находится на правильном пути, но чтобы продвинуть это немного дальше с тремя возможными обходными путями:

  1. Создайте другой DSN для использования этим одним запросом, чтобы оператор «USE DATABASE» сохранялся только для любых запросов, использующих этот DSN.
  2. Снимите флажок «Поддерживать соединения между клиентскими запросами» в администраторе CF
  3. Всегда не забывайте сбрасывать базу данных на ту, которую вы намереваетесь использовать в конце запроса. Само собой разумеется, что это очень опасная утилита на вашем рабочем сервере!

Это не ошибка и не совсем неожиданное поведение - если запрос кешируется, то все, что находится внутри блока cfquery, выполняется. Какую платформу базы данных вы используете?

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