27 Aralık 2007 Perşembe

Bizimle Çalışmak İster misiniz?

Merhaba Arkadaşlar,

Yeni kurulacak olan şirketimize çalışma arkadaşı arıyoruz.

Eğer aşağıdaki özelliklere sahipseniz ve bizimle çalışmak isterseniz lütfen benimle irtibata geçin.

Aradığımız ekip arkadaşımız ile birlikte genel olarak hem projelerde çalışacağız, hem de eğitim vereceğiz.

- MCSE Sertifikasına sahip,
- Az çok piyasa tecrübesi olan,
- En azından gündemi takip edebilecek kadar ingilizce bilen,
- Microsoft Windows Server ve Exchange Server konularında eğitim verebilecek,

olan arkadaşların bana ekrem@compecta.com adresinden ulaşmasını ve mümkünse özgeçmişlerini aynı adrese göndermesini rica ederim.


Ekrem Önsoy

"Generating user instances in SQL Server is disabled. Use sp_configure 'user instances enabled' to generate user instances."

HATA MESAJI:
"Generating user instances in SQL Server is disabled. Use sp_configure 'user instances enabled' to generate user instances."

AÇIKLAMA:
Visual Studio kullanarak bir veritabanı oluşturmaya çalıştığınızda veya veritabanı ile ilgili başka bir işte bu hata ile karşılaşabilirsiniz.

ÇÖZÜM:
Eğer SQL Server 2005 Express Edition with Advanced Services kullanıyorsanız, SQL Server Management Studio Express bu paket ile bilirkte geliyor zaten ve kurulum esnasında işaretlemişseniz bu araç da kurulmuş demektir.

Eğer SQL Server 2005 Express Edition kullanıyorsanız, SQL Server Management Studio aracı bu sürümle birlikte gelmez. Bu araç ücretsizdir ve aşağıdaki adresten edinilebilir.

SQL Server Management Studio Express:
http://www.microsoft.com/downloads/details.aspx?FamilyId=C243A5AE-4BD1-4E3D-94B8-5A0F62BF7796

Bu aracı indirdikten sonra üzerinde çalıştığınız (veritabanı oluşturmaya çalıştığınız) SQL Server Instance' ına bağlanın. Aracın sol üst köşesinde New Query düğmesini göreceksiniz. Buna tıklayın ve açılan sorgu düzenleme penceresine aşağıdaki kodu yazın ve çalıştırın:

==============================
EXEC sp_configure 'user instances enabled', 1;
GO
RECONFIGURE
GO
==============================

Bu kod, "User Instances" seçeneğini etkin hale getirecektir. Böylece bu hatayı almayacaksınız.

"User Instance" Hakkında daha fazla bilgi için... (İngilizce):
http://msdn2.microsoft.com/en-us/library/ms143684.aspx

The tail of the log for the database "Sirketim" has not been backed up. Use BACKUP LOG WITH NORECOVERY to backup the log if it contains work you do no

HATA MESAJI:
"Msg 3159, Level 16, State 1, Line 1

The tail of the log for the database "Sirketim" has not been backed up. Use BACKUP LOG WITH NORECOVERY to backup the log if it contains work you do not want to lose. Use the WITH REPLACE or WITH STOPAT clause of the RESTORE statement to just overwrite the contents of the log.

Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally."

AÇIKLAMA:
Bu hata mesajını bir veritabanını açmaya (Restore) çalıştığınızda alırsınız.

Hatanın nedeni ise, açmaya çalıştığınız veritabanının kopyasının, üzerine açmaya çalıştığınız veritabanından daha eski olmasıdır.

Meselâ "Sirketim" isimli veritabanınızın yedeğini en son 22 Aralık 2007 tarihinde aldınız. Bundan sonra veritabanı üzerinde tasarım olarak veya veri girişi olarak güncellemeler oldu. Ayın 23' ünde, ayın 22' sinde aldığınız yedeği bir nedenden dolayı Sirketim veritabanının üzerine açmak istediniz. İşte o zaman bu hatayı alırsınız.

ÇÖZÜM:
Aslına bakarsanız bu bir çeşit koruma sistemidir. Maksat, yeni verilerinizin üzerine yanlışlıkla eski verilerinizin yazılmasını önlemektir ve bu özellik SQL Server 2005 ile birlikte geldi.

Bu koruma sistemini açmak için (ki aslında uyarı mesajının içerisinde de çözümü söylüyor) iki yöntem kullanabilirsiniz.

1. Yöntem: Veritabanınızın en güncel Log yedeğini alarak (NO_TRUNCATE ve NORECOVERY parametrelerini kullanarak), yedeğinizi mevcut veritabanının üzerine açabilirsiniz.

2. Yöntem: Bu yöntemde RESTORE komutuyla birlikte REPLACE parametresini kullanarak (hiç yedek almadan) eski yedeğinizi halihazırdaki veritabanınızın üstüne açabilirsiniz. Bu yöntemde dikkate almanız gereken şey, bu açtığınız yedeği aldığınız tarihten sonra veritabanınızdaki yapılan tüm değişiklikler kaybolacaktır.

"Setup failed to configure the server. Refer to the server error logs and setup error logs for more information."

HATA MESAJI:
"Setup failed to configure the server. Refer to the server error logs and setup error logs for more information."

ya da

"Setup failed to configure the server. Refer to the server error logs and sqlstp.log for more information. "

ve Log dosyasının içinde:

"SQL_Latin1_General_CP1_CI_AS -m -Q -T4022 -T3659
Connecting to Server ...
driver={sql server};server=MyServer;UID=sa;PWD=;database=master [Microsoft][ODBC SQL Server Driver][Shared Memory]General network error. Check your network documentation.
[Microsoft][ODBC SQL Server Driver][Shared Memory]ConnectionRead (recv()). "

AÇIKLAMA:
SQL Server 2000' i kurmaya çalıştığınız bilgisayar adı büyük ve küçük harflerden karmaşık bir şekilde oluşuyorsa veya bilgisayar adının tamamı küçük harflerden oluşuyorsa bu hatayı alırsınız.

Örnek: "BiLGiSaYaRıM", "bilgisayarım".

ÇÖZÜM:
Bilgisayar adınızı aşağıdaki örnekteki gibi değiştirip SQL Server 2000' ininizi tekrar kurmayı deneyin.

Örnek: "BILGISAYARIM"

Daha fazla bilgi için aşağıdaki adresi kullanabilirsiniz:
http://support.microsoft.com/kb/285100

"Msg 8152, Level 16, State 4, Line 1 String or binary data would be truncated. The statement has been terminated."

HATA MESAJI:
"Msg 8152, Level 16, State 4, Line 1 String or binary data would be truncated. The statement has been terminated."

AÇIKLAMA:
Bir tabloda bulunan sütundaki karakter uzunluğundan fazla karakter girmeye çalışırsanız bu hata ile karşılaşırsınız ve bilgi girme işleminiz iptal olur.

Meselâ "Tablom" adında bir tablonuz var ve şeması da aşağıdaki gibi:

CREATE TABLE Tablom
(No Int Identity(1,1) PRIMARY KEY,
Ad nvarchar(10),
Soyad nvarchar(10),
)

Bu tabloya eğer aşağıdaki gibi bir veri girmeye çalışırsanız sorun olmaz:
INSERT INTO Tablom VALUES('Ekrem', 'Önsoy')

Fakat şöyle bir veri girmeye çalışırsanız hata alırsınız:
INSERT INTO Tablom VALUES('Abdulrezzak', 'Önsoy')

Çünkü "Abdulrezzak" adı, tabloyu oluştururken "Ad" sütununa atadığımız 10 karakterlik uzunluğu geçmektedir. Bu nedenle de veri kaydedilemez ve işlem bu hata ile sonuçlanır.

ÇÖZÜM:
Sütununuzun karakter genişliğini arttırın. Meselâ yukarıdaki örneğimizden devam edersek, "Ad" sütununun nvarchar veritipinin karakter genişliğini 15 yaparsak "Adbulrezzak" ismiyle ilgili bir sorun yaşamayız. Tabii diğer isimleri de gözönünde bulundurarak ihtiyacınıza göre daha geniş bir karakter aralığı tanımlayabilirsiniz.

"Event ID: 17137 Starting up database 'Veritabanı_Adı'"

BİLGİ:
"Event ID: 17137 Starting up database 'Veritabanı_Adı'"

AÇIKLAMA:
Bu bilgi mesajını veritabanınız başlatılırken alırsınız.

Eğer Olay Görüntüleyicideki Uygulama Kayıt dosyasında bu olaydan çok sık görürseniz ve eğer bir üretim (Production) ortamındaysanız performans sorunu yaşarsınız.

Bu bilgilendirme mesajının anlamı, veritabanınızdaki AUTO_CLOSE seçeneğinin TRUE olmasından kaynaklanıyordur. Eğer bu seçenek etkin ise, sözü edilen veritabanını kullanan son kullanıcı da bağlantıyı kapattığında veritabanınız otomatik olarak kapanacaktır. Daha sonra başka bir kullanıcı bu veritabanını kullanmaya çalıştığında veritabanı tekrar başlatılacaktır ve gene en son bağlı kullanıcı veritabanı ile bağlantısını kestikten sonra veritabanı tekrar kapatılacaktır. İşte sürekli bu açılıp kapanmalar dolayısıyla bu mesaj kayıt dosyanızı doldurmaktadır.

SQL Server 2000 MSDE ve SQL Server 2005 Express Edition' da bir veritabanı oluşturduğunuzda AUTO_CLOSE seçeneği otomatik olarak etkinleşecektir. ALTER DATABASE komutunu kullanarak bu özelliği kapatabilirsiniz veya bu işlemi SSMSE arayüzünü kullanarak da gerçekleştirebilirsiniz.

SQL Server' ın diğer sürümlerinde bu seçenek varsayılan olarak etkisiz (FALSE) bir halde gelmektedir ve siz özellikle seçmedikçe veya "model" sistem veritabanında bu değişikliği yapmadıkça AUTO_CLOSE özelliği etkin hale gelmez.

"A strong SA password is required for security reasons. Please use SAPWD switch to supply the same. Refer to readme for more details. Setup will now e

HATA MESAJI:
"A strong SA password is required for security reasons. Please use SAPWD switch to supply the same. Refer to readme for more details. Setup will now exit."

AÇIKLAMA:
SQL Server 2000 MSDE kurmaya çalışırken bu mesaj ile karşılaşabilirsiniz.

Aslında bu bir hata değil, bilgilendirme amaçlı bir uyarıdır; fakat kuruluma devam etmenize müsaade etmez, bu nedenle kurulumdan çıkılır.

ÇÖZÜM:
Bu sorunu çözmek için Başlat\Çalıştır' a tıklayıp, SQL Server' ın setup.exe' sinin yolunu yazıp yanına da bir boşluk bırakıp SAPWD="Şifre" yazmanız gerekir.

Aşağıdaki örnek gibi:

Setup.exe SAPWD="SA-S1frem"

"Executing the query "EXECUTE master.dbo.xp_delete_file 0,N'',N'',N'2007-11-14T13:06:42' " failed with the following error: "Error executing extended

HATA MESAJI:
"Executing the query "EXECUTE master.dbo.xp_delete_file 0,N'',N'',N'2007-11-14T13:06:42' " failed with the following error: "Error executing extended stored procedure: Invalid Parameter". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly. "

AÇIKLAMA:
SQL Server 2005' te Maintanence Plan kullanarak oluşturduğunuz bir Maintanence Cleanup Task' teki Folder değerini boş bırakırsanız bu hatayı alırsınız.

Hatanın oluşumu şöyle:
- SSMS' i açın
- Management' tan Maintanence Plans' e gidin.
- Sağ tuş, Mailtanence Plan Wizard' a tıklayın.
- Bir Maintanence Cleanup Task oluşturmaya başlayın ve Define Maintanence Cleanup Task penceresine geldiğinizde Folder metin kutusuna gerekli yol değerini girmezseniz ve boş bırakırsanız, bu hatayı alırsınız.

ÇÖZÜM:
MAintanence Cleanup Task' i oluştururken karşınıza gelen Define Maintanence Cleanup Task penceresindeki Folder metin kutusuna veritabanı yedeklerinizi tuttuğunuz geçerli bir yol değeri girin.

"SQL Server replication does not support nicknames, such as "." or "(local)", as server names."

HATA MESAJI:
"SQL Server replication does not support nicknames, such as "." or "(local)", as server names."

AÇIKLAMA:
SQL Server 2000' de Replication için publisher, distributor vs. ayarlamaya çalıştığınızda bu hatayı alabilirsiniz.

ÇÖZÜM:
Enterprise Manager' daki SQL Server Group altında bulunan (ve muhtemelen "local" olan) SQL Server Registration' ınızı silmelisiniz ve sunucu adınızın kullanıldığı bir SQL Server Registration oluşturmalısınız.

Bunun için
- Enterprise Manager' ı açın
- SQL Server Group altında bulunan ve adı (local) olan SQL Server Registration' ınızı silin (üzerinde sağ tuşa tıklayıp "Delete SQL Server Registration")
- SQL Server Group üzerindeyken "New SQL Server Registration" a tıklayın.
- Listeden Instance' ınızın seçin ve kaydedin.

11 Aralık 2007 Salı

"The report server has encountered a configuration error. Access denied to the path 'c:\program files\microsoft sql server\mssql.3\reporting services

HATA MESAJI:
"The report server has encountered a configuration error. Access denied to the path 'c:\program files\microsoft sql server\mssql.3\reporting services\reportserver\rsreportserver.config' is denied."

AÇIKLAMA:
SQL Server 2005' i yükledikten sonra Report Manager' ı açmaya çalıştığınızda böyle bir hata alabilirsiniz.

ÇÖZÜM:
ASNET hesabına "rsreportserver.config" dosyası için READ izni vermeniz bu sorunu çözecektir.

6 Aralık 2007 Perşembe

SQL Server 2005: RS için Gereken IIS Bileşenleri

Son güncelleme tarihi: 06 Aralık 2007


Merhaba arkadaşlar,

Bu yazımda sizlere Windows' un son versiyonu olan Vista' da SQL Server 2005 kurarken Reporting Services ile ilgili yaşayabileceğiniz bir IIS sorunundan bahsedeceğim.

