如何避免BCP T-SQL批量插入超时?

时间:2014-12-11 14:41:51

标签: sql-server sql-server-2008 bulkinsert bcp

我希望将124,978,454行数据部署到生产服务器。经过一些研究和询问后,我到达使用bcp.exe创建.dat文件,然后使用T-SQL批量插入到目标表。在目标表上,我禁用外键以及该表上的非聚集索引(但保留了PK)。 我正在使用SQL Server 2008 R2

我正在使用我们的开发环境来了解我应该期待这个过程需要多长时间。到目前为止,我所做的是:

1)使用bcp使用以下命令行代码创建.dat文件(我已将其匿名化)

bcp "select * from MyDatabase.dbo.MyTable" queryout "c:\data.dat" -n -T -S Servername

2)使用以下T-SQL我试图批量插入数据

USE master;
ALTER DATABASE MYDATABASE SET RECOVERY BULK_LOGGED;

Use MYDATABASE 
GO

--Disabled indexes and foreign keys
ALTER TABLE MyTable NOCHECK CONSTRAINT ALL

ALTER INDEX IDX_MyTable_ReportViewID ON MyTable DISABLE;

BULK INSERT MyTable
    FROM 'C:\data.dat' 
   WITH (DATAFILETYPE='native', BATCHSIZE = 50000); 
GO

USE master;
ALTER DATABASE MYDATABASE SET RECOVERY FULL;

这开始没有问题。我让它一夜之间运行,但今天早上回到机器上以获得超时过期错误。

错误信息是:

TITLE: Microsoft SQL Server Management Studio
------------------------------

The Activity Monitor is unable to execute queries against server SERVERNAME.
Activity Monitor for this instance will be placed into a paused state.
Use the context menu in the overview pane to resume the Activity Monitor.

------------------------------
ADDITIONAL INFORMATION:

Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding. (Microsoft SQL Server, Error: -2)

For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=10.50.2550&EvtSrc=MSSQLServer&EvtID=-2&LinkId=20476

------------------------------

我不知道何时发生此错误,因为没有给出日期时间。我需要估计这次数据传输需要多长时间,以便我可以计划部署到生产中。

我的研究已经提出了在C#中执行此任务的解决方案,这对我来说并不适用。

我的问题:如何避免此超时错误?

或者,如果有比使用bcp实用程序更好的选项,我愿意调查这些选项。

0 个答案:

没有答案