Невозможно подключиться к (localdb)\MSSQLLocalDB - из-за выполнения триггера
У меня есть экземпляр SQL Server Express на моем компьютере, который работал нормально, и я понятия не имею, что изменилось. Теперь я получаю эту ошибку:
Не удалось войти в систему для входа «myusername» из-за выполнения триггера.
Изменен контекст базы данных на «master».
Я пытался следить за этим: https://dba.stackexchange.com/questions/218811/logon-failed-for-login-due-to-trigger-execution
Таким образом, есть много идей о том, как просто удалить вызывающий нарушение триггер, и вы можете подключиться к выделенному административному соединению (DAC), если это необходимо. Мне не нужно подключаться через ЦАП, потому что я могу подключиться к sa, используя нормально. Моя проблема только при подключении к
(localdb)\MSSQLLocalDB
. По какой-то причине LocalDB вызывает только эту ошибку.
Когда я вхожу в систему с помощью 'sa' и запускаю это:
SELECT * FROM sys.server_triggers;
Нет возвращенных строк. Это пустой результат. Итак, где триггер, который мне нужно отключить? LocalDB не подключается к тому же экземпляру, что и мой экземпляр SQL Server Express или что-то в этом роде? Итак, LocalDB подключается к чему-то еще, у которого есть проблема с триггером, при подключении через
MACHINENAME\INSTANCENAME
не имеет триггеров. Я бы подумал, что логин 'sa' смог бы видеть триггеры, если бы они были там.
РЕДАКТИРОВАТЬ 1: ОК. Я нашел все эти триггеры в базе данных msdb. Я проверил все базы данных, и это единственная, у которой есть триггеры.
syscollector_collection_item_parameter_update_trigger
syscollector_tsql_query_collector_delete_trigger
trig_targetserver_insert
syspolicy_update_system_health_state
sysmanagement_delete_shared_server_group_trigger
syspolicy_execution_trigger
trig_notification_ins_or_upd
trig_notification_delete
syspolicy_validate_events
syspolicy_insert_job_create_trigger
syspolicy_update_job_update_trigger
syspolicy_insert_policy_trigger
syspolicy_update_policy_trigger
syspolicy_delete_job_delete_trigger
syspolicy_instead_delete_policy_trigger
syspolicy_insert_condition_trigger
syspolicy_for_update_condition_trigger
trig_sysoriginatingservers_delete
syspolicy_after_update_condition_trigger
trig_sysjobs_insert_update
syscollector_collection_set_is_running_update_trigger
trig_sysmail_profile
trig_sysschedules_insert_update
trig_principalprofile
trig_sysmail_account
trig_sysmail_profileaccount
trig_backupset_delete
trig_sysmail_profile_delete
trig_sysmail_servertype
trig_sysmail_server
trig_sysmail_configuration
trig_sysmail_mailitems
syspolicy_insert_target_set_level_trigger
trig_sysmail_attachments
syspolicy_update_target_set_level_trigger
trig_sysmail_log
syspolicy_insert_target_set_trigger
syspolicy_delete_target_set_trigger
2 ответа
Мое решение из приглашения Admin Visual Studio CMD:
SqlLocalDB stop MSSQLLocalDB -k
SqlLocalDB delete MSSQLLocalDB
SqlLocalDB create MSSQLLocalDB -s
Кроме того: до этого я обновился до 2019 года с помощью установщика SQL Express.
Наконец, мой RegEx для вашей справки:
Когда это происходит на наших машинах, обычно это происходит из-за удаления базы данных Visual Studio VsCodeIndex перед удалением триггера.
Поскольку DAC не работает, мы используем этот метод, чтобы восстановить доступ к нашим экземплярам без потери данных:
- Закройте все экземпляры Visual Studio/Code, чтобы предотвратить условия гонки в базе данных.
- Найдите каталог установки, который должен выглядеть примерно так:
C:\Users\USER\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\MSSQLLocalDB
- Откройте самый последний файл журнала и убедитесь, что SQL Server действительно пытается открыть несуществующую базу данных. Файл журнала в конце должен быть таким
2023-05-22 16:03:52.89 spid51 Error: 17204, Severity: 16, State: 1.
2023-05-22 16:03:52.89 spid51 FCB::Open failed: Could not open file C:\Users\USER1\AppData\Local\Temp\VS11CodeIndex\Microsoft.VsCodeIndex_2f1ff123_0949_4b08_88ae_5cda46820c33.mdf for file number 0. OS error: 3(Het systeem kan het opgegeven pad niet vinden.).
2023-05-22 16:03:52.89 spid51 Error: 5120, Severity: 16, State: 101.
- Если файлы журналов разные, процедура не сработает.
- Создайте ошибочный путь (например,
C:\Users\USER1\AppData\Local\Temp\VS11CodeIndex
в примере выше) - Скопируйте существующую базу данных (достаточно пустой, обычно у нас их несколько) в эту папку и назовите ее правильно. В приведенном выше примере МДФ
Microsoft.VsCodeIndex_2f1ff123_0949_4b08_88ae_5cda46820c33.mdf
и ЛДФ _Microsoft.VsCodeIndex_2f1ff123_0949_4b08_88ae_5cda46820c33_log.ldf
(здесь будьте осторожны, имя файла заканчивается на_log
) - Теперь вы сможете войти в систему с помощью SSMS.
- Перейдите в Объекты сервера\Триггеры.
- Удалите нарушающие триггеры. На сегодняшний день у нас есть эти два
-
Trigger_Repository_Microsoft.VsCodeIndex_Drop
-
Trigger_Repository_Microsoft.VsCodeIndex_Repository.Item_Logon_SetSecurityClaims
- Удалить фейковую базу данных