2 Mart 2009 Pazartesi

Bir ağdaki SQL Server Instance' larını bulmak...

Merhaba Arkadaşlar!


Hiç, ağınızdaki SQL Server Instance' larını bulmanız gerektiği oldu mu? Bunun için bazı teknikler veya uygulamalar kullanabilirsiniz.

Örneğin, bir Active Directory' niz varsa, o zaman şirketinizde mantıksal bir prosedür oluşturursunuz ve bu prosedüre göre oluşturulacak olan SQL Server Instance' larını Active Directory' nize kaydedersiniz ve ağda yüklü olan SQL Server Instance' larını bulmak için de Active Directory' de arama yapabilirsiniz.

Ya da, SQLPing veya SQLRecon gibi uygulamaları kullanabilirsiniz. Bu uygulamalar hakkında daha fazla bilgi edinmek ve uygulamaları indirmek için aşağıdaki adresi ziyaret edebilirsiniz.

http://www.sqlsecurity.com/Tools/FreeTools/tabid/65/Default.aspx


Ekrem Önsoy

SQL Server 2008 Management Studio Express Edition

Merhaba Arkadaşlar!


SQL Server 2008 Management Studio Express Edition' ı artık tek başına da aşağıdaki adresten indirebilirsiniz.

https://www.microsoft.com/downloads/details.aspx?FamilyID=08e52ac2-1d62-45f6-9a4a-4b76a8564a2b&displayLang=en


Ekrem Önsoy

"System.Data.SqlClient.SqlError: Backup and file manipulation operations (such as ALTER DATABASE ADD FILE) on a database must be serialized. Reissue

HATA MESAJI:
"System.Data.SqlClient.SqlError: Backup and file manipulation operations (such as ALTER DATABASE ADD FILE) on a database must be serialized. Reissue the statement after the current backup or file manipulation operation is completed. (Microsoft.SqlServer.Smo)"

AÇIKLAMA:
Veritabanınızın yedeğini almak istediğinizde böyle bir hata mesajı ile karşılaşabilirsiniz.

ÇÖZÜM:
Veritabanınızın yedeğini almak istediğinizde, eğer başka bir kişi veya iş tarafından da aynı veritabanının yedeği zaten alınıyorsa o zaman bu hata ile karşılaşırsınız.

Aşağıdaki komutu çalıştırıp, o anda bir yedekleme işlemi yapılıp yapılmadığından emin olabilirsiniz:

SELECT * FROM sys.dm_exec_requests WHERE session_id > 51

Bu komutu çalıştırdıktan sonra "Command" alanında "BACKUP DATABASE" gibi bir komut görürseniz, anlayın ki o anda zaten yedek alınıyor.

"Invalid object name 'dbo.syspublications'. (Microsoft SQL Server, Error: 208)"

HATA MESAJI:
"Invalid object name 'dbo.syspublications'. (Microsoft SQL Server, Error: 208)"

AÇIKLAMA:
Yeni bir Publication oluştururken böyle bir hata mesajı ile karşılaşabilirsiniz.

ÇÖZÜM:
Öncelikle, eğer Distributor olarak başka bir sunucuyu yapılandırdıysanız, veritabanınızı yayınlayacağınız sunucunun, Distributor' daki Publishers listesinde olduğundan emin olmalısınız.

Daha sonra eski Publication' dan arta kalan tüm Replication ayarlarını temizleyebilirsiniz. Bunu da "sp_removedbreplication" sistem Stored Procedure' ü ile yapabilirsiniz.

Örnek:
sp_removedbreplication 'veritabanı_adı'

Bu adımlardan sonra muhtemelen bu hatayı almayacaksınız, en azından benim durumumda bu adımlar bu sorunu çözdü.

9 Şubat 2009 Pazartesi

SQL Server Instance' ına Sistem Yöneticisi Olarak Giremediğinizde

Merhaba arkadaşlar,

Olmaz demeyin, gerçekten olduğuna kaç kere şahit oldum. Kullanıcılar bazen farkında olmadan tüm System Administrator yetkisine sahip Login' leri silebiliyorlar ve bunun sonucunda da SQL Server Instance' larına yönetici olarak bağlanamıyorlar.

