SQL Server’dan Oracle’a bağlanacak bir Linked Server tanımlamak
Bazı durumlarda SQL Server üzerinde bulunan bir veritabanının Oracle veritabanından veri çekme ihtiyacı ortaya çıkabilir.
İlk olarak oracle tarafında ilgili bir kullanıcının oluşturulur. Eğer SQL Server’ınızın bulunduğu sunucuda Oracle Client yüklü değilse gerekli kurulum yapılır. Oracle tarafında oluşturulan kullanıcının kullanacağı tns bilgisi client’ın yüklü olduğu path’te (genellikle bu şekilde olur -> C:\app\product\11.2.0\client_1\network\admin) tnsnames.ora dosyasına kaydedilir. Tnsnames.ora dosyasına kaydetmenize izin vermezse notepad’i run as admintrator ile açtıktan sonra File->Open ile yukarıda path’ini belirttiğim tnsnames.ora dosyasını açmanız gerekir.
Daha sonra aşağıdaki script yardımıyla bu işlemi yapabilirsiniz.
myUser | SQL Server tarafında linked server’ı kullanacak sql login |
Xsource | Tnsnames.ora dosyasına kaydettiğiniz tns’e verdiğiniz isim |
XServer | Linked server’ın ismi |
oracleuser | Oracle tarafında oluşturulan kullanıcı |
oracleuserşifre | Oracle tarafında oluşturulan kullanıcının şifresi |
serverName\InstanceName | SQLIntance’a nasıl bağlanıyorsanız bu kısma onu yazmalısınız. |
EXEC master.dbo.sp_addlinkedserver @server = 'XServer', @srvproduct = 'Oracle', @provider = 'OraOLEDB.Oracle', @datasrc = 'Xsource' ,@provstr=N'SERVER=serverName\InstanceName;User ID=myUser'
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'XServer', @locallogin = 'myUser' , @useself = N'False', @rmtuser = N'oracleuser', @rmtpassword = N'oracleuserşifre'
Yukardaki script’in “addlinkedsrvlogin” ile ilgili olan kısmını çalıştırmak için oracle tarafında yetkisi olan kullanıcıyı ve şifresini bilmeniz gerekir. MS SQL veritabanı uzmanının oracle üzerinde tanımlı bir kullanıcı şifresini bilmesi çok uygun değildir. Bu yüzden bu şifreyi siz hiç öğrenmeden bu işlemi bu linked server’ı kullanacak uygulamacıya yaptırabilirsiniz. Bu işlemi nasıl yaptıracağınızın detaylarını “Oracle’a Bağlanan Linked Server’ın Remote Login Şifresini Uygulamacıya Değiştirtmek ya da Remote Login Oluşturtmak” isimli makalede bulabilirsiniz.
USE MASTER GO GRANT EXECUTE ON sys.xp_prop_oledb_provider TO myLogin
Oracle Client’ı kurduktan sonra bazı durumlarda linked server da sıkıntı yaşayabilirsiniz.
SQL Server Instance’ında ServerObjects->LinkedServers->Providers altında OraOLEDB.Oracle sekmesine sağ tıklayarak aşağıdaki ayarları yaparsanız sıkıntı düzelecektir.
Bütün bu işlemlerden sonra linked server’ı aşağıdaki şekilde kullanabilirsiniz.
SELECT * FROM OPENQUERY([XServer], 'Select * FROM OracleŞema…')