Подтвердить что ты не робот

Как решить 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.

4b9b3361

Ответ 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