9 Eylül 2009 Çarşamba

"Procedure expects parameter '@statement' of type 'ntext/nchar/nvarchar'."

HATA MESAJI:
"Procedure expects parameter '@statement' of type 'ntext/nchar/nvarchar'."

AÇIKLAMA:
sp_executesql sistem SP' si ile bir değişkendeki komutu çalıştırdığınızda bu hata mesajı ile karşılaşabilirsiniz.

Örnek:
DECLARE @komut VARCHAR(150)
SET @komut = 'SELECT * FROM TABLOM'

EXEC sp_executesql @komut

veya hiç değişken kullanmadan doğrudan aşağıdaki gibi bir komut çalıştırırsanız da aynı hata mesajıyla karşılaşırsınız:

EXEC sp_executesql 'SELECT * FROM TABLOM'

ÇÖZÜM:
Aslında hatanın nedeni, hata mesajının içerisinde de açıkça yazıyor. sp_executesql sistem SP' si için kullanacağınız @statement parametresi UNICODE olmalıdır. Bu @statement parametresi ister ilk örnekteki gibi bir değişken kullanılarak belirtilmiş olsun, isterse ikinci örnekteki gibi statik bir şekilde yazılmış olsun.

Yukarıdaki örneklerin doğruları ise şu şekildedir:
DECLARE @komut NVARCHAR(150)
SET @komut = N'SELECT * FROM TABLOM'

EXEC sp_executesql @komut

vve

EXEC sp_executesql N'SELECT * FROM TABLOM'

"SQL Server 2000 is not installed on this machine. Setup will not exit."

HATA MESAJI:
"SQL Server 2000 is not installed on this machine. Setup will not exit."

AÇIKLAMA:
Hiçbir SQL Server 2000 Instance' ının yüklü olmadığı bir makinede SP4' ü çalıştırırsanız veya sadece SQL Server 2000' in x64 versiyon Instance' larının bulunduğu bir makinede SP4' nin x86 versiyonunu çalıştırırsanız (veya tam tersi) o zaman bu mesaj ile karşılaşırsınız.

ÇÖZÜM:
SP' yi çalıştırdığınız sunucuda SQL Server 2000 Instance' ı olduğundan emin olun.

Ayrıca, çalıştırdığınız SP ile yüklü olan SQL Server 2000 Instance' larının aynı işlemci mimarisini (yani ikisi de x64 veya ikisi de x86 veya ikisi de x64-ITA olmalı) kullandığından emin olun.

"SQL Server 2000 is not installed on this machine. Setup will not exit."

HATA MESAJI:
"SQL Server 2000 is not installed on this machine. Setup will not exit."

AÇIKLAMA:
Hiçbir SQL Server 2000 Instance' ının yüklü olmadığı bir makinede SP4' ü çalıştırırsanız veya sadece SQL Server 2000' in x64 versiyon Instance' larının bulunduğu bir makinede SP4' nin x86 versiyonunu çalıştırırsanız (veya tam tersi) o zaman bu mesaj ile karşılaşırsınız.

ÇÖZÜM:
SP' yi çalıştırdığınız sunucuda SQL Server 2000 Instance' ı olduğundan emin olun.

Ayrıca, çalıştırdığınız SP ile yüklü olan SQL Server 2000 Instance' larının aynı işlemci mimarisini (yani ikisi de x64 veya ikisi de x86 veya ikisi de x64-ITA olmalı) kullandığından emin olun.

5 Eylül 2009 Cumartesi

"Argument data type xml is invalid for argument 1 of like function"

HATA MESAJI:
"Argument data type xml is invalid for argument 1 of like function"

AÇIKLAMA:
XML bir alanda LIKE operatörünü kullanarak bir sorgu çalıştırdığınızda böyle bir hata ile karşılaşabilirsiniz.

