2010-12-26

SQL Server Authentication Mode

SQL Server iki farklı şekilde bağlantıları kabul eder. Bunlar:

Windows Authentication

Bu modda sadece Windows login'leri ile SQL Server'a erişilebilir. Windows Authentication, Kerberos güvenlik protokolünü kullanır.


Mixed Mode Authentication(mixed)

Bu moddaki bir SQL Server'a hem Windows authentication hem de SQL Server authentication ile erişilebilir.

SQL Server kurulurken default olarak windows authentication mode'da kurulur. SQL Server'ınızı dilerseniz kurulum esnasında mixed mode(Windows and SQL Server Authentication Mode) olarak ayarlayabilirsiniz.

Aşağıdaki dört farklı yöntemde SQL Server'ınızın hangi Authentication Mode'a olduğunu öğrenebilirsiniz:

  • SSMS Kullanarak :

    SQL Server Management Studio  Object Explorer'da , server adının üzerinde sağı tıklayarak, Properties'den  Security sayfasında SQL Server Authentication  modunu öğrenebilirsiniz.
  • ServerProperty ile
    serverproperty() fonksiyona IsIntegratedSecurityOnly parametresini verererek SQL Server'ın Authentication  modunu öğrenebilirsiniz:

    SELECT CASE SERVERPROPERTY('IsIntegratedSecurityOnly')
    WHEN 1 THEN 'Windows Authentication Mode'
    WHEN 0 THEN 'Mixed Mode'
    END as [Authentication Mode]
  • xp_instance_regread Extended Stored Procedure ile
    LoginMode'ı registry'den okuyarak SQL Server'ın Authentication modunu öğrenebilirsiniz:

    DECLARE @AuthenticationMode INT

    EXEC master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE',N'Software\Microsoft\MSSQLServer\MSSQLServer', N'LoginMode', @AuthenticationMode OUTPUT

    SELECT CASE @AuthenticationMode
    WHEN 1 THEN 'Windows Authentication Mode'
    WHEN 2 THEN 'Mixed Mode'
    ELSE 'Unknown'
    END as [Authentication Mode]
  • xp_logininfo Extended Stored Procedure ile
    EXEC master.sys.xp_loginconfig 'login mode'

2010-12-25

SQL Server 2008 SP2 ile Gelen Yenilikler

SQL Server 2008 SP2 ile gelen yenilikler:

•Her tablo için 15.000 partition desteği. Bu destek SQL Server 2008'in Enterprise, Developer ve Evaluation sürümlerinde geçerli. 15.000 partition desteği enable edilerek kullanılabilir. Bu özelliği enable ettiğiniz veritabanının backup'ını SQL Server 2008 SP2 öncesi bir sunucu da restore edemezsiniz!

•Reporting Servis'in  SharePoint Integrated Mode desteği.

•SQL Server 2008 R2 uygulamalarını ve multi-server management özelliğini SQL Server 2008 ile birlikte kullanabilme(SQL Server 2008 R2 Utility Control Point  ve DAC desteği).

2010-12-24

Tempdb Veritabanı Hakkında

Tempdb veritabanı:
  • SQL Server servisi restart olduğunda tekrardan oluşur.
  • Model veritabanını kullanarak oluşur.
  • Veritabanının recovery modelini daima SIMPLE olarak set edin.
  • Checkpoint yoktur.
  • Backup'ını alamazsınız.
  • Data için sadece bir filegroup olmalı ve logları bir log  dosyasında tutun.

2010-12-21

Unused Tables Since SQL Server Restarted

SQL Server servisinin en son restart edildiği zamandan itibaren kullanılmayan tabloları veren script aşağıdaki gibidir:

select object_schema_name(t.object_id) + '.' + t.name as TableName
from sys.dm_db_index_usage_stats i right outer join
sys.tables t on (t.object_id = i.object_id)
group by object_schema_name(t.object_id) + '.' + t.name
having sum(isnull(i.user_seeks,0)+isnull(i.system_seeks,0)+isnull(i.user_scans,0)+ isnull(i.system_scans,0)
+ isnull(i.user_lookups,0) + isnull(i.system_lookups,0)+ isnull(i.user_updates,0)+ isnull(i.system_updates,0))=0
order by object_schema_name(t.object_id) + '.' + t.name

Korkular Aleminde -Bir Deneme

Korkular aleminde büyüyüp yeşerdik; dal verip budak saldık. Her dalımızda korkularımızın yeşerttigi yeşil yapraklarla sarmalanıp, kırmızı meyveler verdik. Yıllarca gerçeklerimizden korktuk, kaçtık, saklandık, gizlendik, sesimizi titrek kelimelerle; hatta zaman zaman ancak kendimiz duyacak kadar alçak sesle seslendik. Sesimizi, sesimizle birlikte meramızı aktarmaya çalıştık. Sesimizden korktuk, sesimizin ifade ettigi manadan korktuk. Manaların derinliğinden, derinliklerimizin gerçek özünden, özümüzün ifade edilmesinden ürktük. Ürkek bir güvercin gibi havalanıp; ürkekliğimizi uçtugumuz her diyara taşıdık. Korkumuzun gizemini, gizemimizin korkusunu derinlerimizde gizleyip ve görünmesin diye zamanın derin koyu sıvasıyla sıvadık. Sıvanın üzerini cafcaflı renklerle boyayıp, kendimizle birlikte çevremizdekileri de kandırdıgımız hissiyle teselli bulduk. Hoşumuza gitmeyen sinema sahnelerinde gözümüzü yumup; karanlık akşamın aydınlık sabahında derin hülyalarla uyanmayı umduk. Umduklarımızı istikbalimizde görmek yerine; geride bıraktık. Geride bıraktıklarımızı bir gün kurtarırız düşüncesiyle önümüze bakıp yol aldık. Tam bir arpa boyu yol almışken, mazimiz birden iki arpa boyu bizi geriye çekti; bizi sallayıp silkti; bizden olmayıp ta üzerimizde emanet olarak duran her şeyi aldı. Biz bize kaldık, kaldığımız yerden filmi sardık. Filmi sardığımız yerde "Korkular Aleminde-Bir Denemeye" reklam gelir kapısını açık bırakıp, uyku arası verdik...
21.12.2010 01:44

