- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在我的 Win 10 PC 上设置了一个从 SqlServer 2014 到 MySQL 5.7.3 的 LinkedServer。选择和插入查询都可以通过 openquery 单独工作,但插入查询不会在触发器中运行。请不要将此标记为重复,除非您找到下面未列出的“治疗方法”!
OLE DB provider "MSDASQL" for linked server "MYSQL" returned message "[MySQL][ODBC 5.3(w) Driver]Optional feature not supported".
*Msg 7391, Level 16, State 2, Procedure TRG_AfterEventInsert, Line 14
The operation could not be performed because OLE DB provider "MSDASQL" for linked server "MYSQL" was unable to begin a distributed transaction.
关于这个的帖子有很多,但我已经做了我能找到的一切,但仍然无法正常工作。我发现了一个名为 dtcping 的 MS 实用程序,它起初失败,直到我翻转注册表设置,但现在它成功了。
在 DTC 属性屏幕上,我启用了网络 DTC 管理、允许远程、允许无需身份验证的输入/出站和启用 XA 事务。在我的链接服务器上,我有 rpc & rpc out = true 和“enable promotion of DT” false。我将 msdtc 应用程序添加到防火墙排除项中。
我还尝试为我的 LinkedServer 禁用 DTC,但这没有用。我仍然收到错误。
有人可以在这里建议调试措施吗?我花了将近一整天的时间来解决这个问题,但没有成功。 MySQL 驱动程序是 5.3(32 位)。
更新:dtcPing 运行没有错误,但是当我尝试触发器插入时,我在 dtctrace.log 中看到以下内容
TRANSACTION_BEGUN RM_ENLISTED_IN_TRANSACTION "资源管理器 #1001 被登记为事务登记 #1。RM guid = '57c2b4b4-f37a-4017-a1fc-2d95bd64693d'"
RECEIVED_ABORT_REQUEST_FROM_BEGINNER “收到来自初学者的中止交易请求”
TRANSACTION_ABORTING "交易正在中止"
最佳答案
创建触发器时,使用以下结构来避免事务:
create trigger ti on t for insert, update as
begin
COMMIT -- Commit FIRST to avoid DTC...
insert into [mysql]...[mysql.customers] (a,b) -- Do you work
select i, 'Test'
from inserted
BEGIN TRAN -- Start tran again otherwise it will crash!!
end
go
请注意,“[mysql]...[mysql.customers]”语法请求提供者 MSDASQL 启用仅级别 0 设置(转到链接服务器并在提供者上设置)。
但正如其他人所建议的那样,您最好直接从触发器中踢出工作。
完整测试代码:
---------------
-- Run on MYSQL...
---------------
CREATE TABLE customers (a INT, b CHAR (20), INDEX (a)) ENGINE=InnoDB;
---------------
-- Run on SQL Server
---------------
create table t (i int)
go
create trigger ti on t for insert, update as
begin
COMMIT -- Commit tran to avoid DTC...
insert into [mysql]...[mysql.customers] (a,b)
select i, 'Test'
from inserted
begin tran -- Start tran again otherwise it will crash!
end
go
insert into t (i) select 1
-- Verify results
select *
from [mysql]...[mysql.customers]
关于mysql - 消息 7391 : linked server unable to begin a distributed transaction (both svrs running locally),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39428652/
我想处理 vector 中的元素一段时间。为了优化这一点,我不想在处理项目时删除它,而是在最后删除所有已处理的项目。 vector::iterator it; for(it = items.begin
我对 perl 中的 const 声明有疑问,并且无法弄清楚差异,请指出有什么不同。 下面是代码: BEGIN { *SIZE = sub() { 2 }; } *ITEM = sub() {
在右值上调用std::vector 和std::begin() 的成员函数.begin() 会导致不同的输出, 如以下测试所示: vector a{ 1, 2, 3 }; vector::iterat
我正在尝试创建自己的 vector 类。目前,我正在为我的 vector 类 Vec 添加一个删除函数。当我将 variable.begin() 传递到 erase 函数参数时,我的代码会报错,但在我
在 c++ 中迭代 vector 时,我注意到标准库中有一个 begin() 函数,还有一个 begin() 作为成员函数vector 类。如果有的话,两者之间有什么区别,应该使用哪个而不是另一个?
为什么标准将 end() 定义为末尾,而不是实际末尾? 最佳答案 最好的论据是Dijkstra himself 提出的论据。 : 您希望范围的大小是一个简单的差异end - begin; 当序列退化为
我正在尝试遍历大量记录并处理它们中的每一个。即使在处理过程中发生错误,游标也应该继续循环遍历记录,但在批处理结束时,我希望看到所有产生错误的记录的错误消息。 我有以下代码: 选择.... OP
这个问题在这里已经有了答案: error: no matching function for call to 'begin(int*&)' c++ (3 个答案) 关闭 6 年前。 我想获取数组的长
如果我有 std::vector(它是一个 std::vector 并且永远是一个 std::vector)。 使用 std::begin() 代替 std::vector::begin()(或相反)
这个问题在这里已经有了答案: Why use non-member begin and end functions in C++11? (7 个答案) 关闭 4 年前。 在这个问题(https://
我一直在尝试在网络上查找有关这些陈述之间差异的信息,在我看来它们是相同的,但我找不到对此的确认或两者之间的任何类型的比较。 这样做有什么区别: BEGIN -- Some update, in
我正在使用 Tiled Map 学习 LibGDX。我遇到了以下两种渲染方法。第一个是我通常使用的简单的。 但是,我不明白为什么我们需要第二个。我可以使用 batch.begin();在方法 2 中也
是否可以在 SpriteBatch begin 和 end 调用之间使用 ShapeRenderer 绘制形状。 我已经尝试过但没有结果,只绘制了 SpriteBatch 纹理,场景中没有任何形状。示
嗨,我正在编写一个程序,该程序从 .pem 文件导入私钥并创建一个私钥对象以供稍后使用。我遇到的问题是一些 pem 文件头以 开头 -----BEGIN PRIVATE KEY----- 而其他人则以
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 9年前关闭。 Improve this q
观看 Stephan T. Lavavej:核心 C++ #1,并注意到他使用的是 begin(collection) 而不是 collection.begin()。 有什么优势? 最佳答案 我想到的
Python脚本 ''' a ''' from __future__ import print_function 运行良好(即什么都不做),但是 ''' a ''' ''' b ''' from __
如何在两种风格的公钥格式之间进行转换, 一种格式是: -----BEGIN PUBLIC KEY----- ... -----END PUBLIC KEY----- 另一种格式是: -----BEGI
我是 STL c++ 的新手。我从书中复制了这个函数: string ConverToLowerCase(string s) { transform(s.begin(), s.end(),
给定代码: #include #include #include #include using namespace std; int main() { string s("ABCDE
我是一名优秀的程序员,十分优秀!