2009-05-20 41 views
6

Tôi đang sử dụng khuôn khổ .NET 2.0/3.5 cho ứng dụng của mình. Tôi cần phải chạy một số lệnh SQL trên nhiều kết nối và mỗi kết nối là trên một máy chủ khác nhau (Oracle, SQL Server). Tôi cần phải chắc chắn rằng các lệnh này là giao dịch.Nhiều lệnh giao dịch SQL qua các kết nối cơ sở dữ liệu khác nhau

Ví dụ: Tôi cần thực hiện INSERT trong bảng trên cả cơ sở dữ liệu Oracle và SQL Server, sau đó cam kết chúng nếu không có ngoại lệ nào được ném. Nếu có ngoại lệ, tôi muốn khôi phục trên cả hai máy chủ nếu cần.

Tôi nghi ngờ tôi sẽ cần sử dụng System.Transactions và TransactionScope. Điều này sẽ yêu cầu tôi thiết lập Điều phối viên giao dịch phân phối Microsoft (MSDTC) trên các máy chủ cơ sở dữ liệu và cũng là máy chủ ứng dụng.

Tôi đã xem xét cao và thấp và không thể tìm thấy bất kỳ bài viết nào mô tả từng bước thiết lập MSDTC với xác thực lẫn nhau (bao gồm định cấu hình cài đặt tường lửa và cài đặt MSDTC.) Tôi đã xem tài liệu của Microsoft về thiết lập MSDTC. hoàn toàn vô giá trị và không được ghi chép đầy đủ (trừ khi bạn có thể tìm thấy cho tôi một bài viết MSDN thực sự tốt về cách thiết lập nó.)

Đang sử dụng MSDTC cách duy nhất để hoàn thành công việc của mình?

Nếu vậy, làm cách nào để tôi định cấu hình đúng cách?

EDIT:

  • Tôi đang sử dụng Windows Server 2003 cho tất cả các máy.
  • Tôi có hai máy chủ SQL. Một là SQL Server 2000 và khác là 2005.
  • Tôi có một máy chủ Oracle và nó là phiên bản 11g
  • Ứng dụng chúng tôi đang phát triển đôi khi phải thay đổi/tạo bản ghi trên cả ba cơ sở dữ liệu theo cách giao dịch.
  • Nó không phải là một vấn đề giữa bàn phím và ghế. Chúng tôi đọc các bài viết trên MSDN về cách thiết lập mọi thứ liên quan đến MSDTC, nhưng chúng tôi không thể nhận DTCPing và các ứng dụng thử nghiệm khác hoạt động. Chúng tôi đang tìm kiếm một bài viết từng bước chi tiết quá trình. Tôi đã đi qua tài liệu MSDN trên nhiều hơn một lần mà 'trái ra' bước để làm những việc nhất định.

Trả lời

5

Đáng buồn là cả hai tài liệu chính thức từ cả các nhà cung cấp có vẻ rất vui khi được đề cập đến các nhà cung cấp interop này hay cách khác nhưng cả hai dường như miễn cưỡng thừa nhận sự tồn tại của việc đưa ra cơ sở dữ liệu của người kia.

Bạn có thể thích cần tài liệu về Oracle Services for Microsoft Transaction Server.

  • Oracle Documentation: phiên bản
    • 10g
    • 9i
    • cũ tồn tại nhưng nhiều dường như đã thay đổi sau khi 8

Từ ODP.NET 10.2.0.3 trở đi bạn nên (nếu bạn đã cấu hình đúng MS DTC và OraMTS dll là hiện tại) có thể chỉ đơn giản là sử dụng System.Transactions TransactionScope giống như bạn sẽ nếu phối hợp giữa hai cơ sở dữ liệu máy chủ sql nhưng sử dụng một máy chủ sql và kết nối oracle. Oracle 10 trở đi có thể được yêu cầu cho điều này để làm việc khá đơn giản ra khỏi hộp.

Here is a guide to using DTC from .net 2.0 and Sql Server 2005 onwards. Đặc biệt nó ghi chú các yêu cầu hệ điều hành (mà phần lớn không còn là một vấn đề nhưng đáng chú ý). Ngoài ra, trừ khi cả cơ sở dữ liệu và ứng dụng khách trên cùng một máy thì mạng DTC phải được bật.

1

Tôi sử dụng máy chủ được liên kết cho tất cả các tác vụ của mình như thế này. Nó giúp chúng tôi dễ dàng hơn trong việc quản lý thông tin kết nối và thông tin đăng nhập. Về cơ bản một cửa mua sắm cho tất cả các nhu cầu của chúng tôi.

Chỉnh sửa: chi tiết hơn - Chúng tôi có một cơ sở dữ liệu được sử dụng nghiêm ngặt để báo cáo. Chúng tôi lấy dữ liệu từ máy chủ trên toàn công ty. Chúng tôi không có một tài khoản duy nhất để truy cập các máy chủ này, một số trong số chúng tôi sử dụng id chức năng, các thông tin đăng nhập AD khác của chúng tôi. Việc gói tất cả các kết nối này thành các máy chủ được liên kết riêng biệt đã làm việc tốt nhất cho chúng tôi. Trên máy chủ báo cáo của chúng tôi, chúng tôi hiện có 16 máy chủ được liên kết.

Chúng tôi cũng bao gồm các truy vấn của chúng tôi vào chế độ xem để truy cập dễ dàng hơn vào các ứng dụng và báo cáo tinh thể của chúng tôi. Vì vậy, thay vì phải tạo nhiều chuỗi kết nối trong mã của chúng tôi, chúng tôi chỉ sử dụng một chuỗi toàn cục duy nhất để kết nối với Db báo cáo.

0

Đây là sự cố giao dịch phân tán cổ điển và là những gì MSDTC dành cho. Tra cứu các màn hình giao dịch và giao thức XA để có mô tả sâu hơn về loại vấn đề này.

0

Khi sử dụng nhiều kết nối, bạn sẽ cần phải sử dụng DTC.Một kết nối duy nhất có thể quản lý một giao dịch duy nhất, nhưng nếu bạn đang có nhiều kết nối, bạn sẽ cần một điều phối viên giao dịch để xử lý giao thức cam kết hai pha.

1

câu trả lời của tôi có thể là một chút lạ, nhưng tôi sẽ khuyên bạn (nếu đó là về mặt kỹ thuật có thể) đánh giá sử dụng của 2 giao dịch độc lập cho mỗi cơ sở dữ liệu. Mối quan tâm của tôi về giao dịch phân tán/XA là hiệu năng cơ sở dữ liệu tổng thể/khả năng mở rộng/độ trễ.

2 liên kết mà sẽ cố gắng để chứng minh quan điểm của tôi:.

  1. Martin Fowler notes: "Bạn cần phải chú ý đến thứ tự của các cam kết của mình, nhận được những cái quan trọng hơn trong lần đầu tiên Tại mỗi cam bạn phải kiểm tra xem nó đã thành công và quyết định phải làm gì nếu nó không thành công. "
  2. Interview regarding eBay architecture
-1

Vâng, bạn sẽ cần phải tạo ra một phạm vi giao dịch và các nhà cung cấp ADO.Net cho SQL và Oracle sẽ đăng ký từng kết nối vào một giao dịch phân phối duy nhất, điều phối bởi MSDTC.

Tài liệu MSDN về cách thiết lập MSDTC khá phức tạp và bao gồm cụ thể các câu hỏi mà bạn yêu cầu: Enable Firewall Exceptions for MS DTC, Configuring Security for Distributed Transactions.

Bạn bỏ qua đề cập đến hệ điều hành khách hàng của bạn đang chạy, phiên bản SQL Server, phiên bản Oracle, hệ điều hành back-end cho SQL Server (s) và Oracle (s). Bạn cũng bỏ bê nói bất kỳ sự cố nào xảy ra với bạn gặp phải hoặc thông báo lỗi bạn đã xem. Ngay bây giờ, vấn đề dường như được đặt ở đâu đó giữa bàn phím và ghế.

0

tôi đã cùng một vấn đề. Cần thiết để thực hiện các giao dịch phân tán giữa 2 SQL và 1 máy chủ cơ sở dữ liệu Oracle, tất cả điều này từ một ứng dụng ASP.Net.

Vì vậy, tôi đã viết về trải nghiệm đó trong blog của mình, vì vậy lần sau tôi sẽ không lãng phí thời gian nữa.

Kiểm tra nó tại địa chỉ:

MS DTC Distributed transactions: Oracle 10gR2, SQL Server 2005 and Windows Server 2008 R2

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