2010-12-18

MS SQL Server 2005 SP4 RTM Yayınlandı

Microsoft SQL Server 2005 SP4 yayınladı. SQL Server 2005 Service Pack 4'i http://www.microsoft.com/downloads/en/details.aspx?FamilyID=b953e84f-9307-405e-bceb-47bd345baece&displaylang=en adresinden indirebilirsiniz.

SQL Server 2005 Service Pack 4'te giderilen hataların listesini http://support.microsoft.com/kb/2463332 adresinden detaylı olarak inceleyebilirsiniz.

Microsoft, SQL Server 2005 SP4 ile güzel bir versiyon numarası seçmiş; versiyon numarası 9.00.5000.00 oluyor.

2010-12-14

Useful Undocumented Stored Procedures

sp_MSindexspace: İndeks boyutunu KB olarak döndürür.

Syntax: 
sp_MSindexspace [ @tablename = ] 'tablename', [ @index_name = ] 'index_name'

Örnek: 
EXEC sp_MSindexspace @tablename = 'Musteri'


sp_MStablespace: Tablo boyutunu KB olarak döndürür.

Syntax:
sp_MStablespace [ @name = ] 'name', [ @id = ] 'id'

Örnek:
EXEC sp_MStablespace @name = 'Personel'


sp_objectfilegroup: Objenin datafilegroup'unu döndürür.

Syntax:sp_objectfilegroup [ @objid = ] 'objid'

Örnek:USE TestDB
GO
DECLARE @id INT
SET @id = OBJECT_ID('TestDB.dbo.TestTablo')
EXEC sp_objectfilegroup @objid = @id

2010-11-30

Veritabanınızın Log Dosyasını Küçültme

SIMPLE recovery modda olan veritabanınızın aşırı şişen log dosyasını küçültmek için  aşağıdaki adımları uygulayabilirsiniz:
  1. Veritabanı FULL recovery moda alınır,
  2. Veritabanının FULL backup'ı alınır,
  3. Veritabanın Transaction Log Backup'ı alınır,
  4. Veritabanın Log dosyası shrink edilir.
Not: Transaction Log Backup'ı alan bir maintenance plan tanımlarsanız log dosyanız çok fazla büyümez. Ayrıca aldığınız bu transaction log backuplarınızı belirli periyotlarda silen bir maintenance plan ile diskinizin dolmasını engelleyebilirsiniz.

2010-11-24

Cumulative Updates for SQL Server 2008 are available

SQL Server 2008 SP1 ve SP2 için yeni Cumulative Update'ler çıktı. CU'leri aşağıdaki adreslerden indirip kurabilirsiniz:

•SQL Server 2008 SP1 Cumulative Update 11- KB #2413738

•SQL Server 2008 SP2 Cumulative Update1 - KB #2289254

2010-11-16

SQL Server 2012 - T-SQL Paging

SQL Server 2012 ile birlikte gelen güzel özelliklerden birisi de T-SQL'de paging yapısı. Paging  ile istediğimiz sıradaki yada sıralar arasındaki kayıtları listeleyebileceğiz. Dilersek bu sıraları parametrik hale de getirebileceğiz.

Örnek-1: 10.kayıttan sonraki tüm kayıtları aşağıdaki T-SQL kodu ile alabiliriz.:

SELECT PersonID, FirstName, LastName
FROM Person
ORDER BY PersonID
OFFSET 10 ROWS

Örnek-2: 10  ile 20. kayıtlar arasındakı kayıtları aşağıdaki T-SQL kodu ile alabiliriz:

SELECT PersonID, FirstName, LastName
FROM Person
ORDER BY PersonID
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY;

Syntax:

ORDER BY order_by_expression
[ COLLATE collation_name ]
[ ASC | DESC ]
[ ,...n ]
[ ]


 
 ::=
{
OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS }
[
FETCH { FIRST | NEXT } {integer_constant | fetch_row_count_expression } { ROW | ROWS } ONLY
]
}

2010-11-11

SQL Server 2011 (Code Name Denali)'nin CTP1'i Çıktı

SQL Server 2011'in CTP1 versiyonunu http://www.microsoft.com/downloads/en/details.aspx?FamilyID=6a04f16f-f6be-4f92-9c92-f7e5677d91f9&displaylang=en adresinden indirebilirsiniz. SQL Server 'Denali' ile gelen yeniliklere http://msdn.microsoft.com/en-us/library/bb510411(v=SQL.110).aspx adresinden ulaşabilirsiniz.

Index Fragmentation

Bir tablo yada view'daki index ve data fragmantasyonunu sys.dm_db_index_physical_stats DMV'si ile alabilirsiniz.

Örnek-1: Test adlı veritabanımızdaki musteri adlı tablomuzun fragmantasyonu aşağıdaki SQL kodu ile alabiliriz:

select * from sys.dm_db_index_physical_stats(db_id('Test'),object_id('musteri'),null,null,null)

Örnek-2: Test adlı veritabanımızdaki tüm tablo ve view'lerimizin fragmantasyonu aşağıdaki SQL kodu ile alabiliriz:

select * from sys.dm_db_index_physical_stats(db_id('Test'),null,null,null,null)

Örnek-3: Tüm veritabanlarımızdaki tüm tablo ve view'lerimizin fragmantasyonu aşağıdaki SQL kodu ile alabiliriz:

select * from sys.dm_db_index_physical_stats(null,null,,null,null,null)

Fragmente oranı %30 dan büyük olan indexlerinizi rebuild etmenizi; %10-%30 arasında olan indexlerinizi ise reorganize etmenizi tavsiye ederim.

2010-11-04

Tüm Kullanici Veritabanlarının Boyutlarını Almak

