SQL Server Replication – Subscriber Expire & Deactivate Olması

SQL Server, Oracle No Comments »

SQL Server Data Replication içinde tanımlı abonelikler (subscription) belirlenmiÅŸ olan transaction saklama süresi (retention period) içinde senkronize edilmezse otomatik olarak pasif moda çekilebilir veya expire edilebilir. Transactional Replication yönteminde maximum distribution retention period (sp_adddistributiondb prosedürü için @max_distretention parametresi) ve publication retention period (sp_addpublication prosedürü için @retention parametresi) olmak üzere iki temel parametre kullanılır. Read the rest of this entry »

SQL Server Replication – Kayıt atlama

SQL Server, Oracle 2 Comments »

SQL Server replication uygulaması doÄŸası gereÄŸi replikasyona dahil edilmiÅŸ nesneler üzerinde yapılan tüm deÄŸiÅŸiklikleri SQL ifadeleri olarak Log Reader Agent aracılığıyla Distribution veritabanına aktarır. Distribution Agent de bu komutları subscriber’lara gönderir. Yanlışlıkla yaptığımız bir Bulk Insert iÅŸlemi sonucu aktarılacak liste uzayacaktır. Bu da gerisinde gelen bazı önemli bilgilerin aboneye aktarılmasını geciktirebilir. Uzun listeyi yok etmek isteyebiliriz. SQL Server Replication İlgili Notlar makalesinde yazdığımız gibi eÄŸer replicationda o anda bir hata oluÅŸmuÅŸsa ve o hatayı çözemiyorsak replicationun o hatayı atlayıp kuruktaki listeye devam etmesini saÄŸlamak için -SkipErrors parametresini kullanabiliriz. Distribution Agent için tanımlanan bu parametre aracılığıyla sözkonusu hatadaki transactionlar aboneye gönderilmez. ÖrneÄŸin o anda 2601 (Cannot insert duplicate key row in object ‘%.*ls’ with unique index ‘%.*ls’.) ve 2627 (Violation of %ls constraint ‘%.*ls’. Cannot insert duplicate key in object ‘%.*ls’.) hataların oluÅŸtuÄŸunu düşünelim. Bu hataları aÅŸağıdaki gibi atlayabiliriz.

-SkipErrors 2601;2627

Bu yönteme alternatif olarak SQL Server 2005 ile birlikte gelen sp_setsubscriptionxactseqno prosedürü de aynı amaç için kullanılabilir. Bu prosedürün ilk yöntemden farkı non-SQL Server Subscriber’lar için kullanılamıyor olması ve parametre olarak xact_seqno (transaction sequence number) deÄŸerini almasıdır. xact_seqno listedeki her transactiona ait
log sequence number (LSN) deÄŸerini belirtir. Distribution Agent, Subscriber tarafında en son hangi transaction setini COMMIT etmiÅŸse ona ait xact_seqno deÄŸerini MSdistribution_history tablosundaki xact_seqno alanına yazar. Bir sonraki transferde bu deÄŸerden büyük xact_seqno’lara ait transactionları aboneye gönderir. Veritabanı yöneticisi olarak replikasyonun en son hangi xact_seqno deÄŸerinde kaldığını sp_setsubscriptionxactseqno prosedürüyle güncelleyebiliriz.

sp_setsubscriptionxactseqno [ @publisher= ] ‘publisher’, [ @publisher_db= ] ‘publisher_db’, [ @publication= ] ‘publication’, [ @xact_seqno= ] xact_seqno

Bu prosedür sadece transactional replication türünde çalışır.

O andaki hatalı xact_seqno değerlerini bulmak için sp_helpsubscriptionerrors prosedürü kullanılabilir.

sp_setsubscriptionxactseqno yordamına alternatif olarak MSrepl_commands tablosundan kayıt silme yöntemi kullanılabilir. Distribution veritabanının altında bulunan bu tablo replike edilecek komutları içerir. Aşağıdaki gibi xact_seqno değeri verilerek bir transaction set silinebilir.

DELETE FROM MSrepl_commands
WHERE xact_seqno= 0x0008A2500000045A00DE

Database name ‘%.*ls’ ignored, referencing object in tempdb

