Düzeltme: Tanıtıcı için SQL metin Sysprocesses sistem tablosundaki fn_get_sql işlevini verir

Makale çevirileri Makale çevirileri
Makale numarası: 325607 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Bu makalede, SQL Server 2000 için aşağıdaki değişiklikleri gerçekleştirir, işlevsel bir düzeltme anlatılmaktadır:
  • Düzeltmenin yeni fn_get_sql sistem tablo değerli fonksiyon oluşturur.
  • Düzeltmeyi bu üç yeni sütun asıl sonuna ekler.sysprocesses sistem tablosu:
    • sql_handle(ikili)
    • stmt_start(int)
    • stmt_end(int)

  • Düzeltmeyi oluşturur Yeni bir izleme bayrağı, bir izleme bayrağı 2861.

Çözüm

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
Not Aşağıdaki düzeltme, Microsoft SQL Server 2000 Service Pack 3'ün yayımlanmasından önce oluşturulmuştur.

Düzeltme dosyası

SQL Server 2000'de, fn_get_sql işlevini uygulayan bir düzeltme vardır.

Düzeltmeyi edinmek üzere Microsoft Ürün Destek Hizmetleri'ne başvurun. Bu düzeltmenin İngilizce sürümü, aşağıdaki tabloda listelenen dosya özniteliklerine (veya daha yeni dosya özniteliklerine) 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
   -----------------------------------------------------------------

   07/01/2002   4:50 PM   8.00.652   7,285 kilobytes   Sqlservr.exe
				
Not Dosya bağımlılıkları nedeniyle, en son düzeltme veya dosyaları içeren özellik ek dosyalar da içerebilir.

Önemli Bu düzeltmenin işlevselliğini istediğiniz, 8.00.652 eşit veya daha yeni bir <a0>Sqlservr.exe yap? uygulamalısınız ve Sp2_qfe_serv_uni.sql çalışmalıdır, bu düzeltme bir dosya. Daha fazla bilgi için bkz: Benioku.txt dosyası düzeltme dosyalarında bulunur.

Durum

Microsoft, bu makalenin başında listelenen Microsoft ürünlerinde bir sorun olduğunu onaylamıştır.Bu sorun ilk olarak Microsoft SQL Server 2000 Service Pack 3'de giderilmiştir.

Daha fazla bilgi

Burada, bir tanımını ve tablo değerli fn_get_sql sistem işlevi sözdizimi.

fn_get_sql

Başvuru için belirtilen tanıtıcı SQL metni verir.

Sözdizimi

fn_get_sql ([@ SqlHandle =] SqlHandle)

Bağımsız değişkenler

[@ SqlHandle =] SqlHandle

Ikili bir tanıtıcı değeri. SqlHandle binary(20) varsayılan ile''dir.

Döndürülen tablolar

Bu tabloyu kapaBu tabloyu aç
Sütun adıVeri türüAçıklama
DBIDsmallintVeritabanı kimliği Geçici SQL deyimlerini durumunda NULL.
objectidintVeritabanı nesnesinin KIMLIĞI. Geçici SQL örneğinde BOş ifadeler.
sayısmallintYordamın gruplandırırsanız gruplandırma numarası. yordamları olan girişler için 0. Geçici SQL deyimlerini durumunda NULL.
şifrelenmişbitNesne şifrelenmiş gösterir:
0 = Şifreli değil
1 Şifreli =
MetinmetinSQL metni. Şifreli nesneler söz konusu NULL.

Açıklamalar

SQL metin için belirtilen olan SQLHANDLE döndüren bir sistem tablo değerli fonksiyon Fn_get_sql var. Sysprocesses sistem tablosundaki sql_handle sütunundan bir geçerli SQLHANDLE elde edebilirsiniz.

Fn_get_sql, artık varolmayan bir tanıtıcı önbelleğindeki başarılı olursa, bir boş sonuç kümesi döndürür. Geçersiz bir tanıtıcı geçirirseniz, toplu işi iptal eder ve aşağıdaki hata iletisini alırsınız:
Sunucu: <a1>hata</a1> 569, Level 16, State 1, Procedure fn_get_sql, satır için fn_get_sql tanıtıcı geçirildi 12 geçersizdi.
SQL Server, bazı Transact-SQL deyimlerini, toplu işlem deyimleri ve dize hazır bilgi 8 KB boyutundan büyük ekstreleri gibi önbelleğe alamıyor. Bu deyimleri tanıtıcıları fn_get_sql işleviyle alınabilir değildir.

Metin sütunu parolaları içeren metin için süzülmüştür. Izlenmekte güvenlikle ilgili saklı yordamlar hakkında bilgi için SQL Server Books Online'da "Sınırlama izlemleri" konusuna bakın.

Permissions

Sadece sysadmin sabit sunucu rolü üyelerinin fn_get_sql işlevini çalıştırabilirsiniz.

Örnekler

