27 Aralık 2009 Pazar

SQL Server ve Oracle Golden Gate hakkında yazılar...

Merhaba Arkadaşlar!


Şu anda çalışıyor olduğum banka, Online Reporting (Gerçek zamanlı) projeleri için "Oracle Golden Gate" ürününü kullanmaya karar verdi ve bu yönde yatırımlar yaptı. Bu ürünün yönetimi, bakımı, kurulumu vb. sorumlulukları bana ait. Bu nedenle bu ürünü önceden hiç bilmiyor olmama rağmen (hâlâ da iyi biliyorum gibi bir iddiam yok), geçen 3-4 aylık kullanım sürecinde birçok şey öğrendim. Bu konuda ITD isimli, Golden Gate' in distribütörlüğünü yapan firma ile de çalışıyoruz.

Zaman zaman bu ürünle ilgili sorunlar yaşadık ve hâlâ da yaşıyoruz. Sorun yaşadığımızda, ulu Google' ın bu sorunlar hakkında hiçbir şey bilmediğini gördüm. Ne yerli ne de yabancı herhangi bir kayıt, yazı vs. yok. Bunun nedenini, bu ürünü daha ziyade büyük şirketlerin kullanmasına (çünkü gerçekten maliyeti yüksek bir ürün) ve bu şirketlerin de bu ürünün distribütörleri ile bakım anlaşmaları olmasına bağlıyorum. Bu nedenle sorun çıktığında, doğrudan bakım anlaşması yapılan şirket aranıyor ve böylece Google vb. aradan çıkarılmış oluyor... Çalışıyor olduğum şirket de bir istisna değil.

Oracle Golden Gate' in Oracle Database gibi "platform free" olması ve birçok (10~) DBMS ürününü desteklemesi, bu ürünün SQL Server ile olan iş birliği hakkındaki olası bilgi paylaşımını daha da azaltıyor. Biz bu ürünü şirketimizde SQL Server ile birlikte kullanıyoruz ve bu konuda şirket içindeki Proses Talimatlarını da ben hazırlıyorum. Bu yazılarımı ve tecrübelerimi -her ne kadar küçük ve orta ölçekli şirketlerin bu yazılarımdan çok faydalanamayacağını biliyor olsam da- sizlerle de paylaşmak istedim.

Peki Golden Gate nedir? Golden Gate, aynen SQL Server Replication' ı gibidir ve TDM (Transactional Data Management) ürünüdür. Hatta SQL Server 2005 SP2, CU6 öncesi versiyonlar için birebir SQL Server Replication bileşenlerini kullanır. Yine aynen SQL Server Replication topolojileri gibi çeşitli topolojileri vardır. Tek yönlü veya çift yönlü veri aktarımı (replikasyon) yapabilir. Tabii bu noktada akla gelen soru "peki farkı nedir? neden SQL Server Replication değil de Oracle Golden Gate?". Bu sorunun özet yanıtı şu: Oracle Golden Gate ürününün topolojileri çok daha esnek, bu nedenle veri aktarımı çok daha hızlı oluyor. Bununla birlikte, kritik veritabanınızın Transaction Log dosyasının dolmasına neden olmayacak şekilde ayarlanabiliyor (bunun bazı durumlarda doğrulup kayı yok, bu konuya ileride, başka yazılarımda ayrıca değineceğim çünkü çok önemli). LSN' i kaçırdığı zaman ise, ilgili kayıtları Transaction Log yedek dosyalarından okuyabiliyor... Bunların hiçbirisini SQL Server Replication yapamıyor maalesef. Ayrıca (adı bende kalsın) bu konuda Türkiye' de uzman olan ve Microsoft için çalışıyor olan bir arkadaşım, bir MVP toplantısında yaptığımız muhabbette Golden Gate ürününün SQL Server Replication' dan çok daha hızlı olduğunu ve bu ürünü Oracle satın almadan önce (ki bu satın alma olayı bildiğim kadarıyla 2-3 ay önce oldu) Online Reporting ihtiyacı olan şirketlere kendilerinin önerdiğini iletmişti bana.

Bu kapsamda, Golden Gate' in Windows Server' da kurulumu, SQL Server 2005 ve Golden Gate ile Partition Switch işleminin nasıl yapılabileceği, kopan bir Golden Gate senkronizasyonunun nasıl tekrar sağlanabileceği, yeni tabloların replikasyona nasıl dahil edilebileceği, Golden Gate Best Practices gibi çeşitli konularda yazılar yazıyor olacağım. Umarım bir gün birilerinin işine yarar.

Ekrem Önsoy

"Failed to install and configure assemblies C:\Program Files\Microsoft SQL Server\90\DTS\Tasks\Microsoft.SqlServer.MSMQTask.dll in the COM+ catalog. E