Bir instance üzerinde bulunan tüm kullanici veritabanlarının boyutlarını aşağıdaki SQL kodu ile alabilirsiniz:

select db_name(database_id) DatabaseName,sum(size)*8/1024 DatabaseSizeMB
from sys.master_files
where database_id>4
group by db_name(database_id)

2010-10-26

Logical/Physical CPU Sayısını Bulma

SQL Server 2008 ve SQL Server 2008 R2 sürümlerinde logical/physical cpu sayısını aşağıdaki sql kodu ile alabilirsiniz:

SELECT cpu_count AS [Logical CPU Count],
hyperthread_ratio AS [Hyperthread Ratio],
cpu_count/hyperthread_ratio AS [Physical CPU Count]
FROM sys.dm_os_sys_info;

2010-10-25

SQL Server Servis Account Adını Bulma

SQL Server'ı çalıştıran servis account'ını aşağıdaki gibi alıp öğrenebilirsiniz:

DECLARE @ServiceaccountName varchar(128)
EXECUTE master.dbo.xp_instance_regread
N'HKEY_LOCAL_MACHINE',
N'SYSTEM\CurrentControlSet\Services\MSSQLSERVER',
N'ObjectName',
@ServiceAccountName OUTPUT,
N'no_output'
SELECT @ServiceaccountName

2010-10-15

SQL Server'ın Başlatıldığı Zamanı Bulma

SQL Server'ın başlangıç zamanını SQL Server 2008 ile birlikte gelen sys.dm_os_sys_info DMV'i ile aşağıdaki gibi bulabilirsiniz:

SELECT sqlserver_start_time
FROM sys.dm_os_sys_info

SQL Server Error Log Dosyası Nerede?

SQL Server error log dosyasının adını ve dosyanın bulunduğu dizini aşağıdaki undocumented sql kodu ile alabilirsiniz:
SELECT SERVERPROPERTY('ErrorLogFileName')

2010-09-30

MS SQL Server 2008 Service Pack 2 (SP2) Çıktı

Microsoft daha önce 2010 yılının 4.çeyreğinde çıkaracağını duyurduğu SQL Server 2008 SP2'yi yayınladı.
SQL Server 2008 Service Pack 2'yi http://www.microsoft.com/downloads/en/details.aspx?FamilyID=8fbfc1de-d25e-4790-88b5-7dda1f1d4e17&displaylang=en adresinden indirebilirsiniz.

SQL Server 2008 Service Pack 2'de giderilen hataların listesini http://support.microsoft.com/kb/2285068 adresinden detaylı olarak inceleyebilirsiniz.

2010-09-16

Partition Tabloların Filegroup ve Diğer Bilgilerini Alma

Partition yapısındaki bir tablonun partition aralıklarını ve bu aralıkların hangi filegroup'ta tutulduğunu aşağıdaki sorgu ile alabilirsiniz:

select isnull(d.name,ps.name) FileGroupNameOrSchemeName
,isnull(d.type_desc , ps.type_desc ) FileGroupTypeOrSchemeType
,OBJECT_NAME(p.object_id) ObjectName
,p.rows
,p.data_compression_desc
,p.partition_id
,p.partition_number
,isnull(case when boundary_value_on_right =1 then '<' else '>' end + cast(minprv.value as varchar(100)),'~') + ' to '
+isnull( case when boundary_value_on_right =1 then '>='
else '<=' end + cast(prv.value as varchar(100)), '~') Criteria
,d2.name FilegroupName
from sys.partitions p join sys.indexes i on i.index_id = p.index_id and i.object_id = p.object_id
left join sys.data_spaces d on d.data_space_id = i.data_space_id
left join sys.partition_schemes ps on ps.data_space_id = i.data_space_id
left join sys.partition_functions pf on pf.function_id = ps.function_id
left join sys.partition_range_values prv on prv.function_id = ps.function_id and prv.boundary_id = p.partition_number
left join sys.partition_range_values minprv on minprv.function_id = ps.function_id and minprv.boundary_id = p.partition_number -1
left join sys.destination_data_spaces dds on dds.partition_scheme_id = ps.data_space_id and dds.destination_id = p.partition_number
left join sys.data_spaces d2 on d2.data_space_id = dds.data_space_id
where p.object_id=object_id('TabloAdi')

2010-09-12

Performans Counter'a Binlik Ayıracı Ekleme

Windows Vista'dan önceki işletim sistemlerinde perfmon'da binlik ayıracı default olarak yoktur ve bu eksiklik özellikle uzun sayıları okumamızda zorluk çıkartır. Perfmon'a binlik ayıracını aşağıdaki adımları uygulayarak ekleyebilirsiniz:
  1. Regedit'i çalıştırın.
  2. HKEY_CURRENT_USER\Software\Microsoft\SystemMonitor\ sekmesini açın.
  3. Edit menu'de New deyip DWORD değeri seçin.
  4. Oluşturduğunuz yeni alana "DisplayThousandsSeparator" adını verin.
  5. "DisplayThousandsSeparator" değerini 1 olarak set edin.
  6. Perfmon'u yeniden başlatın.

2010-08-24

Gmail'im Dışardan Mail Almaz Oldu, Tüm Maillerim Yolda Kaldı!

Sevgili dostlar,

Gmail'deki mail hesaplarına dünden beri mailler gelmiyor. Gmail'den başka bir adresteki mail hesaplarına mail gönderebiliyorsunuz fakat mail alamıyorsunuz. Bir süredir gmail'deki hesaba mail gönderdim hala gitmedi yada benim gibi gmail de mail beklediği halde maili gelmeyen arkadaşlara duyurulur.

2010-08-18

Veritabanı Yöneticileri Neler Yapar?

Bir DBA tipik olarak aşağıdaki konulardaki işlerle uğraşır:

