2008-03-03

Replikasyonu Silme

Replikasyonu sistem SP lerini kullanarak T-SQL ile silmek isterseniz aşağıdaki adımları izlemelisiniz:
  1. Tüm subscription'ları silin
  2. Tüm publication'ları silin
  3. Ardından distributor 'ü silin

Subscription Silme:
USE
GO
EXEC sp_dropsubscription @publication = N'', @article = N'all', @subscriber = N'all', @destination_db = N'all'

Publication Silme:
USE
GO
EXEC sp_droppublication @publication = N''

USE master
GO
EXEC sp_replicationdboption @dbname = N'', @optname = N'publish', @value = N'false'

Distributor Silme:
USE master
GO
EXEC sp_dropdistributor @no_checks = 1

Tüm bunların yanında replikasyon nesnelerinin tümünü aşağıdaki SP ile silebilirsiniz:

sp_removedbreplication ''

Not: Yukarıdaki silme işlemlerini Transactional Replikasyona göre yazdım. Diğer replikasyon türleri ve daha ayrıntılı bilgi için SQL Server Books Online kullanabilirsiniz.

Bir Hata Ve Çözümü

Msg 15466, Level 16, State 2, Procedure sp_addlinkedsrvlogin,
Line 91 An error occurred during decryption.

Msg 15185, Level 16, State 1, Procedure sp_addlinkedsrvlogin,
Line 98 There is no remote user 'sa' mapped to local user '(null)' from the remoteserver 'TEST'.


Yukarıdaki hata ile karşılaştığınızda aşağıdaki kod ile sorunu giderebilirsiniz:

ALTER SERVICE MASTER KEY FORCE REGENERATE

(Bu hatayı almışsanız kesin illegal bir işlem yapmışsınızdır: Sorunlu olan bir sistem database i düzgün çalışan bir sistem database ile değiştirmek gibi:) Bu tür durumlarda naçizane önerim tüm işlemlerinizi legal yoldan yapınız!)

2008-03-02

SQL Server 2008 İle Gelen Kolaylıklar

Değişkeni Tanımlarken Başlangıç Değeri Atama

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.

Üniversitelerde Kılık-Kıyafet Anketi Sonuçları


2008-02-26

T-SQL ile Kullanıcıya Yetki Verme

MS SQL Server'da yetkilendirme GRANT komutu yapılır. GRANT komutunun temel yapısı:

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 [ ,...n ] ON
[ OBJECT :: ][ schema_name ]. object_name [ ( column [ ,...n ] ) ]
TO [ ,...n ]
[ 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ı

Belbim A.Ş. OSM(Otomatik Satış Makineleri) Saha Ekibine iki grup şeklinde iki hafta boyunca verdiğim eğitimleri tamamladım. İtiraf etmek gerekirse eğitime katılım ve ilgi beklentimin üzerindeydi. Tüm arkadaşlar anlattığım konularla son derece ilgiliydiler. Benim için eğitim çok güzel geçti ve anlatmaktan çok zevk aldım. Her iki gruba da aşağıdaki konular aktarıldı:
  • 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

SQL Server 2005 e CLR default olarak OFF gelir. Aşağıdaki T-SQL kodu ile CLR'ı enable yapabilirsiniz:

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


Ankete ilgili gösteren herkese teşekkürlerimi sunuyorum. Günlük Kardeşliğime katılmak isteyenler kendi web sayfalarına günlüğümü ekledikten(Mehmet GÜZEL) sonra iletişim bölümündeki mail adresim aracılığıyla benimle irtibata geçebilirler.

2008-02-13

SQL'de Tarih Sorunlarını Gidermek

Bugüne kadar bir çok kişiden SQL Server 2005'te tarih ile ilgili sorunlarını dinledim ve sorunlarına bulduğum çözümleri sundum. Benden yardım isteyenlerin büyük kısmının istediği tarih formatlarından birisi de sadece yıl/ay/gün bilgisini alabilmek yada diğer bir ifadeyle zaman bilgisini sorgularında sıfırlamak(00:00:00) istemeleri. Yani bugünün tarihini şöyle almak istiyorlardı. 2008-02-13 00:00:00

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.

.::YASAL UYARI::.

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