我已经设置了 SQL Server 2016 linkedserver 来连接到 MySQL 8 实例,并创建了存储过程,使用开放查询将数据从 SQL Server 数据库插入到 MySQL 数据库,当我调用该过程时它工作正常,它将记录插入到 MySQL。但是,当我创建多个将数据插入 MySQL 的过程并立即调用所有过程时,它会失败。
我正在使用 Windows Server 2016 VM 和 Google Cloud Managed MySQL 实例以及 ODBC unicode 驱动程序 8.4
示例: 当我像下面这样单独调用一个过程时,它会起作用。
EXEC insert_data_db1 @p = 1;
我有另一个具有多个子过程的程序,当我调用此具有多个子过程的过程时,它失败并显示以下错误消息。
EXEC insert_data_db1 @p = 1;
EXEC insert_data_db2 @p = 2;
EXEC insert_data_db3 @p = 3;
每个过程都有多个像这样的插入语句;
INSERT INTO OPENQUERY([server],'SELECT id, name, state_date, created_at, updated_at, created_byFROM `Db1`.table1')
SELECT id, name, state_date, created_at, updated_at, created_by FROM source a
错误;
链接服务器“LinkedServer”的 OLE DB 提供程序“MSDASQL”返回消息“[MySQL][ODBC 8(w) 驱动程序]无法连接到‘ip:port’(10060) 上的 MySQL 服务器”。
需要帮助,可能是什么问题?
所以你是说当你只运行存储过程一次时它可以工作,但当你同时并行运行它的多个实例时它会失败。
您是在 Management Studio 中执行此操作吗?
可能不太可能,但是链接服务器连接只是单线程的,所以如果一个线程已经被占用,也许其余的会被拒绝?
您可以尝试将其分解为步骤,以便 SSMS 按顺序单独执行它们:
EXEC insert_data_db1 @p = 1;
GO
EXEC insert_data_db2 @p = 2;
GO
EXEC insert_data_db3 @p = 3;