FIX: Transact-SQL 커서 변수를 사용하여 큰 반복 있어야 작업을 수행할 때 SQL Server 2000에서 메모리 누수가 발생할 수 있습니다.

기술 자료 번역 기술 자료 번역
기술 자료: 837957 - 이 문서가 적용되는 제품 보기.
# BUG: 471233 (SQL Server 8.0)


Microsoft은 SQL Server 2000 수정 프로그램은 다운로드 가능한 파일로 배포합니다. 수정 누적되는 형태이므로 각 새 릴리스의 모든 핫픽스와 이전 SQL Server 2000 소프트웨어 업데이트가 포함된 모든 소프트웨어 업데이트를 포함합니다.
모두 확대 | 모두 축소

이 페이지에서

현상

Transact-SQL 커서 변수를 사용하여 큰 반복 있어야 작업을 수행할 때 다음과 같은 동작이 나타날 수 있습니다.
  • SQL Server를 실행하는 컴퓨터에서 작업을 수행하는 클라이언트 다음과 유사한 메모리 부족 오류를 반환할 수 있습니다.

    오류 메시지 1

    msg 701: 부족하여 시스템 메모리 이 쿼리를 실행합니다.
    오류 메시지 2

    msg 1204: SQL Server 이 지금은 Lock 리소스를 가져올 수 없습니다. 활성 사용자가 적을 때 문을 다시 실행하거나 시스템 관리자에게 SQL Server 잠금과 메모리 구성을 확인하도록 요청하십시오.
    오류 메시지 3

    메시지 17803: 메모리가 부족하여 사용할 수 없습니다.
  • SQL Server 2000을 실행하는 컴퓨터의 응답이 느린 될 수 있습니다.
  • DBCC FREEPROCCACHE Transact-SQL 문을 메모리를 해제하게 또는 프로시저 캐시를 지울 수 있습니다. 클라이언트가 SQL Server를 실행하는 컴퓨터에서 연결이 끊어진 경우에도 때 이 문제가 발생할 수 있습니다.

원인

커서 변수에서 사용하는 리소스가 릴리스되기 때문에 이 문제가 발생합니다.

해결 과정

이 문제를 해결하려면 커서 변수에 할당된 리소스를 해제해야 합니다. 이렇게 하려면 다음 사항을 확인해야 합니다.
  • 커서 변수에 설정하는 SET Transact-SQL 문을 사용하는 경우 커서가 더 이상 필요한 경우 커서에서 사용되는 리소스를 해제하려면 할당을 Transact-SQL 문을 사용해야 합니다.
  • 커서 변수를 열려면 열기를 Transact-SQL 문을 사용하는 경우 커서가 더 이상 필요한 경우 커서에서 사용되는 리소스를 해제하려면 CLOSE Transact-SQL 문을 사용해야 합니다.

해결 방법

서비스 팩 정보

이 문제를 해결하려면 Microsoft SQL Server 2000의 최신 서비스 팩을 구하십시오. 추가 정보는 다음 문서 번호를 클릭하여 Microsoft 기술 자료에서 확인하십시오:
290211최신 SQL Server 2000 서비스 팩을 구하는 방법

핫픽스 정보