ÇÖZÜM:
Örneğin "KategoriID INT", "YayinEvi NVARCHAR(70)", "Kitap XML" gibi alanları olan "Kitaplar" adlı bir tablonuz olduğunu varsayalım. Bu tablodaki Kitap isimli alanda LIKE operatörünü kullanarak, aşağıdaki gibi bir sorgu çalıştırırsanız:

SELECT KategoriID, YayinEvi FROM Kitaplar WHERE Kitap LIKE '%lay lay lom%'

O zaman bu hata ile karşılaşırsınız, çünkü XML alanını doğrudan LIKE operatörü ile sorgulayamazsınız. Böyle bir sorgunun çalışması için XML alanını NVARCHAR' a dönüştürebilirsiniz:

SELECT KategoriID, YayinEvi FROM Kitaplar WHERE (CAST(Kitap AS NVARCHAR(MAX)) LIKE '%lay lay lom%'

"The backed-up database has on-disk structure version 611. The server supports version 539 and cannot restore or upgrade this database. RESTORE

HATA MESAJI:
"The backed-up database has on-disk structure version 611. The server supports version 539 and cannot restore or upgrade this database. RESTORE FILELIST is terminating abnormally. (Microsoft SQL Server, Error: 3169)"

AÇIKLAMA:
SQL Server Management Studio kullanarak, bir SQL Server 2005 (90) versiyonu veritabanı yedeğini, bir SQL Server 2000 Instance' ına açmaya (Restore) çalışırsanız bu ve versiyon farklılığından kaynaklanabilecek benzeri bir hata mesajıyla karşılaşırsınız.

ÇÖZÜM:
Genel bir kural vardır, yeni versiyonlar eski versiyonları bilir; fakat eski versiyonlar yeni versiyonlardan bihaberdir. Bu konuda da bu kural geçerliliğini sürdürmektedir. Yani, SQL Server 2000 versiyon bir yedek dosyasını SQL Server 2005 Instance' ında açabilirsiniz; ama tam tersini yapamazsınız. Çünkü 2000, 2005' i tanımaz.

Eğer bir SQL Server 2005 yedeğini bir SQL Server 2000 Instance' ına açma gibi bir ihtiyacınız varsa, o zaman bu yedeği bir SQL Server 2005 Instance' ında açın ve bu veritabanının Script' ini çıkarın ve bu Script' i (2000' e uyumsuz yerleri çıkararak veya değiştirerek) 2000 Instance' ında çalıştırın. 2005 versiyon veritabanınızı 2000 Instance' ında ancak böyle oluşturabilirsiniz.

SSMS - Query Editor: Dosya Uzantısı

Merhaba arkadaşlar,


SQL Server Management Studio (SSMS)' teki Query Editor' de bir Script dosyasını çalıştırmak istiyorsanız, varsayılan olarak bu Script dosyasının uzantısının *.SQL olması gerekiyor.

Geçenlerde şöyle bir soru gördüm: "Ben, *.TXT dosyası gibi başka dosyaları da Query Editor' de aynen *.SQL dosyaları gibi çalıştırabilmek istiyorum. Query Editor tasarlanırken, sadece *.SQL uzantılı dosyaları çalıştırması için 'hard-coded" bir yöntemle mi yazılmış?" Biraz açıklama gerekebilir diye şöyle ifade edeyim, örneğin *.TXT uzantılı bir dosyayı Query Editor' de açarsanız, Execute düğmesinin görünmediğini ve F5 ile de bu dosyadaki kodları çalıştıramadığınızı görürsünüz.

Sorunun cevabı kısmen "Evet". Yani, *.SQL uzantılı dosyalar Query Editor' de varsayılan olarak ve "hard-coded" olarak çalışabilir şekilde tanımlanmıştır. Fakat istenilen dosya uzantılarının da çalıştırılabilir dosyalar listesine eklenmesi mümkün kılınmıştır.

Örneğin, eğer *.TXT uzantılı Script dosyalarını da aynen *.SQL dosyaları gibi çalıştırmak isterseniz aşağıdaki adımları izleyin:

- SSMS' i açın,
- Ana menüden Tools --> Options,
- Options penceresinde, sol tarafta bulunan listeden Text Editor --> File Extention,
- File Extention bölümünde, "Extention" kutusuna "txt" yazıp, "Editor" açılır kutusundan da "SQL Query Editor" ü seçip "Apply" düğmesine tıklayın ve "OK" düğmesine basarak "Options" penceresini kapatın.

Artık *.TXT uzantılı dosyalarınız da aynen *.SQL dosyaları gibi çalıştırılabilir bir şekilde açılacaktır.

Not:
Bu ayarlar SSMS' in SQL Server 2005 ve 2008 versiyonları için de aynıdır.


Ekrem Önsoy

"Status: 0, code: 20015, text: 'Login failed for user ''. The user is not associated with a trusted SQL Server connection."

HATA MESAJI:
"Status: 0, code: 20015, text: 'Login failed for user ''. The user is not associated with a trusted SQL Server connection."

AÇIKLAMA:
Aslında çok standart bir hata mesajı gibi duruyor. Fakat bu hata mesajını bir Replication senarsoyunda almıştım.

Bu kurulumda, Log Reader Agent' ın çalıştığı SQL Server Instance' ının SQL Server servisleri Local System hesabıyla çalışıyordu ve Log Reader Agent' ı, Publisher sunucusuna Windows Authentication ile bağlanmak üzere ayarlanmıştı ve Publisher' da da, Subscriber sunucusu için bir Bilgisayar Hesabı Login' i yoktu.

Hata mesajının tamamına bir örnek:
2009-08-27 06:46:06.297 Copyright (c) 2005 Microsoft Corporation
2009-08-27 06:46:06.297 Microsoft SQL Server Replication Agent: logread
2009-08-27 06:46:06.297
2009-08-27 06:46:06.297 The timestamps prepended to the output lines are expressed in terms of UTC time.
2009-08-27 06:46:06.297 User-specified agent parameter values:
-Publisher SUNUCU1
-PublisherDB VERITABANIM
-Distributor SUNUCU2
-DistributorSecurityMode 1
-Continuous
--XJOBID 0x6584F2DEBAB77C4C9A509D4A9A0506BE
-XJOBNAME SUNUCU1-VERITABANIM-1
-XSTEPID 2
--XSUBSYSTEM LogReader
-XSERVER SUNUCU1
-XCMDLINE 0
-XCancelEventHandle 00000000000003B4
-XParentProcessHandle 0000000000000468
2009-08-27 06:46:06.527 Status: 0, code: 20015, text: 'Login failed for user ''. The user is not associated with a trusted SQL Server connection.'.
22009-08-27 06:46:06.527 Login failed for user ''. The user is not associated with a trusted SQL Server connection.

Not: Bu mesajdaki gerçek bilgiler sahteleriyle değiştirilmiştir.

ÇÖZÜM:
Böyle bir durum için, Publisher tarafında oluşturacağınız bir SQL Server Login' ini kullanabilirsiniz. Bu Login' i "sysadmin" Server Fixed Role' üne dahil etmeniz uygundur.

SQL Server Management Studio' yu çalıştırın ve ilgili SQL Server Instance' ına bağlanın. Daha sonra aşağıdaki yolu izleyerek:

Object Explorer' dan Replication-->Local Publications-->Publication Properties-->Agent Security-->Log Reader Agent Security-->Connect to the Publisher’ da, Using the following SQL Server Login... kutularına, Log Reader için oluşturduğunuz SQL Server Login' inin bilgilerini girin ve bu sorundan kurtulun.

"The process is running and is waiting for a response from the server."

BİLGİ MESAJ:
"The process is running and is waiting for a response from the server."

AÇIKLAMA:
Eğer Synchronization penceresinde böyle bir mesaj görüyorsanız, o zaman SQL Server tarafında uzun süren bir işlem gerçekleşiyordur.

Örneğin Bulk Insert veya Index oluşturulması... Bu durumda yapmanız gereken bir şey yok, sadece bekleyin.