SQL Server, Oracle No Comments »

B sunucusu üzerinde linked server olarak tanımlanmış A sunucusunda DB1 isimli veritabanında oluşturduğumuz T1 tablosuna linked server konulu makalemizde anlattığımız gibi 4 parçalı tanımlayıcı (4-parts identifier) kullanarak aşağıdaki gibi ulaşabiliriz.

Linkedserver.database.schema_name.object_name
A.DB1.dbo.T1

Fakat A sunucu üzerinde oluşturduğumuz geçici tablolara (temporary tables) erişmek bu kadar kolay olmamaktadır. Örneğin sunucu üzerinde oluşturduğumuz ##T1 isimli global geçici tabloya erişmek için SELECT * FROM A.tempdb.dbo.##T1 yazım biçimiyle erişebileceğimizi düşünürken aşağıdaki hatayla karşılıyoruz.

Database name ‘tempdb’ ignored, referencing object in tempdb.

Oysa aÅŸağıdaki gibi tempdb altındaki nesnelere baktığımızda tabloyu görebiliyoruz fakat tempdb’nin yapısından dolayı nesnelere eriÅŸemiyoruz.

SELECT * FROM A.tempdb.sys.sysobjects
WHERE type = 'U'

Bunun için en iyi yöntem OPENQUERY fonksiyonunu kullanmaktır.

SELECT * INTO #t1 FROM OPENQUERY(A, 'SELECT * FROM ##T')

OPENQUERY fonksiyonuyla ilgili daha geniş bilgi için SQL Server Linked Server (Bağlı Sunucu) yazısı okunabilir.

SQL Server JOIN Türleri – II (LOOP, HASH, MERGE JOIN)

SQL Server, Oracle No Comments »

Önceki yazıda SQL Server’in desteklediÄŸi mantıksal tablo birleÅŸtirme iÅŸleminden (Table Join) bahsetmiÅŸtik. Bu yazıda da biraz iÅŸin mutafağına geçerek birleÅŸtirme iÅŸlemin hangi fiziksel yöntemlerle yapıldığını özetlemeye çalışacağız. Read the rest of this entry »

SQL Server JOIN Türleri – I (INNER, LEFT, RIGHT, CROSS)

SQL Server, Oracle No Comments »

Bu makalede genelde iliÅŸkisel veritabanı [Relational Database] sistemlerinin özelde SQL Server’in temel konularından biri olan JOIN seçeneklerini özetleyeceÄŸiz. SQL Server ne tür JOIN seçenekleri sunuyor, bu seçeneklerin birbirinden farkı nedir, olay sadece syntax farklılığı mıdır, performans cephesinden neler oluyor . . . bu soruları yanıtlayacağız. Table veya view gibi kaynakları birbirine baÄŸlayan JOIN ifadeleri bu kaynaklara uygulanmış SELECT, INSERT…SELECT, SELECT…INTO, UPDATE ve DELETE iÅŸlemlerinde FROM deyimiyle birlikte kullanılır. Read the rest of this entry »

SQL Server Linked Server (Bağlı Sunucu)

SQL Server, Oracle No Comments »

SQL Server’in önemli özelliklerinden bir olan Linked Server (baÄŸlı sunucu), SQL Server’in OLE DB/ODBC veri kaynakları aracılığıyla farklı kaynaklar (Oracle, Access, Excel, Text …) üzerindeki verilere eriÅŸmemize, onlar üzerinde komutlar çalıştırmasına, dağıtık sorguları yönetme imkan tanır. Bir linked server tanımlamak için bir OLE DB provider ve bir OLE DB data source belirtilir. OLE DB provider, Microsoft Data Access Components (MDAC)’ın bir bileÅŸeni olup veri kaynağıyla iletiÅŸimi saÄŸlayan ve onu yönetme imkanı sunan kütüphanedir (DLL dosyası). Data Source ise baÄŸlantı kurulacak veri tabanını temsil eder. Her veritabanı için farklı OLE DB provider kullanılır. ÖrneÄŸin SQL Server tabanlı bir veritabanına eriÅŸmek için Microsoft OLE DB Provider for SQL Server OLE DB provider kullanılır. Aynı ÅŸekilde .mdb dosyaları için Microsoft OLE DB Provider for Jet, Oracle veritabanına baÄŸlanmak için Microsoft OLE DB Provider for Oracle veri saÄŸlayıcısı kullanılır. Read the rest of this entry »