Windows Vista' da SQL Server kurmaya çalıştığınızda sisteminizde IIS yüklüymüş gibi görünse de SQL Server Setup' ta Sistem Kontrolünde (System Check) sisteminizde IIS' in yüklü olmadığına dair bir uyarı alabilir ve bunun sonucunda da SQL Server Setup' taki "Components to Install" penceresinde Reporting Services' ı işaretleyemeyip Reporting Services' ı kuramayabilirsiniz.

Bunun nedeni, Windows Vista' da IIS 7.0' ın tam olarak kurulu olmamasıdır. Yani tam olarak kurulu olmamasından kastım, IIS' in Reporting Services için gerekli olan bileşenlerinin kurulu olmamasıdır.

Reporting Services' ın ihtiyaç duyduğu IIS bileşenlerini aşağıda listeliyorum:


Web Management Tools:
- IIS 6 Management Compatibility
- IIS 6 WMI Compatibility
- IIS Metabase and IIS 6 configuration compatibility
World Wide Web Services:
- Application Development
- .NET Extensibility
- ASP.NET
- ISAPI Extensions
- ISAPI Filters
- Common HTTP Features
- Default Document
- Directory Browsing
- HTTP Redirection
- Static Content
- Security
- Windows Authentication


Bu özellikleri Windows Denetim Masası' ndaki "Programlar ve Özellikleri" nde bulunan "Windows özelliklerini aç yada kapat" taki "Internet Information Services" ten yükleyebilirsiniz.



Ekrem Önsoy

"Database diagram support objects cannot be installed because this database does not have a valid owner. To continue, first use the Files page of the

HATA MESAJI:
"Database diagram support objects cannot be installed because this database does not have a valid owner. To continue, first use the Files page of the Database Properties dialog box or the ALTER AUTHORIZATION statement to set the database owner to a valid login, then add the database diagram support objects."

AÇIKLAMA:
SQL Server 2005 Instance' ınıza, başka bir Instance' tan bir veritabanı taşıdığınızda ve bunu iliştirdiğinizde (Attach) veya açtığınızda (Restore) ve bu veritabanında bir Database Diagram oluturmaya çalıştığınızda bu hatayı alabilirsiniz.

ÇÖZÜM:
Bu sorunu çözmek için aşağıdaki kod bloğunu kendi ortamınıza göre ayarlayıp kullanabilirsiniz.

EXEC sp_dbcmptlevel 'Veritabanınızın_adı', '90';
go
ALTER AUTHORIZATION ON DATABASE::Veritabanınızın_adı TO "Logininiz"
go
use [Veritabanınızın_adı]
go
EXECUTE AS USER = N'dbo' REVERT
go

SQL Server Management Studio' nın açılmasını hızlandırmak

SSMS' in açılmasını, açılış ekranını göstermeyerek 1-2 sn. hızlandırabilirsiniz.

Bunun için SSMS i "-nosplash" anahtarını kullanarak çalıştırın.

Örnek: "C:\Program Files\Microsoft SQL Server\90\Tools\Binn\VSShell\Common\IDE\SqlWb.exe" -nosplash

2 Aralık 2007 Pazar

SQL Server 2005: Otomatik E-Posta Gönderme

Son güncelleme tarihi: 02 Aralık 2007


Merhaba arkadaşlar,

Bu sefer size, oluşturduğunuz bir işte (Job) bir hata meydana geldiğinde veya iş başarıyla tamamlandığında, işlemin sonucunu bildiren bir e-postanın otomatik olarak nasıl SQL Server tarafından göndertileceğini anlatacağım.

Bu işlem için değişik yerlerden değişik ayarlar yapıp, bunları tümleşik bir sistem halinde çalıştıracağız. Meselâ bu ayarlar aşağıdaki konularda olacak:

- Database Mail
- Operator
- SQL Server Agent Job

Size öncelikle özetle Database Mail' den bahsetmek isterim. Database Mail, SQL Server 2005 ile birlikte geldi. Microsoft artık SQLMail özelliğinin yerine Database Mail' in kullanılmasını öneriyor. SQLMail eskide kaldı anlayacağınız. Database Mail, SQLMail' in halefi ve tamamen yeniden tasarlanmış hâli. Ayrıca SQLMail' deki gibi Outlook gibi bir harici programa da ihtiyaç duymadan Database Mail ile SQL Server' ınızdan eposta gönderebilirsiniz.

SQL Server 2005 ilk kurulduğunda neredeyse her şeyin varsayılan olarak yasak olduğunu görürsünüz. Bu, güvenlik amacıyla yapılmıştır. Database Mail de varsayılan olarak kullanılamaz durumdadır. Öncelikle aşağıdaki adımları uygulayarak Database Mail' i kullanılabilir hale getirin.

- Başlat\Programlar\Microsoft SQL Server 2005' dan "SQL Server Surface Area Configuration" aracını açın *

- "Select a component, and then configure its features:" etiketinin altındaki listeden ayar yapmak istediğiniz ilgili Instance' ı seçin.

- "Database Engine" düğümü altındaki Database Mail' e tıklayın ve daha sonra "Enable Database Mail stored procedures" seçeneğinin işaretli olduğuna emin olun ve penceredeki "OK" düğmesine tıklayarak pencereyi kapatın.

* SQL Server Surface Area Configuration ile Resim-1' de de gördüğünüz gibi SQL Server' da dair bazı özelliklerin kullanılabilir veya kullanılamaz olacağını ayarlarız. SQL Server Surface Area Configuration aracı SQL Server 2005 ile birlikte çıktı ve SQL Server 2008' de kaldırıldı.


Resim-1


Database Mail' i kullanılabilir hale getirdikten sonra, bir Profil ve Hesap tanımlamanız gerekecek. Bunun için de aşağıdaki adımları izleyin.

- SQL Server Management Studio' yu çalıştırın. "Management" düğümünü genişletin ve "Database Mail" in üzerinde farenin sağ tuşuna tıklayıp, açılan menüden "Configure Database Mail" e tıklayın.

- Açılan "Database Mail Configuration Wizard" penceresindeki "Manage Database Mail accounts and profiles" seçeneğini işaretleyerek "Next" düğmeyine tıklayın.


Resim-2


- "Manage Profiles and Accounts" penceresi açılacaktır. Bu penceredeki "Create a new profile" seçeneğini işaretleyip "Next" düğmesine tıklayın.

- "New Profile" penceresi açılacaktır. Bu pencerede hem yeni bir Profil tanımlayacağız, hem de yeni bir Hesap oluşturacağız. Bunun için Resim-3' ten kopya çekebilirsiniz =)


Resim-3


- "New Database Mail Account" penceresindeki "OK" düğmesine tıklatıkdan sonra "Database Mail Configuration Wizard" penceresindeki "Next" düğmesine, ardından da "Finish" düğmesine tıklayarak E-Posta için Profil ve Hesabı oluşturmuş oluyoruz.

- Bu noktada ayarların doğruluğundan emin olmak için oluşturduğunuz e-posta hesabına bir deneme postası gönderebilirsiniz. Bunun için "Database Mail" üzerinde farenin sağ tuşuna tıklayarak açılan menüden "Send Test E-Mail..." öğesine tıklayabilirsiniz.

Bu bölümde "Database Mail" i etkin hale geitirip, otomatik olarak e-posta göndermek için yeni bir Hesap ve bu hesap için yeni bir Profil oluşturduk.

Bir sonraki bölümde ise yeni bir Operator oluşturup, SQL Server Agent ayarımızı yapıp, bize sonucu hakkında bilgi verilmesini istediğimiz işi (Job) ayarlayacağız.


------------------------ 2. Bölüm -----------------------------


Bu bölümde yeni bir Operator oluşturup, SQL Server Agent ayarımızı yapıp, bize sonucu hakkında bilgi verilmesini istediğimiz işi (Job) ayarlayacağız.

İşe ilk önce SQL Server Agent' ında, Database Mail' i kullanabilmemiz için gerekli ayarı yapalım. Bunun için aşağıdaki adımları izleyin:

- SQL Server Management Studio' yu çalıştırın.

- SQL Server Agent servisinin çalıştığından emin olun. Daha sonra SQL Server Agent düğümünün üzerinde farenin sağ tuşuna basın ve "Properties" e tıklayın. "SQL Server Agent Properties" penceresi açılacaktır.

- Bu pencerenin sol tarafındaki "Select a page" bölümünden "Alert System" a tıklayın. Sağ taraftaki bölümde "Mail Session" kısmındaki "Enable mail profile" seçeneğini göreceksiniz. Bu seçeneğin işaretli olduğundan emin olun. Bu seçenekle beraber "SQL Server Agent Mail" i etkin hale getirmiş oluyoruz. Amma güvenlik var değil mi =)


Resim-4


Bu ayarı da yaptıktan sonra bir Operator oluşturmaya geçebiliriz. Peki neden Operator oluşturuyoruz, neden bir Operator' e ihtiyacımız var? Operator ne işe yarar kuzum Allah aşkına? gibi soruları havada bırakmamak için hemen Operator kavramına da bir ışık tutayım.

Operator' ü epostayı alıcak olan kişinin isim ve adres bilgilerini kaydetmek için kullanıyoruz arkadaşlar. Gerek e-posta alıcısı olsun, gerek Net Send ve gerekse Pager.

Şimdi Operator tanımlamaya geçebiliriz sanırım. Bunun için eğer SQL Server Management Studio açık değilse açın ve aşağıdaki adımları uygulayın:

- SQL Server Agent düğümünü genişletin.

- Operators' ın üzerinde farenin sağ tuşuna tıklayın ve açılan menüden "New Operator..." seçeneğini seçin.

- Açılan "New Operator" penceresindeki "Name" kısmına operatörün adını yazın.

- "Enabled" seçim kutusunun işaretli olduğundan emin olun, aksi takdirde operatöre eposta vs. gönderilmeyecektir.

- "E-mail name" metin kutusuna alıcının e-posta adresini yazın. "OK" düğmesine tıklayın ve Operator' ümüz de hazır işte!


Resim-5


Şimdi sadece bir iş kaldı, o da istediğimiz bir işi, oluşturduğumuz Operator' ü kullanarak ayarlamak.

Bunun için ayarlamayı yapmak istediğiniz bir işin özelliklerini açın ve aşağıdaki adımları izleyin:

- Açılan "Jop Properties" penceresinde, sol tarafta bulunan "Select a page" listesinden "Notifications" seçeneğini seçin.

- Sağ taraftaki "Actions to perform when the job completes" seçeneklerinden "E-mail" in yanındaki seçim kutusunu işaretleyin ve aşağı açılır listeden de oluşturduğumuz "Nesrin Yiğit" Operator' ünü seçin.

- Hemen Operator seçim kutusunun sağ tarafında üç tane seçenek bulunmaktadır. Eğer bu seçenekler "When the job fails" i seçerseniz, eposta size iş başarıyla tamamlanamadığı zaman gönderilecektir. Eğer "When the job succeeds" i seçerneseniz, iş başarıyla tamamlandığında gönderilecektir. Eğer "When the job completes" i seçerseniz, o zaman da iş başarıyla da olsa başarısızlıkla da olsa tamamlandığında size sonuç hakkında posta gönderilecektir.


Resim-6


İş ayarımızı da yapıp konumuzu bitirmiş olduk.

Özetle, bu makalede sizlere Database Mail' i nasıl etkinleştirip yapılandırabileceğinizi, SQL Server Agent' ın Database Mail için nasıl yapılandırabileceğinizi, nasıl bir Operator oluşturabileceğinizi ve SQL Server Agent Job' ınızı nasıl ayarlayabileceğinizi anlatmaya çalıştım, öğrendiğinizi umarım.



Ekrem Önsoy

1 Aralık 2007 Cumartesi

"The remote copy of database "Veritabani_adi" has not been rolled forward to a point in time that is encompassed in the local copy of the database log

HATA MESAJI:
"The remote copy of database "Veritabani_adi" has not been rolled forward to a point in time that is encompassed in the local copy of the database log. (Microsoft SQL Server, Error: 1412)"

AÇIKLAMA:
SQL Server 2005' te Database Mirroring' i başlatmaya çalıştığınızda bu hatayı alabilirsiniz.

Nedeni, Mirror veritabanını açarken (Restore) kullandığınız Transaction Log dosyasının, Primary (Esas) veritabanındaki kayıtları yakalamaya yeterli olacak kadar yeni olmamasıdır.

ÇÖZÜM:
Database Mirroring işlemi için kullanılacak kaynak veritabanı olan Primary veritabanının Transaction Log yedeğini alıp, mümkün olan en kısa sürede Mirror görevini üstlenecek veritabanına uygulamak (Restore) ve hemen Database Mirroring' i başlatmak bu sorunu çözecektir.

Eğer Primary veritabanının hızına yetişemiyorsanız, kullanıcıların Primary veritabanında değişiklik yapmasını engelleyin ve öyle Transaction Log yedeğini alıp Mirror veritabanına uygulayın ve Database Mirroring işlemini başlattıktan sonra Primary veritabanını tekrar kullanılabilir duruma getirin.

"'Void Microsoft.SqlServer.Management.DatabaseMaintenance.TaskUIUtils..ctor()'. (Microsoft.SqlServer.MaintenancePlanTasksUI)"

HATA MESAJI:
"'Void Microsoft.SqlServer.Management.DatabaseMaintenance.TaskUIUtils..ctor()'. (Microsoft.SqlServer.MaintenancePlanTasksUI)"

AÇIKLAMA:
SQL Server 2005' te yeni bir Maintanence Plan oluşturmaya çalıştığınızda bu hatayı alabilirsiniz.

ÇÖZÜM:
SQL Server 2005 Servis Paketi 2' yi yüklemeniz bu sorunu çözecektir.

"Unable to cast object of type 'Microsoft.SqlServer.Management.Smo.SimpleObjectKey' to type 'Microsoft.SqlServer.Management.Smo.Agent.JobObjectKey'. (

HATA MESAJI:
"Unable to cast object of type 'Microsoft.SqlServer.Management.Smo.SimpleObjectKey' to type 'Microsoft.SqlServer.Management.Smo.Agent.JobObjectKey'. (Microsoft.SqlServer.Smo)"

AÇIKLAMA:
SQL Server 2005' te yeni bir Job oluşturmaya çalıştığınızda bu hatayı alabilirsiniz.

ÇÖZÜM:
SQL Server 2005 Servis Paketi 2' yi yüklemeniz bu sorunu çözecektir.

"The database "Veritabanı_adı" cannot be opened. It is acting as a mirror database."

HATA MESAJI:
"The database "Veritabanı_adı" cannot be opened. It is acting as a mirror database."