Fn_get_sql işlevi tarafından döndürülen bilgiler, DBCC INPUTBUFFER komutuna benzer. Fn_get_sql işlevi, DBCC INPUTBUFFER, gibi sınırlı olduğu durumlarda kullanın:
  • Ne zaman olayları 255'ten fazla karakter var.
  • Bir saklı yordamın geçerli en yüksek iç içe geçmiş düzeyini dönmek zorunda. Örneğin, sp_1 ve sp_2 adlı iki saklı yordamlar vardır. Yordam çağrılarının sp_2 saklı yordamını ve sp_2 çalışırken sysprocesses sistem tablosundaki tanıtıcı elde sp_1 depolanan, fn_get_sql işlevi sp_2 hakkında bilgi döndürür. Ayrıca, fn_get_sql işlevi, en yüksek geçerli yuvalanma düzeyinde tümüyle saklı yordamın döndürür.
Veritabanı yöneticileri fn_get_sql işlevi sorun işlemleri tanılamanıza yardımcı olmak için kullanabilirsiniz. Yönetici sorunu sunucu işlem KIMLIĞI (SPID) tanımlayan sonra yönetici arayabilir, SPID için SQLHANDLE almak ve sonra tanıtıcı fn_get_sql işleviyle ve başlangıç ve bitiş farklarını SPID sorununun SQL metni belirlemek için kullanın. Örneğin:
DECLARE @Handle binary(20)
SELECT @Handle = sql_handle FROM sysprocesses WHERE spid = 52
SELECT * FROM ::fn_get_sql(@Handle) 
				
fn_get_sql işlevi sunucu sürekli olarak izlemek için de kullanabilirsiniz. Örneğin, bir istemci aracı SQLHANDLE deyimi başlangıç ve bitiş düzenli olarak alır sysprocesses sistem tablosundaki kaydırır. Araç, SQL metin, benzersiz anahtar ve değer olarak <a1>fn_get_sql</a1> işlevinin sonuçları SQL tanıtıcı bir önbellekte saklar. Sysprocesses sistem tablosundaki satır her satır için aracı metin üzerinde SQLHANDLE alarak kendi önbelleğinde arar. Metni aracın önbellekte değilse, araç, fn_get_sql işlevi, metni ve önbelleğinde kaydettikten sonra çağırır.

Izleme bayrağı 2861

Izleme bayrağı 2861 önbelleğindeki, SQL Server genellikle (Basit anlık sorgular, kümesi ifadeleri, tamamlama işlem ve diğerleri gibi) önbelleğe değil, sıfır maliyet planları tutmak için SQL Server bildirir.
  • Izleme bayrağı 2861 açıksa fn_get_sql işlevi sıfır maliyet planları olan faaliyetler için SQL metin dönebilirsiniz. Izleme bayrağı 2861 kapalıysa fn_get_sql işlevi sıfır maliyet planlarında faaliyetler için SQL metin döndüremez.
  • Bu düzeltmeyi uyguladığınızda, varsayılan olarak, izleme bayrağı 2861 kapatıldı.

Açıklamalar

Izleme bayrağı 2861 açık olduğunda, yordam önbelleğinde nesne sayısını artırın. Ek nesneler çok küçük olduğu için yordamı önbelleği tarafından kullanılan bellek, küçük bir artış görebilirsiniz.

SQL Server 2000, varolan herhangi bir yürütme planı için belirtilen SQL deyimini bulmak için etkin bir algoritma vardır. Ancak, yordam önbelleğinde depolanan nesneler Artırılmış sayısı nedeniyle, arama yapmak için varolan bir planı ilişkisel altyapısı için geçecek süreyi düşebilir ve sistem performansını olumsuz yönde etkileyebilecek olanaklıdır.

Genellikle, veritabanı boyutu bellek boyutundan çok büyük olduğu sistemlerde bazı beklenen bellek baskısı altında sistemidir. Diğer nesneler için bellek gereklidir, bellek baskısı, lazywriter işlem nesneleri yordam önbelleğinde ayırması. Bu yordam önbelleğindeki boyutunu bağlanacaktır ve bu değişikliğin olumsuz olası etkisini en aza.

Ancak, bellek boyutu veritabanı boyutundan daha büyük olduğu sistemlerde, sistem genellikle bellek baskısı altında değildir. Bu nedenle, nesneleri yordamı önbelleğinden bellek gereksinimleri nedeniyle ayırmanın değil ve bu yordamı önbellek boyutu, burada bu performansını olumsuz noktasına büyüyebilir.

Sistem performansı üzerinde olumsuz bir etkisi unutmayın, şu adımları izleyin:
  1. Izleme bayrağı 2861 devre dışı bırakın.
  2. DBCC FREEPROCCACHE komutu, Sorgu Çözümleyicisi ' çalıştırın. SQL Server'ı yeniden başlatmanız gerekmez.

Özellikler

Makale numarası: 325607 - Last Review: 27 Eylül 2005 Salı - Gözden geçirme: 5.3
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft SQL Server 2000 Standard Edition
Anahtar Kelimeler: 
kbmt kbhotfixserver kbqfe kbsqlserv2000sp3fix kbfix kbinfo kbsqlserv2000presp3fix KB325607 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:325607

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