有两台服务器,一台白天收数,另外一台晚上把数据copy过来做处理我用的是
INSERT INTO dbo.处理表
(
)
SELECT
*
FROM
openrowset('SQLOLEDB','192.168.0.241';'sa';'123456',[OPInfo].[dbo].[收数表])收数表和处理表的表没索引,他们只有一列是自增列。收数表每天都是一个表,应该不存在锁表的可能性。但是收数表每天大概有3000W 的数据,这样一句话发现超级慢,也不知道是什么情况,把这个表的数据复制过来需要7,8个小时,所以想问下有没有快速的copy的方法
INSERT INTO dbo.处理表
(
)
SELECT
*
FROM
openrowset('SQLOLEDB','192.168.0.241';'sa';'123456',[OPInfo].[dbo].[收数表])收数表和处理表的表没索引,他们只有一列是自增列。收数表每天都是一个表,应该不存在锁表的可能性。但是收数表每天大概有3000W 的数据,这样一句话发现超级慢,也不知道是什么情况,把这个表的数据复制过来需要7,8个小时,所以想问下有没有快速的copy的方法
(
)
SELECT
*
FROM
openrowset('SQLOLEDB','192.168.0.241';'sa';'123456',[OPInfo].[dbo].[收数表]) with (nolock)
1、做个包,把收数表传到处理服务器上。
2、
INSERT INTO dbo.处理表
SELECT
*
FROM 收数表。之前用过openrowset,感觉挺慢的。
具体办法,编写bat文件来运行将数据导出到文件的bat写法
BCP db.dbo.tablename Out "filename" /N /U username /P passwd /S servername将文件导出到表的bat写法
BCP db.dbo.tablename In "filename" /N /E /q /k /U username /P passwd /b 50000 /S servername
块拷贝要快
1.用链接服务器(link server)传数据,
2.检查网络是否正常,如ping延时.
3.检查目标表上是否有触发器,索引,约束等.
4.insert into[目标表]时,加with (tablock)参数.