2010-08-09 64 views
8

Tôi đang cố liên kết SQL Server 2005 với cơ sở dữ liệu Oracle 10g. Tôi đã cài đặt máy khách Oracle trên máy chủ SQL và xác nhận rằng tôi có thể kết nối với cơ sở dữ liệu Oracle bằng cả tnsping và sqlplus. Khi tôi cố gắng chạy một truy vấn trong SQL Server tôi nhận được như sau:Liên kết Oracle với SQL Server

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".

Bất kỳ ý tưởng? Tôi đã thử cả hai truy vấn sau đây không có may mắn:

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

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

Trả lời

5

tôi nghi ngờ một môi trường cài đặt. Nghĩa là phiên của bạn đang chọn tệp TNSNAMES.ORA nhưng phiên SQL Server cơ bản thì không. Tôi muốn kiểm tra là ORACLE_HOME và, có thể, TNS_ADMIN đang được thiết lập và trỏ đến.

Bạn có thể sử dụng cú pháp kết nối dễ dàng cho cơ sở dữ liệu với kết nối SQL Server hay không.

IE thay ORA_CSSA2APD với hostname: 1521/service_name

+0

Các biến môi trường cho cả hai được thiết lập và chính xác. Tôi đã không thử cú pháp kết nối mà bạn đã phác thảo ở trên, nhưng tôi đã thử tạo một UDL và sao chép cú pháp đó vào chuỗi kết nối mà không có may mắn. Tôi sẽ thử cú pháp của bạn ở trên và cho bạn biết kết quả. Tôi đánh giá cao nó. – bokoxev

+1

Tôi đã khởi động lại dịch vụ bởi vì tôi không chắc liệu tôi có kể từ khi tôi đặt biến môi trường TNS_ADMIN hay không và mọi thứ hiện đang hoạt động. Cảm ơn đã giúp đỡ! – bokoxev

+0

Giống như @bokoxev cho biết, nếu mọi thứ có vẻ ok, nhưng không hoạt động, hãy thử khởi động lại toàn bộ máy chủ MSSQL từ MSSQL Management Studio, nó đã làm việc cho tôi. – CsBalazsHungary

2

TNS thông báo lỗi thường có nghĩa là kết nối là thiếu sót (ví dụ máy chủ là khó có được/timesout trên cổng chỉ định, hoặc đơn giản là không biết những gì ORA_CSSA2APD được cho là trỏ đến).

Một điều cần xem xét là, bạn có đang sử dụng Windows 64 bit không và bạn có đang sử dụng máy khách Oracle 32 bit hoặc 64 bit (hoặc có thể cả hai). Nếu bạn có một ứng dụng 32 bit chạy trên hệ điều hành 64 bit đang cố gắng gọi Oracle, nó cần một máy khách Oracle 32 bit. Sử dụng máy khách 32 bit trên hệ điều hành 64 bit có thể phức tạp và không an toàn hơn khi cài đặt nó trong thư mục "Program Files (x86)".

Cũng nhớ các following

Trong một phiên bản 64-bit của Windows Server 2003 hoặc Windows XP, % WinDir% \ System32 được dành riêng cho các ứng dụng 64-bit. Khi một ứng dụng 32-bit ứng dụng cố gắng truy cập vào thư mục System32, truy cập được chuyển hướng vào thư mục sau: % WinDir% \ SysWOW64

Vì vậy, cho các cửa sổ 64-bit, các công cụ 32 bit là trong Thư mục SysWOW64 và công cụ 64 bit nằm trong thư mục system32.

+0

Cả hệ điều hành và máy khách Oracle đều là 32 bit. – bokoxev

4

ORA: 12154 thường có nghĩa là bí danh của db bạn đang cố gắng kết nối không được tìm thấy trong tệp tnsnames.ora. (Xem http://ora-12154.ora-code.com/ giải thích chi tiết hơn.)

Bạn cần đảm bảo rằng Nguồn dữ liệu là bí danh mà tệp tnsnames biết (trên máy chủ nơi SQL Server cư trú, bất kể bạn đang chạy truy vấn từ đâu); SQL Server sẽ giống như bất kỳ máy khách Oracle nào khác và cần phải biết nơi để kết nối tới và không có tệp tnsnames.ora, nó sẽ không biết chi tiết về nơi mà db của Oracle.

Nếu bạn không có quyền truy cập vào máy chủ SQL Server (có một từ bộ phận của phòng dự phòng), bạn sẽ cần phải nhận được quản trị viên máy chủ để thiết lập cho bạn.

(Thuộc tính của máy chủ liên kết nguồn dữ liệu nên là bí danh trong tnsnames.ora bí danh cho các db bạn đang cố gắng liên kết đến.)

HTH ...

+0

+1 - Rất có thể điều này. Lỗi rất cụ thể. – REW

+0

Tôi có thể kết nối bằng cách sử dụng SQLPlus và tôi có thể kết nối thành công máy chủ để không có vấn đề gì với tệp tnsnames và tôi đang sử dụng cùng tên dịch vụ mà tôi đã chỉ định trong tnsnames làm đối số @datasrc của lệnh sp_addlinkedserver. Bất kỳ ý tưởng nào khác? – bokoxev

+0

Và SQLPlus chạy trên cùng một máy với SQL Server? –

0

Chúng tôi thấy rằng SQL Server, vì một lý do không rõ, bắt đầu tìm kiếm các tập tin tnsnames.ora tại các địa điểm Oracle mặc định.

Chúng tôi đã có thể đặt các tập tin tnsnames.ora trong các địa điểm sau, với kết quả thành công:

Đối với SQL Server 32-bit trên hệ điều hành 32-bit hoặc 64-bit trên hệ điều hành 64-bit

%ProgramFiles%\Oracle 
%ProgramFiles%\Oracle\network\admin 

Đối với SQL server 32-bit trên hệ điều hành 64-bit

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

Chúng ta cũng đã có thể kết nối sử dụng SQL * Plus, nhưng SQL server không thể. Điều quan trọng cần lưu ý là SQL * Plus không sử dụng cùng một tệp TNSNAMES.ORA. Đây là lý do tại sao một người làm việc.

1

Sự cố này cũng xảy ra với tôi, nhưng chỉ với một số tài khoản người dùng Windows nhất định. Sự kết hợp cho phép tùy chọn nhà cung cấp "Cho phép inprocess" cho OraOLEDB.Oracle cung cấp (SSMS> Đối tượng Máy chủ> Máy chủ Liên kết> Cung cấp> OraOLEDB.Oracle), khởi động lại dịch vụ Windows Server Windows và cuối cùng điều chỉnh các quyền trên tệp TNSNAMES.ora trực tiếp.

Các vấn đề liên quan