- Veri Arşivleme
Verilerin boyutu zamanla artar. Bu artış disk üzerinde daha çok yer kaplamasına neden olup, performansı düşürüp yönetimi zorlaştırır. Bir DBA verinin boyutunu ve büyümesini izleyip gerekli yerlerde arşivleme yapmalıdır. Arşivleme işlemi için kullanılan yöntem aynı server üzerindeki farklı bir filegroup yada veritabanı olabileceği gibi farklı bir sunucu üzerindeki bir veritabanı da olabilir. Kullanılan yöntem kurum politikasına ve yasalara uygun olmalıdır.

- Toplantılara Katılma
Çoğu DBA toplantılardan nefret eder.Çünkü çalışmaya ve zamanla yarışmaya ihtiyacı vardır ve toplantıları zaman kaybı olarak görür. Toplantılar gerçek hayatın vazgeçilmezleri arasındadır. Bir DBA'nın diğer insanlarla ihtiyaçları konusundaki iletişimi ve çoğu kararı almasının ön adımı için toplantılara yeteri kadar vakit ayırması gerekir.

- Audit Yapma
Bir DBA için hangi kullanıcının nereye eriştiği, hangi kayıtı ekleyip, sildiği ve güncellediği hayati öneme haiz bir meseledir. Audit sadece belirli zaman dilimi, belirli kullanıcılar ve belirli veriler için olabileceği gibi tüm zamanlardaki tüm kullanıcılara ait hareketler de olabilir.

- Uygulama Entegrasyonu
Çoğu kurumda third party uygulamalar izole bir şekilde diğer uygulamalardan ayrı olarak çalışır. Bir DBA bu uygulamaların birbiriyle T-SQL veya SSIS paketleriyle konuşmasını sağlar.

- Backup ve Recovery
Bir DBA'nın en temel işlerinden birisi kurumun verilerini korumaktır. Bunu verilerin periyodik olarak yedeklenmesi şeklinde korur. Bunun için iyi bir geri dönüş planına ihtiyacı vardır. Bu planın yazılıp test edilmesi gerekir ve bir problem anında hızlı bir şekilde verilerin geri döndürülmesi gerekir. Bir DBA'nın en büyük hatalarından birisi aldığı backupları test etmemesidir! Çünkü alınan bir backup'ın restore edilebileceğinin bir garantisi yoktur. Bir DBA sadece backup almak yerine bu backuplarını başarılı bir şekilde restore da etmelidir.

- Business Intelligence/Data Warehousing
Business Intelligence(BI) ve Data Warehousing DBA'lığın en hızlı büyüyen alanlarından birisidir. Bu alan çok karışık olduğu için iyi disiplin altına alınmalı.

- Kapasite Planlama
Çoğu kurumda veritabanlarının sayısı ve büyüklüğü hızlı bir şekilde büyür. DBA veri büyümesini izlemeli ve büyümeye paralel planlar yapıp bu planları hayata geçirmeli. Bunu verileri arşivleyerek yapabildiği gibi mevcut storage'ı artırarak da yapabilir.

- Değişiklik Yönetimi
SQL Server konfigürasyonları, veritabanı şemaları, T-SQL kodlar ve diğer veritabanı bileşenleri zamanla değişir. DBA bu değişiklikleri önceden analiz edip gerekli testleri yaptıktan sonra hayata geçirmeli.

- Veritabanı Uygulaması Geliştirme
Bazı DBA'ler yönetim işlerini kolaylaştırmak için kendilerine özel uygulamalar geliştirirler.

- Veri Modelleme ve Veritabanı Tasarımı
Hızlı ve ölçeklenebilir veritabanlarını oluşturmak iyi veritabanı tasarımından geçer. Büyük kurumlarda işi sadece veritabanı tasarımı olan ve bu alanda uzmanlaşmış DBA'ler bulunur.

- Geliştirme ve Best Practice'leri Uygulama
İyi bir DBA proaktif olmak zorundadır. Proaktifliğin yolu ise best practice'leri uygulamaktan geçer. Bir kurumun best practice'leri yazılı olmalı ve bunlara uyulmalı.

- Yüksek Erişilebilirlik(HA)
Yüksek erişebilirlik clustering, mirroring, log shipping, replication vb gibi tekonolojilerle sağlabilir. Yüksek erişilebilirlik çok özel bilgi ve birikim gerektirir. Bu yüzden sırf bu alana yoğunlaşmış DBA'ler bulmak mümkündür.

- Kurulum, Konfigürasyon, Patch Geçişi ve SQL Server Yükseltme
Çok çok zaman alan DBA işlerinden birisidir. Patch geçme ve SQL Server sürüm yükseltme işlemleri karmaşık, riskli işlemlerdir. Bu işlerin iyi planlanıp iyice test edildikten sonra üretim ortamına alınması gerekir.

-Yük Dengeleme(Load Balancing)
Bir DBA server üzerindeki yükü izleyip gerektiğinde veritabanını çok yoğun bir sunucudan daha az yoğun olan bir sunucuya alabilir. Yük dengeleme için bir başka çözüm ise veritabanlarını konsolide etme veya sanallaştırmadır.

- Yapılan İşleri Dökümante Etme
Bir DBA için en sıkıcı işlerden birisi döküman yazmaktır. Fakat döküman yazmaktan korkmayın. Zira yazdığınız dökümanlar yeni DBA leri çin yol gösterici olabilir yada sizin işinizi kolaylaştırabilir.
- Yöneticileri Yönetme
Bir DBA hem kendi yöneticisi ile hem de diğer yöneticilerle iyi geçinmek zorundadır. Yöneticinize belirli periyotlarda yaptığınız işlerle ilgili düzenli raporlar sunup destek gereken noktalarda yöneticinizin desteğini almalısınız. Yaptığınız işin kritiktiğini ve yönettiğiniz verilerin değerini yöneticinize iyi anlatacak şekilde rehberlik etmelisiniz.

- Test Ortamlarını Yönetme
Büyük ölçekli kurumlarda test ortamını üretim ortamından oluşturmak ve test ortamlarını yönetimini yapmak DBA işidir.

- İzleme(Monitoring)
İzleme geniş kapsamlı bir iş olup performans izleme, log izleme, jobların düzgün çalıştığını izleme, error logları izleme vs izleme işlemlerini kapsar.

- Performans Tuning
Bir DBA performansı izleyip veritabanı performansını artırmanın yolları bulup uygular. Bir DBA'nın en önemli işlerinden birisi olup oldukça kapsamı geniş bir konudur. Sırf bu alanda uzmanlaşan DBA'ler bulunmaktadır.

- Proje Yönetme
Bir DBA iyi proje yönetme yeteneklerine haiz olmalıdır.

- Verilerin Korunmasını Sağlama
DBA ler bir kurum verilerin tutarlı ve doğru olmasını sağlamak için uğraşır.

- Veriyi Replike Etme
Bir DBA özel verileri(bir yada birden çok tablo olabilir) bir sunucudan diğer sunuculara belirli periyotlarla replike ederek taşır ve bu replikasyonu yönetir .

- Rapor Oluşturma
Verileri T-SQL sritpleri ile çekip reporting service üzerinde kullanıcıların kullanabileceği formatlı bir şekildeki raporları oluşturur. Bu alanda da uzmanlaşan DBA ler bulunmaktadır.

- Çalışan Joblar
Bir DBA bir sunucu üzerinde ihtiyacı olan SQL jobları oluşturup bu jobları yönetir. Bu job bir index rebuild, istatistik update, transaction log backup vs maintence plan olabilir.

- Security
Bir DBA SQL Server loginlerinin oluşturulması, bu loginlerin başka sunuculara taşınması ve bunların yönetiminden sorumludur.

- Scripting
Bir DBA kendi işine yarayacak T-SQL kod yazıp bunları geliştirir.

- SSIS/ETL
Bir DBA verilerin bir yerden başka bir yere taşınması için sıklıkla SSIS paketi kullanır.

- Test Yapma
Bir DBA veritabanı testleri, yönetim araçlarının testlerini yapar.

- Kullanıcıların Eğitilmesi
Bir DBA bilgilerini diğer DBA ler, yazılım geliştiriciler ve son kullanıcılarla paylaşır. Bu bilgi aktarımı bire bir aktarım şeklinde olabildiği gibi grup şeklinde eğitim sınıfı ayarlayarak ta sağlanabilir.

- Hata Bulma ve Giderme(Troubleshooting)
Bir DBA neredeyse her gün hata ayıklamayla uğraşır. Zaman zaman tüm işini bırakıp mevcut hata üzerinde odaklandığı zamanlar olur.

- Takım Arkadaşıyla Çalışma
Bir DBA nadiren yalnız başına çalışır. Bir DBA çoğu zaman yazılım geliştiricilerle, storage uzmanlarıyla, network uzmanlarıyla, test ekibiyle, dış kaynaklı firma elemanlarıyla, sistem uzmanlarıyla iletişim halindedir.

Yararlanılan Kaynak: How to Become an Exceptional DBA, Brad M McGehee, 2009

Makalenin görsel eklenmiş haline Çözümpark'tan ulaşabilirsiniz.

2010-08-15

SQL Server Servislerinin Durumunu Kontrol Etme

SQL Server servislerinizin durumunu  xp_servicecontrol stored procedure'ü ile öğrenebilirsiniz. SQL Server'a ait servislerin çalışma durumuna aşağıdaki şekilde öğrenebilirsiniz:

EXEC xp_servicecontrol N'querystate',N'MSSQLServer'
EXEC xp_servicecontrol N'querystate',N'SQLServerAGENT'
EXEC xp_servicecontrol N'querystate',N'msdtc'
EXEC xp_servicecontrol N'querystate',N'sqlbrowser'
EXEC xp_servicecontrol N'querystate',N'MSSQLServerOLAPService'
EXEC xp_servicecontrol N'querystate',N'ReportServer'

2010-08-09

Pegasus Havayollarının Biletleme Sistemi Transactional Çalışmıyor

Pegasus havayollarının internet sayfasından bilet alamadığım halde kredi kartı provizyonuna bilet tutarı kadar harcama yansıyan mağdurlardan birisi de benim. Biletleme sistemlerindeki ana sorun işlem sonucu ile ödemenin aynı TRANSACTION içerisinde yapılmaması(Burdaki ayrıntılı sorun ise reservasyon timeout süresi gibi bir iş kuralının ödeme onayı alındıktan kontrol edilmesi olarak göze çarpıyor. Halbuki ödeme onayı yapılmadan önce bu iş kuralı da kontrol edilip bu süre timeout olmamışsa ödeme adımına geçilmeli aksi takdirde ödeme alınıp biletleme işlemi yapılamıyor). Biletleme ile ödemeyi yapan transactionlar birbirinden bağımsız ve biri diğerini beklemeden oluştuğu için hatalara açık kapı bırakıyor. Pegasus havayolu firmasının biletleme sisteminde yapması gereken tek şey biletme ile ödeme sisteminin aynı transaction bloğu içerisinde gerçekleştirmesi. Böylelikle bir işlem ya başarılı olup COMMIT olur yada başarısız olup ROLLBACK olur. Benim gibi bileti oluşmadığı halde bilet ücreti kendisinden alan mağdurlar da kapınızı çalıp hem kendisini hem de sizi meşgul etmemiş olur. Ayrıca müşteri memnuniyetsizliğini de yaşatmamış olursunuz. Biletleme ve ödeme sisteminizin bir an önce TRANSACTIONAL yapıya geçmesi dileğiyle...

2010-08-08

İstanbul Sabiha Gökçen Havalimanından Şanlıurfa'ya Uçmanın Vakti Gelmedi mi?

Evet, bilimum ortamlardaki(mail, iletişim sayfaları, sosyal medya,telefon vs.) girişimlerimiz sonucu Pegasus Havayolları 2 Nisan 2012  tarihinden itibaren İstanbul S.Gökçen-Şanlıurfa GAP karşılıklı seferlerini başlatma kararı aldı. Kararın alınmasında emeği geçen herkese ve Pegasus Havayollarına teşekkürler. 


