Serverlarası İlişkiler –

Merhaba,

Bu yazımız içinde serverlar arası veri transferini temp tabloları kullanarak nasıl yapacağımızdan bahsediyor olacağız.

Senaryomuz 1.kısmı şu şekilde olacak; .NET platformundan çağırılan SP ler sayesinde verilerin ekrana basıldığını ve bu çağırılan SP nin kendi içinde de başka bir SP yi çağırdığını varsayalım.Aynı zamanda yeni bir kullanıcı olduğunuzu ve dolayısıyla henüz SP leri direkt olarak veritabanında çalıştırma yetkinizin olmadığını da varsayalım. Hatta durumu daha da kötüleştirip çağırılan SP ile onun çağırdığı SP nin ayrı server lar üzerinde olduğunu da varsayalım.Biraz daha kötüleştirip tablo create etme hakkınızında olmadığını varsayalım ki direkt olarak linked server kullanılmasın 🙂

2.kısmı ise ; İşe yeni başladınız fakat çözmeniz gereken bir problem var.Senaryomuzun 1.kısmına göre de bir disaster recovery havasında giriş yaptık,problemin çözümü için ise bir high availability imiz var evet 🙂

.NET  platformunun çağırdığı SP için -> SProc1

SProc1 ın çağırdığı SP için de -> Sproc2 isimlerini kullanıyor olalım.

İlk olarak aklımıza gelen SProc1 den gelecek olan verileri alabilmek ve hatanın nereden kaynaklandığını çözebilmek için sp nin aldığı parametreleri hemen alt satırında SET edip,ALTER PROCEDURE SProc1 ve AS satırlarını yorum içine alıp f5 e basmak tabiki..Fakat burada da şu sorun devreye giriyor ; scriptin içinde

“Insert into #tempCustomer exec [link_BESIKTAS].[NORTHWND].[dbo].SProc2 @CustomerId ” gibi bir satır var ve bizim de SP çalıştırmaya yetkimiz yok.

Eğer SProc2 nin bulunduğu servera kurulmuş linked server bağlantısı varsa ve bu bağlantıyı kullanmaya iznimiz varsa SProc2 içindeki scripti alıp SProc1 içine yazıp linked server bağlantılarını da ekleyip çalıştırabiliriz,fakat bu bize zaman kaybettirebilir hemde SProc2 de veri son olarak temp tabloya basılıyorsa veriyi yine çağıramazsınız;

bir
1-Linked Server Bağlantısı

Özellikle SP lerin çok satırlı ve de birden çok tabloya hatta veritabanına gidebileceğini varsayarsak.

Bizim bu noktada yapacağımız şey ise çok basit bir yöntem olacak. SProc2 nin içindeki (sözde) scripti parametrelerini verdikten sonra çalıştırıp global bir temp içine atıyoruz ;

iki
2- KADIKOY instance ında verinin global temp e taşınması

Daha sonra da doldurduğumuz bu temp tabloyu Ad hoc distributed üzerinden çekiyor olacağız;

uc
3-Besiktas instance ında henüz tablo görülmüyor.

Ad hoc distributed ın aktif hale getirilmesiyle farklı veri kaynaklarından veriyi çekebilmek için t-sql kodları olan OPENROWSET,OPENQUERRY ve OPENDATASOURCE u kullanabilmemizi sağlar.

dortbir
4-Ad Hoc Enable

Daha sonra da Kadıkoy instance ımızda doldurduğumuz tablodan verimizi Besiktas instance mızda çekmek üzere scriptimizi çalıştırıyoruz ;

besbir
5-OPENROWSET Kullanımı

Veriyi çekebildiğimizi gördüğümüze göre SProc1 in çalıştığı instance üzerinde bu veriyi kullanmak için başka bir temp e atıp sorunu çözmeye devam edebiliriz 🙂

altibir
6-Global temp e aktarım

Bir sonraki yazımızda görüşmek dileğiyle 🙂

 

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s