AÇIKLAMA:
SQL Server 2005' te Database Mirroring' teki Mirror görevini üstlenen veritabanına SELECT, INSERT, UPDATE, DELETE gibi işlemler yapmaya çalışırsanız, bu hata ile karşılaşırsınız.

ÇÖZÜM:
SQL Server 2005 ile SQL Server Failover Clustering' e alternatif olarak kullanılmaya başlanan Database Mirroring teknolojisinde, Mirror görevini üstlenen veritabanında herhangi bir değişiklik veya sorgulama yapılamaz.

Bununla birlikte, Mirror görevini ifa eden veritabanının Database Snapshot' ı alınarak ancak böyle raporlama amaçlı olarak kullanılabilir. Yani sadece SELECT 'i kullanabilirsiniz.

"Microsoft SQL Native Client (0x80004005) Subquery returned more than 1 value. This is not permitted when the subquery follows

HATA MESAJI:
"Microsoft SQL Native Client (0x80004005)

Subquery returned more than 1 value. This is not permitted when the subquery
follows =, !=, <, <= , >, >= or when the subquery is used as an expression."

AÇIKLAMA:
T-SQL' da eğer bir değişkene birden fazla değer atanmaya çalışılırsa bu hata alınır.

ÇÖZÜM:
Bir değişkene bir seferde sadece bir kayıt atanabilir.

"The mirror database, "Veritabanim", has insufficient transaction log data to preserve the log backup chain of the principal database. This may happen

HATA MESAJI:
"The mirror database, "Veritabanim", has insufficient transaction log data to preserve the log backup chain of the principal database. This may happen if a log backup from the principal database has not been taken or has not been restored on the mirror database. (Microsoft SQL Server, Error: 1478)"

AÇIKLAMA:
SQL Server 2005' te Database Mirroring' in güvenlik yapılandırma ayarını yaptıktan sonra, Database Mirroring işlemini başlatmak için "Start Mirroring" düğmesine tıklarsınız ve ardından bu hatayı alırsınız.

ÇÖZÜM:
Database Mirroring yapılandırmasına geçmeden önce, veritabanlarını Database Mirroring işlemine hazırlamamız gerekir.

Ana \ kopyalanacak veritabanımızın (Principal) aynısının yedeğini alıp, kopya (Mirror) görevini üstlenecek SQL Server Instance' ına açarız (Restore). Daha sonra, Principal veritabanının bir de Transaction Log yedeğini almalı ve bunu da Mirror' daki veritabanına uygulamalıyız. Bu işlemden sonra bu hatayı almamanız gerekiyor. Database Mirroring hakkında daha fazla bilgi için bu konudaki makalemi okuyabilirsiniz.

Database Mirroring hakkında daha fazla bilgi için aşağıdaki adresten bu konudaki makalemi okuyabilirsiniz.

http://www.ekremonsoy.net/makaleler/sql/surekli_kullanilabilirlik/database_mirroring.aspx

"The server network address "TCP://Ekrem-PC.MyServer.local:5022" can not be reached or does not exist. Check the network address name and that the por

HATA MESAJI:
"The server network address "TCP://Ekrem-PC.MyServer.local:5022" can not be reached or does not exist. Check the network address name and that the ports for the local and remote endpoints are operational. (Microsoft SQL Server, Error: 1418)"

AÇIKLAMA:
SQL Server 2005' te Database Mirroring' in güvenlik yapılandırma ayarını yaptıktan sonra, Database Mirroring işlemini başlatmak için "Start Mirroring" düğmesine tıklarsınız ve ardından bu hatayı alırsınız.

ÇÖZÜM:
Database Mirroring yapılandırmasına geçmeden önce, veritabanlarını Database Mirroring işlemine hazırlamamız gerekir.

Ana \ kopyalanacak veritabanımızın (Principal) aynısının yedeğini alıp, kopya (Mirror) görevini üstlenecek SQL Server Instance' ına açarız (Restore). İşte bu işlem esnasında, Mirror veritabanının Recovery State' inin "NORECOVERY" olmasına dikkat etmelisiniz. Aksi takdirde bu hatayı alırsınız.

Database Mirroring hakkında daha fazla bilgi için aşağıdaki adresten bu konudaki makalemi okuyabilirsiniz.

http://www.ekremonsoy.net/makaleler/sql/surekli_kullanilabilirlik/database_mirroring.aspx

"System.Data.SqlClient.SqlError: The operating system returned the error '32(error not found)' while attempting 'RestoreContainer::ValidateTargetForCr

HATA MESAJI:
"System.Data.SqlClient.SqlError: The operating system returned the error '32(error not found)' while attempting 'RestoreContainer::ValidateTargetForCreation' on 'C:\test\mydb.mdf'. (Microsoft.SqlServer.Smo)"

AÇIKLAMA:
SQL Server' da bir yedek dosyasını açmaya (Restore) çalıştığınızda bu hatayı alabilirsiniz.

Yedek dosyayı açamıyorsunuz, çünkü açmaya çalıştığınız dosyaların aynıları o anda zaten açık ve kullanılıyor.

Meselâ yedek dosyanızı SQL Server 2005' in yönetim arayüzü olan SQL Server Management Studio' dan açtığınızı varsayalım.

SSMS' teki "Restore Database" penceresinde bulunan "Options" penceresinde "Restore the database files as:" listesi bulunmaktadır. İşte bu liste, yedeğinizin içerisindeki veritabanı dosyalarını içerir.

Bu hata durumunda ise sizin yapmaya çalıştığınız, bu listede belirtilen isimlerde ve yollardaki dosyaları, zaten bu isim ve yollarda bulunan dosyaların üzerine kaydetmeye çalışmaktır. Fakat çalışan dosyanın üzerine kaydedemeyeceğiniz için, bu hatayı alırsınız.

ÇÖZÜM:
SSMS' teki "Restore Database" penceresinde bulunan "Options" penceresinde "Restore the database files as:" listesindeki dosya yolu veya dosya adı bilgilerinde değişiklik yaparak sorunu çözebilirsiniz.

"Error 5(error not found) occurred while opening file 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\master.mdf' to obtain configuration in

HATA MESAJI:
"Error 5(error not found) occurred while opening file 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\master.mdf' to obtain configuration information at startup. An invalid startup option might have caused the error. Verify your startup options, and correct or remove them if necessary."

AÇIKLAMA:
SQL Server 2005 Instance' ınızı başlattığınızda, Olay Görüntüleyici (Event Viewer)' da böyle bir hata alabilirsiniz.

Bu hatanın benim karşılaştığım sebebi, SQL Server servisi için kullanılan hesabın, hatada belirtilen dosya yolu için yeterli izinlerinin olmamasıydı.

Meselâ, SQL Server servis hesabının örnekteki DATA klasörüne erişim hakkı yoktu.

Not: Tek erişim sorunu bu klasörle sınırlı değildir. Bu Instance ile ilgili tüm klasörlerin erişim haklarını kontrol etmeniz gerekebilir.

ÇÖZÜM:
SQL Server servis hesabına gerekli erişim haklarını verdiğinizde, bu sorun çözülecektir.

"Error Source: Microsoft OLE DB Provider for SQL Server Error Description:[DBNETLIB][ConnectionOpen (Invalid Instance()).]Invalid connection."

HATA MESAJI:
"Error Source: Microsoft OLE DB Provider for SQL Server Error

Description:[DBNETLIB][ConnectionOpen (Invalid Instance()).]Invalid connection."

AÇIKLAMA:
SQL Server 2000 Enterprise Manager' dan başka bir SQL Server 2005 Instance' ına bağlanmaya çalıştığınızda bu hatayı alırsınız.

ÇÖZÜM:
SQL Server 2005' in yönetim arayüzü olan SQL Server Management Studio kullanarak bir SQL Server 2000 Instance' ına bağlanabilirsiniz; fakat aynı şeyin tersini, yani Enterprise Manager kullanarak bir SQL Server 2005 Instance' ına bağlanamazsınız.

"Error 0xc002f210: Preparation SQL Task: Executing the query "" failed with the following error: "Retrieving the COM class factory for component with

HATA MESAJI:
"Error 0xc002f210: Preparation SQL Task: Executing the query "" failed with the following error: "Retrieving the COM class factory for component with CLSID {...} failed due to the following error: 80040154. Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly."

AÇIKLAMA:
Export Wizard ile veri vermeye çalıştığınızda bu hata ile karşılaşabilirsiniz. Nedeni ise SQL Server Agent Servisinin çalışmıyor olmasıdır.

ÇÖZÜM:
Export \ Import Wizard' ı kullanmadan önce SQL Server Agent Servisinin çalıştığından emin olun.

Bunun için SQL Server Configuration Manager veya Services MMC' yi kullanabilirsiniz.

"Ad hoc update to system catalogs is not supported."

HATA MESAJI:
"Ad hoc update to system catalogs is not supported."

AÇIKLAMA:
Eğer SQL Server 2005 Instance' ınızdaki "allow updates" seçeneği etkin ise, aşağıdaki örnek kodu çalıştırdığınızda bu hatayı alırsınız.

=============================
sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE
GO
=============================

ÇÖZÜM:
Eğer 'allow updates' seçeneğini etkin halde bırakmak istiyorsanız o zaman yukarıdaki kodu şöyle yazın:

=============================
sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE WITH OVERRIDE
GO
=============================

Eğer 'allow updates' seçeneğini sp_configure Stored Procedure' ünü kullanarak etkisiz hale getirirseniz, o zaman ilk çalıştırmayı deneyip hata aldığınız kodu gene aşağıdaki şekilde çalıştırabilirsiniz:

=============================
sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE
GO
=============================

"An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that

HATA MESAJI:
"An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections. (provider: TCP Provider, error: 0 - No connection could be made because the target machine actively refused it.) (Microsoft SQL Server, Error: 10061)"

AÇIKLAMASI:
Bağlanmaya çalıştığınız SQL Server 2005 Instance' ına ait SQL Server servisi çalışmıyorsa bu hatayı alırsınız.

ÇÖZÜM:
SQL Server servisinizin çalıştığından emin olun. Bunun için:

- Başlat\Programlar\Microsoft SQL Server 2005\Configuration Tools' tan SQL Server Configuration Manager' ı çalıştırın ve "SQL Server 2005 Services" düğümünden ilgili Instance' a ait SQL Server servisinizin çalışıp çalışmadığını kontrol edin.

- Services MMC' den ilgili SQL Server Instance' ınıza ait SQL Server servisini kontrol edin. (Services MMC' yi başlatmak için Başlat\Çalıştır: "services.mmc" yazıp "Tamam" düğmetine tıklayın.)

27 Kasım 2007 Salı

"Create maintenance plan failed. Create failed for JobStep 'Subplan'. (Microsoft.SqlServer.MaintenancePlanTasks)"

HATA MESAJI:
"Create maintenance plan failed. Create failed for JobStep 'Subplan'. (Microsoft.SqlServer.MaintenancePlanTasks)"

AÇIKLAMASI:
Eğer SQL Server 2005' in RTM (Release to Manufacturer) versiyonunu (9.00.1399.x) kullanıyorsanız ve SSIS yüklememişseniz, Maintanence Plan oluşturmaya çalıştığınızda bu hatayı alırsınız.

ÇÖZÜM:
Bu hatayı almadan, SQL Server 2005' te Maintanence Plan oluşturmak için ya en az SQL Server 2005 Servis Paketi 1' i yüklemelisiniz, ya da SSIS' i yüklemelisiniz.

En azından SQL Server 2005 SP1' i yükledikten sonra, SSIS' i yüklemek zorunda kalmadan Maintanence Plan oluşturabilirsiniz.

26 Kasım 2007 Pazartesi

"SQL Server' ı kurarken hangi 'Collation' ayarını kullanmalıyız?"

Merhaba arkadaşlar,


Habergruplarından bir arkadaşın sorduğu bu soru üzerine bir yazı yazmak iyi olur diye düşündüm. Bazen aklımızı çok karıştırıyor bu soru. "SQL Server' ı kurarken hangi Collation ayarını kullanacağız? 'Windows Collation' mı yoksa 'SQL Collation' mı?

Peki, konuya vakıf olmayan arkadaşlar daha da önce şunu soracak: "Collation" da neymiş? =)

Tamam, geliyor işte: Sözlük anlamı "Sıraya dizme, karşılaştırma" olan "Collation" SQL Server' da da tam olarak bu mânâlarda kullanılıyor. Bir tür dil ayarı...

SQL Server Setup' da karşılaşacağınız Collation Ayarları penceresini aşağıdaki resimde de görebilirsiniz.





Seçeceğiniz "Collation" ayarı, SQL Server Instance' ınızda yapacağınız veri karşılaştırmaları ve verileri sıralama gibi işlemleri doğrudan etkileyecektir.

SQL Collation' ları, SQL Server' da artık sadece geriye dönük destek için bulunmaktadır. Eğer aşağıdaki durumlar sizin için de geçerliyse, SQL Collation kullanmak durumundasınız demektir:

- Ortamınızda birbiri ile iletişim içerisinde olan SQL Server 6.5, 7.0 ve 8.0 versiyonları varsa. (Bu iletişim ve etkileşim Replication yoluyla olabilir meselâ)

- Eğer bir uygulamanız var ve bu uygulamanız da SQL Server 8.0 ve bundan daha eski SQL Collation' larına bağımlı olarak çalışıyorsa.

Normal şartlarda, sıfırdan bir SQL Server kuracağınız zaman kesinlikle Windows Collation' larını kullanmanızı tavsiye ederim.

Bununla birlikte, SQL Collation' ın bir takım uyumsuzlukları da vardır. Meselâ:

- Database Engine ile birlikte Analysis Services' i de kuruyorsanız ve Collation olarak bir SQL Collation' ı seçmişseniz şayet, Analysis Services için SQL Collation kullanılamayacaktır. SSAS için sadece Windows Collation' ları kullanılabilir. SQL Server Setup, SSAS için, seçtiğiniz SQL Collation' ına en yakın Windows Collation' ını otomatik olarak seçecektir. Tabii bu da Database Engine ve Analysis Services arasındaki veri alış-verişlerinde uyumsuzluk sorunlarına neden olabilir.

- Eğer SQL Collation kullanıyorsanız, Unicode ve Non-Unicode (örnek olarak veritipi nchar \ char) olan iki alana ait verinin karşılaştırılmasında sorun yaşayabilirsiniz. Eğer iki veritipi de Unicode ise veya iki veritipi de Non-Unicode ise sorun olmayacaktır.


Ekrem Önsoy