Pegasus Havayollarının konu ile ilgili haberi aşağıdadır:



51. Uçuş Noktamız Şanlıurfa!

2012 yılında da misafirlerine yeni destinasyonlar sunmaya devam eden Pegasus Hava Yolları, Güneydoğu Anadolu’nun tarihi güzelliklerine ev sahipliği yapan Şanlıurfa seferlerine Nisan ayında başlıyor 

Uçuş ağını yurt içinde de  genişletmeye devam eden Pegasus Hava Yolları’nın Nisan ayından itibaren başlayacak Şanlıurfa seferlerinin biletleri 16 Şubat’da, vergiler dahil 59,99 TL’den başlayan fiyatlarla satışa sunuluyor.
Pegasus’un toplamda 51. destinasyonu olan ve 2 Nisan 2012 tarihinde başlayacak Şanlıurfa uçuşları, Pazartesi, Perşembe ve Cumartesi günleri saat 05.35’de ve Salı günleri 20.10’da İstanbul Sabiha Gökçen Havalimanı’ndan gerçekleşecek. Şanlıurfa’dan İstanbul’a uçmak isteyen misafirler için ise Pazartesi, Perşembe ve Cumartesi günleri saat 07.30’da ve Salı günleri 22.05’de seferler düzenlecek.
Pegasus misafirleri, İstanbul’ aktarmalı olarak Şanlıurfa’dan Amsterdam, Basel, Brüksel, Bükreş, Düsseldorf, Kopenhag, Lefkoşa, Londra, Milano, Münih, Paris, Priştine, Roma, St. Etienne, Stokholm, Stuttgart, Üsküp, Viyana ve Zürih’e uçabilecekler.
Tarihi güzelliklerle dolu şehirde geçmişe doğru unutulmayacak bir gezi!
Güneydoğu’nun eşsiz yapısı içerisinde tarihin derinliklerine bir gezi hayal edenler için, Pegasus, 2 Nisan’da başlayan Şanlıurfa seferleri ile uygun fiyatlı bir alternatif sunuyor.
Pegasus, Urfa Kalesi’nin, Balıklı Göl’ün, Harran’nın ve renkli çarşılarının  oluşturduğu etkileyici atmosfer ile tanışmamış olanları veya bu eşsiz toprakların tadına doyamamış gezginleri  16 Şubat 2012’den itibaren vergiler dahil 59,99 TL’den başlayan fiyatlarla bilet almaya davet ediyor.





Sabiha Gökçen Havaalanından Şanlıurfa'ya Pegasus hava yollarının uçmasını istiyorsanız:
Pegasus ile İst.Sabiha Gökçen'den Ş.urfaya direk uçmak isteyenler aşağıdaki adresi tıklayın:
https://book.flypgs.com/Common/QMessageNewEntry.jsp?activateLanguage=TR


Çıkan sayfada zorunlu olan AD,SOYAD ve E-MAIL bilgilerinizi girin.
KONU kısmında PEGASUS u seçin.MESAJ kısmında ise aşağıdaki mesajı yazıp DEVAM butonuna tıklayın:


MESAJ: İstanbul Sabiha Gökçen-Ş.urfa GAP uçuşlarınız ne zaman başlayacak?






Sevgili dostlar,


İstanbul Sabiha Gökçen Havalimanından Şanlıurfa'ya aktarmasız uçmaya nail olan ender kişilerden birisi olarak addediyorum kendimi. Çünkü halihazırda bilimum havayolları(THY, Pegasus, OnurAir, SunExpress, AnadoluJet, BoraJet vs.) şirketlerinin hiçbirisi Sabiha Gökçen Havalimanından Şanlıurfa'ya direk uçmuyor. THY kısıtlı bir zaman diliminde(17 Mayıs-31 Temmuz 2010 tarihleri arasında) göstermelik te olsa Atatürk Havalimanındaki iki seferinden birisini Sabiha Gökçen'e taşıyarak direk uçuşlar gerçekleştirdi. Bu direk uçuşlar çok makbule geçti mateessüf tekrarı gelmedi. Sabiha Gökçen uçuşlarının tekrar Atatürk Havalimanına alınmasını Temmuz ortasında fark ettim ve THY ile iletişime geçtim. THY müşteri hizmetlerinin cevap maili aşağıdaki gibidir:


"Sayın Mehmet GÜZEL,

11 Temmuz 2010 tarihli e-mail mesajınız ünitemize ulaşmıştır.

Mesajınıza konu olan hususa ilişkin olarak, Sabiha Gökçen Havalimanı'ndan Şanlıurfa seferleri Atatürk Havalimanı'ndan yapılacak olup, Atatürk Havalimanı'ndaki pist bakımı çalışmaları nedeniyle bu şekilde planlanmış olduğu ve bakım bittiğinde tekrar Atatürk Havaliman'ndan seferlerin icra edileceği bilgisi ilgili ünitemizden alınmıştır.

Türk Hava Yolları olarak amacımız, hizmetin her kademesinde siz yolcularımıza daima en iyi hizmeti vermektir. Bu amacımıza, bizlere ilettiğiniz yapıcı eleştiri ve olumlu/olumsuz görüşleriniz büyük katkı sağlamaktadır.

Bilgilerinizi rica eder, saygılar sunarız.

TÜRK HAVA YOLLARI A.O.
MÜŞTERİ İLİŞKİLERİ MÜDÜRLÜĞÜ"



Bu işin arkasını bırakmayarak hava yolu firmalarından Pegasus, OnurAir, SunExpress, AnadoluJet müşteri hizmetleri kanalıyla Sabiha Gökçen-Şanlıurfa direk uçuşlarının ne zaman başlatacaklarını sordum. Cevabi maillerde mealen bu yıl içerisinde böyle bir planları olmamakla birlikte filolarındaki uçak sayısının artması ile birlikte teklifimi düşüneceklerini ilettiler.


