iT邦幫忙

0

請問資料庫連線問題?

Luke 2019-01-07 10:12:036797 瀏覽
  • 分享至 

  • xImage

請問,使用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 的權限

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
暐翰
iT邦大師 1 級 ‧ 2019-01-07 10:52:51

問題出在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的預設過期時間
2019-01-07.10.50.25-image.png

解決方式:

  1. 將timeout時間調長
  2. 將資料分批處理,舉例:每五筆就更新、新增一次
Luke iT邦研究生 5 級 ‧ 2019-01-07 13:50:03 檢舉

我預設是600 秒,兩邊的資料庫都是。
10分鐘應該不至於timeout吧?/images/emoticon/emoticon16.gif

同樣的資料筆數,直接在 SQL Server Management Studio
下執行,有時可以成功完成,有時Login timeout expired
/images/emoticon/emoticon02.gif

PS:防火牆 都是關的

暐翰 iT邦大師 1 級 ‧ 2019-01-07 14:32:53 檢舉

目前看你的情況是網路狀況不佳的時候
跑這些資料會超過10分鐘,所以timeout

我要發表回答

立即登入回答