2010-08-09 24 views
8

SQL Server 2005'i bir Oracle 10g veritabanına bağlamaya çalışıyorum. Oracle istemcisini SQL sunucusuna yükledim ve hem tnsping hem de sqlplus kullanarak Oracle veritabanına bağlanabileceğimi doğruladım. Ben SQL Server bir sorgu çalıştırmayı denediğinizde aşağıdaki olsun:Oracle'ı SQL Server ile bağlama

OLE DB provider "OraOLEDB.Oracle" for linked server "ORA_CSSA2APD" returned message "ORA-12154: TNS:could not resolve the connect identifier specified".
Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider "OraOLEDB.Oracle" for linked server "ORA_CSSA2APD".

bir fikir? Hayır şans ile aşağıdaki sorguları hem denedim:

select * from openquery(ORA_CSSA2APD, 'select count(rowid) from eservice_op.agent')

select count(rowid) from ORA_CSSA2APD..eservice_op.agent

cevap

5

Ben bir ortam şüpheli ayarı. Yani, oturumunuz TNSNAMES.ORA dosyasını alıyor ancak SQL Server'ın altında yatan oturum değil. Kontrol ettim ORACLE_HOME ve muhtemelen TNS_ADMIN ayarlandı ve işaret ediyor.

Veritabanı için SQL Server bağlantısıyla kolay bağlantı sözdizimini kullanabilirsiniz.

IE hostname'iyle ORA_CSSA2APD değiştirin: 1521/Hizmet_adı

+0

Her ikisi için ortam değişkenleri ayarlanır ve doğrudur. Yukarıda özetlediğiniz bağlantı sözdizimini denemedim, ancak bir UDL oluşturmayı ve bunu hiç bir şansla bağlantı dizesine kopyalamayı denedim. Yukarıdaki sözdizimini deneyeceğim ve sonuçları bilmenizi sağlayacağım. Bunu takdir ediyorum. – bokoxev

+1

Hizmeti yeniden başlattım çünkü TNS_ADMIN ortam değişkenini belirlediğimden beri emin değildim ve şimdi her şey çalışıyor. Yardım için teşekkürler! – bokoxev

+0

Like Bokoxev, eğer her şey yolunda gibi gözükse de, MSSQL Management Studio'nun tüm MSSQL sunucusunu yeniden başlatmayı denediniz, benim için çalıştı. – CsBalazsHungary

2

TNS hata iletileri genelde bağlantı kusurlu olduğu anlamına gelir (örneğin ev sahibi belirtilen bağlantı noktasını elde edilemez/timesout olduğunu ya da bu ORA_CSSA2APD'nin neyi göstermesi gerektiğini bilmiyor.

Göz önünde bulundurulması gereken bir nokta, 64 bit Windows kullanıyor ve 32 bit veya 64 bit Oracle istemci (veya muhtemelen her ikisi de) kullanıyor musunuz? Oracle'ı aramaya çalışan bir 64 bit işletim sisteminde çalışan 32 bitlik bir uygulamanız varsa, 32 bitlik bir Oracle istemcisine ihtiyaç duyar. 64 bit işletim sistemindeki bir 32 bit istemcisini kullanmak zor olabilir ve "Program Files (x86)" klasörüne yüklememek daha güvenlidir.

Ayrıca Windows Server 2003 64-bit sürümünde veya Windows XP, % WinDir% \ System32 klasöründe 64-bit uygulamalar için ayrılmıştır zihninde following

ayı. 32 bit uygulama System32 klasörüne erişmeye çalıştığında, erişim aşağıdaki klasöre yönlendirilir: % WinDir% 64 bit windows için Yani \ SysWOW64

, 32 bitlik şeyler olduğunu SysWOW64 klasörü ve 64 bit malzeme system32 klasöründedir.

+0

Hem işletim sistemi hem de Oracle istemcisi 32 bittir. – bokoxev

4

ORA: 12154, genellikle bağlanmaya çalıştığınız db'nin takma adının tnsnames.ora dosyasında bulunamadığı anlamına gelir. (Bkz. http://ora-12154.ora-code.com/ daha ayrıntılı bir açıklama.)

Veri Kaynağının tnsnames dosyasının bildiği bir diğer ad olduğundan emin olmanız gerekir (SQL Server'ın bulunduğu sunucuda, sorguları çalıştırdığınız yerden bağımsız olarak).); SQL Server, diğer tüm Oracle istemcileri gibi olacak ve tnsnames.ora dosyasına bağlanıp bağlanamayacağını bilmeli, Oracle db'nin nerede olduğunu bilmeyecektir.

SQL Server sunucusuna erişiminiz yoksa (yedeklilik bölümünden bir tane var), bunu sizin için ayarlayan sunucu yöneticisine sahip olmanız gerekir.

(bağlantılı sunucunun Veri Kaynağı özelliği bağlanmak için çalışıyoruz db için tnsnames.ora takma takma olmalıdır.)

hth ...

+0

+1 - Büyük olasılıkla bu. Hata çok özel. – REW

+0

SQLPlus kullanarak bağlanabiliyorum ve tnsnames dosyasında hiçbir sorun olmadığından sunucuyu başarılı bir şekilde ayarlayabilirim ve sp_addlinkedserver komutunun @datasrc argümanı olarak tnsnames'te belirtilen aynı hizmet adını kullanıyorum. Başka fikirlerin var mı? – bokoxev

+0

Ve SQLPlus SQL Server ile aynı makinede çalışıyor mu? –

0

Biz SQL Server, bilinmeyen bir nedenle, varsayılan Oracle yerlerde TNSNAMES.ORA dosyası aramaya başladılar bulundu.

Başarılı sonuçlarla, aşağıdaki konumlarda TNSNAMES.ORA dosyaları yerleştirmek başardık:

SQL Server 32-bit için 32 bit OS veya 64 bit OS üzerinde 64-bit

64-bit işletim SQL Server 32-bit için
%ProgramFiles%\Oracle 
%ProgramFiles%\Oracle\network\admin 

%ProgramFiles% (x86)\Oracle 
%ProgramFiles% (x86)\Oracle\network\admin 

Biz de SQL * kullanarak bağlanmak mümkün Artı, ancak SQL Server yapamadı. SQL * Plus'ın aynı TNSNAMES.ORA dosyasını kullanmadığını not etmek önemlidir. Bu yüzden çalıştı.

1

Bu sorun benim için de oldu, ancak yalnızca belirli Windows kullanıcı hesaplarıyla. OraOLEDB.Oracle için "izin verilen" sağlayıcı seçeneği sağlamasının bir birleşimi (SSMS> Sunucu Nesneleri> Bağlantılı Sunucular> Sağlar> OraOLEDB.Oracle) sağlar, SQL Server Windows hizmetini yeniden başlatır ve son olarak TNSNAMES.ora dosyasındaki izinleri ayarlar. direkt olarak.