SQL Server 오류 1222 해결 방법 즉, SQL Server 테이블 잠금 해제
저는 데이터 로더에 의해 원시 테이블의 데이터를 로드하는 데이터베이스에서 일하고 있습니다.하지만 오늘 데이터 로더가 알 수 없는 이유로 작동이 중단되었습니다.그런 다음 Windows 작업 관리자에서 데이터 로더를 중지했습니다.그러나 다시 원시 테이블에 데이터를 로드하려고 했지만 잠겨 있어서 작업을 수행할 수 없습니다.SQL Server 서비스를 다시 시작하려고 했지만 해결되지 않았습니다.그리고 이 서버의 프로세스를 제거할 권한이 없습니다.
아래는 SQL Server에서 표시되는 메시지입니다.
Transact-SQL 문 또는 배치를 실행하는 동안 예외가 발생했습니다(Microsoft).SqlServer.연결 정보)
프로그램 위치:
마이크로소프트에서.SqlServer.관리.Common.ServerConnection입니다.ExecuteNonQuery(String sqlCommand, 실행)유형 실행 유형)
마이크로소프트에서.SqlServer.관리.Common.ServerConnection입니다.ExecuteNonQuery(StringCollection sql 명령, 실행)유형 실행 유형)
마이크로소프트에서.SqlServer.관리.Smo.실행 관리자.비쿼리 실행(문자열 수집 쿼리)
마이크로소프트에서.SqlServer.관리.Smo.SqlSmoObject입니다.ExecuteNonQuery(문자열 수집 쿼리, 부울 includeDbContext)
마이크로소프트에서.SqlServer.관리.Smo. 이름이 지정된 SmoObject입니다.ImplWorker 이름 바꾸기(새 문자열 이름)
마이크로소프트에서.SqlServer.관리.Smo. 이름이 지정된 SmoObject입니다.Impl 이름 바꾸기(새 이름 문자열)===================================
잠금 요청 시간 초과 기간이 초과되었습니다.매개 변수 @objname이(가) 모호하거나 할당된 @objtype(OBJ)이(가) 잘못되었습니다.(.Net SqlClient DataProvider)
서버 이름: 162.44.25.59 오류 번호: 1222
심각도: 16 상태: 56
절차: sp_rename 라인 번호: 282
SQL Server 버전은 2008 R2입니다.
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
오랜만입니다만, 지난번에도 비슷한 일이 있었습니다.
ROLLBACK TRAN
혹은 하려고 노력하는 것.
COMMIT
이미 했던 일들이 모든 것을 자유롭게 해줘서 일을 정리하고 다시 시작할 수 있었습니다.
이를 방지하려면 모든 BEGIN TRANCENTION에 COMMIT가 있는지 확인하십시오.
다음은 성공적이라고 말하지만 커밋되지 않은 트랜잭션을 남깁니다.
BEGIN TRANSACTION
BEGIN TRANSACTION
<SQL_CODE?
COMMIT
커밋되지 않은 트랜잭션이 있는 쿼리 창을 닫으면 트랜잭션을 커밋하라는 메시지가 표시됩니다.이렇게 하면 일반적으로 오류 1222 메시지가 해결됩니다.
옵션 쿼리 실행 시 SQL 동작 설정을 활성화했습니다. ANSI SET INCLIVE_TRANSACTINS를 선택했습니다.생성, 테이블 변경 또는 저장 프로시저와 같은 쿼리 실행 시 이를 커밋해야 합니다.
COMMIT를 입력하고 실행하기만 하면 됩니다.
제 경우, 테이블에서 트리거를 비활성화하려고 할 때 "Lock request timeout period exceeded" 오류 1222가 발생했습니다.
저는 이 답변에서 제안을 따랐습니다.
- SSMS에서 두 개의 쿼리 창을 엽니다.
- 첫 번째에서 (잠금으로 인해) 시간 초과되는 명령을 입력/붙여넣습니다.SSMS의 오른쪽 하단 모서리에 사용 중인 연결의 사용자 이름과 (괄호 안에) SPID가 표시됩니다.이 쿼리 창 연결의 SPID를 기록합니다.아직 이 쿼리를 실행하지 않습니다.
- 두 에 /를
SELECT * FROM sysprocesses WHERE spid = <22단계에서는 SPID입니다.> - 첫에) 두 번째 합니다.
SELECT * from sysprocesses...주목) - 결과 창에 몇 가지 결과가 표시됩니다.결과에서 '차단됨' 필드를 확인합니다.제 경우에는 테이블을 잠그는 프로세스의 SPID가 포함되어 있었습니다.
- 다음을 수행하여 잠금 프로세스를 자세히 조사합니다.
SELECT * FROM sysprocesses WHERE spid = <입니다.>. - 잠금 프로세스를 안전하게 종료할 수 있는 경우 다음을 사용하여 종료합니다.
kill <locking SPID>
언급URL : https://stackoverflow.com/questions/8258710/how-to-solve-sql-server-error-1222-i-e-unlock-a-sql-server-table
'programing' 카테고리의 다른 글
| 이미 체크인된 디렉토리의 내용을 무시하시겠습니까? (0) | 2023.07.10 |
|---|---|
| mongodb.conf bind_ip = 127.0.0.1은 작동하지 않지만 0.0.0은 작동합니다. (0) | 2023.07.10 |
| SQL Server에서 현재 모든 임시 테이블의 목록을 가져올 수 있는 방법이 있습니까? (0) | 2023.07.10 |
| 내 ASP.NET 웹 사이트를 wwwroot 폴더에 넣어야 합니까? (0) | 2023.07.10 |
| 찾기 명령을 사용하여 실행 파일 검색 (0) | 2023.07.10 |