Stored Procedure’ler veritabanı sistemlerinde genellikle toplu iÅŸlemler yapmak için kullanılan dışarıdan parametre alabildiÄŸi gibi dışarıya parametre verebilen, sadece yürütülebilir(execute edilir SELECT edilemez) önderleme gerçekleÅŸtirmiÅŸ nesnelerdir. SQL Server, bazı iÅŸlemleri daha kısa yoldan ve hızlı gerçekleÅŸtirmemiz için programlama veya yönetim ile ilgili sistem procedur’leri sunar. Bu procedur’lerin bazıları doÄŸrudan T-SQL yazılmış bazıları da harici bir dil ile yazılarak bir kütüphane(.dll) içindeki fonksiyon olarak çalışan olarak çalışırlar bu tür procedure’ler master database’in altında bulunarak extended stored procedure denilir. Bu bölümde bize kolaylıklar saÄŸlayan bu sistem procedur’leri iÅŸleyeceÄŸiz.
1) sp_helptext ve sp_depends
SQL Browser gibi uygulamalarda database içerisindeki nesnelerin kod kısmını ve bunların başka nesnelerle olan ilişkilerini görmek isteyebiliriz. Rule, default, stored procedure, function, trigger, computed column, CHECK constraint, view gibi nesnelerin tanımlarını görmek için sp_helptext kullanılabilir.sp_helptext [ @objname = ] 'name' [ , [ @columnname = ] computed_column_name ]
USE AdventureWorks; GO EXEC sp_helptext 'Production.uBillOfMaterials'; GO
Bu ifadenin sonucunda SQL 2005 ile birlikte gelen AdventureWorks database içerisindeki ‘Production.uBillOfMaterials’ isimli TRIGGER’in içeriÄŸini gösterilmiÅŸ olur. sp_helptext procedure’i sys.sql_modules catalog view’ini sorgulayarak parametre olarak girilmiÅŸ nesneye ait SQL Script’i her row en fazla 255 karakter olacak ÅŸekilde gösterir.
SQL Server üzerindeki nesnelerin tanımları, sys.syscomments catalog view’inde durur. DoÄŸrudan bu view’i sorgulamak istediÄŸimiz nesneye daha hızlı ulaÅŸmasını saÄŸlar. ÖrneÄŸin aÅŸağıdaki ifade o database’de bulunan stored procedure’lerin tanımlarını gösterir.
SELECT * FROM sys.syscomments WHERE text LIKE '%CREATE PROCEDURE%'
Table, view veya stored procedure gibi nesnelerin birbirleriyle iliÅŸkilerini görmek için örneÄŸin bir tablonun hangi function, procedure veya trigger tarafından kullanıldığını görmek için sp_depends kullanılır.sp_depends [ @objname = ]'name' Bu procedure, parametre aldığı nesnenin hem kullandığı hem de kendisinin kullandığı nesneleri listeler. Dolayısıyla database uygulamalarında bir nesneyi silmeden önce bu yordamı kullanarak o nesnenin iliÅŸki durumu kontrol edilebilir. Database üzerindeki nesne iliÅŸkileri bilgileri sys.sql_dependencies catalog view’inde bulunur.
2) sp_addmessage
Kullanıcı tanımlı hata mesajı oluÅŸturmak için kullanılır. sp_addmessage [ @msgnum = ] msg_id , [ @severity = ] severity , [ @msgtext = ] 'msg'msg_id, hata numarasını belirtir. Kullanıcı tanımlı hataların numaraları 50000’den büyük olmalı. severity, 1 ile 25 arasında bir deÄŸer alarak hata mesajının kritik durumunu belirtir. ÖrneÄŸin 1-10 ile arasındaki deÄŸer, bu hata mesajının sadece bir uyarı olduÄŸunu bilgilendirme amaçlı kullanıldığını gösterir. 20-25 arasındaki deÄŸerler, yazılım veya donanımdan kaynaklanmış ölümcül bir hata olduÄŸunu belirtir. msgtext parametresi de hata mesajını içerir. Aynı ÅŸekilde hatanın Windows Event Log’lara yazılıp yazılamaycağı da boolean türünde deÄŸer alan with_log parametresiyle belirtilebilir.
EXEC sp_addmessage 50001, 16, N'Ürün Fiyatı, 1-2000 arasında olmalıdır.'
Veritabanı sunucusunda tanımlı hata mesajları sys.messages catalog view’inde bulunur. EklenmiÅŸ mesajları güncellemek için sp_altermessage yordamı, sistemten kaldırmak için de sp_dropmessage yordamı kullanılır.
3) sp_addtype, sp_datatype_info, sp_droptype
Bulunduğumuda veritabanında kendi veri tipimizi oluşturmak için kullanılır.sp_addtype [ @typename = ] type,
[ @phystype = ] system_data_type
[ , [ @nulltype = ] 'null_type' ] ;
Kullanıcı veri tipleri, sistem veri tiplerine dayalı olarak oluşturulur. Aşağıdaki satır, DogumTarih isminde datetime sistem tipini kullanacak ve NULL kayda izin verebilen bir veri tipi oluşturulmuştur.
EXEC sp_addtype DogumTarihi, datetime, 'NULL';
Veritabanı üzerinde veri tipleri, sys.types catalog view’inde bulunur. Kendi veri tiplerimizi, model veritabanı içerisinde tanımlamamız, bundan sonra yaratılacak veritabanları tarafından da görülmesini saÄŸlar. Bu stored procedure, SQL Server’in gelecek sürümlerinden kaldırılacaktır. Bunun yerine CREATE TYPE ifadesinin kullanılması tavsiye edilir. Sunucu üzerindeki data tipleri hakkında bilgi almak için sp_datatype_info yordamı kullanılabilir. systypes tablosundan herhangi bir data tip bilgisini silmek için sp_droptype kullanılır.
4) sp_addumpdevice, sp_helpdevice, sp_delete_backuphistory, sp_dropdevice
SQL Server’da backup almak için öncelikle “permanent backup file” olarak tanımlanan bir yedekleme dosyasının yaratılması gerekir. Aynı zamanda “backup device” olarak bilinen bu dosyaları, SQL Server Enterprise Manager veya sp_addumpdevice sistem stored procedure aracılığıyla oluÅŸturulur.
sp_addumpdevice [ @devtype = ] 'device_type'
, [ @logicalname = ] 'logical_name'
, [ @physicalname = ] 'physical_name'
[ , { [ @cntrltype = ] controller_type |
[ @devstatus = ] 'device_status' }
]
Buradaki devtype parametresi, disk veya tape olarak backup device türünü belirtir. logicalname parametresi, bu sürücüye ait BACKUP veya RESTORE ifadelerinde kullanılacak mantıksal adı belirtir. physicalname ise bu sürücünün, dosyanın fiziksel adını, fiziksel pathini, konumunu belirtir. AÅŸağıdaki tabloda, yerel diski, network diskin ve tanımlı tape’in nasıl backup device olarak tanımlandığı gösterilmiÅŸtir.
--Disk dump device tanımlama
EXEC sp_addumpdevice 'disk', 'dskdump1', 'c:\yedek\yedek1.bak';
--Network disk backup device tanımlama
EXEC sp_addumpdevice 'disk', 'networkdevice',
'\\\\\.bak';
--Tape backup device tanımlama
EXEC sp_addumpdevice 'tape', 'tapedump1', '\\.\tape0';
Sunucu üzerindeki backup device’leri sys.backup_devices catalog view’inde bulunmaktadır.
Herhangi bir device hakkında bilgi almak için detaylarını görmek için sp_helpdevice kullanılır.
sp_dropdevice stored procedure, sistem üzerindeki database veya backup device’leri kaldırmak için kullanılır. Bu sürücülerin listesi, master.dbo.sysdevices tablosunda durmaktadır.
Daha önce alınmış backuplara ait tarihsel bilgileri sistemden kaldırmak için sp_delete_backuphistory yordamı kullanılır.
5) sp_autostats, sp_createstats, sp_updatestats
BilindiÄŸi gibi SQL Query Optimizer aracı tarafında bir sorgu çalıştırılmadan önce o sorgu için hangi indexleri kullanmanın daha performanslı olacağı araÅŸtırılır. Bu araÅŸtırma, indexlerle ilgili istatistiksel verilere bakmakla baÅŸlar. Indeklerin istatistiksel verileri, o indeksin kullanım bilgi ve yoÄŸunluÄŸunu içerir. Tablo üzerindeki deÄŸiÅŸiklik yapıldıkça bu bilgilerin daima güncel tutulması gerekir. Sunucu tarafından bu bilgilerin otomatik güncellenip güncellenmeyeceÄŸi database ayarlarından yapılabilir. Index bilgilerini manual güncellemek için “UPDATE STATISTICS” komutu kullanılır. sp_autostats yordamı, indekslere ait istatistiksel verilerin ne zaman güncellendiÄŸini “UPDATE STATISTICS” özelliÄŸinin açık olup olmadığını bildirir ve gerekirse deÄŸiÅŸtirmemize izin verir.sp_autostats [ @tblname = ] 'table_name'
[ , [ @flagc = ] 'stats_flag' ]
[ , [ @indname = ] 'index_name' ]
--Product tablosuna ait istatiksel bilgi ayarları EXEC sp_autostats 'Production.Product'; --Product tablosu üzerindeki tüm indexler için automatic statistics özelliğinin açılması EXEC sp_autostats 'Production.Product', 'ON'; --Product tablosu üzerindeki AK_Product_Name isimli index için automatic statistics ayarını disable eder EXEC sp_autostats 'Production.Product', 'OFF', AK_Product_Name;
Database üzerinde bütün tablolardaki uygun kolonlar için istatistiksel veri oluşturmak için sp_createstats yordamı kullanılabilir. Bu kolonlara ait istatistiksel verileri güncellemek için sp_updatestats kullanılır.
Sistem üzerinde bulunan istatik bilgilerine erişmek için tablo adı parametre verilere sp_helpstats yordamı kullanılabilir.
6) sp_attach_db, sp_detach_db ve sp_attach_single_file_db
Dışarda bulunan bir database’i sunucuya attach etmek için kullanılır. sp_attach_db [ @dbname= ] 'dbname' AÅŸağıdaki tabloda C:\Alisveris_data.mdf ve C:\Alisveris_log.ldf dosyaları sistem attach edilmiÅŸtir. Sistem üzerinde bulunan database’i detach etmek için de sp_detach_db kullanılır.
, [ @filename1= ] 'filename_n' [ ,...16 ]
--C:\'nin altında bulunan dosyaları attach edelim
EXEC sp_attach_db @dbname = N'ALISVERIS',
@filename1 = N'C:\Alisveris_data.mdf',
@filename2 = N'C:\Alisveris_log.ldf' ;
--ALISVERIS veritabanını detach edelim
EXEC sp_detach_db 'ALISVERIS'
SQL Server 2005′ten sonraki sürümlerde kaldırılacak bu yordamlar yerine “CREATE DATABASE database_name FOR ATTACH” ifadesinin kullanılması tavsiye edilir.
En çok sorulan sorulardan biri de LOG dosyası bulunmayan ve bozulmuÅŸ MDF dosyalarının içeriyi alınmasıdır. Bu ÅŸekilde sadece MDF’si bulunan database’leri sisteme yerleÅŸtirmek için sp_attach_single_file_db kullanılır.
--ALISVERIS database'ini detach edelim
EXEC sp_detach_db @dbname = 'ALISVERIS';
--Sadece MDF dosyasını içeriye alalım
EXEC sp_attach_single_file_db @dbname = 'ALISVERIS',
@physname = N'C:\Alisveris_Data.mdf';
Aynı zamanda bu yöntem, log dosyasını küçültmek daha doğrusu yeniden oluşturmak için de kullanılır.
7) sp_configure
En çok kullanılan yordamlardan biri olan sp_configure yordamı, sunucuyla ilgili genel konfigürasyon bilgileri listelememizi, yönetmemizi sağlar. sp_configure [ [ @configname = ] 'option_name'
[ , [ @configvalue = ] 'value' ] ]
sp_configure, parametresiz kullanıldığı zaman sunucu üzerindeki tüm ayarları, deÄŸerleriyle birlikte gösterir. Bu ayarlar sys.configurations catalog view’inde tutulmaktadır. Herhangi bir ayar üzerinde deÄŸiÅŸiklik yapmak için ayarın adını ve yeni deÄŸerini parametre olarak geçmemiz yeterlidir. DeÄŸiÅŸtirilen özelliklerin çalışan sisteme o anda yansıması için “RECONFIGURE” veya “RECONFIGURE WITH OVERRIDE” ifadesi kullanılır.
--Sunucunun language ayarını British yap EXEC sp_configure 'default language', 23 --Sunucunun language ayarını turkish yap EXEC sp_configure 'default language', 1254 --Aynı anda en fazla 5 kullanıcı bağlantısına izin versin EXEC sp_configure 'user connections', 5
8 ) sp_executesql
Ciddi kolaylık sağlayan bu yordam, dinamik olarak SQL ifadelerini çalıştırmamızı sağlar.sp_executesql [ @stmt = ] stmt En önemli özelliği çalıştırılacak query için parametre tanımlayabiliyor olmamızdır.
[
{, [@params=] N'@parameter_name data_type [ [ OUT [ PUT ][,...n]' }
{, [ @param1 = ] 'value1' [ ,...n ] }
]
--Basit kullanım EXECUTE sp_executesql N'SELECT * FROM Musteri WHERE MusteriID = 25' --Parametreli kullanım EXECUTE sp_executesql N'SELECT * FROM Musteri WHERE MusteriID = @MId', N'@MId int', @MId = 25;
Bu yordam, yakın zamanda karşılaÅŸtığım Linked Server üzerinde sorgu çalıştırırken önemli bir sorunu çözmüştü. AÅŸağıdaki örnekte DW1 isimli linked server üzerinden uzaktaki sunucudaki Alisveris database’in içindeki Musteri tablosu güncellenmek istenmiÅŸtir.
update DW1.Alisveris.dbo.Musteri set DW1.Alisveris.dbo.Musteri.Adres=''
Bu kadar uzun bir prefix yapısı kullanıldığı zaman SQL Server The number name ‘DW1.Alisveris.dbo.Musteri’ contains more than the maximum number of prefixes. The maximum is 3. hatası vermektedir. Bu hatayı aÅŸmak için nesne prefix’lerinden linked server’i çıkartıp doÄŸrudan sorguyu linked server çalışıyormuÅŸ gibi yapmak daha mantıklı. Bunun için aÅŸağıdaki alternatif kullanılabilir.
exec WXX.DW.dbo.sp_executesql N' update Musteri set Adres='''' '
9) sp_help ve diÄŸer yardım procedure’leri
SQL Server’daki herhangi bir database nesnesi hakkında bilgi almak için kullanılır. Database nesnelerine ait bilgiler, sys.sysobjects catalog view’inde bulunur. Nesneler ilgili yardım procedur’leri ÅŸunlardır;
sp_helpgroup Database üzerindeki role’lar hakkında bilgi verir.
sp_helpindex Table veya view üzerindeki indexleri döndürür.
sp_helprotect Database üzerindeki user ve statement permissionları, kullanıcıları yetkilerini listeler.
sp_helpserver Sunucu üzerinde tanımlı remote veya replication server’ları listeler. Bunu kullanarak makine üzerinde tanımlı linked serverleri görebiliriz. Sunucuların listesi, master.sys.servers tablosunda bulunur.
sp_helptrigger Tablo adını parametre alarak o tablo üzerindeki trigger’leri listeler.
sp_helpuser Sistem üzerindeki kullanıcıları listeler.
sp_helpconstraint Tablo adını parametre alarak o tablo üzerindeki constraint’ler hakkında bilgi verir. constraint’ler türlerine göre sys.key_constraints, sys.check_constraints ve sys.default_constraints catalog view’lerde bulunur.
sp_helpdb Belirli veya tüm database’ler hakkındaki detayları listeler. Sunucu üzerinde tanımlı database listesi, sys.databases catalog view’de bulunur. Üzerinde çalışılan database’in dosya bilgileri için sys.filegroups ve sys.database_files view’leri sorgulanabilir.
sp_helpdevice Sunucu üzerindeki database veya backup sürücülerini listeler.
sp_helpextendedproc Sunucu üzerindeki extended stored procedure’leri bildirir.
sp_helpfile Üzerinde çalışılan database’le iliÅŸki database dosyalarını bildirir.
sp_helpfilegroup Üzerinde çalışılan database’e ait database file group’ları listeler.
sp_helpindex Parametre olarak aldığı tabloya ait indexleri ve onlara ait detayları gösterir. Database’e ait indexler sys.indexes catalog view’inde durur.
sp_helplanguage En çok kullanılan yordamlardan biri olup sunucu üzerinde tanımlı dilleri ve onlara ait detayları döndürür. Language listesine sys.syslanguages catalog view’inden eriÅŸilebilir.
sp_helpsort Özellikle COLLATION sorunlarında yardımcı olacak bir yordam olup sunucunun hangi sort order ve character setini kullandığını bildirir.
sp_helpstats Parametre olarak aldığı tablodaki kolon veya indexlere ait statistic bilgileri listeler.
Bu yordamların çoğu, parametre almadıkları zaman tüm nesneleri listeler, parametre girildiği zaman sadece o nesne hakkında bilgi getirir.
10) sp_serveroption, sp_setnetname
Sunucu üzerinde tanımlı remote server ve linked server ayarlarını düzenlemek için kullanılır. Ayrıca bu sunucuların network’teki adı deÄŸiÅŸtiÄŸi zaman sunucu üzerindeki network adını deÄŸiÅŸtirmek için sp_setnetname kullanılır.
11) sp_spaceused
Database ve tabloların disk üzerinde ne kadar yer kapladıklarını. Bunların ne kadarını data ve index yapılarını ayırdığını görme imkanı verir. Bu yordam aracılığıyla bir SQL Server tablosunun ne kadar yer kapladığını görebiliriz. Bunun için yordama parametre olarak tablo adını geçmemiz yeterlidir. Herhangi bir parametre kullanılmazsa baÄŸlı bulunan database’in diskteki yer kaplamasıyla ilgili bilgileri listelenir. Ayrıca undocumented bir prosedür olarak sp_MStablespace prosedürü de kullanılabilir. Bununla birlikte kolaylık saÄŸlayan bir prosedür olarak sp_MSindexspace prosedürü de parametre olarak tablo adını alarak o tablodaki indexlerin ne kadar yer kapladıklarını bildirir.
12) sp_who, sp_who2, sp_lock
Sunucu üzerinde bağlantıları ve processlerini görmek için kullanılır. sp_who2, sp_who yordamının özeti ve daha anlışılır halidir. Sunucu üzerindeki çalışan processleri kullanıcı bazında ve SPID bazında görebileceğimiz gibi sadece o anda aktif olarak çalışan işlemleri görmek için active parametresi girilir.
--Bütün processleri listele EXEC sp_who --Sadece ahmet isimli kullanıcıya ait processleri listele EXEC sp_who 'sa'; --Sadece aktif processleri listele EXEC sp_who 'active'; --Process ID'si 55 olan process hakkındaki detayı ver EXEC sp_who '55'
sp_lock yordamı aktif lockları, sunucu üzerindeki kilitlenmeleri bildirir.
13) sp_rename
Veritabanıdaki herhangi bir nesnenin adını değiştirmek için kullanılır.sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'
[ , [ @objtype = ] 'object_type' ]
--SalesTerritory tablosunun adını SalesTerr olarak değiştirir. EXEC sp_rename 'Sales.SalesTerritory', 'SalesTerr'; --SalesTerritory tablosundaki TerritoryID kolonu TerrID olarak değiştirir. EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN'; --ProductVendor üzerindeki IX_ProductVendor_VendorID indeksinin adını IX_VendorID yapar EXEC sp_rename N'Purchasing.ProductVendor.IX_ProductVendor_VendorID', N'IX_VendorID', N'INDEX'; --Phone türünün adını Telephone olarak değiştirir EXEC sp_rename N'Phone', N'Telephone', N'USERDATATYPE';
14) Tablo veya View ile ilgili Sistem Prosedürleri
Catalog Stored Procedure olarak bilinen bu prosedürler table, view gibi nesneler hakkında detaylı bilgi almamız sağlar. Parametre olarak bilgi almak istediğimiz table veya view adı alır.
sp_columns Parametre aldığı nesnenin kolonlarıyla ilgili detaylı bilgi lister.
sp_column_privileges Tablodaki kolon veya kolonlar üzerindeki hakları bildirir. Birçok parametre alır. Örneğin sadece belli bir kullanıcının belli bir kolon üzerinde hakkı öğrenilebilir.
sp_databases Sunucu üzerinde tanımlı veritabanlarını ve büyüklüklerini listeler.
sp_fkeys Birçok parametre alarak tablolar arasındaki primary-foreign key iliÅŸkisi hakkında bilgi verir. sp_fkeys Forum ifadesi, Forum tablosundaki primary key’i ikincil anahtar olarak kullanan tabloları ve iliÅŸki durumlarını gösterir.
sp_pkeys Tablo üzerindeki primary key(birincil anahtar) bilgilerini gösterir.
sp_server_info Üzerinde çalıştığımız sunucunun adı, sürümü, genel ayarları şeklinde bilgilerini listeler.
sp_special_columns Tablodaki unique(tekil, benzersiz) özelliğie sahip kolonları bildirir.
sp_sproc_columns Parametre olarak stored procedure veya function adı alarak o prosedür veya fonksiyonun parametreleri hakkında bilgi verir.
sp_statistics Parametre olarak aldığı tablo üstündeki index ve onlara ait istatiksel verileri listeler.
sp_stored_procedures BulunduÄŸumuz ortamdaki stored procedure’leri listeler.
sp_table_privileges Tablo üstündeki tablo erişim izinlerini(INSERT, DELETE, UPDATE, SELECT, REFERENCES gibi) bildirir.
sp_tables BulunduÄŸumuz ortamdaki table ve view’leri listeler.
USE AdventureWorks; GO EXEC sp_tables @table_name = '%', @table_owner = 'Person', @table_qualifier = 'AdventureWorks';
AdventureWorks veritabanında Person şemasında bulunan tüm tabloları listeler.
15) sp_send_dbmail
SQL Server üzerinde mail atmamızı saÄŸlayan yetenekli bir prosedür olup hem bir query’i çalıştırıp sonucunu mail içeriÄŸine gömebilir hem de bir dosyayı attachment olarak gönderebilir. Birçok parametre alan bu prosedüre msdb altında bulunur ve geriye iÅŸlemin doÄŸru yapılıp yapılmadığına dair 0 ve 1 döndürür. Detaylarını bulabileceÄŸiniz Books Online’daki ÅŸu basit örnek bu iÅŸlemin ne kadar kolaylaÅŸtırıldığını göstermektedir.
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'AdventureWorks Administrator',
@recipients = 'danw@Adventure-Works.com',
@body = 'The stored procedure finished successfully.',
@subject = 'Automated Success Message' ;
16) Güvenlik Prosedürleri(Security Stored Procedures)
SQL Server üzerinde güvenlik işlemlerinin yönetimini düzenlemek için aşağıdaki prosedürler kullanılabilir.
sp_addloginSQL Server authentication’ı kullanarak SQL Server’a baÄŸlanacak yeni bir kullanıcı oluÅŸturmak için kullanılır. SQL Server 2005′ten sonraki sürümlerde kaldırılacak bu prosedür yerine “CREATE LOGIN” ifadesinin kullanılması tavsiye edilir. Birçok parametre alarak, kullanıcıyla birlikte ÅŸifresini, default database ve default language ve sabit SPID oluÅŸturma imkanı da vermektedir.
--Åžifresi 123 olan rapor isminde user oluÅŸturur. EXEC sp_addlogin 'rapor', '123';
sp_adduser Üzerinde çalışan database’e user eklemek için kullanılır.
sp_changedbowner Çok kullanılan prosedürlerden biri olup baÄŸlı bulunan database’in sahibini deÄŸiÅŸtirir.
sp_changeobjectowner İki parametre alarak, herhangi bir nesnenin owner’ini, sahibini deÄŸiÅŸtirir. Sadece Microsoft SQL Server 2000 nesneleri için çalışan bu yordam, daha sonraki sürümlerde kaldırılarak “ALTER SCHEMA” veya “ALTER AUTHORIZATION” ifadelerinin kullanılması tavsiye edilmiÅŸtir.
sp_dropuser SQL Server 2005 öncesi sürümlerde database’deki user’i kaldırmak için kullanılır. 2005 ile birlikte “DROP USER” ifadesi kullanılmalı.
17) Saklı Prosedürler(Undocumented stored procedures) SQL Server’da kullanabileceÄŸimiz ama Microsoft tarafında resmi dokümanlarda paylaşılmayan bazı stored procedure’ler bulunur. Bunlardan T-SQL ile yazılmak yerine farklı bir programlama dili kullanılarak bir dynamic link library(.dll) üzerinde çalışırlar. Extended stored procedure olarak isimlendirilen bu prosedürler, T-SQL ile yapamadığımız birçok iÅŸlemi yapmamızı saÄŸlar. Bunlar, master veritabanı altında “xp_” önekiyle kayıt edilmiÅŸtir.
sp_MSgetversion Bağlı bulunduğumuz SQL Server sürümü hakkında bilgi verir.
EXEC master..sp_MSgetversion
Buna alternatif olarak SQL Server’daki @@version global deÄŸiÅŸken kullabılabilir.
xp_dirtree Parametre olarak aldığı klasörün altındaki tüm klasörler içindeki dosyaları listeler. Bir klasörün altındaki sadece klasörleri listelemek için xp_subdirs kullanılır.
xp_enum_oledb_providers Sunucu üzerindeki tanımlı OLE DB provider’ları listeler.
xp_enumcodepages Sunucu üzerinde tanımlı tüm code page, character set’leri listeler. ÖrneÄŸin Türkçe için aÅŸağıdaki satır gelir. 1254 iso-8859-9 Türkçe (Windows)
xp_enumerrorlogs Sunucu üzerinde oluşturulmuş log dosyalarının listesini döndürür. Bu log dosyalarını okumak için xp_readerrorlog prosedürü kullanılır.
xp_enumgroups Sunucu üzerindeki Windows NT group ve açıklamalarını listeler.
xp_fileexist Parametre olarak aldığı path’te o dosyanın olup olmadığını kontrol eder ve dosya mı yoksa klasör mü olduÄŸunu bildirir.
EXEC master..xp_fileexist 'C:\Deneme.txt'
File Exists File is a Directory Parent Directory Exists
----------- ------------------- -----------------------
0 0 1
xp_fixeddrives Sunucu üzerindeki diskleri ve doluluk bilgilerini gösterir.




Temmuz 2nd, 2008 at 11:07
Hocam elinize sağlık, dumpdevice yöntemi hoşuma gitti.
iyi çalışmalar
Mayıs 1st, 2009 at 17:02
üstad sql server 2005′e bir dizin içinde bulunan databaseleri tek tek database ismi yazmadan toplu olarak attach/deattach imkanı varmıdır?
Mayıs 4th, 2009 at 21:07
Merhaba,
doğrudan bunu yapabilen bir yordam bulunmamaktadır. Eğer sadece T-SQL kullanılarak böyle bir işlem yapılmak isteniyorsa xp_cmdshell ile sözkonusu dizindeki mdf ve ldf dosyalarının adı okunur ve ona göre sp_attach_db ifadesi oluşturulur.
Ekim 20th, 2009 at 12:33
Çok güzel hazırlanmış, bu konuda Türkçe kaynak bulmak bir hayli zor Ahmet Bey’e teÅŸekkürler…
İyi çalışmalar.
Kasım 16th, 2009 at 17:28
Gerçekten anlatım tarzı ve içerik süper hazırlayanlara çok teşekkür ederim gün içerisinde fırsat buldukça bilgileniyoruz.
Åžubat 6th, 2010 at 16:11
Hocam çok yararlı bilgiler edindim sayenizde.Çalışmalarınızın devamını dilerim..
Aralık 17th, 2011 at 14:14
TEŞEKKÜRLER