Bu gibi durumlarda genellikle başvurulan yöntem, SQL Server Instance' ının sistemden kaldırılması, yeni bir SQL Server Instance' ının kurulması ve veritabanlarının yeni Instance' a bağlanması oluyor. Bu şekilde, eğer sistem veritabanlarının (master, msdb gibi) yedekleri yoksa, tüm Maintanence Plan' lar, Job' lar, Login' ler vb. yok oluyor. Zaten bu sistem veritabanlarının yedekleri olsa dahi, Login bilgilerinin saklandığı "master" veritabanında da "sysadmin" rolüne üye bir Login bulunmayabilir. Ayrıca bu, çok zahmetli ve zaman alıcı bir iş olacaktır.

Bunun yerine aşağıdaki yöntemi uygulamanızı tavsiye ederim:

- Sisteme Yerel Yöneticiler (Local Administrators) Windows grubuna üye bir kullanıcıyla oturum açın,
- SQL Server Intance' ınızı Tek Kullanıcılı Mod (Single User Mode)' da açın, bunun için:
- SQL Server Configuration Manager' ı açın,
- SQL Server 2005 Services isimli düğüme tıklayın ve sağdaki pencereden ilgili SQL Server Instance' ınızın
özelliklerine (Properties) gidin,
- "Advanced" sekmesinde, "Startup Parameters" özelliğini bulun ve oraya, Resim-1' deki gibi "-m" parametresini
ekleyin.
- Parametre ekleme işleminden sonra SQL Server Instance' ınızın Veritabanı Motoru (Database Engine) servisini
durdurup yeniden başlatmanız gerekiyor.

Resim-1


Burada dikkat etmeniz gereken şey ise, SQL Server Instance' ınızın artık sadece bir kullanıcı kabul edeceğidir. Bu yüzden ilgili SQL Server Instance' ına ait SQL Server Agent servisinin çalışmadığından emin olun.

Tüm bu gereklilikleri yerine getirdikten sonra, SQL Server Management Studio (SSMS)' yu açın ve Query Editor' ü kullanarak ilgili SQL Server Instance' ınıza bağlanın. Object Explorer' dan değil, Query Editor' den bağlandığınıza emin olun, çünkü Object Explorer' dan bağlandığınızda sistemi eski haline getirmek için Login değişiklikleri yapmak istediğinizde SSMS SQL Server Instance' ınıza birden fazla bağlantı kurmak isteyecektir ve sistem de bunu kabul edemeyeceği için bu da hataya neden olacaktır.

SSMS' i açtıktan sonra yeni bir Query Editor penceresi açmak için SSMS' in sol üst köşesinde bulunan New Query düğmesine tıklayabilir veya File->New->Database Engine Query menüsünü kullanabilirsiniz.

Query Editor' de yeni bir sorgulama penceresi açtıktan sonra System Administrator haklarına sahip yeni bir kullanıcı oluşturmak için aşağıdaki komutları kendi ortamınıza uyarlayarak çalıştırmanız gerekiyor:

-- Yeni bir Windows Login oluşturma:
CREATE LOGIN [Test6\Administrator] FROM WINDOWS

-- Oluşturulan Login' i "sysadmin" Server Fixed Role' üne üye yapma:
EXEC sp_addsrvrolemember 'test6\Administrator', 'sysadmin';

Yeni Login oluşturma hakkında daha fazla bilgi için aşağıdaki adrese gözatın:
http://msdn.microsoft.com/en-us/library/ms189751(SQL.90).aspx

sp_addsrvrolemember Sistem Stored Procedure' ü için ise aşağıdaki adresi inceleyebilirsiniz:
http://msdn.microsoft.com/en-us/library/ms186320.aspx

Yeni Login de oluşturulup gerekli haklar verildikten sonra SQL Server Instance' ınıza başlangıç parametresi olaran eklediğiniz "-m" parametresini yukarıda izlediğiniz yolu izleyerek çıkarıp, SQL Server Instance' ınızın Database Engine servisini tekrar başlatmanız gerekir ve artık oluşturduğunuz Login ile SQL Server Instance' ınıza Sistem Yöneticisi olarak bağlanabilirsiniz!



Ekrem Önsoy