You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell从Oracle导入SQL Server大数据时遇超时错误求助

问题描述

使用PowerShell脚本从Oracle导入数据到SQL Server时,小量数据可正常运行,但导入15345678条数据时出现超时错误。已将两个服务器连接的Connection Timeout设为0,问题依旧。

正常运行的脚本

add-type -path 'C:\Oracle\Client\ODP.NET\managed\common\Oracle.ManagedDataAccess.dll';
$Orclconn = "User Id=Oracle_Net;Password=*****;Data Source=Nexus;Connection Timeout=0";
$qry = "SELECT Cust_id, Relation_id, Order_id, quantity
FROM Cust_Order ob
WHERE Pay_method = '110'
AND Set = 0";
$adapter = new-object Oracle.ManagedDataAccess.Client.OracleDataAdapter($qry, $Orclconn);
$tbl = new-object System.Data.DataTable('T_Order_Intake');
$adapter.Fill($tbl);
$sqlconn = "server=Customer_Nexus;database=Cust_Order;trusted_connection=true;Connection Timeout=0";
$sqlld = new-object system.data.sqlclient.Sqlbulkcopy($sqlconn);
$sqlld.DestinationTableName="dbo.T_Order_Intake";
$sqlld.WriteToServer($tbl);

报错信息

15345678   *** 此为直接在Oracle服务器上执行查询时的相同行数 ***
Exception calling "WriteToServer" with "1" argument(s): "Execution Timeout Expired.  The timeout period elapsed prior to completion of the operation or the server is not responding"
At E:\A_SCRIPT\Scripts\Orcl.ps1:23 char:1
+ $sqlld.WriteToServer($tbl);
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : SqlException
解决方案

你遗漏的是SqlBulkCopy自身的超时与批量写入配置:

  • 连接字符串中的Connection Timeout仅控制建立连接的超时,而数据批量写入的超时由SqlBulkCopy.BulkCopyTimeout属性单独控制,默认值为30秒,大数据量导入必然超时。
  • 一次性写入百万级数据会给服务器带来极大性能压力,需通过BatchSize分批次写入。

修改后的关键代码如下:

$sqlld = new-object system.data.sqlclient.Sqlbulkcopy($sqlconn);
$sqlld.DestinationTableName="dbo.T_Order_Intake";
# 设置批量写入超时(单位:秒,0表示无超时)
$sqlld.BulkCopyTimeout = 0;
# 设置每批次写入行数,可根据服务器性能调整,例如10000条/批
$sqlld.BatchSize = 10000;
$sqlld.WriteToServer($tbl);

额外优化建议:

  • 检查Oracle查询的索引情况,确保查询用到合适的索引,避免全表拖慢数据读取速度。
  • 若数据量极大,可分页查询Oracle数据,分批次读取后再写入SQL Server,避免一次性加载所有数据到内存引发内存压力。

内容的提问来源于stack exchange,提问作者HarryS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 13:43:10