Bakalım Sabiha Gökçen-Şanlıurfa direk uçuşlarını kim ne zaman başlatacak? Tabi ben havayolu firması kurmak zorunda kalıp direk uçuşları başlatmadan önce birileri bunu gerçekleştirirse iyi olacak:)


Direk uçuşların olmamasını ihtiyaç sahiplerinin sesini çıkarmamasına ve gerekli girişimlerde bulunmamasına bağlıyorum. Bu konuda bir tek benim sesim ve nefesim bile kalsa direk uçuşların yapılmasını sağlayacağım i.allah. 1.5 milyon nüfusuyla, kültür ve inanç turizmiyle, önemli ticaret hacmiyle, GAP'ın merkezi olması hasebiyle Sabiha Gökçen'den direk uçuşun olmamasını yurtiçi havayolu taşımacılığı yapan tüm firmaların eksikliği olarak görüyorum. Bakalım bu eksikliklerini ne zaman giderecekler?


Havayolu ile Gaziantep yada Diyarbakır üzerinden Şanlıurfa'ya gitmek zorunda kalan herkesi bu konuya destek olmaya davet ediyorum.


Ek: Konu ile ilgili diğer hava yolu firmalarının cevapları:


"Sayin Mehmet GUZEL,

gondermis oldugunuz e-posta icin tesekkur ederiz. Ilgili guzergah icin henuz spesifik bir tarih belirlenmemistir. Belirlendigi takdirde kamuoyu ile paylasilacaktir.


Saygilarimizla,

SunExpress

Musteri Iliskileri"
   
 
"Sayın MEHMET GÜZEL,


Uçuş ağımızın genişletilmesi çalışmaları devam etmektedir . Potansiyel bulunan tüm noktalar dikkate alınmaktadır . İlginize teşekkür ederiz.


Saygılarımızla ,


Pegasus Havayolları Misafir İlişkileri"
   
 
"Sayın YOLCUMUZ,


22.07.2010 tarihli mesajınız ünitemize intikal etmiştir.


Tarife planlama biriminden alınan bilgilerden, yaz tarifemizi icra eden sınırlı sayıdaki uçağımızdan dolayı Sabiha Gökçen - Şanlıurfa karşılıklı seferleri yaz dönemi için mümkün değildir.Fakat kış tarifesinde talebiniz değerlendirmeye alınacaktır.


Bilgilerinizi rica eder, saygılar sunarız.


ANADOLUJET
MÜŞTERİ İLİŞKİLERİ"




"Sayin Mehmet GUZEL,

gondermis oldugunuz e-posta icin tesekkur ederiz.
Ic hat ucuslarinda hizla buyumeyi hedefleyen, bu dogrultuda atilimlar yapan sirketimiz ulkemizin potansiyellerinden haberdar olmakta ve uygun goruldugu takdirde yeni guzergalarda ucuslar gerceklestirmektedir.

Yolcularimizdan gelen taleplerin yogunlugu da bu surecte etkili olmakta ve ayrica degerlendirilmektedir.

Bu noktada talebinizi bizim ile paylastiginiz icin tesekkur ederiz.

Yeni ucuslarimizda gorusmek dilegimizle,

Saygilarimizla,

SunExpress

Musteri Iliskileri"

2010-08-07

Yararlı DBCC Komutları - Clear SQL Cache

-- SQL deki procedure cache'lerini silme
DBCC FREEPROCCACHE;

-- Cache'den özel bir sql plan silme
DBCC FREEPROCCACHE (0x060006001ECA270EC0215D05000000000000000000000000);
/*
Bir sql plan bozulduğunda ve başınızı ağrıttığında tüm cache silmeden ilgili bozuk cache silmek oldukça işinize yarayacaktır. Saniyede 1000 transaction alan bir sql planınızın bozulduğunu düşünün. Veritabanı sisteminiz alt üst olmadan ve tüm cache sıfırlamadan terayağından kıl çeker gibi işi zahmetsizce yapabileceğiniz yararlı bir dbcc komutu.
*/

-- Ad-hoc SQL planlarını silme
DBCC FREESYSTEMCACHE('SQL Plans');

2010-08-03

Tüm Kullanıcı Veritabanlarının Full Backup'ını Alma

/*
Tüm kullanıcı veritabanlarınızın full ve compress backup'ını tek seferde aşağıdaki T-SQL kodu ile alabilirsiniz.
*/

use master
go
declare @db_name nvarchar(128),
@stmt varchar(8000)

declare crdatabase insensitive cursor for
select name from sys.databases
where database_id>4

open crdatabase fetch from crdatabase into @db_name
while (@@fetch_status =0)
begin
set @stmt= 'BACKUP DATABASE ['+ @db_name +'] TO DISK = N''D:\' + @db_name + '.bak'' WITH NOFORMAT, INIT, NAME = N''Full Database Backup'', SKIP, NOREWIND, NOUNLOAD,COMPRESSION, STATS = 10'
exec(@stmt)

fetch next from crdatabase into @db_name
end
close crdatabase
deallocate crdatabase

--Not: Kodlar SQL Server 2008 ile test edilmiştir.

2010-07-31

Last Update Index Statistics

Son 30 gündür istatistiği güncellenmeyen indexlerin istatistiğini güncelleyecek SQL kodu aşağıdaki gibidir:

select 'update statistics [' + object_schema_name(s.object_id) + '].[' + object_name(s.object_id) + '] '+ s.name
+ ' with fullscan --Rows:' + cast(p.rows as varchar) + ' Last Update:'+ convert(varchar(16),stats_date(s.object_id, s.stats_id) ,112)+ '
go'
from sys.stats s inner join sys.partitions p on s.object_id=p.object_id and s.stats_id=p.index_id
where stats_date(s.object_id, s.stats_id) < getdate()-30 and s.name not like '_WA%' and object_schema_name(s.object_id)<>'sys'
and p.rows>1000000
and p.partition_number=1
order by p.rows

