請問,使用DBLINK 『A(台灣)=>B(大陸)』,筆數不多(2~3百筆)
執行 SQL 有時可以成功,有時會失敗,
SQL 語法如下:
INSERT INTO [I_DB].[INTERMEDIARY].[dbo].[MATERIAL_REQUIRE]
([ID],...略)
SELECT [planb_id],...略
FROM [ft_data_ks].[dbo].[MATERIAL_REQUIRE] WHERE [STATUS_FLAG] ='N';
UPDATE [ft_data_ks].[dbo].[MATERIAL_REQUIRE] SET [U_DATE]=GETDATE(),[STATUS_FLAG]='S' WHERE [STATUS_FLAG]='N' AND EXISTS (SELECT 1 FROM [I_DB].[INTERMEDIARY].[dbo].[MATERIAL_REQUIRE] as G WHERE G.[ID]= [MATERIAL_REQUIRE].[planb_id] COLLATE DATABASE_DEFAULT)
PING IP 是通的,連續PING 三天,遺失比例也是0%。
192.168.xxx.xxx 的 Ping 統計資料:
封包: 已傳送 = 431236,已收到 = 431181, 已遺失 = 55 (0% 遺失),
大約的來回時間 (毫秒):
最小值 = 0ms,最大值 = 1245ms,平均 = 0ms
錯誤訊息如:
已以用户 WORKGROUP\KSMES$ 的身份执行。 Named Pipes Provider: Could not open a connection to SQL Server [5]. [SQLSTATE 42000] (错误 5) 链接服务器"I_DB"的 OLE DB 访问接口 "SQLNCLI11" 返回了消息 "Login timeout expired"。 [SQLSTATE 01000] (错误 7412) 链接服务器"I_DB"的 OLE DB 访问接口 "SQLNCLI11" 返回了消息 "A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online."。 [SQLSTATE 01000] (错误 7412). 该步骤失败。,00:00:22,16,7412,,,,0
若是寫程式去將 B撈出來,在寫回 A 是正常。
雖然寫個小程式可以解決,不過還是想知道原因?
需要朝哪個方向找出問題?
B資料庫 SQL版本
產品版本編號 版本編號 版本層級 執行個體產品版本 資料庫的內部版本號碼
2016 13.0.1601.5 RTM Enterprise Edition (64-bit) 852
A資料庫 SQL 版本
產品版本編號 版本編號 版本層級 執行個體產品版本 資料庫的內部版本號碼
2017 14.0.1000.169 RTM Standard Edition (64-bit) 869
PS:帳號都使用SA 的權限
問題出在timeout
已以用户 WORKGROUP\KSMES$ 的身份执行。 Named Pipes Provider: Could not open a connection to SQL Server [5].
[SQLSTATE 42000] (错误 5) 链接服务器"I_DB"的 OLE DB 访问接口 "SQLNCLI11" 返回了消息 "Login timeout expired"。
因為sql server預設connection是有過期時間的,超過就會跳出timeout error,也就造成你的問題,可以看圖片查詢DB的預設過期時間
解決方式: