2012-02-20 41 views
6

Tôi đã nhìn thấy một vài bài nói rằng Oracle 11g Client (dành cho Windows) hoạt động tốt với cơ sở dữ liệu lên đến 9.2. Nhưng nếu khách hàng đôi khi kết nối với 11g và đôi khi đến 10g cơ sở dữ liệu, nó vẫn hoạt động? Câu hỏi của tôi là: Có bất cứ điều gì để cấu hình khác nhau khi kết nối với cơ sở dữ liệu 10g và 11g?Oracle 11g Khách hàng kết nối với cả cơ sở dữ liệu 10g và 11g

Một số người đã cho tôi biết về các chính sách trong GAC.

Cảm ơn!

Trả lời

8

Thường không có vấn đề gì khi kết nối với cơ sở dữ liệu Oracle cũ hơn với trình điều khiển máy khách mới hơn, ví dụ: để kết nối với cơ sở dữ liệu 10g hoặc 11g với ứng dụng khách 12g. Phần còn lại của câu trả lời thuộc về các vấn đề kỹ thuật có thể xảy ra trong chương trình .Net của bạn trong trường hợp máy khách Oracle (có thể) đã được cài đặt trên máy tính đang thực thi chương trình của bạn.


Cập nhật 2014:

Trong khi đó Oracle đã phát hành một tài xế Net quản lý cho các cơ sở dữ liệu Oracle. Vì vậy, thay vì cài đặt một Oracle Client cục bộ hoặc cung cấp một Instant Client cùng với ứng dụng của bạn, cách ưu tiên chỉ nên cung cấp cho trình điều khiển được quản lý mà không phụ thuộc vào cấu hình cục bộ. Sau đó, bạn không gặp khó khăn với các khách hàng được cài đặt, GAC, phiên bản cơ sở dữ liệu Oracle và vân vân. Bạn có thể tải xuống trình điều khiển được quản lý từ the Oracle website.


câu trả lời trước, vẫn cần thiết nếu bạn không thể sử dụng trình điều khiển quản lý:

Những vấn đề bắt đầu nếu bạn không biết nếu có một ứng dụng Oracle được cài đặt trên máy trạm khách hàng của bạn . Nếu bạn đang nói về GAC Tôi giả sử, bạn không biết liệu một máy khách Oracle đã được cài đặt chưa và nếu có, phiên bản đó là.

Nếu bạn không muốn dựa vào một ứng dụng khách Oracle đã cài đặt, bạn có thể cung cấp ứng dụng khách Oracle Instant với ứng dụng .Net của bạn. Ví dụ: bạn có thể tải xuống ODAC 11.2 Release 4 (11.2.0.3.0) with Oracle Developer Tools for Visual Studio, cung cấp cho bạn cài đặt Oracle Client cho máy trạm của nhà phát triển (với Visual Studio hỗ trợ phát triển DataSet và EntityFramework) cũng như tất cả các tệp cần thiết cho ứng dụng khách tức thì.

Đối với khách hàng ngay khi bạn cần các tập tin sau đây (tìm kiếm chúng trong các thư mục con của cài đặt ODAC của bạn):

  • oci.dll
  • ociw32.dll
  • Oracle.DataAccess.dll
  • orannzsbb11.dll
  • oraociicus11.dll (nếu bạn đang sử dụng ngôn ngữ tiếng Anh, khác tương ứng .dll)
  • OraOpd11w.dll
  • tnsnames.ora (nếu bạn cần nó)

Bên cạnh đó các tập tin .dll sau là cần thiết từ thư mục Windows của bạn:

  • mfc71.dll
  • msvcr71.dll

Chỉ cần sao chép tất cả các tệp đó vào thư mục làm việc của ứng dụng của bạn (trong đó tệp .exe là).

Bây giờ, nó thuộc về GAC như thế nào?

Nếu máy khách Oracle được cài đặt trên máy khách, cũng có Oracle.DataAccess.dll trong GAC. Ngoài ra, có thể có một chính sách đã được cài đặt, ví dụ: Độc lập của Oracle.DataAccess.dll chương trình của bạn đang tham chiếu, phiên bản Oracle.DataAccess.dll từ GAC của bạn phải luôn sử dụng. Nếu bạn cài đặt ODAC tôi liên kết trên, bạn thấy rằng tập tin dưới

C: \ Windows \ Microsoft.NET \ lắp ráp \ GAC_32 \ Policy.4.112.Oracle.DataAccess \ v4.0_4.112.3.0__89b483f429c47342

Kết quả là ứng dụng .Net của bạn luôn ném ngoại lệ nếu bạn đang cố gắng tải Oracle.DataAccess.dll (với thông báo lỗi như "Nhà cung cấp không tương thích ..."), nếu máy khách có một phiên bản khác của Oracle Client 11 được cài đặt so với phiên bản bạn đang tham chiếu trong ứng dụng của bạn.

Để giải quyết điều đó, bạn có thể cấu hình app.conf của bạn để các chính sách xuất bản sẽ bị bỏ qua và luôn phiên bản của bạn được nạp:

<configuration> 
... 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342" /> 
     <publisherPolicy apply="no" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 
+0

Chúng tôi là một cơ quan governement, do đó chúng tôi kiểm soát những gì được cài đặt trên máy . Tất cả điều này sẽ là cùng một phiên bản ứng dụng, ở mọi nơi. Nhưng tôi lưu ý câu trả lời của bạn, vì vậy nếu chúng tôi thấy lỗi kỳ quái, tôi sẽ biết bắt đầu từ đâu. Cảm ơn ! –

+0

@ ultraman69 Trong trường hợp này bạn sẽ ngủ dễ dàng vào ban đêm :) Vì bạn luôn sử dụng cùng một máy khách trên tất cả các máy, không có vấn đề gì về GAC hay chính sách sẽ cản trở bạn. Miễn là bạn sử dụng giao diện chuẩn của Oracle.DataAccess.dll, bạn có thể kết nối với bất kỳ phiên bản DB nào> 9.2. Tất nhiên, 11g chức năng cụ thể/SQL sẽ không hoạt động trên các phiên bản thấp hơn. – Desty

+0

@Detsy Tôi có và webservice và tôi không thể đặt thành 32 bit. Tôi có thể sử dụng phiên bản ứng dụng khách 64 bit của ODC với các bước tương tự này không? – Laggel

1

Tôi chưa gặp phải bất kỳ sự cố nào khi thực hiện việc này với JAVA hoặc .Net. Trong thực tế, Oracle nói rằng nó hoàn toàn tốt đẹp:

Bản phát hành kết hợp với khách hàng cơ sở dữ liệu Oracle 11.2.0.3, có thể truy cập cơ sở dữ liệu Oracle 9.2 trở lên. Oracle hỗ trợ Entity Framework và LINQ với Microsoft Visual Studio 2010 và .NET Framework 4, bao gồm Entity Framework 4.1 và 4.2. Mã đầu tiên không phải là được hỗ trợ trong bản phát hành này.

Rõ ràng bạn sẽ muốn thử nghiệm các quy trình tương tự khi kết nối với từng quy trình và xác minh thông qua các thử nghiệm của riêng bạn, nhưng tôi nghĩ bạn sẽ ổn.

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