MS SQL Server etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
MS SQL Server etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

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

SQL Server 2008 R2 SP1'den sonra gelen sys.dm_server_services DMV ile servisler ile ilgili bir çok bilgiye ulaşabilirsiniz. Benzer şekilde aşağıdaki T-SQL ile de servis account bilgisini alabilirsiniz:

select servicename, service_account
from sys.dm_server_services


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-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-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

2009-12-09

text, ntext ve image veri tipleri

Microsoft, SQL Server'ın yeni çıkacak sürümlerinde text, ntext ve image veri tiplerini kaldıracağını bildiriyor. Bu veri tiplerinin yerine varchar(max), nvarchar(max) ve varbinary(max) veri tiplerini kullanabilirsiniz.

2009-09-03

SQL Server 2005/2008 Registered Server Listesi

SQL Server 2005/2008 de registered server isimlerini aşağıdaki path ve dosyalarda tutuluyor:

SQL Server 2005:
C:\Documents and Settings\\Application Data\Microsoft\Microsoft SQL Server\90\Tools\Shell\RegSrvr.xml

SQL Server 2008:
C:\Documents and Settings\\Application Data\Microsoft\Microsoft SQL Server\100\Tools\Shell\RegSrvr.xml

Bu listeler özellikle benim gibi SQL Server'ınızı tekrardan kurmak zorunda kalmışsanız çok işinize yarayacaktır.

.::YASAL UYARI::.

©2004-2024 Mehmet GÜZEL, www.mehmetguzel.net

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