"A severe error occurred on the current command."

HATA MESAJI:
"A severe error occurred on the current command."

AÇIKLAMASI:
SQL Server 2000 veya 2005' in tüm sürümlerinde, bazı sorgu veya Stored Procedure' leri çalıştırmayı denediğinizde bu hata ile karşılaşabilirsiniz.

ÇÖZÜM:
SQL Server 2000:
SQL Server 2005' te bu hata için bir FIX üretti Microsoft. Bu FIX de SQL Server 2005' in Servis Paketi 1' inin içinde bulunmaktadır.

Bu sorunu gidermek için SQL Server 2005' in en son Servis Paketini yüklemenizi öneririm.

Daha fazla bilgi almak için:
http://support.microsoft.com/kb/896373

SQL Server 2005:
SQL Server 2005' te bu hata için bir FIX üretti Microsoft. Bu FIX de SQL Server 2005' in Servis Paketi 1' inin içinde bulunmaktadır.

Bu sorunu gidermek için SQL Server 2005' in en son Servis Paketini yüklemenizi öneririm.

Daha fazla bilgi almak için:
http://support.microsoft.com/kb/910416/en-us

"Database 'veritabani_adı' cannot be opened due to inaccessible files or insufficient memory or disk space. See the SQL Server errorlog for details. (

HATA MESAJI:
"Database 'veritabani_adı' cannot be opened due to inaccessible files or insufficient memory or disk space. See the SQL Server errorlog for details. (Microsoft SQL Server, Error: 945)"

AÇIKLAMASI:
Veri ve Log dosyaları silinmiş bir veritabanına ulaşmaya çalıştığınızda bu hata ile karşılaşırsınız.

ÇÖZÜM:
Dosyalar zaten silindiği için yapabileceğiniz pek bir şey yoktur. En son aldığınız yedekten geri dönmeye çalışmanızı öneririm.

"Connections to SQL Server files (*.mdf) require SQL Server Expres 2005 to function properly. Please verify the installation of the component or downl

HATA MESAJI:
"Connections to SQL Server files (*.mdf) require SQL Server Expres 2005 to function properly. Please verify the installation of the component or download from the URL: http://go.microsoft.com/fwlink/?LinkId=49251"

AÇIKLAMASI:
Visual Studio 2005' te, Projenize bir Veritabanı eklemek istediğinizde bu hata ile karşılaşabilirsiniz.

Nedeni, Veri Bağlantıları (Data Connections)' ndaki "SQL Server Instance Name" ayarının yanlış yapılandırılmasından kaynaklanıyor.

ÇÖZÜMÜ:
Visual Studio 2005' teki "SQL Server Instance Name" ayarını doğru bir şekilde yapılandırmak için Visual Studio 2005' i çalıştırın. Daha sonra sırasıyla aşağıdaki adımları izleyin:

- "Tools",
- "Options...",
- "Database Tools",
- "Data Connections",
- "SQL Server Instance Name" kutusuna geçerli bir SQL Server 2005 Express Edition Instance' ının adını girin. Eğer SQL Server Instance' ınızı "Default Instance" olarak kullanıyorsanız, o zaman bu kutuyu boş bırakın.

23 Kasım 2007 Cuma

SQL SERVER 2008 : Yedek Sıkıştırma (Backup Compression) Özelliği

Merhaba arkadaşlar,

Bu makalemde sizlere SQL Server 2008 ile birlikte gelen Sıkıştırılmış Yedekleme (Compressed Backup) özelliğinden bahsedeceğim.

Bazılarınızın da bildiği gibi, bu sıkıştırılmış yedekleme özelliği gerçekten çok gerekiyordu. Veritabanı yöneticileri açısından veritabanları konusundaki en önemli şeyler güvenlik, verinin kullanılabilirliği ve performanstır. Yedekleme, veritabanı yöneticileri için hayati ve sürekli yapılması gereken bir işlemdir. Her zaman son yedeğiniz kadar güvendesinizdir.

SQL Server 2008' den önceki SQL Server versiyonlarında maalesef sıkıştırma özelliği yoktu. Bazı veritabanı yöneticileri bu ihtiyaçlarını üçüncü parti yazılımlar (Red-Gate Backup gibi) kullanarak gideriyordu.

Peki, sıkıştırma neden gerekiyor? Yukarıda da dediğim gibi, veritabanı yöneticilerinin sürekli yedek almaları gerekiyor. Diskler artık eskisi gibi pahalı değiller, çok daha kolay alabiliyoruz; fakat eğer doğru ve düzenli bir şekilde kullanılmazlarsa bir süre sonra disk yönetimi de sorun olmaya başlıyor. Örnek vermek gerekirse, SQL Server sunucularından sorumlu olduğum büyük bir firma, disklerini çok kötü kullanıyordu. Raporlarımda sürekli belirtmeme rağmen gelişi güzel yedekler alıp oraya buraya atıyorlardı ve sonunda ne oldu tahmin edin! Evet, patladılar =)

Eğer yedeklerimizi düzenli ve kontrollü bir şekilde alırsak, böyle sorunlarla karşılaşmayız. Neyse, çok dağıtmadan hemen sıkıştırmanın neden gerektiğine de bir vurgu yapıp hemen yeni özelliklerden bahsedeyim. Gerçi artık vurguya da gerek kalmadı, söylemek istediğim şeyi sanırım çoktan anlamışsınızdır... Bol yedek alacağımız için, disk alanlarından kazanmamız gerekiyor. Ayrıca, sıkıştırma yöntemi kullanacağımız için dosya boyutu daha küçük olacak, yani G\Ç (I\O) işlemleri de azalacak. Her şekilde kazanmış oluyoruz. Tek kayıp var, ondan da sırası gelince bahsedeceğim.

Sıkıştırılmış Yedek özelliği sadece SQL Server 2008' in Enterprise Sürümünde olacak arkadaşlar. Bununla birlikte, bir SQL Server 2008 Enterprise sürümüyle sıkıştırılmış veritabanı yedeği, başka bir SQL Server 2008 sürümüyle (meselâ Standard veya Express) açılabilecek; fakat diğer sürümler maalesef sıkıştırılmış yedek alamayacaklar. Ayrıca, SQL Server' ın eski versiyonları (90, 80, 70...) SQL Server 2008 ile alınan sıkıştırılmış yedekleri açamayacaklar.

Sıkıştırılmış bir yedek ile sıkıştırılmamış bir yedek aynı medya-set' inde saklanamaz.

Her şeyin ama her şeyin bir bedeli olduğuna inanırım; evet, bunun da bir bedeli var! Fiyatı hariç =) Bedeli şu: İşlemci. Evet arkadaşlar, sıkıştırma işlemi, işlemcinizi yoracak. Bununla birlikte, yukarıda da bahsettiğim gibi yedek alma süresini düşüreceği için G\Ç' dan ("Girdi\Çıktı" Bu terimden, fiziksel disklere yapılan yazma ve okumalar kastediliyor.) kâr edeceksiniz.

Bu sıkıştırma işinin gördüğünüz gibi bazı maliyetleri olacağı için, bu işe kalkışmadan önce gerekli performans testlerini yapmanızı tavsiye ederim. Ve de yedeklerinizi iş saatleri dışında almanızı tavsiye ederim. İşlemci o zamanlar daha az kullanılıyor olacaktır. Ayrıca, sıkıştırılmış yedek alacağınız zaman iş saatlerinde işlemcinize ekstra yük bindirmemiş olursunuz. Performans testlerini Yönetimsel Araçlar' daki Sistem Monitörü ile yapabilirsiniz.

Sıkıştırılmış veritabanı yedeği özelliği hem sunucu düzeyinde varsayılan olarak ayarlanabilir, hem de yedek alırken T-SQL komutunun içerisinde siz de belirleyebilirsiniz. Ve tabii ki, SSMS' te yedekleme işlemi için menüleri kullanarak da belirlenebilir.

Bu yöntemlere dair bir kaç tane örnek ve resim de göstermek istiyorum sizlere.


Sunucu düzeyinde ayar yapmak için:

- sp_configure Transact-SQL komutunu kullanabilirsiniz,

veya

- SSMS arayüzünü kullanarak, aşağıdaki resimde de gösterdiğim yerden varsayılan ayar değişikliğini yapabilirsiniz.





Sunucu düzeyinde yapılan varsayılan sıkıştırılmış yedek alma ayarından farklı bir yedek almak için ise aşağıdaki yöntemleri kullanabilirsiniz:

- BACKUP DATABASE \ LOG komutu ile birlikte WITH NO_COMPRESSION veya WITH COMPRESSION anahtarlarını kullanabilirsiniz.

veya

- SSMS kullanarak aldığınız yedeğin Seçenekler menüsünden "Compress backup" veya "Do not commpress backup" seçeneklerini kullanarak ihtiyacınıza göre yedek alabilirsiniz. Ayarı nereden yapacağınıza dair de bir resim ekliyorum aşağıya.





Tabii bir de veritabanlarının neye göre ve ne kadar sıkıştırılacağı konusu var. Bu konuda da aşağıdaki bilgileri dikkate alın. Veritabanlarınızın yedekleri, bu kriterlere göre çok veya az sıkıştırılacaktır.

- Verinin tipi: Her zaman olduğu gibi (Winzip veya Winrar vb. programlarda) karakterler daha çok sıkıştırılır.

- Sayfa (Page)' lardaki satırların veri bütünlüğü: Tipik olarak, bir sayfadaki satırlarda bulunan verriler aynı değerleri içeriyorsa önemli bir miktarda sıkıştırma oranı yakalayabilirsiniz. Tam tersi bir senaryoda ise, yani eğer her sayfada büyük ve sadece bir satır varsa veya veritabanınızda hep farklı farklı, birbirine benzemeyen veriler varsa o zaman sıkıştırılmış veritabanı yedeğinizin boyutu, hiç sıkıştırılma işlemine uğramamış veritabanı yedeğiyle aynı olacaktır büyük ihtimalle.

- Verilerinizi şifreli olup olmadığı (Encrypted): Sıkıştırılmış veritabanı yedeğiniz, şifrelenmemiş benzerlerine göre çok daha az sıkıştırılacaktır.

- Veritabanınızın sıkıştırılmış olup olmadığı: Bu durumda sıkıştırılmış veritabanı yedeğiniz neredeyse hiç bir boyut azalmasına neden olmayacaktır.

Not: Bu son öğede lütfen yanlış anlaşılma olmasın. SQL Server 2008' de, veritabanını da sıkıştırabiliyorsunuz. Yani veritabanını sıkıştırmak başka bir işlem, sıkıştırılmış veritabanı yedeği almak başka bir işlem.

Özet:
Size bu makalemde SQL Server 2008 Enterprise Edition ile birlikte gelecek olan Yedek Sıkıştırma (Backup Compression) özelliğini anlatmaya çalıştım. Umarım yararlı olmuştur.


Ekrem Önsoy

22 Kasım 2007 Perşembe

"The SQL Server ('Instance_Adı') service failed to start due to the following error: The service did not start due to a logon failure."

HATA MESAJI:
SQL Server Configuration Manager:
The request failed or the service did not respond in a timely fashion. Consulf the event log or other applicable error logs for details.

Event Log:
"The SQL Server ('Instance_Adı') service failed to start due to the following error:
The service did not start due to a logon failure."

AÇIKLAMA:
SQL Server servisini başlatmaya çalıştığınızda alırsınız bu hatayı. Nedeni ise, SQL Server servis hesabının şifresinin değiştirilmesidir. Fakat SQL Server servisinin şifresi güncellenmemiştir.

Biraz karışık oldu gibi, şöyle anlatmaya çalışayım. Meselâ kendi başına çalışan (Stand-Alone) bir SQL Server' ınız var. SQL Server Insance' ınız için bir kullanıcı hesabı oluşturdunuz. Daha sonra bu hesabını, SQL Server Instance' ınızı çalıştıracak şekilde ayarladınız. Fakat bir şey oldu ve bu servis hesabının şifresini değiştirmeniz gerekti. Yönetimsel Araçlardan Bilgisayar Yönetimi' ne gittiniz ve hesabın şifresini değiştirdiniz. Fakat hesabı kullanan servislerdeki bilgiler otomatik olarak güncellenmez. Meselâ Services MMC veya SQL Server Configuration Manager yoluyla ulaşabileceğiniz SQL Server servisinin hesabı, eskisi olarak kalacaktır. Ve siz SQL Server Instance' ınızı çalıştırmaya çalıştığınızda bu hatayı alırsınız. Çünkü servis hâlâ eski kullanıcı şifresini kullanarak çalışmaya çalışıyordur.

ÇÖZÜM:
SQL Server Instance' ınızın servis hesabı bilgilerini güncellemelisiniz. Bunu iki pratik yolla yapabilirsiniz:

1- Başlat\Çalıştır "Services.msc" yazıp Tamam düğmesine tıklayın. Açılan pencerede ilgili SQL Server servisinizi bulun. Özellikler' inden gerekli şifre güncellemesini yapın.

2- SQL Server Configuration Manager' ı başlatın. SQL Server 2005 Services düğümüne tıklayın ve ilgili SQL Server servisini bulup, gerekli şifre güncellemesini yapın.

Not:
Bu sorun sadece SQL Server servisleri için değil, tüm servileriniz için geçerlidir.

"Drop failed for Login 'Login_Adı'. The server principal owns an endpoint and cannot be dropped. (Microsoft SQL Server, Error: 15141)"

HATA MESAJI:
"Drop failed for Login 'Login_Adı'. The server principal owns an endpoint and cannot be dropped. (Microsoft SQL Server, Error: 15141)"

AÇIKLAMA:
SQL Server 2005' te bir Login' i silmeye çalıştığınızda bu hata ile karşılaşabilirsiniz. Nedeni de, bu Login' in sahip olduğu bir Endpoint' in bulunmasıdır.

SQL Server 2005' te Endpoint' ler veritabanı değil, sunucu bazındadırlar. Endpoint' lerinize SSMS (SQL Server Management Studio) ile, Object Explorer penceresindeki Server Object\Endpoints düğümleri altından da ulaşabilirsiniz.

Not: Endpoint' ler SSMS arayüzünden oluşturulamazlar. Sadece T-SQL kullanılarak CREATE ENDPOINT komutlarıyla oluşturulabilirler. Endpoint' ler hakkında daha fazla bilgi için buraya tıklayınız.

ÇÖZÜM:
Bu hatayı almamak için, önce silmek istediğiniz Login' e ait Endpoint' leri kaldırmanız gerekiyor.

