Transact-SQL (T-SQL)
SQL, düzeltilmesi veya değiştirilnesi istenen bilgileri açıkça belirtmeye izin veren ve yerine getirilebilecek başlıca işlemleri tanımlamamızı sağlayan bir komut takımıdır. Bu komutların oluşturduğu yapıya T-SQL dili denir. T-SQL ile veri ve sorgulara erişebilir, güncelleyebilir ve ilişkisel veri tabanı sistemi yönetilebilir. T-SQL komutları kullanım amaçlarına göre üç genel kategoriye ayrılır.

SQL Veri İşleme Dili (Data Manipulation Language – DML)
SQL veri işleme dili veri girmek, değiştirmek, silmek ve verileri almak için kullanılan DML komutlarının tümüdür. En sık kullanılan DML komutları ve kullanım amaçları aşağıdaki gibidir:
SELECT:Veri seçmek
DELETE:Veri silmek
UPDATE:Veri güncellemek
INSERT:Veri girmek

SQL Veri Tanımlama Dili (Data Definition Language – DDL)
SQL Veri tanımlama dili verilerin tutulduğu nesneler olan tabloların yaratılmasını, silinmesini ve bazı temel özelliklerinin düzenlenmesini sağlar. En sık kullanılan bazı DDL komutları ve kullanım amaçları aşağıdaki gibidir:
CREATE TABLE:Yeni bir tablo oluşturmak
ALTER TABLE:Tabloda değişiklik yapmak
DROP TABLE:Tabloyu silmek
CREATE INDEX:Tabloda dizin oluşturmak

SQL Veri Kontrol Dili (Data Control Language – DCL)
SQL veri kontrol dili bir veri tabanı kulalnıcısı veya rolü ile ilgili izinlerin düzenlenmesini sağlar. DCL komuları ve fonksiyonları şöyledir:
GRANT:Kullanıcıya yetki verir.
DENY:Kullanıcı, grup veya rolü herhangi bir eylem için eneller.
REVOKE:Daha önce atanmış olan yetki veya engeli kaldırır.
* Yukarıdaki kısım alıntıdır.

— IO ve TIME istatistiklerini aktif eder.

[code language=”sql”]
— IO ve TIME istatistiklerini aktif eder.
SET STATISTICS IO ON
SET STATISTICS TIME ON[/code]

— Yapılan audit dosyasını gösterir. // Audit read

[code language=”sql”]
–Yapılan audit dosyasını gösterir.

SELECT event_time ,
session_server_principal_name AS UserName ,
server_instance_name ,
database_name ,
object_name ,
statement FROM sys.fn_get_audit_file(‘C:\Audit\*.sqlaudit’, NULL,NULL)[/code]

— En son ne zaman CHECKDB yapıldığını gösterir. // Checkdb history

[code language=”sql”]
— En son ne zaman CHECKDB yapıldığını gösterir.

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 [/code]

— DB dönülürken yüz kaç kaldığını gösterir. // DB Restore percent control

[code language=”sql”]
— DB dönülürken yüz kaç kaldığını gösterir.

SELECT
percent_complete PercentComplete
,start_time StartTime
,dateadd(second,estimated_completion_time/1000, getdate()) EstimatedCompletionTime
,datediff(minute, start_time, getdate()) as TakeMin
,estimated_completion_time/1000/60 as RemainingTimeMin
,(select text from sys.dm_exec_sql_text(sql_handle )) SQLText
FROM sys.dm_exec_requests r
INNER JOIN sys.sysdatabases d on r.database_id=d.dbid
WHEREr.command LIKE ‘%RESTORE%'[/code]

— Çalışmakta olan sorguları gösterir. // Executed queries

[code language=”sql”]
— Çalışmakta olan sorguları gösterir.

WITH ses AS(
SELECT spid
,kpid
,DATEDIFF(SS, last_batch, GETDATE()) ACTIVE_SINCE
,cpu
,physical_io
,cmd
,sp.status
,TEXT
,blocked
,waittime
,lastwaittype
,sp.waitresource
,DB_NAME(sp.dbid) DBNAME
,hostname
,loginame
,program_name
,open_tran
,’kill ‘ + CAST(sp.spid AS VARCHAR(20)) KILL_CMD
,sql_handle
FROM sys.sysprocesses sp
CROSS APPLY sys.dm_exec_sql_text(sql_handle)
where sp.STATUS NOT IN (‘sleeping’)
OR spid IN (
SELECT blocked
FROM sys.sysprocesses
WHERE blocked <> 0 ))
SELECT * FROM ses
ORDER BY ses.ACTIVE_SINCE DESC

