2014-08-01

Sıkıştırılmış(Compressed) Tabloları ve Indeksleri Bulma

-- Sıkıştırılmış(compressed) tabloları ve indeksleri aşağıdaki T-SQL ile bulabilirsiniz:

SELECT schema_name(t.schema_id) SchemaName,t.name TableName, i.name IndexName , p.partition_id, p.partition_number, p.data_compression,p.data_compression_desc

FROM sys.partitions p
INNER JOIN sys.tables t ON t.object_id = p.object_id
LEFT OUTER JOIN sys.indexes i ON p.object_id =i.object_id and p.index_id = i.index_id
WHERE p.data_compression > 0
order by schema_name(t.schema_id), t.name, p.index_id

-- SQL Server 2012 ile test edildi.

2014-07-24

Upgrade Sırasında CheckDB için Data_Purity Gerekli mi?

SQL Server 2000 yada öncesindeki sürümlerde oluşturulan veritabanlarında tablodaki alanların değer bütünlüğü kontrolü otomatik yapılmıyordu. Bu yüzden SQL Server 2000 yada önceki sürümlerde oluşturduğunuz bir veritabanını upgrade ederken CHECKDB işlemini WITH DATA_PURITY ile yapmalısınız ve çıkan uyumsuzlukları manuel olarak gidermek zorundasınız. Burada önemli olan ilgili veritabanınızın SQL Server 2000 sonrası bir sürümde çalışıyor olması değil ilk oluşturulduğu versiyon önemli.

SQL Server'ı upgrade ederken CHECKDB işlemini WITH DATA_PURITY parametresi ile çalıştırılması gereken veritabanların listesini aşağıdaki T-SQL kod ile bulabilirsiniz.


dbcc traceon (3604);;;
go

create table #dbcc (
parentobject varchar(255),
[object] varchar(255),
field varchar(255),
[value] varchar(255)
)

create table #dbcc2 (
databasename varchar(255),
parentobject varchar(255),
[object] varchar(255),
field varchar(255),
[value] varchar(255)
)
exec master.dbo.sp_msforeachdb

'use [?] insert into #dbcc execute (''dbcc dbinfo with tableresults'');
insert into #dbcc2 select ''[?]'', * from #dbcc;
delete from #dbcc'
select *
from #dbcc2
where field = 'dbi_dbccflags' and
value = 0 and
databasename not in ('[master]','[model]')

drop table #dbcc
drop table #dbcc2
go

2014-07-23

Index İstatistikleri Ne Zaman Sıfırlanır?

SQL Server 2012 öncesi versiyonlarda bir tablonun index istatistiği SQL Server servisi restart olduğunda yada index drop/create olduğunda sıfırlanırdı. SQL Server 2012 ile birlikte bu durumlara ek olarak index rebuild olduğunda da index istatistiği sıfırlanıyor. Index istatistiğine bakılırken SQL Server 2012 ile birlikte gelen bu değişikliğin göz önüne alınmasında yarar var.

2013-12-11

Partition Scheme Bulma

Veritabanızda bulunan tabloların ve indekslerin bulunduğu partition scheme'ya aşağıdaki T-SQL ile bulabilirsiniz:

select object_schema_name(i.object_id) as [ObjectSchemaName],
object_name(i.object_id) as [ObjectName],
i.name as [IndexName],
s.name as [PartitionSchemeName]
from sys.indexes i
inner join sys.partition_schemes s on i.data_space_id = s.data_space_id


-- Kodlar SQL Server 2012 ile test edildi.

2013-12-08

Foreign Key Bulma

Bugün foreign key ile ilgili işinize yarayacak iki T-SQL scripti paylaşıyorum:

1. Bir veritabanındaki tüm foreign key'leri bulma:

select
f.name as ForeignKeyName,

schema_name(f.schema_id) SchemaName,
object_name(f.parent_object_id) as TableName,
col_name(fc.parent_object_id, fc.parent_column_id) as ColumnName,
object_name (f.referenced_object_id) as ReferenceTableName,
col_name(fc.referenced_object_id, fc.referenced_column_id) as ReferenceColumnName
from sys.foreign_keys as f 
inner join sys.foreign_key_columns as fc on f.object_id = fc.constraint_object_id



2.Bir tabloya hangi tablolardan foreign key oluşturulmuş?

select f.name as ForeignKeyName,
schema_name(f.schema_id) SchemaName,
object_name(f.parent_object_id) as TableName,
col_name(fc.parent_object_id, fc.parent_column_id) as ColumnName,
object_name (f.referenced_object_id) as ReferenceTableName,
col_name(fc.referenced_object_id, fc.referenced_column_id) as ReferenceColumnName
from sys.foreign_keys as
inner join sys.foreign_key_columns as fc on f.object_id = fc.constraint_object_id
where fc.referenced_object_id=object_id('TableName')

--T-SQL kodlar, SQL Server 2012 SP1 ile test edildi.

2013-12-05

Veritabanında LDF Dosyası Olmadan MDF Dosyasını Attach Etme

Elinizde veritabanına ait MDF data dosyası var fakat LDF log dosyası yoksa yada LDF log dosyası bozuk ise aşağıdaki iki yöntem ile MDF dosyasından veritabanınızı oluşturabilirsiniz:

Örnek olarak AdventureWorks2012 veritabanını iki yöntem ile oluşturalım:
1.

