У меня проблема с обычной базой данных SQL, восстановленной из базы данных, установленной в группе высокой доступности AlwaysOn в SQL Server 2017.
Я восстановил копию производственной базы данных на другом сервере для использования в качестве тестовой базы данных QA, также с другим именем - MyDB_demo.
Проблема в том, что в копии приложения QA (тот же код, что и в рабочей версии, но с новыми улучшениями для разработки) в какой-то момент возникает ошибка.
Даже если мой conn str указывает на MyDB_demo, я получаю следующую ошибку
[SqlException (0x80131904): целевая база данных («MyDB») находится в группе доступности и в настоящее время доступна для подключений, когда намерение приложения установлено только для чтения. Дополнительные сведения о намерении приложения см. в электронной документации по SQL Server.]
Есть ли какая-либо ссылка во вновь восстановленной БД (теперь именуемой
MyDB_demo
), которая хранит исходное имя рабочей БД и почему она пытается получить к ней доступ?
Любое предложение приветствуется.
ИЗМЕНИТЬ
На самом деле сервер, используемый для восстановления MyDB_demo
, является одним из вторичных узлов для группы доступности AlwasyOn; он также содержит копию RO рабочей базы данных, MyDB
.
Итак, на сервере есть:
Следовательно, я понимаю сообщение об ошибке - было бы разумно, если бы я попытался напрямую получить доступ к вторичной, RO-копии производственной базы данных из строки подключения.
- нормальная автономная БД восстановлена для контроля качества -
MyDB_demo
- ошибка вылетает в
SQLHelper
классе, вспомогательном классе от MS для работы с SQL Server, в функцииExecuteDataset
Но я этого не делаю: строка подключения (которую я перепроверил) пытается подключиться к QA db, MyDB_demo.
Вот дополнительная информация:
Итак, похоже, что строка подключения МОЖЕТ быть изменена (!!!) каким-то образом самим NET-приложением и только для этой хранимой процедуры?
- ошибка возникает ТОЛЬКО в одной хранимой процедуре - множество других хранимых процедур, а также прямые операторы SQL работают нормально
- Я проверил хранимую процедуру, думая, что она может случайно содержать жестко закодированную ссылку на имя БД - это не так.
- и странная часть - я запускаю хранимую процедуру с теми же параметрами, которые вызываются из приложения в SSMS - и она работает нормально - без ошибок
- Из-за странной (читай: глупой) ситуации, когда виновник SP терпит неудачу только при вызове из приложения, но работает нормально при попытке в SSMS, я попробовал «глупый» подход: я проверил его код, закомментировал два поля, которые были установлены с дополнительными выборками, такими как
MyDB_demo
(на самом деле я заменил эти значения фиктивными), и я изменил поле Order By, которое изначально было указано какMyDB_demo
, из которого я удалил кавычки.
Кто-нибудь когда-нибудь сталкивался с чем-то подобным?
Спасибо
RO копия производственной БД (MyDB
)