1 Kasım 2009 Pazar

Dedicated Administrator Connection Portu

Merhaba arkadaşlar,


Her zaman başınıza gelebilecek birşey değiş, fakat geçenlerde benim başıma geldi ve açıkçası bu konuda bir kaynak bulmakta zorlandım. Hatta bulamadım, fakat biraz kurcalayınca çözümü kendim buldum.

Dedicated Administrator Connection (DAC) Portunun nereden ve neden değiştirilebileceği hiç aklınıza geldi mi? Geçenlerde yeni kurduğum bir SQL Server 2008 Instance' ının DAC' nin portunun standardizasyon ve Güvenlik Duvarı tarafındaki Kural tanımları için değiştirmem istendi.

İlk etapta aklıma birşey gelmedi, çünkü ne SQL Server Configuration Manager' da ne de başka bir arayüzde bu ayarla ilgili bir bölüm gördüğümü hatırlamamıştım. Tabii ki yapılabilecek en mantıklı şey olarak hemen Google' a sordum. Tam bir hayal kırıklığıydı, konu hakkında neredeyse hiçbir bilgiye ulaşamadım. Kim bilir, belki de ben yanlış kelimeleri arattım?

Neyse, daha fazla gevezelik etmeden çözümü ve konuyu açıklamaya başlayayım.

Öncelikle, her SQL Server 2005 ve üzeri Instance' ına, kurulum esnasında bir DAC portu atanır. SQL Server Instance' ınızın DAC portunu, SQL Error Log' unun başlangıcında aşağıdaki örnekte verilen satırdaki gibi görebilirsiniz:

SQL Error Log' dan örnek satır:
Dedicated admin connection support was established for listening locally on port 49486.
Server is listening on [ 127.0.0.1 49486].

DAC portunun değiştirilmesi gerektiği söylendiğinde aklıma birşeyin gelmemesi normalmiş. Çünkü gerçekten de aradım taradım ve bu ayarın nereden değiştirilebileceğini gösteren herhangi bir yazı, resim, arayüz vs. bulamadım.

Aklıma, bu tür ayarların Kayıt Defterinde (Registry) saklandığı geldi ve DAC' ye atanan portu Kayıt Defterinde arattım ve aşağıdaki anahtara ulaştım:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10.S08\MSSQLServer\SuperSocketNetLib\AdminConnection\Tcp

Eğer bu anahtarı elle değiştirirseniz ve SQL Server servisini durdurup tekrar başlatırsanız, yeni DAC portunuzun artık sizin atadığınız port olduğunu göreceksiniz. DAC portu, Dynamic bir port değildir. Bu nedenle her SQL Server servisinin kapanıp açılmasıyla değişmez. Hangi port belirtilmişse, hep o port kullanılmaya çalışılır.

"[Microsoft][ODBC SQL Server Driver]Unspecified error occured on SQL Server. Connection may have been terminated by the server. OS Error: 0"

HATA MESAJI:
"[Microsoft][ODBC SQL Server Driver]Unspecified error occured on SQL Server. Connection may have been terminated by the server. OS Error: 0"

AÇIKLAMA:
SQL Server' a bağlantı kurduktan hemen sonra veya birkaç dakika sonra bu hata mesajını alarak kopma sorunları yaşayabilirsiniz.

ÇÖZÜM:
Bu sorun, Windows Server 2003 ile ilgili bir sorundur. Sorunu çözmek için şu KB’ deki Fix’ i kullanabilirsiniz:

“http://support.microsoft.com/kb/948496”

"DROP DATABASE statement cannot be used inside a user transaction"

HATA MESAJI:
"DROP DATABASE statement cannot be used inside a user transaction"

AÇIKLAMA:
“DROP DATABASE” komutuyla bir veritabanını silmeye çalıştığınızda bu hata mesajını alabilirsiniz.

ÇÖZÜM:
Bu hata mesajını alıyorsanız, bu komutu çalıştırdığınız oturumdaki (Session) Transaction açık kalmıştır. ROLLBACK veya COMMIT komutlarını kullanarak bu Transaction’ ı sonlandırın veya başka bir oturum açın ve “DROP DATABASE” komutunu tekrar çalıştırın.

"Exclusive access could not be obtained because the database is in use."

HATA MESAJI:
"Exclusive access could not be obtained because the database is in use."

AÇIKLAMA:
Bu hatayı, işlem yapmak istediğiniz veritabanına başka bir işlem tarafından X (Exclusive) Lock konduğunda alırsınız. Buna bir örnek, Restore olan bir veritabanı olabilir... Bir veritabanı Restore oluyorken, Restore işlemini yapan SPID bu işlemi gerçekleştirmek adına bu veritabanı için X Lock alır.

ÇÖZÜM:
SQL Server 2005 ve daha üstü versiyonlarda "sys.dm_tran_locks" DMV' si ile hangi SPID' nin hangi veritabanı için ne çeşit bir Lock aldığını görebilirsiniz.