이 수정의 영어 버전은 파일 특성을 가집니다 (또는 이상) 다음 표에. 이러한 파일의 시간과 날짜는 UTC (협정 세계시) 로 나열됩니다. 파일 정보에서는 현지 시간으로 변환됩니다. UTC와 로컬 시간의 차이를 알려면 제어판의 날짜 및 시간 도구에서 표준 시간대 탭을 사용하십시오.
   Date         Time   Version            Size    File name
   --------------------------------------------------------------------
   31-May-2003  05:15  2000.80.818.0      78,400  Console.exe      
   27-Oct-2003  14:51  2000.80.873.0     315,968  Custtask.dll     
   30-Jan-2004  02:59  2000.80.911.0      33,340  Dbmslpcn.dll     
   24-Apr-2003  12:42                    786,432  Distmdl.ldf
   24-Apr-2003  12:42                  2,359,296  Distmdl.mdf
   29-Jan-2003  12:25                        180  Drop_repl_hotfix.sql
   11-Sep-2003  13:56  2000.80.859.0   1,905,216  Dtspkg.dll       
   26-Aug-2003  06:46  2000.80.854.0     528,960  Dtspump.dll      
   23-Jun-2003  09:10  2000.80.837.0   1,557,052  Dtsui.dll        
   23-Jun-2003  09:10  2000.80.837.0     639,552  Dtswiz.dll       
   23-Apr-2003  13:21                    747,927  Instdist.sql
   02-May-2003  12:26                      1,581  Inst_repl_hotfix.sql
   30-Jan-2004  02:59  2000.80.911.0      90,692  Msgprox.dll      
   31-Mar-2003  12:37                      1,873  Odsole.sql
   30-Jan-2004  02:59  2000.80.911.0      62,024  Odsole70.dll     
   30-Jan-2004  02:59  2000.80.911.0      25,144  Opends60.dll     
   30-Jan-2004  02:59  2000.80.911.0      57,904  Osql.exe         
   02-Apr-2003  09:45  2000.80.797.0     279,104  Pfutil80.dll     
   04-Aug-2003  04:47                    550,780  Procsyst.sql
   11-Sep-2003  11:07                     12,305  Qfe469315.sql
   22-May-2003  09:27                     19,195  Qfe469571.sql
   29-Jan-2004  11:47                  1,090,380  Replmerg.sql
   30-Jan-2004  02:59  2000.80.911.0     221,768  Replprov.dll     
   30-Jan-2004  02:59  2000.80.911.0     307,784  Replrec.dll      
   29-Jan-2004  09:54  2000.80.911.0     159,813  Replres.rll
   05-Sep-2003  10:30                  1,087,150  Replsys.sql
   13-Aug-2003  02:58                    986,603  Repltran.sql
   30-Jan-2004  02:59  2000.80.911.0     287,304  Rinitcom.dll     
   30-Jan-2004  02:59  2000.80.911.0      57,916  Semnt.dll        
   29-Jul-2003  06:43  2000.80.819.0     492,096  Semobj.dll       
   31-May-2003  04:57  2000.80.818.0     172,032  Semobj.rll
   02-Jan-2004  06:12  2000.80.904.0      53,832  Snapshot.exe     
   09-Dec-2003  06:37                    117,834  Sp3_serv_uni.sql
   04-Feb-2004  11:16  2000.80.913.0      28,672  Sqlagent.dll     
   04-Feb-2004  11:17  2000.80.913.0     311,872  Sqlagent.exe     
   19-Feb-2004  04:32  2000.80.916.0     168,001  Sqlakw32.dll     
   30-Jan-2004  02:59  2000.80.911.0   4,215,360  Sqldmo.dll       
   07-Apr-2003  04:14                     25,172  Sqldumper.exe    
   29-Jan-2004  09:47  2000.80.911.0      28,672  Sqlevn70.rll
   30-Jan-2004  02:59  2000.80.911.0     180,792  Sqlmap70.dll     
   02-Sep-2003  13:26  2000.80.857.0     188,992  Sqlmmc.dll       
   02-Sep-2003  09:33  2000.80.857.0     479,232  Sqlmmc.rll
   21-Oct-2003  10:38  2000.80.871.0     401,984  Sqlqry.dll       
   30-Jan-2004  02:59  2000.80.911.0      57,920  Sqlrepss.dll     
   01-Mar-2004  10:33  2000.80.919.0   7,618,641  Sqlservr.exe     
   30-Jan-2004  02:59  2000.80.911.0     590,396  Sqlsort.dll      
   30-Jan-2004  02:59  2000.80.911.0      45,644  Sqlvdi.dll       
   30-Jan-2004  02:59  2000.80.911.0     106,588  Sqsrvres.dll     
   30-Jan-2004  02:59  2000.80.911.0      33,340  Ssmslpcn.dll     
   30-Jan-2004  02:59  2000.80.911.0      82,492  Ssnetlib.dll     
   30-Jan-2004  02:59  2000.80.911.0      25,148  Ssnmpn70.dll     
   27-Oct-2003  14:51  2000.80.873.0     123,456  Stardds.dll      
   30-Jan-2004  02:59  2000.80.911.0     158,240  Svrnetcn.dll     
   30-Jan-2004  02:59  2000.80.911.0      76,416  Svrnetcn.exe     
   30-Apr-2003  10:22  2000.80.816.0      45,132  Ums.dll          
   30-Jan-2004  02:59  2000.80.911.0      98,872  Xpweb70.dll      
