Saya mencoba menjalankan SQL terhadap server yang ditautkan, tetapi saya mendapatkan kesalahan di bawah ini:
BEGIN DISTRIBUTED TRANSACTION
SELECT TOP 1 * FROM Sessions
OLE DB provider "SQLNCLI" for linked server "ASILIVE" returned message "No transaction is active.".
Msg 7391, Level 16, State 2, Line 3
The operation could not be performed because OLE DB provider "SQLNCLI" for linked server "ASILIVE" was unable to begin a distributed transaction.
Ada dua kesalahan yang dikembalikan oleh penyedia:
Kesalahan # 1:
Number: $80040E14
Source: Microsoft OLE DB Provider for SQL Server
Description: OLE DB provider "SQLNCLI" for linked server "ASILIVE" returned message "No transaction is active.".
HelpFile:
HelpContext: $00000000
SQLState: 01000
NativeError: 7412
Kesalahan # 2
Number: $80040E14
Source: Microsoft OLE DB Provider for SQL Server
Description: The operation could not be performed because OLE DB provider "SQLNCLI" for linked server "ASILIVE" was unable to begin a distributed transaction.
HelpFile:
HelpContext: $00000000
SQLState: 42000
NativeError: 7391
Bagaimana cara agar Microsoft lebih mengutamakan fungsionalitas daripada keamanan?
Atau, setidaknya, bagaimana saya bisa mendapatkan dua SQL Sever untuk berbicara satu sama lain?
Pertanyaan-pertanyaan Terkait
- Operasi tidak dapat dilakukan karena penyedia OLE DB "SQLNCLI10" ... (* nama server tertaut adalah
(null)
) - Kesalahan transaksi terdistribusi? ( menggunakan penyedia Oracle )
- Tidak dapat mendaftar dalam transaksi terdistribusi dengan NHibernate ( menggunakan Hibernate )
- Kesalahan menggunakan transaksi terdistribusi di SQL Server 2008 R2 ( SQL Server 2008 R2, tidak ada jawaban )
- Kesalahan Transaksi Terdistribusi Hanya Melalui Kode ( disebabkan oleh penggabungan koneksi )
- Kesalahan melakukan koordinator transaksi terdistribusi di server tertaut ( SQL Server 2008, tidak ada jawaban )
- Kesalahan transaksi terdistribusi? ( tidak ada jawaban yang diterima; hanya jawaban tidak membantu )
- Bagaimana cara memasukkan ke dalam tabel jarak jauh menggunakan server yang terhubung tanpa Transaksi? ( jawaban yang diterima tidak menyelesaikan )
Apa yang telah saya lakukan tidak relevan, tetapi saya akan tetap mempostingnya.
Pastikan
Distributed Transaction Coordinator
layanan berjalan di kedua mesin:Nonaktifkan semua keamanan MSDTC di kedua mesin:
Aktifkan opsi acak di server tertaut:
Terkutuk dan bersumpah.
Hal-hal yang hancur.
Memeriksa bahwa a
SELECT
dapat menggunakan server tertaut :SELECT * FROM ASILive.CustomerManagementSystem.dbo.Users .... (763 row(s) affected)
Memeriksa bahwa server klien dapat
ping
server jarak jauh :C:\Documents and Settings\avatar>ping asicmstest.contoso.com Pinging asicmstest.contoso.com [10.0.0.40] with 32 bytes of data: Reply from 10.0.0.40: bytes=32 time<1ms TTL=128 Reply from 10.0.0.40: bytes=32 time<1ms TTL=128 Reply from 10.0.0.40: bytes=32 time<1ms TTL=128 Reply from 10.0.0.40: bytes=32 time<1ms TTL=128 Ping statistics for 10.0.0.40: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms
Memeriksa apakah server jarak jauh dapat berkomunikasi kembali, dengan nama, ke server yang memulai:
C:\Documents and Settings\avatar>ping asitestserver.contoso.com Pinging asitestserver.contoso.com [10.0.0.22] with 32 bytes of data: Reply from 10.0.0.22: bytes=32 time<1ms TTL=128 Reply from 10.0.0.22: bytes=32 time<1ms TTL=128 Reply from 10.0.0.22: bytes=32 time<1ms TTL=128 Reply from 10.0.0.22: bytes=32 time<1ms TTL=128 Ping statistics for 10.0.0.22: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms
Dicentang yang
@@SERVERNAME
cocok dengan nama server di kedua server :SELECT @@SERVERNAME, SERVERPROPERTY('MachineName') ------------- ------------- ASITESTSERVER ASITESTSERVER
dan
SELECT @@SERVERNAME, SERVERPROPERTY('MachineName') ---------- ---------- ASIGROBTEST ASIGROBTEST
Berteriak
Dikeluarkan
SET XACT_ABORT ON
sebelum mengeluarkan pertanyaan saya :SET XACT_ABORT ON GO BEGIN DISTRIBUTED TRANSACTION SELECT TOP 1 * FROM Sessions
Diberikan
Everyone
Full Control
kepada :HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer
di kedua server.
Jawaban:
Menemukannya, MSDTC di server jauh adalah tiruan dari server lokal.
Dari Log Peristiwa Aplikasi Windows:
Lari
dan kemudian menghentikan dan memulai ulang layanan SQL Server memperbaikinya.
sumber
Saya dapat menyelesaikan masalah ini (seperti yang disebutkan orang lain dalam komentar) dengan menonaktifkan "Aktifkan Promosi Transaksi Terdistribusi untuk RPC" (yaitu, menyetelnya ke
False
):sumber
Oke, jadi layanan dimulai, ada jalur ethernet di antara mereka, resolusi nama berfungsi, server tertaut berfungsi, dan Anda menonaktifkan otentikasi transaksi.
Perasaan saya mengatakan masalah firewall, tetapi beberapa hal muncul di pikiran ...
sumber
Jika server berkerumun dan ada DTC berkerumun, Anda harus menonaktifkan keamanan di DTC berkerumun, bukan DTC lokal.
sumber
Jika server Tujuan Anda berada di cloud atau pusat data lain, maka perlu menambahkan entri host layanan MSDTC (Server Tujuan) di server sumber Anda.
Coba yang ini jika masalah tidak teratasi, Setelah mengaktifkan pengaturan MSDTC.
sumber
Bagi saya, ini terkait dengan pengaturan Firewall. Pergi ke pengaturan firewall Anda, izinkan DTC Service dan itu berhasil.
sumber
Petualangan terakhir saya dengan MSDTC dan kesalahan hari ini ternyata adalah masalah DNS. Anda berada di jalur yang benar menanyakan apakah mesin berada di domain yang sama, EBarr. Ngomong-ngomong, daftar hebat untuk masalah ini!
Situasi saya: Saya memerlukan server di domain anak untuk dapat menjalankan transaksi terdistribusi terhadap server di domain induk melalui firewall. Saya telah menggunakan server tertaut cukup banyak selama bertahun-tahun, jadi saya memiliki semua pengaturan biasa dalam SQL untuk server tertaut dan di MSDTC yang didokumentasikan Ian dengan sangat baik di atas. Saya menyiapkan MSDTC dengan berbagai port TCP (5000-5200) untuk digunakan di kedua server, dan mengatur lubang firewall di antara kotak untuk port 1433 dan 5000-5200. Itu seharusnya berhasil. Server tertaut diuji OK dan saya dapat menanyakan server SQL jarak jauh melalui server tertaut dengan baik, tetapi saya tidak bisa mendapatkannya untuk memungkinkan transaksi terdistribusi. Saya bahkan bisa melihat koneksi di server QA dari server DEV, tetapi ada sesuatu yang tidak membuat perjalanan kembali.
Saya bisa PING server DEV dari QA menggunakan FQDN seperti: PING DEVSQL.dev.domain.com
Saya tidak bisa PING server DEV hanya dengan nama mesin: PING DEVSQL
Server DEVSQL seharusnya menjadi anggota dari kedua domain, tetapi namanya tidak diselesaikan di DNS domain induk ... sesuatu telah terjadi pada akun mesin untuk DEVSQL di domain induk. Setelah kami menambahkan DEVSQL ke DNS untuk domain induk, dan "PING DEVSQL" berfungsi dari server QA jarak jauh, masalah ini telah teratasi bagi kami.
Saya harap ini membantu!
sumber
Terlepas dari pengaturan keamanan, saya harus membuka beberapa port di kedua server agar transaksi dapat berjalan. Saya harus membuka port 59640 tetapi menurut saran berikut, port 135 harus dibuka. http://support.microsoft.com/kb/839279
sumber
Saya mendapatkan kesalahan yang sama dan saya berhasil mengatasinya dengan mengkonfigurasi MSDTC dengan benar di server sumber untuk memungkinkan keluar dan mengizinkan DTC melalui firewall windows.
Izinkan Koordinator Transaksi Terdistribusi, centang domain, opsi privat dan publik
sumber