Bunun için, yukarıda anlattığım şekilde Endpoint' lerinizi bulabilirsiniz. Bulduğunuz Endpoint' lerin hangi Login için yetkilendirdiğini bulmak için de, SSMS yoluyla bulduğunuz Endpoint' in üzerinde farenin sağ tuşuna tıklayıp Script Endpoint as: CREATE To seçeneklerini kullanabilirsiniz. Açılan sorgulama penceresinde AUTHORIZATION kısmını kontrol edebilirsiniz.

"'LandingPage' is not a valid value for setting 'ACTION'. Refer to Help for more information."

HATA MESAJI:
"'LandingPage' is not a valid value for setting 'ACTION'. Refer to Help for more information."

AÇIKLAMA:
SQL Server 2008 November CTP Setup dosyasını çalıştırmayı denediğinizde bu hatayı alabilirsiniz.

ÇÖZÜM:
Denetim Masasındaki Bölge ve Dil Seçenekleri' nde bulunan Biçim' i Türkçe' den İngilizce' ye çevirdiğinizde SQL Server 2008 November CTP Setup, kuruluma devam edebiliyor.

Microsoft SQL Server 2008 November CTP artık indirilebilir!

Merhaba Arkadaşlar!

Bugün Microsoft' tan gelen bir haber ile SQL Server 2008 Kasım CTP' sinin indirilebileceğini öğrendim.

SQL Server 2008 Kasım CTP' sini aşağıdaki adresten indirebilirsiniz!

http://www.microsoft.com/downloads/details.aspx?FamilyId=3BF4C5CA-B905-4EBC-8901-1D4C1D1DA884&displaylang=en

Not:
Tam deneme sürümlerinin yanısıra, bir de Express Edition da yayınlanmış!

Ekrem Önsoy

19 Kasım 2007 Pazartesi

SQL SERVER 2005 EXPRESS EDITON' da OTOMATİK YEDEKLEME

Son güncelleme tarihi: 17 Kasım 2007


Merhaba arkadaşlar,

Bu makalede sizlere anlatmak istediğim şey SQL Server 2005 Express Edition' da otomatik yedekleme sisteminizi nasıl oluşturabileceğiniz olacak.

SQL Server 2005 Express Edition, SQL Server 2005 serisinin ücretsiz sürümüdür. Aynen SQL Server 2000' deki MSDE gibi. Fakat SQL Server 2005' in altyapısıyla ve fazladan özelliklerle. Meselâ artık veritabanı boyutu sınırı 2GB değil, 4GB.

SQL Server 2005 Express Edition' da otomatik olarak yedek almak isteyeceğiniz zaman muhtemelen ilk önce SQL Server Agent servisinin olmadığını göreceksiniz. Belki bazıları da otomatik yedekleme ve diğer işlemler için Maintanence Plan' ı arayacaklar; fakat SQL Server Agent olmadığı için, bunu da bulamayacaklar.

SQL Server Agent servisi, SQL Server 2005' in Workgroup, Standard, Developer ve Enterprise sürümleriyle geliyor sadece. Ayrıca SQL Server 2005 Express Edition' da, SSIS (SQL Server Integration Services) da yok. SSIS, SQL Server 2000' deki DTS (Data Transformation Services)' in ardılı. Fakat SSIS tamamen baştan yazılmıştır ve DTS' e kıyasla çok güçlüdür. Visual Studio ile tamamen entegre edilmiştir.

Sonradan SQL Server 2005 Express Edition' ın bir versiyonu daha çıktı, bu da SQL Server 2005 Express Edition with Advanced Services. Bu sürümde, SQL Server 2005 Express Edition' a oranla bazı yeni özellikler var; fakat bunda da SQL Server Agent yok.

Not: Bu özelliklerden burada bahsetmeyeceğim, çünkü konumuzun dışında.

Peki bu yukarıda anlattıklarım, eğer SQL Server 2005 Express Edition kullanıyorsak zamanlanmış \ otomatik (Scheduled) yedek alamayacağımız anlamına mı geliyor? Tabii ki hayır! Her zaman bir yol vardır =)

Meselâ şöyle bir yol kullanabilirsiniz:

- Almak istediğiniz yedek ile ilgili bir T-SQL Script' i oluşturun.
- Script' i SQLCMD' ye aktararak, orada çalıştırın.
- Windows Zamanlanmış Görevler (Windows Scheduled Tasks) kullanarak bir görev zamanlayın.

T-SQL Script' ine örnek:
BACKUP DATABASE [test_2000] TO DISK = N'c:\test\test.bak' WITH NOFORMAT, INIT, NAME = N'test_2000-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO

Not: BACKUP komutu hakkında daha fazla bilgi almak için aşağıdaki adresi ziyaret edebilirsiniz:
http://msdn2.microsoft.com/en-us/library/ms186865.aspx

Not: T-SQL Script' inizi pratik yoldan oluşturmak:
SQL Server 2005 ile birlikte neredeyse her arayüz penceresinde Script' leme gibi bir özellik var. Meselâ aşağıdaki çizdiğim yolu takip ederseniz bunu göreceksiniz.

- SQL Server Management Studio Express Edition' ı çalıştırın. SQL Server Instance' ınıza bağlanın.
- Yedeğini almak istediğiniz veritabanı üzerinde farenin sağ tuşuna tıklayın ve açılan menüden de "Tasks" ardından da "Back Up..." öğelerine tıklayın.
- Açılan "Back Up Database" penceresinde gerekli yedekleme ayarlarınızı yaptıktan sonra, aynı pencerenin en üstünde yer alan iki düğme göreceksiniz. Bunlar: "Script" ve "Help" düğmeleridir.
- "Script" düğmesinin hemen yanındaki aşağı ok düğmeciğine tıklayın ve "Script Action to File" öğesini seçin. Sizden Script dosyasını bir yere kaydetmenizi isteyecek. Bu dosyayı, almak istediğiniz yedeği otomatikleştirmek için kullanacağız. Ona göre bir yere saklayın.

Not: Benim örneğimde ben bu dosyayı "c:\Test" klasörü altında "OtoYedek.sql" olarak saklayacağım.

- İsterseniz dosyayı kaydettikten sonra gidip dosyanın içeriğine bakabilir ve değiştirebilirsiniz.

SQLCMD:
SQLCMD.exe, SQL Server 2000' deki ve SQL Server 2005' dte de geriye dönük destek vermek için hâlâ bulunan OSQL.exe' nin halefi. Bu komut satırı uygulaması ile, SQL Server Instance' ınızda işlemler yapabilirsiniz. Meselâ biz bu makalemizde yukarıdaki örnekte oluşturduğumuz OtoYedek.sql dosyasını SQLCMD ile birlikte çalıştıracağız. SQLCMD uygulamasını da Windows Zamanlanmış Görevler ile çalıştıracağız ve böylece otomatik yedek almış olacağız.

Peki oluşturduğumuz OtoYedek.sql dosyasını SQLCMD ile nasıl çalıştıracağız? Şöyle:
- Bir komut satırı açın (Başlat\Çalıştır metin kutusuna "cmd" yazın ve Tamam düğmesine tıklayın.)
- Komut satırını açtıktan sonra, OtoYedek.sql dosyamız ile SQLCMD' nin nasıl çalıştığını görmek için şu komutu yazın: "SQLCMD -S Ekrem-PC\SQLEXPRESS -E -i C:\Test\OtoYedek.sql"

Not: Bu komuttaki -S anahtarı Sunucu adını temsil ediyor. Bendeki sunucu adı "Ekrem-PC". Ayrıca kullandığım SQL Server Instance' ı bir "Named Instance". Eğer Default Instance olsaydı, o zaman sadece sunucu adını yazmam yeterli olacaktı. -E anahtarı ise Güvenli Bağlantı (yani Windows Authentication' ı) ' yı temsil ediyor. Eğer SQL Server' da yetkilendirme için Windows Authentication değil de, SQL Server Login kullanıyorsanız o zaman -E anahtarını kullanmayı, -U anahtarı ile kullanıcı adınızı, -P anahtarı ile de şifrenizi girmeniz gerekecek. -i anahtarı ise, kullanmak istediğimiz T-SQL Script dosyasının yolunu tarif etmek içindir.

- Yukarıda vermiş olduğum satırı çalıştırdıktan sonra, Eğer siz de benimle aynı yoldan gittiyseniz, aynı isimli klasör ve dosyaları kullandıysanız (ki daha önceden "C:\Test" klasörünü oluşturmuş olmanız gerekiyor, yoksa hata alırsınız) "C:\Test" klasöründe "test.bak" isimli bir dosyanın oluştuğunu göreceksiniz.

Not: SQLCMD hakkında daha fazla bilgi edinmek istiyorsanız ve diğer anahtarlarını da öğrenmek istiyorsanız, komut satırındayken "SQLCMD - ?" yazıp Enter tuşuna basabilirsiniz.

Şimdi sıra Windows Zamanlanmış Görevler' e geldi.

