#DBA #SQL #Server #Performance #Tuning
2008-03-02
SQL Server 2008 İle Gelen Kolaylıklar
SQL Server 2008'den önceki sürümlerde değişken tanımlarken değişkene bir başlangıç değeri atayamıyorduk. SQL Server 2008 ile birlikte bu eksiklik giderildi. Daha önceleri değişken tanımlamayı ve bu değişkene bir değer atamayı aşağıdaki gibi yapardık:
DECLARE @Sayi1 INT, @Sayi2 INT
SET @Sayi1=34
SET @Sayi2=63
Veyahut SET lemeyi SELECT cümleciği içinde aşağıdaki gibi yapardık:
SELECT @Sayi1=34, @Sayi2=63
SQL Server 2008 ile birlikte değişkeni tanımlarken değişkene ilk değeri de atayabileceğiz:
DECLARE @Sayi1 INT=34, @Sayi2 INT =63
Çoklu Kayıt Ekleme
Bu güzelliğin yanında INSERT cümleciğinde aynı anda birden çok kayıtı tek SQL kodu ile ekleyebileceğiz:
DECLARE @Tablom TABLE(Sayi1 INT, Sayi2 INT)
INSERT INTO @Tablom VALUES(1,2), (2,3), (3,4), (4,5)
SQL Serverın daha önceki sürümlerinde aynı işi yapmak için her kayıt ekleme için ayrı ayrı INSERT cümlecikleri yazmamız gerekirdi.
2008-02-26
T-SQL ile Kullanıcıya Yetki Verme
GRANT VerilecekYetkiler ON NesneAdi TO KullaniciAdi
Örnek : Mehmet kullanıcısına Kullanici tablosunda SELECT yetkisi verelim.
GRANT SELECT ON Kullanici TO Mehmet
Şayet yetkiyi Windows Authentication için verecekseniz domain ve kullanıcı adını iki köşeli parantez arasında yazmalısınız[]:
GRANT SELECT ON Kullanici TO [GUZEL\Mehmet]
Bir kullanıcıya birden çok yetki vereceksiniz yetkileri virgül(,) ile ayrıp dileğiniz kadar yetki çeşidini yazabilirsiniz:
GRANT SELECT, INSERT, DELETE, UPDATE ON Kullanici TO Mehmet
Bir kullanıcıya tüm yetkileri vermek için tek tek yetki isimleri yazmak yerine ALL deyimini kullanabilirsiniz:
GRANT ALL ON Kullanici TO Mehmet
Birden çok kullanıcıya aynı yetkileri vermek istiyorsanız aynı kodları her kullanıcı için tekrar yazmanıza gerek yok; sadece kullanıcılar arasına virgül(,) ekleyip dileğiniz kadar kullanıcıya yetki verebilirsiniz:
GRANT SELECT ON Kullanici TO Mehmet, Ahmet, Mustafa, Seyfettin
Merak edenler için GRANT komutunun söz dizimi:
GRANT
[ OBJECT :: ][ schema_name ]. object_name [ ( column [ ,...n ] ) ]
TO
[ WITH GRANT OPTION ]
[ AS
ALL [ PRIVILEGES ] permission [ ( column [ ,...n ] ) ]
Database_user
Database_role
Application_role
Database_user_mapped_to_Windows_User
Database_user_mapped_to_Windows_Group
Database_user_mapped_to_certificate
Database_user_mapped_to_asymmetric_key
Database_user_with_no_login
2008-02-23
SQL Eğitimleri Tamamlandı
- Veritabanı Bilgileri
- MS SQL Server 2005'in Kurulumu
- Temel SQL Konuları
- Replikasyon Teknolojisi ve Uygulama Alanları
2008-02-17
Trigger İle Insert, Update, Delete Yakalama
Trigger içerisinde aşağıdaki T-SQL kod ile bir kaydın Insert, Update, Delete olduğunu yakalayabilirsiniz.
*/
DECLARE @IfDelete VARCHAR (1), @IfInsert VARCHAR (1)
SET @IfDelete =
(CASE WHEN EXISTS(SELECT * FROM inserted) THEN 'O' -- (O)ld record in update
ELSE 'D' -- (D)eleted record
END)
SET @IfInsert =
(CASE WHEN EXISTS(SELECT * FROM deleted) THEN 'N' -- (N)ew record in update
ELSE 'I' -- (I)nserted record
END)
Seneler önce yazılan bu kodun daha optimize edilmiş hali değerli arkadaşım Levent YILDIZ'dan geldi:
if exists (select * from inserted) and exists (select * from deleted)
select @type = 'U'
else if exists (select * from inserted)
select @type = 'I'
else
select @type = 'D'
2008-02-15
SQL Server 2005'te CLR Enable
EXEC sp_configure 'clr enabled', 1;
RECONFIGURE WITH OVERRIDE;
GO
Aynı şekide CLR yetkisini tekrardan OFF konuma getirmek için aşağıdaki kodu kullanabilirsiniz:
EXEC sp_configure 'clr enabled', 0;
RECONFIGURE WITH OVERRIDE;
GO
Tüm bu değişiklikleri görsel olarak ta Başlat-> Programlar-> MS SQL 2005->Configuration Tools ->SQL Surface Area Configuration adımından da değiştirebilirsiniz(MSSQLServer->Database Engine->CLR Integration).
2008-02-14
Günlük Kardeşliği Anketi
2008-02-13
SQL'de Tarih Sorunlarını Gidermek
Bu sonuca ulaşacak iki farklı SQL çözümüm var:
Çözüm-1:
SELECT CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS SMALLDATETIME)
Çözüm-2:
SELECT CAST(CAST(GETDATE() AS VARCHAR(12)) AS SMALLDATETIME)
MS SQL Server 2005 karşılaşılan bu vb sorunları MS SQL Server 2008 de çözmüşler. Dileyenler konu ile ilgili yazmış olduğum MS SQL Server 2008 - Yeni Tarih Veri Tipleri'ni okuyabilir.
2008-02-12
Luhn Algoritması
Luhn Algoritması ile ilgili işe yarar T-SQL kodlar:
CREATE FUNCTION dbo.fnIsLuhnValid
(
@Luhn VARCHAR(8000)
)
RETURNS BIT
AS
BEGIN
IF @Luhn LIKE '%[^0-9]%'
RETURN 0
DECLARE @Index SMALLINT,
@Multiplier TINYINT,
@Sum INT,
@Plus TINYINT
SELECT @Index = LEN(@Luhn),
@Multiplier = 1,
@Sum = 0
WHILE @Index >= 1
SELECT @Plus = @Multiplier * CAST(SUBSTRING(@Luhn, @Index, 1) AS TINYINT),
@Multiplier = 3 - @Multiplier,
@Sum = @Sum + @Plus / 10 + @Plus % 10,
@Index = @Index - 1
RETURN CASE WHEN @Sum % 10 = 0 THEN 1 ELSE 0 END
END
CREATE FUNCTION dbo.fnGetLuhn
(
@Luhn VARCHAR(7999)
)
RETURNS VARCHAR(8000)
AS
BEGIN
IF @Luhn LIKE '%[^0-9]%'
RETURN @Luhn
DECLARE @Index SMALLINT,
@Multiplier TINYINT,
@Sum INT,
@Plus TINYINT
SELECT @Index = LEN(@Luhn),
@Multiplier = 2,
@Sum = 0
WHILE @Index >= 1
SELECT @Plus = @Multiplier * CAST(SUBSTRING(@Luhn, @Index, 1) AS TINYINT),
@Multiplier = 3 - @Multiplier,
@Sum = @Sum + @Plus / 10 + @Plus % 10,
@Index = @Index - 1
RETURN @Luhn + CASE WHEN @Sum % 10 = 0 THEN '0' ELSE CAST(10 - @Sum % 10 AS CHAR) END
END
Peter Larsson
Helsingborg, Sweden
Bir Hata ve Birkaç Öneri
The transaction log for database 'ceturkdb' is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases
Hatalar:
- Hatada database ismi vermek güvenlik nedeniyle sakıncalı
- Database yada programsal hataların üyelere yansıtılması sakıncalı
Öneriler:
- Genel hatalar için error sayfaları düzenlenip kullanıcılara hatayla ilgili genel bilgiler verilebilir. Böylelikle hem hatayı gören kişiler sizi basite almamış olur hem de sisteminiz hakkında hatadan bir şey yakalama imkanı bulmaz.
- SQL Server ile ilgili Auto Shrink yapılabilir yada database boyu kısıtlı ise Transation Log a maximum size verilebilir. Yada tüm bunların yerine gecenin bir saatinde çalışan joblar düzenlenebilir. Bu joblar shrink te yapabilir yada dosya size ı belli bir seviyeye ulaşmışsa e-mail, cep telefonu vb iletişim aracılığıyla yönetici uyarılabilir. Bunu yapmadığınız zaman siz hatayı görene kadar saatler geçebilir sitenizi ziyaret eden ziyaretçiler çoktan sıkılmış ve kaçmış olabilir.
Hatayı bazen dostlar "post" eder, bazen yöneticiyi tanıyan üyeler. Tüm bu ücretsiz kaynaklarınız yoksa bilin ki bu size belli bir "cost" eder. Siz siz olun birileri tarafından hatalarınız için uyarılmayı beklemeyin; hatalarınızdan herkesten önce siz haberdar olun ve hemen müdahale edin. Hatta öyle bir zamanlama ve düzen ile müdahale edin ki kimsenin ruhu duymasın, sesi çıkmasın.
Hatalar hepimizin başına gelebilir fakat hatalardan ders alıp hatanın neresinden dönersek kardır. Siz siz olun hatalardan uzak durun. Hata sizi çok sıkıştırdığında; ha bre size yakınlaşmak istediğinde en fazla onu hata sayfasına yönlendirip hataya haddini bildirin! Hataya haddini bildiremiyorsanız bilin ki hata size haddinizi bildiriyordur.
.::YASAL UYARI::.
Site içeriği kaynak gösterilmek koşuluyla yayınlanabilir. Yazılan yazı ve yorumlar sadece yazı ve yorum sahiplerini bağlar.