USE [master]
GO
CREATE DATABASE [AdventureWorks2012] ON
( FILENAME = N'D:\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\AdventureWorks2012_Data.mdf' )
 FOR ATTACH_REBUILD_LOG

2.

USE [master]
GO
EXEC sp_attach_single_file_db @dbname='AdventureWorks2012',
@physname=N'D:\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\AdventureWorks2012_Data.mdf'
GO

-- Her iki yöntemteki kodlar SQL Server 2012 SP1 ile test edildi.

2013-06-20

Checkdb'nin En Son Yapıldığı Tarihi Bulma

Aşağıdaki sorguyu ilgili veritabanınızda çalıştırarak o veritabanında çalıştırılan Checkdb'nin en son yapıldığı tarihi bulabilirsiniz. Aşağıdaki sorguyu tüm veritabanlarınız için genişletebilirsiniz. 

  declare @DBName sysname=db_name(), @SQL varchar(512); 

 create table #DBCC( ParentObject varchar(255),
 [Object] varchar(255), 
 Field varchar(255),
 [Value] varchar(255) ) 

 set @SQL = 'dbcc dbinfo([' + @DBName + ']) with tableresults;'

 insert into #DBCC 
exec(@SQL) 

 select top 1 cast(value as date) 
from #DBCC 
where Field = 'dbi_dbccLastKnownGood';

drop table #DBCC 

 --SQL Server 2008 SP3, SQL Server 2012 SP1 ve SQL Server 2014 CTP1 ile test edilmiştir.

2013-04-30

SQL Server'ın Bir Sonraki Versiyonunda Beklenen Yeni Özellikler

Merhaba,

Bana göre uzun sayılabilecek bir aradan sonra yeni yazılarımla karşınızdayım.

SQL Server ile ilgili yenilikleri, beklenen yeni özellikleri bir çok kişiden önce aşağıdaki satırlar ile haberdar olacaksınız:

Eminin bir çoğunuz "Codename SQL14" duymamışsınızdır. Zaten arama motorlarında henüz pek izi yok; bu yazı ile biz iz bırakalım. Microsoft, SQL Server 2012'den sonraki versiyonu "Codename SQL14" kod adıyla karşımıza çıkaracak.

Codename SQL14 ile beklenen yeni özellikler:
- In-memory for OLTP(Codename Hekaton) : İstediğiniz tablodaki OLTP işlemleri memory'de yapabileceksiniz.
- Columnstore indeks OLTP ye uygun hale getiriliyor yani  columnstore indeksli tablolarda üzerinde full update ve bulk insert işlemler yapabileceğiz.
- AlwaysON'daki secondary sayısı 4'ten 8'e çıkarılacak.
- Partition bazında Online Index Rebuild edebileceğiz(Bu özelliği 2008 yılından beri bekliyordum).

Kişisel tahminlerim:
- Codename SQL14, SQL Server'ın yeni versiyonu SQL Server 2012 R2 adıyla karşımıza çıkacak.
- SQL Server 2012 versiyonu 2014 yılının sonlarına doğru çıkmasını bekliyorum.

Tempdb Veritabanına Çoklu Veri Dosyası Ekleme


Tempdb sistem veritabanına istediğiniz kadar veri dosyasını aşağıdaki T-SQL  script ile ekleyebilirsiniz:

declare      @FileCount smallint=24,                 --Tempdb de olmasını istediğiniz toplam data dosyası sayısı
             @i smallint=1,
             @Path varchar(128)='T:\',
             @FileSize varchar(16)='512MB',
             @FileGrowth varchar(16)='512MB',
             @SQL varchar(8000)=''

while @i < @FileCount
begin
       set @i=@i+1

       set @SQL='USE [master];
ALTER DATABASE [tempdb] ADD FILE ( NAME = N''tempdev' + cast(@i as varchar(5)) + ''', FILENAME = N''' + @Path + 'tempdev'+ cast(@i as varchar(5))  + '.ndf'' , SIZE = ' + @FileSize + ' , FILEGROWTH = ' + @FileGrowth+ ' );'
       exec ( @SQL )
end

2013-01-15

Kullanılmayan Stored Procedure Bulma

SQL Server servisinin başlatıldığı tarihten bu yana kullanılmayan stored procedure'leri aşağıdaki sorgu ile bulabilirsiniz:

select schema_name(schema_id) as SchemaName,p.name as SpName
from sys.procedures as p
   
except
   
select schema_name(schema_id) as SchemaName,p.name as SpName
from sys.procedures as p inner join sys.dm_exec_procedure_stats as qs on p.object_id = qs.object_id

-- SQL Server 2008 ile test edildi.

2013-01-12

Server Role Sahip Kullanıcıları Bulma

SQL Server'da herhangi bir server role(sysadmin, setupadmin, serveradmin, dbcreator, diskadmin, processadmin, securityadmin) sahip tüm kullanıcıları aşağıdaki sorgu ile bulabilirsiniz:


use master
go
select p.name,sp.name  
from sys.server_principals  p
inner join  sys.server_role_members  pr  on  p.principal_id= pr.member_principal_id
inner join sys.server_principals sp on pr.role_principal_id=sp.principal_id
where sp.type='R'


--SQL Server 2008 de test edildi.

.::YASAL UYARI::.

©2004-2014 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.