Zamanlanmış Görevler:
- Denetim Masası \ Zamanlanmış Görevler
- Zamanlanmış Görev Ekle
- Zamanlanmış Görev Sihirbazından: Gözat düğmesine tıklayın ve SQLCMD dosyasın bulun (Benim test makinemdeki yeri ve varsayılan yeri örnek olarak şöyledir: "C:\Program Files\Microsoft SQL Server\90\Tools\Binn")
- İhtiyacınıza göre zamanı ayarlayın,
- Görevin çalışmasını sağlayacak ve yeterli yetkilere sahip bir kullanıcı hesabının bilgilerini girin
- Görevi oluşturduktan sonra görevin özelliklerine girin ve Çalıştır mtin kutusundaki "C:\Program Files\Microsoft SQL Server\90\Tools\Binn\SQLCMD.exe" yazan satıra, yukarı kullandığımız anahtarları da ekleyin. (Örn: "C:\Program Files\Microsoft SQL Server\90\Tools\Binn\SQLCMD.exe -S Ekrem-PC\SQLEXPRESS -E -i C:\Test\OtoYedek.sql"


Özet:
Özetle, Windows Görev Zamanlayıcısından zamanladığınız görevi, SQLCMD' nin yazdığınız TSQL Script' ini çalıştırması için kullanarak veritabanınıza ait veri ve log dosyalarının yedeklerini alabilirsiniz.

"Neden veritabanı dosyalarımın (mdf, ndf, ldf vs.) yedeklerini doğrudan NTBackup ile alamıyorum?" diye sorabilirsiniz, alamazsınız çünkü kullanımda olan veritabanı dosyaları kopyalanamaz. Bu işlem için ilk önce veritabanının bağını çözmeniz (Detach) gerekir. Bu da, veritabanınızın bir süreliğine de olsa kullanılamaz hale gelmesi demektir. Ayrıca yedekleme sistemini otomatikleştirmesiyle de alâkası yoktur ve hiç pratik değildir.


Ekrem Önsoy

Hata ve Çözümü

HATA MESAJI:
"The CREATE DATABASE statement failed. The primary file must be at least 3 MB to accommodate a copy of the model database."

AÇIKLAMA:
SQL Server 2005' te Model veritabanının veri veya log dosyalarından daha ufak boyutlarda veri veya log dosyaları olan bir veritabanı oluşturmaya çalışırken alırsınız bu hatayı.

ÇÖZÜM:
Model veritabanınızın veri ve log dosyalarının boyutlarını küçülterek bu hatadan kurtulabilirsiniz.

Hata ve Çözümü

HATA MESAJI:
"CREATE DATABASE failed. Could not allocate enough disk space for a new database on the named disks. Total space allocated must be at least MB to accommodate a copy of the model database."

AÇIKLAMA:
SQL Server 2000' de Model veritabanının veri veya log dosyalarından daha ufak boyutlarda veri veya log dosyaları olan bir veritabanı oluşturmaya çalışırken alırsınız bu hatayı.

ÇÖZÜM:
Model veritabanınızın veri ve log dosyalarının boyutlarını küçülterek bu hatadan kurtulabilirsiniz.

Hata ve Çözümü

HATA MESAJI:
"Device activation error. The physical file name may be incorrect."

AÇIKLAMA:
SQL Server' da bir veritabanı oluşturmaya çalışırken alırsınız bu hatayı.

ÇÖZÜM:
Veritabanını oluşturduğunuz yol, geçerli bir yol değildir veya yoktur. Yolun varolduğundan emin olun. Bu yol için kullandığınız sürücülerin ve klasörlerin varlığını teyit edin.

Hata ve Çözümü

HATA MESAJI:
"Microsoft SQL-DMO (ODBC SQLState: 42000) Too many backup devices specified for backup or restore; only 64 are allowed. RESTORE DATABASE is terminating abnormally."

AÇIKLAMA:
SQL Server 2005' te yedeğini aldığınız bir veritabanını, bir SQL Server 2000 Instance' ında açmaya (RESTORE) çalışırsanız bu hata ile karşılaşırsınız.

ÇÖZÜM:
Bir SQL Server 2000 Instance' ında yedeğini aldığınız bir veritabanını bir SQL Server 2005 Instance' ında açabilirsiniz. Fakat bir SQL Server 2005 Instance' ında yedeğini aldığınız bir veritabanını SQL Server 2000 Instance' ında açma gibi bir şansınız olmadığı için, bunu denememenizi tavsiye ederim.

Eğer böyle bir şey yapmak istiyorsanız doğrudan yapamazsınız. Dolaylı olarak ise SQL Server 2005' teki veritabanınızın DDL Script' i ile şemasını (Schema) çıkarıp SQL Server 2000 Instance' ında çalıştırabilir ve veritabanınızın iskeletini oluşturabilirsiniz. Bundan sonra da verileri aktarmak için SSIS\DTS' i kullanabilirsiniz.

15 Kasım 2007 Perşembe

VERSİYON YÜKSELTME (UPGRADE) SONRASI YAPILMASI GEREKEN SQL SERVER 2005 PERFORMANS BAKIMI

Merhaba,

Aslına bakarsanız bu çok ilginç bir konu, çünkü insanlar SQL Server 2000' den SQL Server 2005' e geçiş yaptıklarında sistemlerinin daha hızlı, verimli ve ölçeklenebilir çalışacağını umuyorken bir de bakıyorlar ki SQL Server' larının performansı SQL Server 2000' den çok daha kötü.

Fakat işin aslı öyle değil tabii ki. Yükseltme işlemini gerçekleştirdikten sonra yapmanız gereken bazı bakım ayarları var. Bunları yapmanız gerekiyor.

Yapılması gereken bu bakımları aşağıda listeliyorum:

1- SQL Server için kullanılabilir olan en son Servis Paketini yüklediğinizden emin olun. Tabii eğer bu servis paketini yüklemenizde bir sakınca yoksa. Meselâ üçüncü parti bir uygulama kullanıyor olabilirsiniz ve uygulama geliştiriciniz, uygulamanın SQL Server' ın bu servis paketini desteklemediğini ve bu servis paketini yüklememeniz gerektiğini söyleyebilir. Bunugözönünde bulundurun.

2- "External Defragmentation" yapın. Başka bir anlamda söylemek gerekirse, Windows Disk Birleştirici (veya Diskeeper gibi üçüncü parti bir yazılım da olabilir), kullanarak dosyalarınızı birleştirin. Performans açısından önemli bir adım. Bu uygulamayı gerçekleştirirken, SQL Server servisinizin çalışmadığından emin olun. Çünkü Windows Disk Birleştirici açık olan dosyalara işlem uygulayamıyor. Eğer SQL Server servisiniz çalışıyorsa, veritabanı dosyaları için de işlem yapılamaz. Bu birleştirme işlemini iş saatleri dışındayken uygulamanızı öneririm.

3- Eğer bir engel yoksa kullanıcı veritabanlarınızın Compatibility Level' ini* 90' yapın. (Database\Properties).

Not: Konuyla ilgili aşağıdaki açıklamayı kesinlikle okuyunuz. Compatibility Level' ı 90 olan bir veritabanını, SQL Server 2000' de çalıştıramazsınız.

4- Veritabanında varolan "Index" leri yeniden yapılandırın (Rebuild)

5- Kullanıcı veritabanlarınızdaki istatistikleri güncelleyin. (sp_updatestats)

6- Veritabanı ayarlarınıza bakıp "Auto Update Statistics" ayarının etkin olduğundan emin olun. Eğer bu ayarın sisteminizde performans kaybına neden olacağından kuşkularınız varsa, "Auto Update Statistics Asynchronously" seçeneğine göz atmanızı tavsiye ederim. SQL Server 2005 ile gelen yeni bir ayardır. Yerine göre çok işinize yarayabilir.

7- SQL Server 2005' in sorgular için kullandığı Çalıştırma Planı (Execution Plan), SQL Server 2000' in sorgular için kullandığı Çalıştırma Plan' ından daha az optimaldir.

Meselâ şu örneğe bakın:

SELECT * FROM Person.Contact
WHERE (LastName LIKE @para1) AND (LastName > @para2)

SQL Server 2005' te Çalıştırma Planı tablolarda arama yapmak için karşılaştırma operatörlerini kullanır (=, <, > gibi...).

SQL Server 2000' de ise Çalıştırma Planı tabloları taramak için LIKE operatörünü kullanacaktır. Karşılaştırma operatörü, LIKE operatöründen daha fazla kayıt getireceği için performans daha düşük olacaktır.

Microsoft bu sorunu çözmek için bir FIX yayınladı. Bu FIX de 4. Cumulative Güncellemesinin içerisinde bulunuyor. Bu güncellemeye ulaşmak için buraya tıklayabilirsiniz.


* Compatibility Level, SQL Server veritabanının SQL Server' ın hangi versiyonuyla uyumlu olduğunu gösterir. 90 sayısı SQL Server 2005' i, 80 sayısı SQL Server 2000'i 70 sayısı SQL Server 7.0' ı temsil eder.



Ekrem Önsoy

Hata ve Çözümü

HATA MESAJI:
"SQL Server Setup failed to execute a command for server configuration. The error was [Microsoft][SQL Native Client][SQL Server]Windows NT user or group 'COMPUTERNAME\SQLServer2005MSSQLUser$COMPUTERNAME$MSSQLSERVER' not found. Check the name again.. Refer to the server error logs for detailed error information."

AÇIKLAMA:
Bu sorunla, SQL Server 2005 Express Edition SP1' de karşılaşırsınız.

Eğer aşağıdaki şartlar gerçekleşirse, bu sorun meydana gelir:

- Eğer Windows Vista işletim sistemi yüklü olan bilgisayarınızın bilgisayar adı küçük karakterler içeriyor veya büyük küçük karışık karakterler içeriyorsa. Meselâ bilgisayar adınız "Bilgisayarım" ise...

- Eğer SQL Server 2005 Express Edition SP1' i yüklerken SQL Server servisi için Collation ayarını olarak case-sensitive (büyük küçük harf duyarlı) olarak belirlediyseniz.

Windows Vista, bilgisayar adı için gelen istekleri aşağıdaki iki yolla cevaplar:

- Windows Vista, bilgisayar adını büyük harflerle geri döndürür.

- Windows Vista, bilgisayar adını Sistem Özellikleri' nde olduğu gibi gerçek haliyle, yani karışık haliyle geri döndürür.

SQL Server 2005 Express Edition' ın yüklenmesi esnasında, Setup programı bilgisayar adını karışık karakterler olarak almak ister. Fakat, bunun yerine Windows Vista bilgisayar adını büyük harflere dönüştürerek gönderir. Setup programı SQL Server Express Edition' ın yüklenmesi esnasındaki diğer çeşitli yerlerde de ister. Windows Vista o zaman da bilgisayar adını karışık karakterlerle gönderebilir.

SQL Server 2005 Express Edition Setup programı alınan bilgisayar isimlerini karşılaştırır. Genel olarak, bu bir soruna neden olmaz çünkü bilgisayar isimleri Windows vistada büyük küçük harf duyarlı değildir. Bununla birlikte, eğer SQL Server 2005 Express Edition' ı yüklerken büyük küçük harf duyarlı ayarı yapılırsa, Windows Vista' dan alınan ve bazısı büyük küçük harf karışık, bazısı da sadece büyük harf olan bilgisayar isimleri karşılaştırıldığında hata oluşur. Sonuç olarak da, SQL Server 2005 Express Edition SP1' in yüklenmesi başarısızlıkla sonuçlanır.

ÇÖZÜM:
Bunun için iki yol önerilir. Bunlar:

1- Bilgisayar adınızı sacede büyük harflerden oluşacak şekilde değiştirin. Meselâ "Bilgisayarim" ise, "BILGISAYARIM" yapın ve ayarların etkin olabilmesi için bilgisayarınızı kapatıp yeniden başlatın. Bununla birlikte, bilgisayar adınızı belirlerken Türkçe karakter kullanmamanızı tavsiye ediyorum. Böyle küçük büyük harf değişimlerinde sorunlar yaşamanıza neden olabilir.

2- SQL Server 2005 Express Edition SP1' i yüklerken, Collation ayarlarında "case-sensitive" (küçük-büyük harf duyarlı) seçeneğini seçmeyin.

Kaynak:
http://support.microsoft.com/kb/929105

Hata ve Çözümü

HATA MESAJI:
"A connection could not be established to . Reason: Login failed for user . Reason: Server is in single user mode. Only one administrator can connect at a time."

AÇIKLAMA:
Bu sorun, SQL Server servisine başlangıç parametresi olarak "-m" koyup kaydettikten ve sonra SQL Server servisini yeniden başlatmaya çalıştığınızda karşınıza çıkabilir.

"-m" parametresi, SQL Server servisini tek kişilik giriş izni vermek üzere başlatır.

ÇÖZÜM:
SQL Server tek kişilik girişe izin verdiği için, eğer SQL Server Agent' ınız veya başka bir servis (ki bu genelde SQL Server Agent olur) sizden önce SQL Server' a bağlanırsa siz SQL Server Instance' ınıza bağlanamazsınız ve bu hata ile karşılaşırsınız.

Ayrıca, SQL Server 2005' te, SQL Server Starup Parameter (Başlangıç parametreleri) SQL Server Configuration Manager ile değiştirilebilir. Yani bu parametreyi değiştirmek için, SQL Server Management Studio' ya bağlanmak zorunda değilsiniz.

Fakat SQL Server 2000' de, bu ayarı değiştirebilmek için ilk önce SQL Server 2000' e bağlanmak zorundasınız. Eğer bu hatayı alıyorsanız ve SQL Server Instance' ınıza Enterprise Manager ile bağlanamıyorsanız, o zaman bu parametreyi de değiştiremezsiniz demektir.

Buna benzer şahit olduğum bir durumda, kullanıcı bu hata ile karşılaşmış ve SQL Server ile ilgili tüm servisleri durdurduğu halde (SQL Server servisi hariç tabii) gene de EM kullanarak SQL Server 2000 Instance' ına bağlanamamış ve bu ayarı da değiştirememişti. Bu yüzden kendi dahil hiç bir kullanıcısı SQL Server' a bağlanamıyordu.

Bu sorunu çözmek için, Regedit' ten değişiklikler yapıldı. Değişikliğin yapıldığı yerin adresi bizim durumumuzda şöyleydi: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\SQLSERVER2000\MSSQLServer\Parameters. Sizin durumunuzda farklı olabilir. Bu fark, yüklediğiniz Intance' ın Default Instance veya Named Instance olmasına göre değişir. Ama sanırım artık bakacağınız yeri biliyorsunuz...

Yapılan değişiklik ise, SQLArg anahtarlarından "-m" değerini içeren anahtarı silmek idi. Evet, anlayacağınız üzre SQL Server Startup Parameters burada tutuluyor.

Bu arada, eğer bu sorun başınıza bir Küme (Cluster) ortamında geldiyse, unutmayın ki tüm düğümlerden temizlemelisiniz bu anahtarı.

Microsoft SQL Server 2008 November CTP!

Merhaba Arkadaşlar!

SQL Server 2008 June CTP' den sonra, bugün de Microsoft' tan SQL Server 2008 Kasım CTP (Community Technology Preview - Bir nevi beta sürüm...) ' nin yayınlanacağı haberi geldi.

Çok istesem de, sizlere June CTP' sinden bahsedememiştim. Ama hem June CTP' sindeki hem de Kasım CTP' sindeki özellikleri bir araya getirip bu konuda da bir makale yazmayı çok istediğimi bilmenizi istiyorum ve en müsait olduğum zamanda bunu gerçekleştireceğim.

Bu duyuruda sizlere Kasım CTP' sine eklenen özelliklerden bahsetmek istiyorum.

Bu CTP, Windows Vista ve Windows Server 2008 ile uyumlu çalışacak. Ayrıca,

- Resource Governor : Bir tür kaynakları yönetme sistemi,

- Backup Compression : Neredeyse tüm üçüncü parti SQL Server yedekleme programlarında bulunan ve SQL Server' da da görmeyi çok istediğimiz ve SQL Server 2008 ile birlikte gelecek veritabanı yedeklerini sıkıştırma özelliği.

- Transparent Data Encryption : Veri şifreleme ile ilgili bir özellik, şimdilik hakkında pek bir şey bilmiyorum. Biraz kurcalamak ve okumak gerekiyor. Öğrenince, yukarıda bahsettiğim ayrıntılı makalemde bundan da bahsederim.

Ayrıca bu CTP' de yeni BI (Business Intelligence) iyileştirmeleri de olacakmış. Design Alerts, Block Computation ve Report Designer' da da yeni ve iyileştirilmiş görsellik olacakmış.

SQL Server 2008 CTP' sini indirebilmeniz için CTP programına dahil olmalısınız. Ben de bu programa Haziran- Temmuz aylarında dahil olmuştum yanlış hatırlamıyorsam.

Bu adresten programa dahil olabilirsiniz.


Ekrem Önsoy

Hata ve Çözümü

HATA MESAJI:
"Cannot open user default database. Login failed. Login failed for user . (Microsoft SQL Server, Error: 4064)"

AÇIKLAMA:
SQL Server' da, her Login için bir varsayılan veritabanı atanır. Bu işlem, Login' in özelliklerinden yapılabilir.

Eğer bir Login' e, giriş hakkı olmayan bir veritabanı varsayılan veritabanı olarak atanırsa, bu Login ile giriş yapmaya çalışan kullanıcınız bahsi geçen hatayı alır.

Ayrıca, eğer bir Login' in varsayılan veritabanı belirlendikten sonra, bu atanan veritabanının adı değişir veya silinirse, Login, aynı hatayı alacaktır.

ÇÖZÜM:
SQL Server veritabanı yöneticisinin, mevzubahis Login' in varsayılan veritabanı bilgisini, Login' in giriş hakkı olan bir veritabanı olarak değiştirmesi yeterli olacaktır.

14 Kasım 2007 Çarşamba

SQL Server 2005' e Versiyon Yükseltme Sonrası Performans

Merhaba,

Aslına bakarsanız bu çok ilginç bir konu, çünkü insanlar SQL Server 2000' den SQL Server 2005' e geçiş yaptıklarında sistemlerinin daha hızlı, verimli ve ölçeklenebilir çalışacağını umuyorken bir de bakıyorlar ki SQL Server' larının performansı SQL Server 2000' den çok daha kötü.

Fakat işin aslı öyle değil tabii ki. Yükseltme işlemini gerçekleştirdikten sonra yapmanız gereken bazı bakım ayarları var. Bunları yapmanız gerekiyor.

Yapılması gereken bu bakımları aşağıda listeliyorum:

1- SQL Server için kullanılabilir olan en son Servis Paketini yüklediğinizden emin olun. Tabii eğer bu servis paketini yüklemenizde bir sakınca yoksa. Meselâ üçüncü parti bir uygulama kullanıyor olabilirsiniz ve uygulama geliştiriciniz, uygulamanın SQL Server' ın bu servis paketini desteklemediğini ve bu servis paketini yüklememeniz gerektiğini söyleyebilir. Bunugözönünde bulundurun.

2- Eğer bir engel yoksa kullanıcı veritabanlarınızın Compatibility Level' ini* 90' yapın. (Database\Properties).

Not: Konuyla ilgili aşağıdaki açıklamayı kesinlikle okuyunuz. Compatibility Level' ı 90 olan bir veritabanını, SQL Server 2000' de çalıştıramazsınız.

3- Veritabanında varolan "Index" leri yeniden yapılandırın (Rebuild)

4- Kullanıcı veritabanlarınızdaki istatistikleri güncelleyin. (sp_updatestats)

5- Veritabanı ayarlarınıza bakıp "Auto Update Statistics" ayarının etkin olduğundan emin olun. Eğer bu ayarın sisteminizde performans kaybına neden olacağından kuşkularınız varsa, "Auto Update Statistics Asynchronously" seçeneğine göz atmanızı tavsiye ederim. SQL Server 2005 ile gelen yeni bir ayardır. Yerine göre çok işinize yarayabilir.

6- SQL Server 2005' in sorgular için kullandığı Çalıştırma Planı (Execution Plan), SQL Server 2000' in sorgular için kullandığı Çalıştırma Plan' ından daha az optimaldir.

Meselâ şu örneğe bakın:

SELECT * FROM Person.Contact
WHERE (LastName LIKE @para1) AND (LastName > @para2)


SQL Server 2005' te Çalıştırma Planı tablolarda arama yapmak için karşılaştırma operatörlerini kullanır (=, <, > gibi...).

SQL Server 2000' de ise Çalıştırma Planı tabloları taramak için LIKE operatörünü kullanacaktır. Karşılaştırma operatörü, LIKE operatöründen daha fazla kayıt getireceği için performans daha düşük olacaktır.

Microsoft bu sorunu çözmek için bir FIX yayınladı. Bu FIX de 4. Cumulative Güncellemesinin içerisinde bulunuyor. Bu güncellemeye ulaşmak için buraya tıklayabilirsiniz.


* Compatibility Level, SQL Server veritabanının SQL Server' ın hangi versiyonuyla uyumlu olduğunu gösterir. 90 sayısı SQL Server 2005' i, 80 sayısı SQL Server 2000'i 70 sayısı SQL Server 7.0' ı temsil eder.



Ekrem Önsoy

13 Kasım 2007 Salı

Microsoft Certified Trainer (MCT) Sertifikası

Merhaba Arkadaşlar!

Size daha önceden verilmiş bir sözümü yerine getiriyorum. MCT olduğumda, bu sürecin ve yapılması gereken şeyleri anlatacağıma dair söz vermiştim. Şimdi bu sözümü de diğerleri gibi yerine getirmek istiyorum.

MCT olabilmek için, en azından MCP sertifikasına sahip olmanız ve böylece kendinizi Microsoft' a bir şekilde ispat etmiş olmanız gerekiyor.

Daha sonra, Yetkili bir eğitim merkezinde (genelde iki gün süren) Train the Trainer (yani eğitimciyi eğitme) kursuna katılıp bunu başarıyla tamamlamanız gerekiyor.

Bu kursu başarıyla tamamladıktan sonra Microsoft' a MCT için başvuruda bulunmanız gerekiyor. Bu başvuruyu Microsoft' un sitesinden MCP hesabınıza giriş yaptıktan sonra yapabilirsiniz. Belli aşamalardan sonra Train the Trainer kursunu başarıyla tamamladığınıza dair bazı evraklar gönderiliyor Microsoft' un Avrupa' daki merkezine. Bu evrakları benim yerime, bana bu eğitimi veren Kazım Çay hocam göndermişti. Ona da buradan selamlar =)