–/////////////////////////////////////////////////////////////////////////////

SELECT spid,
TEXT AS [query],
Db_name(sysprocesses.dbid) AS dbname,
cpu,
memusage,
status,
loginame,
hostname,
lastwaittype,
last_batch,
cmd,
program_name
FROM sys.sysprocesses
OUTER APPLY Fn_get_sql(sql_handle) WHERE spid >50 ORDER BY SPiD
DESC

— Bağlantısını kesmek için

KILL 10 — ID[/code]

/* Profiler ile yakaladığımız trace’lerin daha kapsamlı ve daha az eforla alınması için SQL Server 2008 ile birlikte Extended Events’ler geldi. Extended Events ile topladığınız verileri dosyadan sys.fn_xe_file_target_read_file() fonksiyonu ile okuyabilirsiniz. Benim işime yarayan bazı değerleri aşağıdaki gibi aldım. Siz isterseniz ihtiyacınıza göre değiştirebilirsiniz.*/
// Extended Events read

[code language=”sql”]
/* Profiler ile yakaladığımız trace’lerin daha kapsamlı ve daha az eforla alınması için SQL Server 2008 ile birlikte Extended Events’ler geldi. Extended Events ile topladığınız verileri dosyadan sys.fn_xe_file_target_read_file() fonksiyonu ile okuyabilirsiniz. Benim işime yarayan bazı değerleri aşağıdaki gibi aldım. Siz isterseniz ihtiyacınıza göre değiştirebilirsiniz.*/

SELECT DATEADD(mi, DATEDIFF(mi, GETUTCDATE(), CURRENT_TIMESTAMP), xevents.event_data.value(‘(event/@timestamp)[1]’, ‘datetime2’)) AS [EventTime] ,
xevents.event_data.value(‘(event/action[@name="database_name"]/value)[1]’, ‘nvarchar(max)’) AS [DatabaseName],
xevents.event_data.value(‘(event/data[@name="duration"]/value)[1]’, ‘bigint’) /1000 AS [DurationMS],
xevents.event_data.value(‘(event/data[@name="cpu_time"]/value)[1]’, ‘bigint’) AS [CPUTimeMs],
xevents.event_data.value(‘(event/data[@name="logical_reads"]/value)[1]’, ‘bigint’) AS [LogicalReads],
xevents.event_data.value(‘(event/data[@name="row_count"]/value)[1]’, ‘bigint’) AS [RowCount],
xevents.event_data.value(‘(event/data[@name="statement"]/value)[1]’, ‘nvarchar(max)’) AS [Statement]
FROM sys.fn_xe_file_target_read_file(‘Path\FileName*.xel’,null, null, null)
CROSS APPLY (select CAST(event_data as XML) as event_data) as xevents[/code]

— SQL başlatıldığından itibaren kullanılmayam stored procedure’leri gösterir. // Finding unused stored procedure

[code language=”sql”]
— SQL başlatıldığından itibaren kullanılmayam stored procedure’leri gösterir.

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[/code]

— DB’deki tüm foreign key’leri gösterir. // Foreign Key searh in db

[code language=”sql”]
— DB’deki tüm foreign key’leri gösterir.

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[/code]

— Tablodaki tüm foreign key’leri gösterir. // // Foreign Key searh in table

[code language=”sql”]
— Tablodaki tüm foreign key’leri gösterir.

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
where fc.referenced_object_id=object_id(‘TableName’)[/code]

— Identity sütunlarını gösterir. // Identity Column search

[code language=”sql”]
— Identity sütunlarını gösterir.
SELECT OBJECT_NAME(OBJECT_ID), NAME
FROM SYS.ALL_COLUMNS
WHERE IS_IDENTITY = 1 AND OBJECTPROPERTY(OBJECT_ID, ‘ISUSERTABLE’) = 1[/code]

— Aradığınız column’un hangi tablolarda olduğunu gösterir. // In this column which table search

[code language=”sql”]
— Aradığınız column’un hangi tablolarda olduğunu gösterir.

SELECT s.name FROM sysobjects s
inner join syscolumns c on s.id=c.id
WHERE (s.xtype = ‘u’) and c.name=”[/code]

— Job geçmişini gösterir. // Job History

[code language=”sql”]
— Job geçmişini gösterir.