Replication Drop EdilemediÄŸi Zaman

SQL Server, Oracle No Comments »

Suspect moduna düşmek veya başka nedenlerden dolayı replikasyonu kaldıramadan yeniden restore edilmiş veya attach edilmiş bir veritabanında replikasyonu kaldırıp yeniden kurmaya çalıştığımızda aşağıdaki hata mesajıyla karşılabiliriz.


TITLE: Microsoft.SqlServer.ConnectionInfo
——————————
SQL Server could not disable publishing and distribution on ‘Veri Tabanı Adı’.
——————————
ADDITIONAL INFORMATION:

An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)
——————————
Invalid object name ‘dbo.syssubscriptions’.
Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRANSACTION statement is missing. Previous count = 0, current count = 1.
Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRANSACTION statement is missing. Previous count = 0, current count = 1.
Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRANSACTION statement is missing. Previous count = 0, current count = 1.
Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRANSACTION statement is missing. Previous count = 0, current count = 1.
Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRANSACTION statement is missing. Previous count = 0, current count = 1.
Changed database context to ‘master’. (Microsoft SQL Server, Error: 208)

Read the rest of this entry »

SQL Server Replication – Yeni Tablo Ekleme

SQL Server, Oracle No Comments »

Merkez ve ÅŸubeler arasında transactional replication yapılmaktadır. Bu replikasyon aracılığıyla birçok tablo ÅŸubelerden merkeze aktarılmaktadır. Fakat sonraki günlerde ihtiyaç doÄŸrultusunda replike edilen dataya yeni bir nesne(article) daha ekleme ihtiyacı doÄŸdu. Mevcut publication içerisine yeni bir article eklediÄŸimizde varsayılan olarak senkronizasyonu yeniden saÄŸlamak lazım yani başından bu yan tüm tabloların bulunduÄŸu yeni bir snapshot oluÅŸturup bunu ÅŸube(-lere) yansıtmak lazım. Read the rest of this entry »

Oracle -> SQL Server (Data Import) Code Page Uyarısı

SQL Server, Oracle No Comments »

SQL Server içerisindeki Data Import / Export bölümünü veya SSIS aracını kullanarak Oracle’dan SQL Server’e veri aktarma aÅŸamasında kolonlara görmek istediÄŸimizde aÅŸağıdaki uyarıyla karşılaÅŸabiliriz.

Could not connect source component.
Warning 0×80202066: Source – VB_PERMISSIONS [1]: Cannot retrieve the column code page info from the OLE DB provider. If the component supports the “DefaultCodePage” property, the code page from that property will be used. Change the value of the property if the current string code page values are incorrect. If the component does not support the property, the code page from the component’s locale ID will be used.

Bu mesaj bir hata mesajı olayıp sadece kullanıcıyı doğru karakter setinin kullanılmadığı konusunda uyarmaktadır. Bundan kurtulmanın yolu şudur;
OLE DB Source component’in bulunduÄŸu Data-Flow içerisine girilir.
OLE DB Source component’e ait Properties penceresi açtırılır. Bunun için bileÅŸen saÄŸ tıklanarak Properties menüsü kullanılabileceÄŸi gibi bir kere tıklanarak F4 tuÅŸu da kullanılabilir.
Properties penceresinde AlwaysUseDefaultCodePage özelliği True olarak set edilir.

SSIS paketi SQL Server Agent job’da çalışmıyor

SQL Server, Oracle No Comments »

VS.NET’te hazırladığımız Integration Services projesindeki DTSX paketlerini belli periyotlarda çalışması için SQL Server Agent üzerinde Job tanımlarız. Job içerisinde SSIS paketini çağırdığımızda özellikle paket içerisinde tanımlanmış olan veritabanı baÄŸlantısı, dosya iÅŸlemleri gibi bazı kaynaklara eriÅŸimin gerçekleÅŸmediÄŸine ÅŸahit oluruz. Read the rest of this entry »

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS GiriÅŸ