Как решить SQL Server Error 1222 i.e Разблокировать таблицу SQL Server
Я работаю в базе данных, где загружаю данные в исходную таблицу загрузчиком данных. Но сегодня загрузчик данных застрял по неизвестным причинам. Затем я остановил загрузчик данных из диспетчера задач Windows. Но потом я снова попытался загрузить данные в необработанную таблицу, но обнаружил, что заблокирован, и я не могу выполнять никаких операций. Я попытался перезапустить службу SQL Server, но он не был разрешен. И у меня нет разрешения убивать процессы на этом сервере.
Ниже приведено сообщение, показанное SQL Server.
Исключение произошло при выполнении инструкции Transact-SQL или партия. (Microsoft.SqlServer.ConnectionInfo)
Расположение программы:
в Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(строка sqlCommand, ExecutionTypes executeType)
в Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(StringCollection sqlCommands, ExecutionTypes executeType)
в Microsoft.SqlServer.Management.Smo.ExecutionManager.ExecuteNonQuery(StringCollection запросов)
в Microsoft.SqlServer.Management.Smo.SqlSmoObject.ExecuteNonQuery(StringCollection запросы, Boolean includeDbContext)
в Microsoft.SqlServer.Management.Smo.NamedSmoObject.RenameImplWorker(String NEWNAME)
в Microsoft.SqlServer.Management.Smo.NamedSmoObject.RenameImpl(String NEWNAME)
===================================
Превышен период ожидания блокировки. Либо параметр @objname является неоднозначным, или заявленный объект @objtype (OBJECT) ошибочен. (.Сеть Поставщик данных SqlClient)
Имя сервера: 162.44.25.59 Номер ошибки: 1222
Уровень: 16 Состояние: 56
Процедура: sp_rename Номер строки: 282
Моя версия SQL Server - 2008 R2.
Ответы
Ответ 1
В SQL Server Management Studio,
чтобы узнать подробности активной транзакции, выполните следующую команду
DBCC opentran()
Вы получите подробную информацию о активной транзакции, затем из SPID активной транзакции, получите подробную информацию о SPID, используя следующие команды
exec sp_who2 <SPID>
exec sp_lock <SPID>
Например, если SPID равен 69, тогда выполните команду как
exec sp_who2 69
exec sp_lock 69
Теперь вы можете убить этот процесс, используя следующую команду
KILL 69
Надеюсь, это поможет:)
Ответ 2
Это было какое-то время, но в прошлый раз у меня было что-то подобное:
ROLLBACK TRAN
или пытается
COMMIT
то, что уже было сделано, освободило все, чтобы я смог прояснить ситуацию и начать снова.
Ответ 3
Чтобы предотвратить это, убедитесь, что у каждой функции BEGIN TRANSACTION есть COMMIT
Следующие будут объявлены успешными, но оставят незафиксированные транзакции:
BEGIN TRANSACTION
BEGIN TRANSACTION
<SQL_CODE?
COMMIT
Закрытие окон запроса с незафиксированными транзакциями побудит вас совершить транзакции. Это, как правило, устраняет сообщение об ошибке 1222.
Ответ 4
У меня были включены эти параметры поведения SQL при выполнении запроса параметров: проверено ANSI SET IMPLICIT_TRANSACTIONS. При выполнении вашего запроса, например, создать, изменить таблицу или хранимую процедуру, вы должны его КОММИТИРОВАТЬ.
Просто наберите COMMIT и выполните его F5