with qry as
(select job_id,last_executed_step_id
from msdb.dbo.sysjobactivity
where last_executed_step_id is not null)
select
job_name, CASE run_status
WHEN 0 THEN ‘Failed’
WHEN 1 THEN ‘Succeeded’
WHEN 2 THEN ‘Retry’
WHEN 3 THEN ‘Cancelled’
END
AS
run_status,
run_date, run_time,
run_duration, step_name, message
from qry
cross apply
(select top (qry.last_executed_step_id + 1)
sysjobs.name as job_name,
sysjobhistory.run_status,
run_date, run_time,
run_duration, step_name,
message, step_id
FROM msdb.dbo.sysjobhistory
INNER JOIN msdb.dbo.sysjobs
ON msdb.dbo.sysjobhistory.job_id = msdb.dbo.sysjobs.job_id
where msdb.dbo.sysjobs.job_id=qry.job_id
order by run_date desc,run_time desc) t
order by job_name,step_id[/code]

— Joblar ile ilgili bilgileri gösterir. // Job status

[code language=”sql”]
— Joblar ile ilgili bilgileri gösterir.

EXEC msdb..sp_help_job

current_execution_step
1 : (Executing) Çalışıyor
2 : (Waiting for thread) Çalışmaya devam ediyor
3 : (Between retries) Tekrar deneniyor
4 : (Idle) Boşta
5 : (Suspended) Durdurulmuş
7 : (Performing completion actions) Tamamlama görevi sürdürülüyor[/code]

— Anlık query gösterir. // Snap queries

[code language=”sql”]
— Anlık query gösterir.

SELECT SQLTEXT.text, STATS.last_execution_time
FROM sys.dm_exec_query_stats STATS
CROSS APPLY sys.dm_exec_sql_text(STATS.sql_handle) AS SQLTEXT
WHERE STATS.last_execution_time > GETDATE()—1 — AND SQLTEXT.text like ‘%STORE_USER%’
ORDER BY STATS.last_execution_time [/code]

— Tabloların page sayılarını gösterir. // Table page count

[code language=”sql”]
— Tabloların page sayılarını gösterir.

SELECT
OBJECT_SCHEMA_NAME(s.object_id) SchemaName,
OBJECT_NAME(s.object_id) TableName,
SUM(s.used_page_count) UsedPages,
SUM(s.reserved_page_count) ReservedPages
FROM sys.dm_db_partition_stats s INNER JOIN sys.tables t ON s.object_id = t.object_id
GROUP BY s.object_id
ORDER BY SUM(s.used_page_count) DESC[/code]

— Tablo istatistiklerinin geçmişini gösterir. // Table statistics history

[code language=”sql”]
— Tablo istatistiklerinin geçmişini gösterir.

SELECT
object_name(s.object_id) as TableName,
ic.name as ColumnName,
stats_date(s.object_id, s.stats_id) as StatisticsUpdate,
s.name as StatisticsName
FROM sys.stats s inner join sys.stats_columns sc on s.object_id=sc.object_id and s.stats_id=sc.stats_id
INNER JOIN sys.columns ic on ic.object_id=sc.object_id and ic.column_id=sc.column_id
WHEREs.object_id=object_id(‘Genius3.GENIUS3.TRANSACTION_HEADER’)[/code]

— Tabloların boyutlarını gösterir. // The sizes of the tables

[code language=”sql”]
— Tabloların boyutlarını gösterir.
IF OBJECT_ID(‘tempdb..#TABLEDATA’) IS NOT NULL BEGIN DROP TABLE #TABLEDATA END
CREATE TABLE #TABLEDATA
(TabloAdi VARCHAR(50), SatirSayisi INT, AyrilmisAlan VARCHAR(50), KullanilanAlan VARCHAR(50), IndexBoyu

VARCHAR(50), KullanilmayanAlan VARCHAR(50))

INSERT INTO #TABLEDATA
EXECUTE sp_MSforeachtable ‘sp_spaceused [?]’

SELECT TOP 10 * FROM #TABLEDATA ORDER BY CONVERT(INT, REPLACE(AyrilmisAlan, ‘ KB’, ”)) DESC[/code]

— Server Role sahip kullanıcıları gösterir. // Users with server role

[code language=”sql”]
— Server Role sahip kullanıcıları gösterir.
SELECT p.name,sp.name,p.default_database_name
FROM sys.server_principals p
JOIN sys.server_role_members pr ON p.principal_id= pr.member_principal_id
JOIN sys.server_principals sp ON pr.role_principal_id=sp.principal_id
WHERE sp.type=’R'[/code]

— XP CMD Shell aktif eder.

[code language=”sql”]
— XP CMD Shell aktif eder.
EXEC sp_configure ‘show advanced options’, 1;
GO

RECONFIGURE;
GO

EXEC sp_configure ‘xp_cmdshell’, 1;
GO

RECONFIGURE;
GO[/code]

[code language=”sql”][/code]