참고 파일 종속성, 최신 핫픽스 또는 이러한 파일이 포함된 기능을 인해 추가 파일이 포함될 수도 있습니다.

현재 상태

Microsoft 문제는 이 문서의 시작 부분에 나열한 제품에서 문제를 확인했습니다.

이 문제는 Microsoft SQL Server 2000 서비스 팩 4에서 처음 수정되었습니다.

추가 정보

커서 변수를 설정한 다음 동일한 커서 변수를 커서 변수에서 사용하는 리소스를 해제하지 않고 다시 사용할 때 "현상" 절에서 설명한 문제가 발생합니다. 예를 들어, 다음 저장된 프로시저를 고려할:
CREATE PROCEDURE MYPROC
BEGIN

    DECLARE @CURSOR CURSOR
    SET @CURSOR = CURSOR FOR SELECT * FROM AUTHORS     -- FIRST ASSIGNMENT (THIS ASSIGNMENT LEAKS WHEN A SECOND ASSIGNMENT TAKES PLACE WITHOUT DEALLOCATION)
    
    --Other Transact-SQL statements
    
    SET @CURSOR = CURSOR FOR SELECT * FROM AUTHORS    --  SECOND ASSIGNMENT
    
    --Other Transact-SQL statements

END

이 저장된 프로시저를 실행하는 경우 메모리 부족 오류 메시지가 나타날 수 있습니다. 이 문제를 해결하려면 사용자가 저장된 프로시저 코드는 다음과 같이 수정해야 합니다:
CREATE PROCEDURE MYPROC
BEGIN

    DECLARE @CURSOR CURSOR
    SET @CURSOR = CURSOR FOR SELECT * FROM AUTHORS     -- FIRST ASSIGNMENT

    --Other Transact-SQL statements

    DEALLOCATE @CURSOR --DEALLOCATING THE CURSOR VARIABLE BEFORE A SECOND ASSIGNMENT

    SET @CURSOR = CURSOR FOR SELECT * FROM AUTHORS    --  SECOND ASSIGNMENT

    --Other Transact-SQL statements

    DEALLOCATE @CURSOR --DEALLOCATING THE CURSOR VARIABLE THAT WAS ASSIGNED SECOND

END

참조

소프트웨어 업데이트에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
824684Microsoft 소프트웨어 업데이트를 설명하는 데 사용되는 표준 용어에 대한 설명
메모리에 대한 자세한 내용은 관련된 문제를 Microsoft 기술 자료 문서를 보려면 다음 문서 번호를 누르십시오.
810052FIX: 연결 중에 커서를 열 때 A 메모리 누수가 발생합니다.
818095FIX: 가상 메모리가 고갈될 때 커서 계획 캐시에서 제거되지 않습니다.
820773FIX: 서버 커서를 JDBC 드라이버의 메모리 누수
271624INF: 사용하여 DBCC SQL Server 메모리 사용을 모니터링할 MEMORYSTATUS

속성

기술 자료: 837957 - 마지막 검토: 2007년 11월 2일 금요일 - 수정: 3.3
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft SQL Server 2000 Developer Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2000 Enterprise Edition
  • Microsoft SQL Server 2000 Personal Edition
  • Microsoft SQL Server 2000 Workgroup Edition
  • Microsoft SQL Server 2000 Desktop Engine (Windows)
  • Microsoft SQL Server 2000 Enterprise Edition 64-bit
키워드:?
kbmt kbhotfixserver kbqfe kbqfe kbtsql kbsqlprog kbquery kberrmsg kbmemory kbsqlserv2000presp4fix kbfix kbbug KB837957 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com