Bu evrakların Microsoft' a ulaşmasından ve Microsoft' un da gerekli araştırmaları yapmasından sonra 50$ para gönderiyorsunuz kredi kartınız ile. Bu ücret, her yıl ödemeniz gereken ücrettir. Her sene, MCT' nizi devam ettirmek için bu ücreti ödemeniz gerekiyor.

Eğer tüm şartlara uygunsanız, MCT Sertifikası 1,5 aya kadar onaylanıyor.

Biraz da Train the Trainer kursundan bahsetmek istiyorum. Benim katıldığım sınıfta sadece iki kişi olduğumuz için, kurs bir gün sürmüştü. Bu kursta, size, insanlara (ki bu durumda öğrencileriniz) nasıl hitap edeceğiniz, belli durumlarda nasıl davranmanız gerektiği, dersi nasıl anlatmanız gerektiği gibi şeyler anlatılıp, daha sonra sunum kabiliyetiniz ölçülüyor. İki kere tahtaya kalkıp, uzmanı olduğunuz konuda, kamera karşısında anlatım yapıyorsunuz. Ne kadar ayrıntılı veya ne kadar uzun değil, nasıl anlattığınız çok önemli. Daha sonra bu kamera kayıtlarını inceleyip, birlikte eleştirilerde bulunuyorsunuz.

Sanırım bu kadar özet, MCT sertifikası hakkında bilgi sahibi olmanız için yeterli. Bu konuda başka sorularınız varsa alabilirim.


Ekrem Önsoy

Login failed for user '(null)'. Reason: Not associated with a trusted SQL Server connection. (Microsoft SQL Server, Error: 18452)

HATA MESAJI:
Login failed for user '(null)'. Reason: Not associated with a trusted SQL Server connection. (Microsoft SQL Server, Error: 18452)

AÇIKLAMA:
Windows hesabınız ile, üyesi olmadığınız bir etki alanına (Domain) bağlanmaya çalışırsanız bu hata ile karşılaşırsınız.

ÇÖZÜM:
Windows hesabınız yerine, bir SQL Server Login' i kullanarak bağlanabilirsiniz.

Not: Bu durumda, karşı taraftaki SQL Server' ın "SQL Server and Windows Authentication mode" için ayarlanmış olması gerekiyor.

Login failed for user . This user is not associated with a trusted SQL Server connection.

HATA MESAJI:
Login failed for user . This user is not associated with a trusted SQL Server connection. (Microsoft SQL Server, Error: 18452)

AÇIKLAMA:
Bu hata ile karşılaştığınız an ilk aklınıza gelmesi gereken şey "SQL Server Authentication Method" yani SQL Server' a bağlanma yönteminiz olmalıdır.

SQL Server' da iki bağlantı doğrulama yöntemi vardır, başlık olarak bunlar:
1- Windows Authentication
2- SQL Server and Windows Authentication mode' dur.

Eğer bağlanmaya çalıştığınız SQL Server Instance' ının bağlanma yöntem ayarı Windows Authentication ise ve siz de bir SQL Server Login' i ile bağlanmaya çalışıyorsanız, bu hata mesajıyla karşılaştırsınız ve SQL Server Instance' ınıza bağlanamazsınız.

ÇÖZÜM:
SQL Server Login' lerini kullanmak için SQL Server bağlanma yöntemini "SQL Server and Windows Authentication" olarak değiştirmeniz gerekir.