Açıklama satırı olarak eklenen kayıt sayısı ve index istatistiğinin en son güncellendiği tarih bilgi vermek açısından yararlı olacaktır.

2010-07-28

Cross-Database Dependencies

select db_name() as current_db_name,
object_name(referencing_id) as object_name ,
upper(coalesce(sed.referenced_server_name, '')) as referenced_server_name,
sed.referenced_database_name,
sed.referenced_schema_name,
sed.referenced_entity_name
from sys.sql_expression_dependencies as sed
where referenced_database_name <> db_name()
and referenced_database_name <> 'msdb'
order by upper(referenced_server_name)

2010-04-15

Gizli Sonsuz Döngü

Diyelim ki parametre olarak verilen bir string’i 16 karaktere tamamlama ihtiyacımız var ve aşağıdaki gibi sp’mizi yazdık:

create proc FixedLength
@InputStr varchar(16)
as
begin
set nocount on
while len(@InputStr) < 16
begin
set @InputStr = @InputStr + ' '
end
select @InputStr
end
go

Gayet basit bir şekilde, @InputStr’nin uzunluğu 16 karakterden küçük olduğu sürece @InputStr değişkeninin sonuna boşluk karakteri ekleniyor. Gayet masumane gibi gözükse de sp’mizi aşağıdaki gibi çalıştırdığımızda sonsuz bir döngünün fitilini ateşlemiş oluruz:

exec FixedLength '123456';

LEN fonksiyonu; karakter kümesinin sağındaki boşlukları kale almaz, yani bir nevi RTRIM yapar. len(@InputStr) değeri sürekli 6 olarak döndüğü için sonsuz döngüye girer. Sorunun çözümü için hemen datalength fonksiyonunu kullanalım diyenleri duyar gibiyim Evet, datalength fonksiyonu bu sp’miz için çözüm olur fakat @InputStr varchar(16) yerine nvarchar(16) olsaydı sp sonsuz döngüye girmezdi ama istediğimiz sonucu da alamazdık.(@InputStr='123456 ' olduğunda datalength(@InputStr) değeri 16 olur ve döngüden çıkar fakat elde etmek istediğimiz '123456 ' sonucunu alamamış olurduk). Bir değişken nvarchar olduğunda her karakter için 2 byte yer kaplar. Datalength fonksiyonu nvarchar olarak tanımlanan bir değişkenin karakter uzunluğunu karakter sayısının 2 katı olarak verir.

Not: While döngüsü kullanmadan daha kısa kod ile işimizi halledebiliriz diyenler için aşağıdaki kısa kod işimizi görür ama sonsuz döngü örneğimiz için işimize yaramaz:)

create proc FixedLength
@InputStr varchar(16)
as
begin
set nocount on
set @InputStr=@InputStr + replicate(' ',16-len(@InputStr))
select @InputStr
end
go

2010-04-12

Delete Duplicate Rows

;WITH CTE (Field1,Field2,DuplicateCount)
AS
(
SELECT Field1,Field2,
ROW_NUMBER() OVER(PARTITION BY Field1,Field2 ORDER BY Field1) AS DuplicateCount
FROM TableName
)
DELETE
FROM CTE
WHERE DuplicateCount > 1
GO

--Not: SQL Server 2005/2008 versiyonlarında test edilmiştir.

2010-02-23

SQL Server 2005/2008 Servis Pack Planları

SQL Server 2008 SP2 2010 yılının 3. çeyreğinde çıkmış olacak; SQL Server 2005 SP4 ise 2010 yılının 4. çeyreğinde kullanılabilir olacak. SQL Server 2005 için SP4 son servis pack olacak. Microsoft SQL Server 2005'e desteğini 13 Nisan 2011'de kesecek; uzatılmış desteğini ise 12 Nisan 2016'ya kadar sürecek.

2010-02-01

SQL Server 2008 R2 Geliyor

Değerli okuyucu,

Microsoft, 2010 yılının Mayıs ayı içerisinde SQL Server 2008 R2 sürümünü çıkaracağını duyurdu. R2 sürümü dört gözle bekleyenlere duyurulur.

2010-01-07

Clustered Primary Key'i Nonclusted Yapma

Merhaba değerli okuyucu,

Geçenlerde clustered primary key contraint'ini nonclustured yapıya dönüştürme ihtiyacım oldu. İhtiyacımın temel sebebi de yanlış oluşturulan clustred bir primary key index'ini nonclustered yapıp farklı bir indexi clustered index'e çevirmek istememdi.

Bu işlemleri online bir sistemde gerçekleştirdiğimden daha titiz olmam gerekiyordu. Bu yüzden aşağıdaki adımları izledim:
  1. Primary key'ler unique olduğundan key yapısını bozmamak için temporary unique bir index oluşturdum,
  2. Tablo üstündeki Primary Key'i drop ettim
  3. Tabloya Primary Key constraint'ini ekledim
  4. İlk oluşturduğum temporary unique index e artık ihtiyacım kalmadığı için drop ettim.
Yukardaki ifadeler için gerekli olan sql kodları aşağıdaki gibidir:

--temp unique indexi online oluşturma
create unique nonclustered index tmpindex on tablo
(id) with (online=on) on primary
go

--online olarak primary key i drop etme
alter table tablo drop constraint pk_tablo with (online=on)
go

--nonclustered primary key i online olarak oluşturma
alter table tablo add constraint pk_tablo
primary key nonclustered (id) with (online=on) on primary
go

--temp index i drop etme
drop index tablo.tmpindex
go

.::YASAL UYARI::.

©2004-2018 Mehmet GÜZEL, http://www.mehmetguzel.net/ & http://www.mehmetguzel.com/

Site içeriği kaynak gösterilmek koşuluyla yayınlanabilir. Yazılan yazı ve yorumlar sadece yazı ve yorum sahiplerini bağlar.