Düzeltme: büyük bir yinelemesi olan işlemler gerçekleştirmek için Transact-SQL imleç değişkenleri kullandığınızda bellek sızıntıları SQL Server 2000'de oluşabilir

Makale çevirileri Makale çevirileri
Makale numarası: 837957 - Bu makalenin geçerli olduğu ürünleri görün.
# Hata: 471233 (SQL Server 8.0)


Microsoft SQL Server 2000 düzeltmeleri tek bir yüklenebilir dosya dağıtır. Düzeltmeleri birikimli olduğu için her yeni sürüm, tüm düzeltmeleri ve önceki SQL Server 2000 yazılım güncelleştirmesi ile birlikte verilen tüm yazılım güncelleştirmelerini içerir.
Hepsini aç | Hepsini kapa

Bu Sayfada

Belirtiler

Büyük bir yinelemesi olan işlemler gerçekleştirmek için Transact-SQL imleç değişkenleri kullandığınızda, aşağıdaki davranış görebilirsiniz:
  • SQL Server çalıştıran bilgisayardaki işlemler gerçekleştiren bir istemci, aşağıdakine benzer bir yetersiz bellek hataları verebilir:

    Hata iletisi 1

    Msg 701: Bu sorguyu çalıştırmak için yeterli sistem belleği yok.
    Hata iletisi 2

    Msg 1204: SQL Server, LOCK kaynak şu anda alınamıyor. Daha az etkin kullanıcılar varken deyiminiz yeniden çalıştırın veya SQL Server kilit ve bellek yapılandırmasını denetlemek için sistem yöneticisine başvurun.
    Hata iletisi 3

    Msg 17803: Yetersiz bellek.
  • SQL Server 2000 çalıştıran bir bilgisayardan gelen yanıt daha yavaş olabilir.
  • DBCC FREEPROCCACHE Transact-SQL deyimini, bellek boşaltabilir veya yordam önbelleğindeki temizleyin. Bu davranış, bağlantıyı istemcinin SQL Server çalıştıran bilgisayardan kesmiş olsa bile oluşabilir.

Neden

Bu davranış, imleç değişkeni tarafından kullanılan kaynakları serbest bırakılmış nedeniyle oluşur.

Pratik Çözüm

Bu soruna geçici bir çözüm bulmak için <a0></a0>, imleç değişkenleri için ayrılan kaynakları serbest bırakmanız gerekir. Bunu yapmak için <a0></a0>, aşağıdakilerden emin olmalısınız:
  • Bir işaretçi değişkeni ayarlamak için bir SET Transact-SQL deyimi kullanırsanız, imleci artık gerekli olmadığında, imleç tarafından kullanılan kaynakları serbest bırakmak için bir DEALLOCATE Transact-SQL deyimini kullanmanız gerekir.
  • Bir işaretçi değişkeni açmak için AÇ?N Transact-SQL deyimi kullanırsanız, imleci artık gerekli olmadığında, imleç tarafından kullanılan kaynakları serbest bırakmak için bir CLOSE Transact-SQL deyimini kullanmanız gerekir.

Çözüm

Hizmet paketi bilgileri

Bu sorunu gidermek için <a0></a0>, Microsoft SQL Server 2000 için en son hizmet paketini edinin. Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
290211En son SQL Server 2000 hizmet paketi nasıl elde edilir

Düzeltme bilgileri

Bu düzeltmenin İngilizce sürümü, aşağıdaki tabloda listelenen dosya özniteliklerine (veya daha yenisi) sahiptir. Bu dosyaların tarihleri ve saatleri Koordinatlı Evrensel Saat'e (UTC) göre listelenir. Dosya bilgilerini görüntülediğinizde yerel saate dönüştürülür. UTC ve yerel saat arasındaki farkı bulmak için <a0></a0>, Denetim Masası'ndaki Tarih ve Saat aracında saat dilimi sekmesini kullanın.
   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      
Not bağımlılıklar, en son düzeltmede veya bu dosyaları içeren bir özellik nedeniyle, ek dosyalar da içerebilir.

Durum

Microsoft bu sorunun "Aşağıdakilere Uygulanır" bölümünde listelenen Microsoft ürünlerinde bulunduğunu onaylamıştır.

Bu sorun ilk olarak Microsoft SQL Server 2000 Service Pack 4'te giderilmiştir.

Daha fazla bilgi

"Belirtiler" bölümünde açıklanan davranışla imleç değişken ve sonra da imleci aynı değişkene imleç değişkeni tarafından kullanılan kaynakları bırakmadan yeniden oluşur. Örneğin, saklı yordamını göz önünde bulundurun:
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

Bu saklı yordam çalıştırırsanız, bellek yetersiz, hata iletileri alabilirsiniz. Bu sorunu gidermek için saklı yordamın kodu aşağıdaki gibi değiştirmelisiniz:
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

Referanslar

Yazılım güncelleştirmeleri hakkında ek bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
824684Microsoft yazılım güncelleştirmelerini açıklamak için kullanılan standart terminolojinin açıklaması
Bellek hakkında ek bilgi için ilgili sorunları, Microsoft Knowledge Base'deki makaleleri görüntülemek üzere aşağıdaki makale numaralarını tıklatın:
810052Düzeltme: bir bağlantı sırasında imleçler açıldığında BIR bellek sızıntısı oluşuyor
818095Düzeltme: sanal bellek boşaldığında imleç planları önbellekten kaldırılmıyor
820773Düzeltme: Sunucu imleçler JDBC sürücüsü sızdırıyor
271624INF: Kullanarak DBCC MEMORYSTATUS SQL Server bellek kullanımını izlemek

Özellikler

Makale numarası: 837957 - Last Review: 2 Kasım 2007 Cuma - Gözden geçirme: 3.3
Bu makaledeki bilginin uygulandığı durum:
  • 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
Anahtar Kelimeler: 
kbmt kbhotfixserver kbqfe kbqfe kbtsql kbsqlprog kbquery kberrmsg kbmemory kbsqlserv2000presp4fix kbfix kbbug KB837957 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:837957

Geri Bildirim Ver

 

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