Bunun için, Yerel Yönetici grubuna dahil olan bir yönetici hesabıyla SQL Server' ınıza bağlanabilirsiniz. Yerel Yönetici grubunun, SQL Server' da varsayılan olarak (BUILTIN) "sysadmin" (SQL Server' ı yönetmek için kullanılan ve tüm hakları barındıran bir Sunucu Sabit Rolü 'Server Fixed Role') rolüne sahip bir Windows Login' i bulunmaktadır. Bu hesap ile Server Properties (Sunucu Özellikleri)' i açarak, "Security" penceresinden Server Authentication yöntemini "SQL Server and Windows Authentication mode" olarak değiştirebilirsiniz.

Not: Bu değişikliğin geçerli olabilmesi için SQL Server servisinizi kapatıp tekrar çalıştırmanız gerekecektir.

Database cannot be upgraded because it is read-only or has read-only files...

HATA MESAJI:
Database cannot be upgraded because it is read-only or has read-only files. Make the database or files writeable, and rerun recovery. (Microsoft SQL Server, Error:3415)"

AÇIKLAMA:
Bu hatayı, iki şekilde alabilirsiniz.

1- Eğer bir SQL Server Instance' ınıza bağlı veritabanını başka bir SQL Server Instance' ına bağlamaya (Attach) çalışırsanız.
2- Eğer SQL Server Instance' ınıza bağlamaya (Attach) çalıştığınız veritabanı dosyaları (örn: mdf, ndf, ldf) Salt-Okunur (Read-Only) ise.

ÇÖZÜM:
SQL Server Instance' ınıza bağlamaya çalıştığınız veritabanının başka bir SQL Server Instance' ı tarafından kullanılmadığından emin olun.

Veya bağlamaya çalıştığınız veritabanınızın dosyalarının Salt-Okunur olmadıklarından emin olun.

"A component that you have specified in the ADD_LOCAL property is already installed. To upgrade to the existing component, refer to the template.i...

HATA MESAJI:
A component that you have specified in the ADD_LOCAL property is already installed. To upgrade to the existing component, refer to the template.ini and set the UPGRADE property to the name of the component.

AÇIKLAMA:
Önceden yüklemiş olduğunuz bir SQL Server Instance' ını kaldırdıktan sonra, tekrar yeni bir Instance kurmayı denersiniz, ama yukarıdaki hata mesajını alırsınız. Bunun nedeni, önceki Instance' ın doğru şekilde kaldırılamamış olmasıdır.

ÇÖZÜM:
SQL Server 2005 Instance' ını otomatik olarak başarıyla kaldıramadığınız zamanlar, bunu elle yapmayı deneyebilirsiniz.

http://msdn2.microsoft.com/en-us/library/aa337087.aspx

Hemen yukarıda vermiş olduğum adreste, bunu nasıl yapacağınız adım adım anlatılıyor. (İngilizce)

Bununla beraber, buradaki kilit sorunun Windows Installer olduğunu gördüm çoğu zaman. Windows Installer Cleanup Utility kullanıldığı zaman ve sorunlu Instance bu araç ile kaldırıldığı zaman, yeni bir kurulum sorunsuz çekilde gerçekleştirilebiliyor.

Windows Installer Cleanup Utility' yi indirmek için:
http://support.microsoft.com/kb/290301/

"A valid SQL Server installation does not exist in the specified location"

Bu hatayı, aşağıdaki adımlar gerçekleştikten sonra aldım.

AÇIKLAMA
1- Sistemimdeki yüklü SQL Server 2000 örneğini kaldırdım.
2- İşletim sistemimi tekrar başlattım.
3- Yeni bir SQL Server 2000 örneği kurarken "Setup Type" penceresindeyken "Next" düğmesine tıkladığımda bu hatayı aldım.

ÇÖZÜM
1- SQL Server 2000 Setup' ı kapattım.
2- Microsoft Download sitesinden MDAC' ın en son sürümünü indirip yükledim.
3- SQL Server 2000 Setup' ı tekrar başlattım ve sorunsuz kuruluma devam ettim.

18 Ekim 2007 Perşembe

Replication (Sürekli Kullanılabilirlik - 3)

SQL Server Replication

Merhaba arkadaşlar,

Bu makalemde, SQL Server Replication teknolojisinin kavramsal olarak yapısını irdeleyeceğiz. Ayrıca, Replication yöntemlerinden de bahsedeceğim.

Sürekli Kullanılabilirlik (High Availability) konusunda şimdiye kadar SQL Server Failover Clustering ve Database Mirroring’ ten bahsetmiştim. Bunların avantaj ve dezavantajlarından, özelliklerinden ve hangi durumlarda kullanılabileceğinden kısaca bahsetmiştim. Replication konusu ile, Sürekli Kullanılabilirlik yazı dizimin üçüncü bölümünü tamamlamış olacağım. Dördüncü bölüm ise Log Shipping konusunda olacak ve böylelikle Sürekli Kullanılabilirlik konusunu tamamlamış olacağız. En sonunda, bu teknolojilerin birlikte nasıl kullanılabileceklerinden ve genel olarak duruma göre birbirlerine karşı üstünlüklerinden ve dezavantajlarından bahsedeceğim. Ayrıca, Log Shipping konusunun sonunda değişik senarolar da kurgulayacağım. Böylece, hangi teknolojinin nerede kullanılabileceği daha anlaşılır bir hale gelecek umarım.

Makalemde yer yer terimlerin Türkçe ve İngilizcelerini karışık şekilde kullanacağım. Böylece bu terimlerin daha iyi öğrenilebileceği kanısındayım. İki dildeki terimlere aşina olmanızı uygun görmemin nedeni, yazılımların ingilizce olması ve bunların anlaşılabilmesinin de türkçe olarak daha kolay olabilmesi. Umarım işe yarar.


KONU BAŞLIKLARI:

- Replication ve Elemanları
- Publisher, Distributor ve Subscriber
- Replication Teknolojisinde Kullanılan Agent’ lar
- Replication Yöntemleri



REPLICATION YÖNTEMLERİ ve ELEMANLARI

Replication’ ın temel olarak üç yöntemi var, bunlar:

- Snapshot Replication
- Transactional Replication
- Merge Replication’ dır.


Her yöntem, ayrı ayrı seçenekler sunar. İhtiyacımıza göre hangisini kullanabileceğimizi öğrenmek için bu konularda, kendi başlıklarında söz edeceğim.

Fakat daha önce, Replication yapısını oluşturan öğelerden bahsetmek istiyorum. Replication yapısını genel olarak “Yayımevinin yayınladığı makalelere üye olan ve bu yayınları dağıtıcı sayesinde alan aboneler” şeklinde düşünebilirsiniz.

Publisher (Yayıncı) : Yayınlanacak olan makaleleri (Article), yayın (Publication) şeklinde yayınlanmak üzere üzerinde barındırır.

Distributor (Dağıtıcı) : “Publisher” daki “Article” ları, “Subscriber” lara ulaştırır.

Subscriber(Abone) : “Publisher” ın yayınladığı “Article” lara abone olarak, “Distributor” vasıtasıyla yayınları alır.

Publication (Yayın) : Bunu bir gazete gibi varsayın, “Article” lar da bu gazetenin makaleleri.

Article (Makale) : Table, Stored Procedure, View gibi nesneleri makalelere örnek olarak verebiliriz. Yukarıdaki örnekte de söylediğim gibi, Publication’ lar, makalelerden oluşur. Bir tane bile makaleniz olsa, bu, Publication şeklinde Publisher tarafından yayınlanır.

Burada anlattıklarımı, bir de görsel olarak aşağıdaki Şekil-1’ de anlatmanın daha yararlı olacağını düşünüyorum.

Şekil-1

Yukarıdaki Şekil-1’ de gördüğünüz gibi, “Publication_1” isimli bir yayınımız var ve bu yayın 4 makaleden (Article) oluşuyor. Bu Yayını (Publication) ise, Yayıncı (Publisher) yayımlıyor. Dağıtıcı (Distributor), yayını yayıncıdan alıp, ya iterek (Push) ya da abonelerin kendisinden yayını çekerek (Pull) yayınlama işlemini gerçekleştiriyor.

Bu arada, biliyorum bazen çok sıkıcı olabiliyorum. Aynı terimleri defalarca yazıyorum, ama maksadım bu terimlerin kafanızda daha belirgin şekilde yer etmesidir.


REPLICATION TEKNOLOJISINDE KULLANILAN AGENT’ lar

Yukarıda bahsetmiş olduğum yayınlama, itme, çekme gibi işler, Agent’ lar vasıtasıyla yapılıyor. Replication yapısında beş adet Agent bulunmaktadır. Her Agent aslında SQL Server’ dan bağımsız olarak uygulama şeklinde çalışırlar. Yani her Agent aslında bir uygulama (exe) dosyasıdır. Biraz da bu Agent’ lardan başlıklar halinde bahsedelim. O zaman inanıyorum ki işlevleri ve yapıları daha iyi anlaşılacaktır.

Snapshot Agent (snapshot.exe) : Snapshot Agent, Replication’ ın tüm yöntemlerinde kullanılan bir Agent’ tır. Tabloların ve diğer nesnelerin Şema (Schema) ve veri dosyalarını hazırlar. Snapshot dosyalarını depolar ve Dağıtım (Distribution) veritabanına, eşleşmeler (senkronizasyon) hakkındaki bilgileri kaydeder. Snapshot Agent, Dağıtıcı (Distributor) ‘nın üstünde çalışır. Yani Dağıtıcı görevi hangi SQL Server sunucusundaysa, Snapshot Agent da orada çalışır.

Log Reader Agent (logread.exe) : Log Reader Agent, sadece Transactional Replication yönteminde kulanılır. Yayıncının (Publisher) yayınladığı veritabanının Transaction Log’ unda bulunan ve Replication işlemi için işaretlenen kayıtları, Dağıtıcı (Distributor) görevini yapan SQL Server’ daki Dağıtım (Distribution) veritabanına taşır. Transactional Replication kullanılarak yayınlanan her veritabanının, Dağıtıcı’ da çalışan ve Yayıncı’ ya bağlanıp verileri alan Log Reader Agent’ ı vardır.

Distribution Agent (distrib.exe): Distribution Agent, Snapshot Replication ve Transactional Replication ile birlikte kullanılır. Başlangıç bilgilerini Abone’ ye (Subscriber) uygular; ayrıca Dağıtım (Distribution) veritabanında bulunan işlemleri de abonelere aktarır. Eğer Replication veri aktarma şekli olarak çekme (Pull) şekli kullanılırsa, Distribution Agent, Abone’ lik yapan SQL Server sunucusunda çalışır; Eğer itme (Push) kullanılırsa, o zaman da Dağıtıcı görevini üstlenen SQL Server’ da çalışır.

Merge Agent (replmerg.exe): Merge Agent, sadece Merge Replication yönteminde kullanılan bir Agent’ tır. Distribution Agent’ ın Snapshot Replication ve Transactional Replication’ da yaptığı görevi yapar. Başlangıç bilgilerini Abone’ ye uygular ve Dağıtım veritabanında bulunan işlemleri de abonelere aktarır. Her Merge Replication abonesinin, Yayıncıya ve Aboneye bağlayıp verileri güncelleyen kendi Merge Agent’ ları vardır. Gene Distribution Agent’ ta olduğu gibi veri aktarma yolu olarak Çekme yöntemi kullanılırsa Merge Agent Abone’ de çalışır, eğer İtme yöntemi kullanılırsa da Dağıtıcı’ da çalışır. Merge Agent, varsayılan olarak, değişiklikleri Abone’ den Yayıncıya gönderir ve Yayıncı’ daki veritabanında yapılan değişiklikleri de Abone’ nin veritabanına yansıtır.

Queue Reader Agent (qrdrsvc.exe): Queued Updating seçeneği ile birlikte Transactional Replication’ da kullanılır. Bu Agent, Dağıtıcı’ da çalışır ve Abone’ de yapılan değişiklikleri Yayıncıya aktarır. Distribution Agent ve Merge Agent’ ın aksine, sadece bir Queue Reader Agent örneği vardır.


PUBLISHER, DISTRIBUTOR ve SUBSCRIBER

SQL Server Replication teknolojisini SQL Server’ ın tüm sürümlerinde kullanabilirsiniz. Fakat kullandığınız sürüme göre, bazı kısıtlamalar vardır. Genel olarak aşağıdaki tabloda bu kısıtlamaları bulabilirsiniz.




SQL Server sürümleri arasındaki farkları daha ayrıntılı görmek için şu adresi ziyaret edebilirsiniz:
http://www.microsoft.com/sql/prodinfo/features/compare-features.mspx

Duruma göre, Replication kurulumlarında Publisher ve Distributor bir SQL Server sunucusu üzerinde konuşlandırılabilir. Bu, sisteminizdeki yük miktarına bağlı olarak değişir. Eğer sisteminizdeki yük fazla değilse ve SQL Server sunucunuz hem Publisher hem de Distributor görevlerinin yükünü kaldırabilecekse, o zaman Replication topolojinizi bu yönde şekillendirebilirsiniz. Yani Yayını, Yayıncı yayınlar ve dağıtır. Yalnız bu, Dağıtıcı’ nın aradan kalktığı anlamına gelmemektedir. Sadece Yayıncı ve Dağıtıcı’ nın aynı SQL Server üzerinde konuşlandırılacağı anlamına gelir. Sistem, gene aynı şekilde işler. Bu şekilde, merkezde bir SQL Server sunucusu kullanmış olursunuz. Bu da hem donanım, hem de lisans tasarrufu sağlar. Fakat yükün fazla olduğu ortamlarda, Publisher ve Distributor görevlerini ayrı ayrı SQL Server sunucularında gerçekleştirmek kaçınılmazdır.

Bu arada, veri aktarma yöntemi olarak İtme (Push) ve Çekme (Pull) yöntemlerine de bu noktada tekrar değinmek istiyorum. Neden ve neye göre İtme ve Çekme yöntemlerini kullanırız? Nedeni şu, Eğer dağıtım işiyle ilgili Agent’ ın (Yukarıda da bahsettik: Distribution veya Merge Agent) yükünü Distributor’ a yüklemek istiyorsak, Push kullanıyorduk; yani veri Distributor vasıtasıyla Publisher’ dan alınıyor ve Subscriber’ lara doğru itilmek suretiyle gönderiliyoruz. Eğer Distributor görevini ifa eden SQL Server’ daki bu yükü azaltmak istersek, o zaman Pull yöntemini kullanarak bahsini ettiğimiz Ditribution ve Merge Agent’ ın Subcriber’ lar üzerinde çalışmasını sağlıyoruz. Böylece yük sadece bir noktada toplanmamış oluyor, yükü abonelere dağıtıyoruz. Fakat Distributor bu görevi rahatlıkla ifa ediyor ise ve kısa ve orta vadede de geniş çaplı bir büyüme beklenmiyorsa, o zaman bu Agent’ lar Distributor üzerinde çalıştırılabilir; böylece Distribution ve Merge Agent’ larının yükleri güçsüz Abone cihazlarına yüklenmemiş olur.


REPLICATION YÖNTEMLERİ

Bu başlık altında, hangi Replication yönteminin ne işe yaradığını, ne amaçla kullanılabileceğini ve belli başlı özelliklerini anlatacağım.


Snapshot Replication:
Snapshot Replication yönteminde, kaynaktaki veriler olduğu gibi hedefe aktarılır. Kaynak veritabanında yapılan değişiklikler takip edilmez. Yani Snapshot Replication’ da, yapılan değişikliklere göre bir aktarma söz konusu değildir. Snapshot Replication, aşağıdaki durumlar söz konusu olduğunda kullanılmalıdır:

- Veri, nadir olarak değişiyorsa;

- Replication ile aktarılan verilerin güncelliğinin, Publisher’ daki verilere
nazaran eski olması kabul edilebiliyorsa;

- Replication için küçük miktardaki veriler kullanılıyorsa;

- Eğer kısa bir süre içerisinde, çok fazla veri değişikliği
gerçekleştiriliyorsa.

Bu Replication yönteminin kullanılabileceği bir örnek vermek istiyorum. Meselâ bir ürün listeniz var. Ürünleriniz senede bir veya iki kez güncelleniyor ve güncellendiklerinde de ürün listesinin %70’ i veya daha fazlası değişiyor. İşte bu durumda, Snapshot Replication kullanılabilir. Çünkü sürekli bir şekilde veri değişikliği yapılmıyor, ayrıca veri değişikliği yapıldığında da veriler büyük miktarda değişiyor.

Bir örnek daha verelim, meselâ küçük boyutlarda bir tablomuz var. Bu tablomuzun her gece saat 12’ de güncellenmesi gerekiyor. Tablo boyutu küçük olduğundan dolayı ve güncellemenin sürekli veya tam zamanlı değil de, geceden geceye yapılması gerektiğinden dolayı Snapshot Replication bu durum için idealdir.

Eğer veri boyutu büyük olsaydı veya güncellemelerin sürekli takip edilmesi gerekseydi, o zaman Snapshot Replication senaryolarımız için uygun olmayacak ve diğer Replication yöntemlerini düşünecektik.


Transactional Replication:
Transactional Replication, Şema ve verilerin tamamının abonelere gönderilmesiyle başlar. Daha sonra, Publisher’ daki veritabanında yapılacak olan değişiklikler nerdeyse gerçek zamanlı olarak abonelere aktarılır. Publisher’ daki veritabanında yapılan değişiklikler, aynen değişiklik sırasına göre Abone’ lerde de uygulanır. Böylece, veri tutarlılığı garanti edilmiş olur. Transactional Replication, daha ziyade sunucular arası kullanılan bir Replication yöntemidir.

Transactional Replication’ ın kullanımı, aşağıdaki durumlarda uygun olacaktır:

- Eğer Publisher’ da gerçekleşen değişikliklerin, gerçekleşir gerçekleşmez
Subscriber’ lara iletilmesini istiyorsanız;

- Eğer toptan değil de, her veri değişikliğinin tek tek Abone’ de uygulanmasını
istiyorsanız (Örn: Publication’ daki bir tabloda bulunan bir veri, Abonelere
ulaştırılmadan önce 5 kere değişmişse, her değişiklik sırasıyla Abone’ de de
uygulanır. Yani sadece 5nci değişiklik yapılmaz.);

- Eğer Publisher’ da çok sık olarak Insert, Update ve Delete işlemleri
uygulanıyorsa;

- Eğer Publisher veya Subscriber, SQL Server değil de Oracle gibi başka bir
uygulama ise.

Transactional Replication varsayılan olarak tek taraflı çalıştığı için, yani Publisher’ dan Subscriber’ a gönderilen veriler sadece Publisher’ da günellenebildiği için ve Subscriber’ daki veritabanında yapılacak değişikliklerin Publisher’ daki veritabanına bir etki yapmayacağı için Subscriber’ daki verilere Salt Okunur olarak davranılmalıdır. Aksi takdirde, Publisher’ daki verilerle Subscriber’ daki veriler birbirlerini tutmayacaktır.

Transactional Replication’ da, Subscriber’ ların da veri güncellemesi yapabileceği bir biçim vardır. Updatable Subscriptions for Transactional Replication yöntemi kullanılarak, Abone’ lerin de güncelleme yapması ve bu güncellemelerin Publisher’ a da yansıtılması sağlanabilir. Fakat bu yöntem daha ziyade arada sırada değişiklik yapılan Abone’ lerde kullanılmalıdır.

Bir de, SQL Server 2005 ile birlikte gelen yeni bir yöntem olan Peer to Peer Replication yöntemi mevcuttur. Bu yöntem ise her noktadaki bilgilerin aynı olması ve her noktanın hem Publisher hem de Subscriber gibi davranmasını istediğinizde kullanılabilir. Aynı satır, her seferinde sadece bir nokta tarafından değiştirilebilir.


Merge Replication:
Merge Replication da, Transactional Replication gibi tipik olarak Yayın nesnelerinin Şema ve verilerin Abone’ lere gönderilmesiyle başlar. Devamında Publisher’ da ve Subscriber’ da yapılacak Şema ve veri değişiklikleri, Trigger’ lar vasıtasıyla takip edilir. Abone, Yayıncı ile yapacağı veri eşleştirmesini, ağa bağlandıktan sonra yapar; son eşleştirmeden bu yana kendinde (yani Abone’ de) ve Yayıncı’ da yapılan tüm değişiklikler iki tarafa da işlenir ve eşleştirme yapılmış olur. Merge Replication, daha ziyade Sunucu ve İstemci’ ler arası kullanılan bir Replication yöntemidir.

Aşağıdaki koşullar gerçekleştiğinde, Merge Replication’ ı kullanmak avantajlıdır:

- Bir çok Abone’ nin aynı veriyi değişik zamanlarda güncellemesi ve
değişiklikleri Yayıncıya ve diğer Abonelere yapması gerektiğinde;

- Abone’ lerin veriyi alması, veri üstünde çevrimdışıyken değişiklik yapması ve
daha sonra Yayıncı ile diğer Abonelere eşletirme yapması gerektiğinde;

- Her abonenin, verinin farklı bir bölümüne ihtiyaç duyduğu zaman;

- Transactional Replication’ ın aksine, Abone’ de 5 değişiklik yapıldığında,
Yayıncı’ ya sadece beşinci değişikliğin ardından çıkan sonuç gönderilir. Yani
değişiklikleri sayı ile gösterirsek, bir tablonun 4. satırında 5 defa
değişiklik yapıldı diyelim, Transactional Replication’ da, Yayıncı’ ya
bu beş değişiklik de tek tek gönderilirdi; ama Merge Replication’ da, Abone’
de 1., 2., 3., 4. değişiklik yapılır; ama Yayıncı’ ya, kaydın sadece 5.
değişiklik yapılmış hali gönderilir.

Merge Replication yöntemi, değişik noktalara değişik zamanlardayken ve çevrimdışıyken değişiklik yapma şansı verdiği için, aynı veri iki noktada ve aynı zamanda değiştirilmiş olabilir. İki nokta da eşleştirme yapmaya kalktığı zaman, çatışma (Conflict) yaşanacaktır. Bunun da Merge Replication’ da farklı çözümleri bulunmaktadır. Bu makaledeki konumuz çatışmaları kapsamıyor, başka bir makalede değinirim bu konuya da.

Merge Replication’ ı, el terminallerinin, dizüstü bilgisayarların vs. kullanıldığı ortamlarda kullanabiliriz. Meselâ büyük bir firmanın pazarlamacılarının sabah şirketten çıktığını, gündüz el terminalleriyle bakkallardan ve restaurantlardan sipariş aldığını ve akşam da şirkete gelip, el terminallerindeki verileri veritabanına aktardıklarını düşünebiliriz...


Selamlar!
Ekrem Önsoy