Forum

linked server ile t...
 
Bildirimler
Hepsini Temizle

linked server ile trigger işlemi nasıl yapılır

4 Yazılar
3 Üyeler
0 Reactions
2,034 Görüntüleme
(@Anonim)
Gönderiler: 0
Konu başlatıcı
 

Merhabalar,

Farklı networkler de bulunan iki ayrı SQL server 2008 R2 yi linked server ile konuşturdum. Fakat birinci serverda satis tablosuna kayıt geldiğinde ikinci serverdaki satistakip tablosuna bu kaydı atmak istiyorum. Bunun için trigger yazmayı deniyorum.Aşağıdaki kodda satis tablosunun tesis alanı (PLANT) sadece 10 olan kayıtları diğer serverdaki satistakip tablosuna kaydetsin bunu nasıl yapabilirim. Kodum nasıl olmalıdır. İyi çalışmalar dilerim.

 

CREATE TRIGGER SATISLAR

ON satis

AFTER INSERT

SET NOCOUNT ON

IF (PLANT ='10')

(

INSERT INTO xxx.dbo.satistakip('CLIENT','COMPANY','PLANT','MATERIAL','STEXT') VALUES ('satis.client','satis.company','satis.plant','satis.material','satis.stext');

}

 

 
Gönderildi : 12/11/2012 17:17

(@GokhanDOGAN)
Gönderiler: 780
Prominent Member
 

Merhaba,

After insert i kullanıp daha sonra girdiğin kaydın max'ını bulup link bağlantısı üzerinden

bu kaydı diğer server'a aktarabilirsin. Provider üzerine"Allow inprocess" ide check etmeyi atlama. aşağıdaki örnekler insert,update,delete gibi method'larda uygulayabilirsin.

Ayırıca bu tip yöntemleri en sağlıklısı db log okuma arşivleme programları ile yapmaktır

Örn: Oracle golden gate,Ms sql db mirroring ile çok sağlıklı verimli olur. db yi de yormaz.

veya uygulama içersinde bu tip db güncellemelerini aynı transaction scope içersinde yapmaktır.

böylece arada bağlantı problemleri vs. durumlarında daha tutarlı olacaktır. 

http://www.ibprovider.com/forum/site/viewtopic.php?t=19

http://stackoverflow.com/questions/915738/how-you-get-a-list-of-updated-columns-in-sql-server-trigger 

  http://www.java2s.com/Code/SQLServer/Trigger/Getvaluefromupdatedinsertedanddeleted.htm 

 
Gönderildi : 13/11/2012 03:00

(@SinanBalci)
Gönderiler: 2
New Member
 
Yanıtınız için teşekkür ederim. Lakin şöyle bir sorun ile karşılaştım.
 
Aşağıdaki kod ile Linked server oluşturdum ve aşağıdaki kod ile trigger oluşturdum, sql server üzerinden select yada insert işleminde sorun olmadan data çekip kaydedebiliyorum. Lakin database'e bağlanan program üzerinden kayıt yaptığım zaman SQLNCLI10 diye bir hata mesajı vermektedir. Bunu nasıl çözebilirim. 
 
"The operation could not be performed because OLE DB provider "SQLNCLI10" for linked server "test" was unable to begin a distributed transaction.
 
Linked server programı:
 
EXEC sp_addlinkedserver
@server = 'test',
@srvproduct = '',
@datasrc ='192.168.10.73',
@provider ='sqloledb'
EXEC sp_addlinkedsrvlogin @rmtsrvname ='test',
@useself ='False',
@rmtuser = 'SBALCI',
@rmtpassword ='123456789'
Çalışan insert kodu:
INSERT [test].[OTOMASYON].[DBO].[GENEL] (CLIENT,COMPANY,PLANT,POTYPE,PRDORDER,MATERIAL)
VALUES ('00','01','10','EN','12545','@MATERIAL')

Çalışan Select kodu:
select * FROM [test].[OTOMASYON].[DBO].[GENEL]
Trigger:
CREATE TRIGGER OTOMASYONISEMRI
ON IASPRDORDER
AFTER INSERT
AS
DECLARE @QUANTITY decimal, @POTYPE nvarchar(30),@PRDORDER nvarchar(30),@MATERIAL nvarchar(50),
@CLIENT nvarchar(3),
@COMPANY nvarchar(3),
@PLANT nvarchar(3),
@STATUS6 int
SET @CLIENT = (SELECT CLIENT FROM inserted)
SET @COMPANY = (SELECT COMPANY FROM inserted)
SET @PLANT = (SELECT PLANT FROM inserted)
SET @STATUS6 = (SELECT STATUS6 FROM inserted)
SET @POTYPE = (SELECT POTYPE FROM inserted)
SET @PRDORDER = (SELECT PRDORDER FROM inserted)
SET @MATERIAL = (SELECT MATERIAL FROM inserted)
SET @QUANTITY = (SELECT QUANTITY FROM inserted)
BEGIN
INSERT [test].[OTOMASYON].[DBO].[GENEL] (CLIENT,COMPANY,PLANT,POTYPE,PRDORDER,MATERIAL,QUANTITY,STATUS6)
VALUES (@CLIENT,@COMPANY,@PLANT,@POTYPE,@PRDORDER,@MATERIAL,@QUANTITY,@STATUS6)
END
 
Gönderildi : 14/11/2012 12:29

(@GokhanDOGAN)
Gönderiler: 780
Prominent Member
 

Merhaba,

 Application transaction scope kullanıyorsa dtc yi target'serverda start etmek gerekli.. 

http://stackoverflow.com/questions/7473508/unable-to-begin-a-distributed-transaction

ayrıca cdc  yede göz atabilirsiniz.

http://www.simple-talk.com/sql/learn-sql-server/introduction-to-change-data-capture-%28cdc%29-in-sql-server-2008/ 

 
Gönderildi : 17/11/2012 18:18

Paylaş: