5

Tôi đã thử gần một tuần để phân phối các giao dịch được phân phối. Tôi đã có một số thủ tục trên MSSQL mà cố gắng chọn dữ liệu từ MySQL. Nhu cầu của tôi là làm điều này trong một giao dịch (!). Tại thời điểm tôi đã thiết lập kết nối ODBC trên MSSQL với trình điều khiển MySQL một tầng từ OpenLink, nó cho biết rằng các giao dịch XA hoạt động thành công (có một nút kiểm tra được tích hợp sau khi cấu hình kết nối ODBC). Sau đó, tôi đã thiết lập một máy chủ được liên kết trong MSSQL qua MSDASQL để kết nối ODBC này, nhưng khi thực hiệnCác giao dịch phân tán giữa MySQL và MSSQL

begin distributed transaction 
    select * from optin..lu_source_proc 
    select * from openquery(optinxa, 'SELECT * FROM tbl_source_proc') 
commit transaction 

tôi nhận được lỗi này, mà không có giao dịch hơn nữa có thể được bắt đầu bên trong giao dịch thực tế. (Der OLE DB-Anbieter "MSDASQL" für den Verbindungsserver "optinxa" hat die Meldung "Es können keine weiteren Transaktionen in dieser Sitzung gestartet werden." zurückgeben.)

Một thử nghiệm:

set transaction isolation level serializable 
begin transaction 
    select * from optin..lu_source_proc 
    select * from openquery(optinxa, 'SELECT * FROM tbl_source_proc') 
commit transaction 

Kết quả trong Der OLE DB-Anbieter "MSDASQL" für den Verbindungsserver "optinxa" hat die Meldung "[OpenLink][ODBC][Driver]Driver does not support this function" zurückgeben. Nhưng tại sao Kỳ trình điều khiển ODBC trên cấu hình, mà giao dịch XA làm việc?

+0

Bạn có tìm cách giải quyết vấn đề này không? Tôi có một vấn đề trong câu hỏi này http://stackoverflow.com/questions/30911206/distributed-transaction-on-linked-server-between-sql-server-and-mysql – ughai

+0

Không, tôi chưa bao giờ làm việc này. – rabudde

Trả lời

2

Có hai khía cạnh quan trọng ở đây -

1) Dường như OLE DB does have support cho các giao dịch phân phối - vì vậy tôi sẽ giả định rằng Microsoft OLE DB Provider cho ODBC Data Sources cũng nên như vậy ...

tôi cũng sẽ giả định rằng nếu MSDASQL đã hỗ trợ giao dịch phân tán sau đó nó sẽ xử lý chức năng mà trực tiếp chứ không phải ủy quyền cho driver ODBC ...

giao dịch phân tán được bật trong trình điều khiển ODBC bằng cách gọi -

SQLSetConnectAttr (SQL_ATTR_ENLIST_IN_DTC)

Vì vậy, cho phép tài xế OpenLink đăng nhập thông qua các hộp thoại tạo DSN sẽ giúp xác định xem SQLSetConnectAttr (SQL_ATTR_ENLIST_IN_DTC) được gọi.

2) Chúng tôi sẽ cần để xem thêm tracing để xem hoạt động ODBC ngay lập tức dẫn đến "điều khiển không hỗ trợ chức năng này" lỗi ...

Bạn có thể log a support case với OpenLink Software để thực hiện việc này hơn nữa ...

+0

Có, tôi biết rằng MSDASQL hỗ trợ các giao dịch được phân phối và tôi đã liên hệ với bộ phận Hỗ trợ OpenLink. Họ nói với tôi rằng Trình điều khiển MySQL một tầng và MSDASQL của họ đều hỗ trợ Giao dịch XA. Vì vậy, họ không thể giúp đỡ. Các giao dịch XA trong MSDTC cũng được cho phép (được cấu hình thông qua dịch vụ thành phần trong Windows W2k3). Tôi cũng cho phép đăng nhập vào OpenLink Driver, nhưng có vẻ như, tệp nhật ký chỉ lấp đầy dữ liệu nhật ký từ kiểm tra trình điều khiển và không có giao dịch thực. Tôi sẽ thử lại vào thứ hai. Cảm ơn bây giờ. – rabudde

+0

Tôi bị ốm trong tuần này, vì vậy tôi không thể kiểm tra ngay bây giờ (phải chờ đến tuần sau) – rabudde

+0

Cho tôi số tham chiếu trường hợp OpenLink và tôi sẽ xem xét trường hợp ... –

0

The following steps are required if you want to use XA data sources together with Microsoft Distributed Transaction Coordinator (MS DTC) for handling distributed transactions:

Trên Windows XP và Windows server 2003:

  1. Từ Pa-nen điều khiển, mở Công cụ quản trị, sau đó mở Dịch vụ thành phần. Bạn cũng có thể bấm vào nút Bắt đầu, bấm Chạy, gõ dcomcnfg trong ô Mở, sau đó bấm OK để mở Dịch vụ Thành phần .

  2. Mở rộng Dịch vụ thành phần, Máy tính và nhấp chuột phải Máy tính của tôi, và sau đó chọn Thuộc tính.

  3. Bấm vào tab MSDTC, sau đó bấm Cấu hình bảo mật.

  4. Chọn hộp kiểm Bật giao dịch XA, sau đó nhấp OK. Điều này sẽ khiến khởi động lại dịch vụ MS DTC.

  5. Bấm OK lần nữa để đóng hộp thoại Thuộc tính, và sau đó đóng Dịch vụ thành phần.

  6. Dừng và sau đó khởi động lại máy chủ SQL để đảm bảo rằng nó đồng bộ với thay đổi MS DTC.

Trên Windows Vista và Windows Server 2008:

  1. Nhấp vào nút Start, gõ dcomcnfg trong hộp thoại Start Search, và sau đó nhấn ENTER để mở Component Services. Bạn cũng có thể nhập % windir% \ system32 \ comexp.msc vào hộp Bắt đầu Tìm kiếm để mở Thành phần Dịch vụ.

  2. Mở rộng dịch vụ thành phần, máy tính, máy tính của tôi và sau đó Điều phối viên giao dịch phân tán.

  3. Nhấp chuột phải vào Local DTC và sau đó chọn Thuộc tính.

  4. Nhấp vào tab Bảo mật trên hộp thoại Thuộc tính DTC cục bộ.

  5. Chọn hộp kiểm Bật giao dịch XA, sau đó nhấp OK. Điều này sẽ khiến khởi động lại dịch vụ MS DTC.

  6. Bấm OK lần nữa để đóng hộp thoại Thuộc tính, và sau đó đóng Dịch vụ thành phần.

  7. Dừng và sau đó khởi động lại SQL Server để đảm bảo rằng nó đồng bộ hóa với thay đổi MS DTC.

Xem thêm Registry Entries Are Required for XA Transaction Support và xác nhận rằng người lái xe bên thứ ba XA DLL tạo ra các mục đăng ký.

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