Makale numarası: 190987 - Son Gözden Geçirme: 09 Mayıs 2006 Salı - Gözden geçirme: 6.4 Genişletilmiş saklı yordamlar nasıl kullanılır?
Bu SayfadaÖzetBu makalede, uygun oluşturulmasını ve SQL Server saklı yordamlar genişletilmiş uygulaması açıklanır. Ayrıca, bu makalede, ayrıntılar sunar ve saklı yordamlar SQL Server'ın başarılı bir uygulama gerçekleştirmek için başvurular genişletilmiş. Genişletilmiş saklı yordamlar, SQL Server'ın işlevselliğini genişletmek için güçlü bir yoludur. Aşağıdaki alıntı, SQL Server Books Online'da şöyledir: Genişletilmiş saklı yordamlar, sorunsuz olarak SQL Server'ı genişletme bir saklı yordam için benzer bir şekilde dinamik olarak yükle ve dinamik bağlantı kitaplığı (DLL) içindeki bir işlevi yürütmek için bir yol sağlayan işlevler. SQL Server dışında bir eylem SQL Server'a döndürülen bilgileri kolayca Harekete geçirilmiş ve dış olabilir. Döndürülen durum kodu ve çıkış parametreleri (normal bir saklı yordamda karşılıkları ile aynı) de desteklenir. SQL Server sistem saklı içerir (sp_addextendedproc) eklemek (sp_dropextendedproc) olarak bırakın ve (sp_helpextededproc) hakkında bilgi sağlayan yordamlar, saklı yordamlar genişletilmiş. Genişletilmiş saklı yordamın DLL diğer DLL geliştirme davran: ıt paylaşılan kod; birden çok iş parçacığı aynı anda erişebilir. Tüm production-worthy projeye gibi kapsamlı bir tasarım ve sınama tamamlamak emin olun. Başarılı genişletilmiş saklı yordamlar yazmak için <a0></a0>, çok sayıda konu bilgili gerekir. Bu konuları gözden geçirmek için <a0></a0>, Windows Advanced Jeffrey Richter sonraki bölümlerde bakın:
http://www.microsoft.com/products/info/product.aspx?view=22&pcid=ab0cdef1-acfe-71c1-d09b-06567808e1e7
(http://www.microsoft.com/products/info/product.aspx?view=22&pcid=ab0cdef1-acfe-71c1-d09b-06567808e1e7)
KayıtGenişletilmiş saklı yordam mimarisi karmaşık değildir; bir Microsoft Visual C veya düzgün olarak verilen işlevi (veya işlevleri) gösterir Opends60.lib dosyasıyla bağlantılı C++ uyumlu DLL. Verilen işlev adı ve ilişkili DLL sp_addextendedproc saklı yordamı kullanın. Xp, xp_dblib ve örnekler için SQL Server Programmer's araç seti olan xp_odbc örnekleri bakın. SQL Server Programmer's Toolkit erişmek için <a0></a0>, SQL Server sayfasını aşağıdaki Microsoft Web sitesini ziyaret edin:http://www.microsoft.com/sql/default.mspx
(http://www.microsoft.com/sql/default.mspx)
Genişletilmiş saklı yordamlar, ana veritabanında kaydedilir ve Sistem Yöneticisi (SA), kullanım ve kayıt üzerinde denetim sağlar. DLL dosyanızın kaydolduğunuzda, geçerli sistem yolunda olduğunu ve bu 8.3 izleyen emin dosya adlandırma kuralını. Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın: 151596
(http://support.microsoft.com/kb/151596/
)
Yordamın hata genişletilmiş: "DLL 'xxx.dll' bulunamıyor" Adres alanıVerilen işlev işaretçisi almak için SQL Server LoadLibrary GetModuleHandle ve GetProcAddress işlevini kullanır ve sonra bir SRVPROC yapısı işlevi geçirir. DLL SRVPROC yapısını aldıktan sonra parametreleri elde etmek ve sonuçları, çağrıyı geri dönmek için standart Open Data Services işlemleri gerçekleştirebilir.Bir DLL Çağıran işlemin adres alanında yüklenir. Söz konusu genişletilmiş saklı yordam, SQL Server işlemidir. Bir DLL DOSYASı hatalı biçimde bellek veya iş parçacığının güvenli değil, erişiyorsa, işlem olumsuz etkileyebilir. DLL, işlem bütünlüğünü korur emin olmak için kapsamlı sınama gerçekleştirmelisiniz. Genişletilmiş saklı yordamını SQL Server olumsuz etkileyen, için hiç endişeniz varsa, bu sorunu hemen gidermek gerekir. Örneğin, Microsoft Visual C veya Microsoft Visual C++ sihirbazlar, DevStudio eklenti Sihirbazı oluşturmak için kullanın. Bu sihirbaz, bir konum işlem COM sunucusu veya DLL kullanılır. Sihirbaz doğru yazmazlar, işlem olumsuz etkileyebilir. ÖRNEKAdres alanını korumak SQL Server'ı çalışır. Genişletilmiş saklı yordamının çağırma alınmış bir / dışında blok ve birçok kod noktaları, en az bir çal??ma zaman? doğruluğu denetleniyor gerçekleştirin. Korumayı bir / dışında bloğu ve bir try/catch bloğu sağlanan hatırlamanız önemlidir. Bu nedenle, kod için nesneler yığını unwinding gerçekleştirmez. Bellek sızıntısıTüm proje, burada ayrılan bellek, tanıtıcı veya benzer bir kaynağın düzgün piyasaya sürülüyor değil bir sorun olabilir. Bu, ailesi DLL doğru tüm kaynakların yayımlamaktadır yerleşimlere, tüm DLL sınama paketi önemli olur. Bu tür sorunları Artırılmış sayfa dosyası kullanımı, değiştirilen performans veya daha fazla disk belleği kendilerini göstermek olasıdır.Emniyet iş parçacığıInternet ınformation Server (IIS) ve Microsoft SQL Server gibi çok iş parçacıklı bir uygulama havuzu iş parçacığı uygulamalardır. Bu, DLL dosyanızın birden çok bağlantılarından aynı anda birden çok işlemci bulunan bilgisayarda özellikle başlatılabileceğini anlamına gelir. Bu, ayrıca tek bir bağlantıda farklı bir giriş noktalarını (XPROC, ISAPI) DLL dosyasının bir başka alt iş parçacığından başlatabileceğiniz anlamına gelir. Iş parçacığı havuzu iş parçacığı yerel depolama (TLS) değişkenleri kullanışlılığını sınırlayabilirsiniz.Tüm kod yollarını çok iş parçacıklı çalıştırma zamanı kitaplıkları ile bağlantı kurarak ve tüm satıcı kullandığınız dll iş parçacığı uyumlu olduğundan emin yaparak iş parçacığı için güvenli bağlantı ve re-entrant olduğundan emin olun. Iş parçacığı yerel depolama ve ayrıntılı hesabını iş parçacığı güvenlik sorunları hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın: 163449
(http://support.microsoft.com/kb/163449/
)
Bir genişletilmiş saklı yordamı iş parçacığı yerel depolama kullanımda Özel durum işleme yapısıAyrıca, açıkça yapılandırılmış özel durum hata işleme anlamanız gerekir. Her bir DLL girdi noktası için bir özel durum hataları düzgün hesap gerekir. Özel durum hataları yakalamak SQL Server'ı çalışır ancak herhangi bir DLL yakalamak ve özel durum hataları düzgün işleyecek gerekir. Özellikle bir DLL DOSYASı ile başlatılan tüm iş parçacıkları, yapılandırılmış özel durum hata işleyicileri yüklemeniz gerekir.Bir işlemdeki her iş parçacığı, bir özel durum yığını vardır. DLL, yeni bir iş parçacığı başlatılırsa, ancak bunu, özel durum naked başlatır. Iş parçacığının olmayan bir yükleme / hariç veya bir try/catch bloğu hemen, iş parçacığının yalnızca işletim sistemi tarafından korunan olur. Iş parçacığının karşılaşır herhangi bir özel durum hata unhanded ve tüm işlem için önemli olarak kabul edilir. Unutmayın, dll DOSYASıNı çağıran işlem alanında, bu tür bir sorunu önemli özel durum işleme neden olur. SQL Server ve SQL Server'ın ilişkili bileşenleri çalışma zamanı DLL sürümleriyle bağlıdır. Geliştirdiğiniz tüm genişletilmiş saklı yordam, çalışma zamanı DLL sürümleriyle de bağlanmalıdır. Geridöngü bağlantılarıGenişletilmiş saklı yordam yeniden SQL Server çalıştıran bilgisayara aynı bağlantı kurduğunda, geridöngü bağlantı yapılır. Bu düzeltme eki SQL Server Programmer's araç seti ile birlikte gelen xp_dblib ve xp_odbc örneklerde açıklanmıştır.Yalnızca, geri döngü bağlantılarına bağımlı oturumlarda gerçekleştirebilirsiniz. Yeni bir bağlantı ve bu nedenle bir ayrı bir hareket içinde yer geridöngü bağlantısı ile bir sorundur. Örneğin, genişletilmiş saklı yordamı karmaşık matematiksel bir hesaplamadan satış tabloyu gerçekleştirir varsayalım. Geridöngü bağlantı, bir SELECT deyimi satış masasında tamamlamak çalışır. Ancak, özgün bağlantı Satış tablosuna bir UPDATE deyimi gerçekleştirilen. Sorgu zaman aşımı gerçekleştirmek için EĞER bakım alınmış sürece, bu bağlantıyı SRV_GOTATTENTION, denetleme ve işlem zaman uyumsuz sorgu gerçekleştirmek için kendi engelleyebilir. SQL Server 6.5 ve SQL Server'ın daha sonraki yapılar ilişkili bağlantılarını destekler. Srv_getbindtoken ve uygulama ayrıntıları için sp_bindsession bakın. Özgün bağlantı geridöngü bağlantı bağlama her iki bağlantı aynı hareket alana yerleştirir. Yani, Satış tablosunda başlangıçta oluşan engelleme engellenmesi. Not SQL Server, geri döngü bağlantılarına bağımlı oturumlar yalnızca destekler. Engelleyici sorunlar hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleleri görüntülemek üzere aşağıdaki makale numaralarını tıklatın: 162361
(http://support.microsoft.com/kb/162361/
)
Anlama ve SQL Server 6.x engelleme sorunlarını giderme 180775
(http://support.microsoft.com/kb/180775/
)
SQL Server geçiş efektleri istemci Hatalar ve iletileriGeridöngü bağlantı veya SQL Server çalıştıran başka bir bilgisayara veya bir açık veri hizmetleri ağ geçidi için bir bağlantı sağlayan bir genişletilmiş saklı yordamı, başka bir tarafı hataları ve iletileri ' dir.DB Kitaplığı'nı kullanıyorsanız, her işlem hata ve ileti işleyicileri kullanmanız gerekir. SQL Server genel ileti işleyicileri denetler ve bir genişletilmiş saklı yordam bunları değiştirme gerekir. Işlem başına hata ve ileti işleyicileri, ayrıca iş parçacığı için güvenli garanti altına alınmıştır. Dbprocmsghandle ve dbprocerrhandle tüm ayrıntılar için bkz:. Ipucu Bunları LOGINREC dbopen çağırmadan önce yükleyin. Genişletilmiş bir ortamda DB Kitaplığı kullanım sınırlaması hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın: 174817
(http://support.microsoft.com/kb/174817/
)
Microsoft SQL Server DB Kitaplığı'nın genişletilebilirliği ile sınırlıdır Srv_message_handler ile Aç Veri Hizmetleri API çağrısı, SQL Server hata günlüğüne metin yerleştirebilirsiniz. Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın: 164290
(http://support.microsoft.com/kb/164290/
)
Düzeltme: Srv_message_handler metin sınırı DB Kitaplığı hatası tanıtıcısı hakkında bir son Not: yüklü bir geri arama işlevinden INT_EXIT değerini döndürebilir. Ancak, belirtildiği gibi uygulamaya EXIT olur. Bu işlem için EXIT kılmasını anlamına gelir. Bu nedenle, bir DLL dosyasından etkilerini nedeniyle IIS veya SQL Server gibi uygulamalar için çağrılmalıdır değil.Transact-SQL KILLBaşka bir geri döngü bağlantı veya genişletilmiş saklı yordamı yürütme genel Transact-SQL KILL deyim kullanımı özelliğidir. KILL deyimi Transact-SQL tabanlı olduğundan, geçerli Aç Veri Hizmetleri API kümesi hiçbir bilgi Transact-SQL KILL durumu vardır. Bu nedenle, bu işlemi iptal etmek için istemciden gelen istekleri işleyebilir, bir genişletilmiş saklı yordam için SRV_GOTATTENTION bakın gerekir. Ancak, SA'NıN şu anda genişletilmiş saklı yordamının çalışmasını durdurmak için Transact-SQL KILL deyimi veremiyor. Bu daha önemli ilişkili bağlantıları düzgün kullanın ve iyi uygulamaları kodlama sağlar. Bir tasarım değişikliği isteği (DCR) ile genişletilmiş saklı yordamlar Transact-SQL KILL deyimine işlevselliğini genişletmek için SQL Server geliştirme dosyalanmış.Genel ayarlarıHiçbir zaman genel bir DLL işlemden durumunu etkiler. Örneğin, SQL Server, özellikle istenen davranışı için Win32 API çağrısı SetErrorMode çağırır. Bu işlem genel olduğu için bir genişletilmiş saklı yordamının hiçbir zaman SetErrorMode veya başka bir işlem genel çağrıları çağırmalısınız. Genel bir işlem etkiler; DLL Bu çağrıları kullanmadığından emin olun birkaç başka çağrılar vardır.Ayrıca, bazı açık Veri Hizmetleri (çağrıları yalnızca tasarlanmıştır ODS) ODS tabanlı bir uygulamada kullanmak ve bir genişletilmiş saklı yordamda kullanılmalıdır. Bu çağrı srv_init, srv_configsrv_handle ve srv_errhandle içerir. Bu işlevleri çağıran değerleri geçersiz kılar, bu SQL Server yüklemeleri ve beklenmeyen bir hata koşulları için neden olabilir. Srv_SenddoneVarsayılan olarak, SQL Server genişletilmiş saklı yordamı, bir genişletilmiş saklı yordam çağırma gelen iade SRV_DONE_FINAL bayrağıyla srv_senddone otomatik olarak çağırır. Genişletilmiş saklı yordam SRV_DONE_FINAL bayrağıyla değil arama srv_senddone gerekir; bunun yerine, SRV_DONE_MORE bayrağı kullanmanız gerekir.Dize sona erdirmeAçık Veri Hizmetleri API ' döndürülen dizeleri ile ilgili olduğunda, her zaman sona erdirme oluştuğunu emin olmalısınız. Saklı yordamın NULL olmasını garanti Genişletilmiş srv_paramdata döndürülen BIR dize sonlandırıldı. Dizelerin düzgün olarak değiştirmek için genişletilmiş saklı yordamı srv_paramlen kullanmanız gerekir. Open Data Services levler benzer olabilir; bunları ayrıntılı olarak sınayın.ReferanslarJeffrey Richter. Gelişmiş Windows. Redmond, WASHINGTON: Microsoft Press, 1997 Howard, Gamze ve David LeBlanc. Yazma güvenli kod, Second Edition. Redmond, WASHINGTON: Microsoft Press, 2002. Bu makaledeki bilginin uygulandığı durum:
Otomatik TercümeÖ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:190987
(http://support.microsoft.com/kb/190987/en-us/
)
| Diğer Kaynaklar Diğer Destek Siteleri
ToplulukHemen Yardım AlMakale çevirileri
|






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email


Üste