source

업데이트 명령에서 SQL Server 오류 - "현재 명령에서 심각한 오류가 발생했습니다."

ittop 2023. 10. 29. 19:57
반응형

업데이트 명령에서 SQL Server 오류 - "현재 명령에서 심각한 오류가 발생했습니다."

SQL Server Management Studio에서 다음 쿼리를 실행하면 다음 오류가 발생합니다.

update table_name set is_active = 0 where id  = 3

현재 명령에서 심각한 오류가 발생했습니다.결과가 있는 경우에는 폐기해야 합니다.

  • 로그가 잘렸습니다.
  • 업데이트 트리거가 있지만 이 문제는 아닙니다.
  • 트랜잭션 수가 0입니다(@trancount).

데이터베이스의 다른 테이블 몇 개에도 동일한 업데이트 문을 시도해 보았는데 잘 작동합니다.

DBCC CHECKTABLE('table_name');

주는

DBCC results for 'table_name'.
There are 13 rows in 1 pages for object "table_name".
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

저도 같은 오류가 있었는데, 그것은 지수가 손상된 것으로 떨어졌습니다.테이블을 다시 색인화하면 문제가 해결되었습니다.

제 경우에는 제가 사용하고 있었습니다.SubQuery그리고 같은 문제가 있었습니다.저는 문제가 메모리 유출 때문이라는 것을 깨달았습니다.

다시 시작 중MSSQL서비스 플러시 원인tempDb자원과 자유로운 거대한 양의 메모리. 그래서 이것이 문제를 해결했습니다.

실행.DBCC CHECKTABLE('table_name');

Notance가 설치된 LOG 폴더를 확인합니다(\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG보통) '라는 이름의 파일에 대해SQLDUMP*'

다른 시나리오이지만 동일한 오류:저장 프로시저를 사용하여 임시 테이블에 레코드를 삽입하려고 할 때 이 오류가 발생했습니다.파라미터가 일치하지 않는 것으로 나타났습니다.BIGINT를 INT에 삽입하려고 했습니다.

비키 하프: http://vickyharp.com/2012/03/troubleshooting-a-severe-error-occurred-on-the-current-command/

MS KB에는 3가지 가능성이 있습니다.

이런 것을 볼 때는저는 항상 핫픽스, 엔진, 서버 오류 등을 생각합니다.

4개의 결과: "Msg 0, Level 11, State 0, Line 0"을 검색합니다. 현재 명령에서 심각한 오류가 발생했습니다.

편집: MS Connect에도 있습니다.

제 경우에는 제가 사용하고 있었습니다.System.Threading.CancellationTokenSource취소하다, 취소하다SqlCommand하지만 예외를 처리하지 않는 것은catch (SqlException) { }

이 오류는 정확히 의미하는 바와 같습니다.안 좋은 일이 일어났는데, 보통은 일어나지 않을 겁니다.

가장 최근 사례에서 실제 오류는 다음과 같습니다.

Msg 9002, Level 17, State 2, Procedure MyProcedure, Line 2 [Batch Start Line 3]
The transaction log for database 'MyDb' is full due to 'LOG_BACKUP'.

다음은 바로 이 순서대로 시도해 볼 수 있는 제 체크리스트입니다.

  1. 디스크 공간이 부족한지 확인합니다(이 문제는 제 실제 문제였습니다. NOC에서 이 문제를 파악하지 못했습니다.)
  2. 메모리가 부족한지 확인합니다.
  3. Windows 이벤트 로그에 하드 드라이브 장애와 같은 심각한 시스템 장애가 표시되는지 확인합니다.
  4. 확장 프로시저 또는 SQLCLR 안전하지 않은 어셈블리를 통해 로드된 안전하지 않은 코드가 있는지 확인하여 SQLServer.exe 프로세스를 비활성화할 수 있습니다.
  5. CheckDB를 실행하여 데이터베이스에 손상 문제가 있는지 확인합니다.매우 큰 데이터베이스에서 이 저장 프로시저가 테이블의 하위 집합만 터치하는 경우 저장 프로시저가 터치하는 파티션(파일 그룹)을 확인하고 특정 파일 그룹만 확인하여 시간을 절약할 수 있습니다.
    1. 당신의 데이터베이스와 마스터 DB를 위해서도 이렇게 하겠습니다.

이 문제는 데이터 소스에 일반적인 문제가 있는 경우 처리되지 않는 것으로 보입니다.

제 경우에는 데이터를 많이 삽입했는데, 인덱스가 테이블 위에 손상되어 리빌딩이 필요했습니다.다 리빌드 할 수 있는 스크립트를 찾았는데, 수정한 것 같더군요오류를 찾기 위해 데이터베이스에서 동일한 쿼리를 실행했습니다. 이전에 100번 이상 작동했던 쿼리입니다.

동일한 서버의 여러 데이터베이스/테이블에 걸쳐 이 문제가 발생한 후 발견한 또 다른 가능한 솔루션입니다.

최대 연결이 sql 서버에 열려 있습니까?SQL 연결을 닫지 않고 열려 있는 앱이 있어서 28K-31K 연결 정도를 실행하고 있었습니다(SQL Sever는 32Kish에서 최대 출력). 몇 천 개의 sleeping 연결을 종료한 후 이 질문에 나열된 오류를 해결했습니다.

해결책은 앱을 열어두는 대신 연결을 닫았는지 확인하기 위해 앱을 업데이트하는 것이었습니다.

제 경우에는, 방법:context.Database.CreateIfNotExists();데이터베이스를 만들기 전에 여러 번 호출되어 오류가 발생했습니다. 현재 명령에서 심각한 오류가 발생했습니다.결과가 있는 경우에는 폐기해야 합니다.

Hangfire에서 라이브러리의 내부 작동에 접근할 수 없거나 주요 원인을 추적할 수 있는 오류가 발생했습니다.

@Remus Rusanu 답변을 바탕으로 다음과 같은 스크립트로 수정할 수 있었습니다.

    --first set the database to single user mode
    ALTER DATABASE TransXSmartClientJob
    SET SINGLE_USER
    WITH ROLLBACK IMMEDIATE;
    GO

    -- Then try to repair
    DBCC CHECKDB(TransXSmartClientJob, REPAIR_REBUILD)

    -- when done, set the database back to multiple user mode
    ALTER DATABASE TransXSmartClientJob
    SET MULTI_USER;
    GO

제 경우엔 다른 일이었는데+=오퍼레이터가 원인입니다.교체해야 했습니다.+= X와 함께field = field + X이를 극복하기 위해서.마이크로소프트 사이트에서 관련 KB를 찾을 수 없었지만 버그인 것 같습니다.

SQL Server 2008 R2(10.50.1600)를 사용하고 있습니다.

다음에 이 일을 접한 사람이 누구든 돕기 위해 2센트를 추가하고 싶었을 뿐입니다.

우리는 30분 후에 특정 보고서가 실패하고 있다는 것을 알아챘습니다.반환되는 데이터의 양이 많아서 타임아웃인 줄 알았습니다.SSRS 기본 시간 초과 설정은 1800초(30분)인 것으로 나타났습니다.이 보고서의 설정을 시간 초과 없이 무기한 실행되도록 변경하여 문제를 해결했습니다.

다음 단계는 보고서 뒤에 있는 MSSQL의 성능을 개선하는 방법을 확인하는 것입니다. :)

같은 문제가 있었는데 테이블이 너무 커서 UI에서 고칠 수도 없고 모든 인덱스를 떨어뜨려서 만들 수도 없었습니다.그래서 이것을 해결할 다른 방법이 있습니다. 아니면 적어도 저에게는 효과가 있었습니다.

  1. BAK 파일에 데이터베이스를 백업했습니다.
  2. 나는 새로 백업된 파일에서 새 데이터베이스를 만들었고 새 데이터베이스를 같은 이름으로 부르지만 "_BK"라는 부록이 붙어 있습니다: myDatabase_BK
  3. 새 데이터베이스의 "나쁜 테이블"은 이미 오류 없이 잘 작동하고 있으므로 배포를 통해 새 데이터베이스의 문제가 해결된 것 같습니다.
  4. 따라서 남은 것은 라이브 데이터베이스(myDatabase)에서 잘못된 테이블의 이름을 바꾼 다음 백업에서 동일한 테이블을 만드는 것이었습니다(myDatabase.myTable의 이름을 바꾼 후).select * into myDatabase.myTable from myDatabase_BK.myTable
  5. 새 테이블에 모든 인덱스를 작성해야 합니다.

저도 이와 같은 예외를 받았지만, 제가 Polybase를 사용하여 Transaction Scopes를 통해 Transaction에 등록 중인 API 요청에서 외부 테이블에 쿼리를 발행하고 있었기 때문입니다.ADO에서 허용된 예외입니다.Net은 "현재 명령에 심각한 오류가 발생했습니다."라는 도움이 되지 않습니다.

그러나 SSMS에서 다음과 같은 작업을 수행하여 이 문제의 원인이 트랜잭션이라는 것을 알게 되었습니다.

  • 객체 탐색기 보기
  • 관리 노드 확장
  • SQL Server 로그 확장
  • 현재 로그 및 이 예외가 기록되었을 때 기록된 오류를 봅니다.

나는 다음을 보았습니다.

Unsupported transaction manager request 0 encountered. SQL Server Parallel DataWarehousing TDS endpoint only supports local transaction request for 'begin/commit/rollback'.

그런 다음 이 특정 쿼리를 다른 트랜잭션 범위에 배치하여 등록했을 트랜잭션 범위를 억제했습니다.

using (var transactionScope = this.transactionScopeFactory.Create(
    System.Transactions.TransactionScopeOption.Suppress,
    new System.Transactions.TransactionOptions { IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted },
    System.Transactions.TransactionScopeAsyncFlowOption.Enabled))
{
    // ... query

    transactionScope.Complete(); // Suppress scope option renders this unnecessary, but just a good habit
}

언급URL : https://stackoverflow.com/questions/1175244/sql-server-error-on-update-command-a-severe-error-occurred-on-the-current-com

반응형