Невозможно подключиться к (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 не работает, мы используем этот метод, чтобы восстановить доступ к нашим экземплярам без потери данных:

  1. Закройте все экземпляры Visual Studio/Code, чтобы предотвратить условия гонки в базе данных.
  2. Найдите каталог установки, который должен выглядеть примерно так:C:\Users\USER\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\MSSQLLocalDB
  3. Откройте самый последний файл журнала и убедитесь, что 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.
  1. Если файлы журналов разные, процедура не сработает.
  2. Создайте ошибочный путь (например,C:\Users\USER1\AppData\Local\Temp\VS11CodeIndexв примере выше)
  3. Скопируйте существующую базу данных (достаточно пустой, обычно у нас их несколько) в эту папку и назовите ее правильно. В приведенном выше примере МДФMicrosoft.VsCodeIndex_2f1ff123_0949_4b08_88ae_5cda46820c33.mdfи ЛДФ _Microsoft.VsCodeIndex_2f1ff123_0949_4b08_88ae_5cda46820c33_log.ldf(здесь будьте осторожны, имя файла заканчивается на_log)
  4. Теперь вы сможете войти в систему с помощью SSMS.
  5. Перейдите в Объекты сервера\Триггеры.
  6. Удалите нарушающие триггеры. На сегодняшний день у нас есть эти два
  • Trigger_Repository_Microsoft.VsCodeIndex_Drop
  • Trigger_Repository_Microsoft.VsCodeIndex_Repository.Item_Logon_SetSecurityClaims
  1. Удалить фейковую базу данных
Другие вопросы по тегам