HATA MESAJI:
"Failed to install and configure assemblies C:\Program Files\Microsoft SQL Server\90\DTS\Tasks\Microsoft.SqlServer.MSMQTask.dll in the COM+ catalog. Error: -2147467259 Error message: Unspecified error Error description: Error HRESULT E_FAIL has been returned from a call to a COM component."

AÇIKLAMA:
Sorun, Microsoft.SqlServer.MSMQTask.dll' in İşletim Sistemine kayıt olamamasından kaynaklanıyor. Özellikle 64Bit Integration Services kurmaya çalışırken, sistem üzerinde 32Bit .Net Framework bileşenleri varsa bu hatayla karşılaşılabiliyor.

ÇÖZÜM:
Sorunu çözmek için aşağıdaki gibi Microsoft.SqlServer.MSMQTask.dll’i unregister ve reregister yapabilirsiniz.

Unregister etmek için:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>regsvcs /u "C:\Program Files (x86)\Microsoft SQL Server\90\DTS\Tasks\Microsoft.SqlServer.MSMQTask.dll"

Microsoft (R) .NET Framework Services Installation Utility Version 2.0.50727.42 Copyright (c) Microsoft Corporation. All rights reserved. Uninstallation of assembly 'C:\Program Files (x86)\Microsoft SQL Server\90\DTS\Tasks\Microsoft.SqlServer.MSMQTask.dll' succeeded.

Register etmek için:
C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727>regsvcs.exe "C:\Program Files\Microsoft SQL Server\90\DTS\Tasks\Microsoft.SqlServer.MSMQTask.dll"

Microsoft (R) .NET Framework Services Installation Utility Version 2.0.50727.42 Copyright (c) Microsoft Corporation. All rights reserved.

"The SQL server specified in SSIS service configuration is not present or is not available. This might occur when there is no default instance of SQL

HATA MESAJI:
"The SQL server specified in SSIS service configuration is not present or is not available. This might occur when there is no default instance of SQL Server on the computer. For more information, see the topic "Configuring the Integration Services Service" in Server 2005 Books Online."

AÇIKLAMA:
SSMS’ ten SSIS servisine bağlanıp MSDB altındaki paketlere bakmak istediğinizde bu hata ile karşılaşabilirsiniz.

ÇÖZÜM:
http://msdn.microsoft.com/en-us/library/ms137789.aspx

"SystemOutOfMemory"

HATA MESAJI:
SystemOutOfMemory

AÇIKLAMA:
Örneğin SQL Server Management Studio' da bir SP çalıştırdığınızda Messages penceresinde böyle bir hata mesajıyla karşılaşabilirsiniz.

ÇÖZÜM:
Bu sorunun yaşandığı durumda, çalıştırılan SP' de yapılan her işlem için bir SELECT sorgusu kullanıldığını gördüm ve sonuç penceresinde binlerce sonuç dönüyordu. SSMS’ teki Messages penceresi de bu kadar çok mesajı depolayamadığından System.SystemOutOfMemory hatası alınıyordu. Yani sorun aslında SSMS’ ten kaynaklanıyordu...

Bu sorunu aşmak için gereksiz SELECT cümleciklerini kaldırabilirsiniz. Ayrıca SET NOCOUNT ON komutunu kullanabilirsiniz.

"The database could not be exclusively locked to perform the operation"

HATA MESAJI:
The database could not be exclusively locked to perform the operation

AÇIKLAMA:
Bir veritabanında işlem yaparken (meselâ veritabanın adını değiştirmek veya Collation ayarını değiştirmek gibi...) böyle bir hata ile karşılaşabilirsiniz.

ÇÖZÜM:
Bu tarz işlemleri yapmak için veritabanına bağlı başka bir kullanıcı olmaması gerekiyor. Bunu da, aşağıdaki gibi bir komut bloğu ile sağlayabilirisiniz:

ALTER DATABASE Veritabanim SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
USE Veritabanim GO sp_renamedb N'Veritabanim', N'Veritabanim_Eski'
GO
ALTER DATABASE Veritabanim_Eski SET MULTI_USER GO

"The mail could not be sent to the recipients because of the mail server failure. (Sending Mail using Account 1 (YYYY-MM-DDTHH:MM:SS). Exception Messa

HATA MESAJI:
"The mail could not be sent to the recipients because of the mail server failure. (Sending Mail using Account 1 (YYYY-MM-DDTHH:MM:SS). Exception Message: Could not write to temp attachment file. (There is not enough space on the disk)"

AÇIKLAMA:
Database Mail kullanarak ekli bir eposta göndermeye çalışırken böyle bir hata ile karşılaşabilirsiniz.

ÇÖZÜM:
Eğer Sistem Diskinizde (İşletim Sisteminin çalıştığı disk) yeterince yer yoksa böyle bir hata ile karşılaşırsınız. Sistem Diskinizde (ki bu genelde C:' dir) yeterince boş yer olduğundan emin olun.