SQL Server 2000 için ise "sp_lock" sistem SP' sini kullanabilirsiniz.

"Dedicated administrator connections are not supported. (ObjectExplorer)"

HATA MESAJI:
"Dedicated administrator connections are not supported. (ObjectExplorer)"

AÇIKLAMA:
DAC (Dedicated Administrator Connection) özelliğini kullanarak SQL Server’ a bağlanmak için SSMS’ teki Object Explorer kullanıldığında böyle bir hata ile karşılaşılır.

ÇÖZÜM:
DAC kullanarak SQL Server’ a bağlantı kurmak için SQLCMD veya Query Editor kullanılmalıdır.

"Cannot drop full-text catalog 'katalog adı' because it contains a full-text index."

HATA MESAJI:
"Cannot drop full-text catalog 'katalog adı' because it contains a full-text index."

AÇIKLAMA:
Bir Full-Text Catalog’ u silmeye çaliştığınızda bu mesaj ile karşılaşabilirsiniz. Bunun nedeni, mesajın da söyledigi gibi bu kataloğun bir Index tarafından kullanılıyor olmasıdır.

ÇÖZÜM:
Hangi tablonun Full-Text Index kullandığını tespit etmek için aşağıdaki kodu çalıştırın:

SELECT name, ftcatid FROM sysobjects WHERE ftcatid > 0

BBu komutu çalıştırdıktan sonra, Full-Text kullanan tablolar listelenecek. Index’ in kullanımını kaldırmak için de aşağıdaki kodu çalıştırın:

EXEC sp_fulltext_table ‘tablo_adi’, ‘drop’ Artık sorunlu Full-Text Catalog’ unuzu aşağıdaki kod ile kaldırabilirsiniz:

DROP FULLTEXT CATALOG fulltext catalog adi>

"Could not backup database: The backup of full-text catalog 'index_adi' is not permitted because it is not online. Check errorlog file for the reason

HATA MESAJI:
"Could not backup database: The backup of full-text catalog 'index_adi' is not permitted because it is not online. Check errorlog file for the reason that full-text catalog became offline and bring it online. Or BACKUP can be performed by using the FILEGROUP or FILE clauses to restrict the selection to include only online data."

AÇIKLAMA:
Eğer yedeğini almaya çalıştığınız veritabanındaki Full-text Catalog, Online değil ise o zaman yedek almaya çalışırken bu hata ile karşilaşabilirsiniz.

ÇÖZÜM:
Hangi tablonun Full-Text Index kullandığını tespit etmek için aşağıdaki kodu çalıştırın:

SELECT name, ftcatid FROM sysobjects WHERE ftcatid > 0

BBu komutu çalıştırdıktan sonra, Full-Text kullanan tablolar listelenecek. Index’ in kullanımını kaldırmak için de aşağıdaki kodu çalıştırın:

EXEC sp_fulltext_table ‘tablo_adi’, ‘drop’ Artık sorunlu Full-Text Catalog’ unuzu aşağıdaki kod ile kaldırabilirsiniz:

DROP FULLTEXT CATALOG fulltext catalog adi>

"One or more files do not match the primary file of the database. If you are attempting to attach a database, retry the operation with the corr

HATA MESAJI:
"One or more files do not match the primary file of the database. If you are attempting to attach a database, retry the operation with the correct files. If this is an existing database, the file may be corrupted and should be restored from a backup."

AÇIKLAMA:
Eğer veri ve Transaction Log dosyaları farklı tarihli yedeklere aitse, böyle bir hata mesajı alınabilir.

Örneğin, “skorlar” isimli bir veritabanınız olduğunu düşünün. Bunun yedeğinin ise doğrudan *.mdf\ndf ve *.ldf şeklinde alındığını düşünün. Eğer 30.09.2009 tarihindeki veri dosyalarını ve 01.10.2009 tarihli Transaction Log dosyalarını birleştirip, veritabanını bu şekilde iliştirmeye çalışırsaniz bu hata mesajıyla karşılaşırsınız.

ÇÖZÜM:
Doğru veri ve Transaction Log dosyalarını eşleştirmeli ve böyle iliştirmelisiniz (Attach).

"'ONLINE' is not a recognized ALTER INDEX REBUILD PARTITION option."

HATA MESAJI:
"'ONLINE' is not a recognized ALTER INDEX REBUILD PARTITION option."

AÇIKLAMA:
Bir Partitioned Tabloda Index Rebuild çalışması yaparken, şayet ONLINE = ON özelliğini kullanırsanız bu hata mesajı ile karşılaşırsınız.

ÇÖZÜM:
Bu hata mesajını almanızın nedeni, SQL Server' ın Partition' lanmış tablolarda Index Rebuild işleminin ONLINE özelliğinin olmamasındandır.

Partition' lanmış tablolardaki Index' lerinizi Rebuild etmek istediğiniz zaman, bu işi OFFLINE yapmak durumundasınız.