有两台服务器,一台白天收数,另外一台晚上把数据copy过来做处理我用的是
INSERT  INTO dbo.处理表
(
 
)
SELECT 
*
FROM
openrowset('SQLOLEDB','192.168.0.241';'sa';'123456',[OPInfo].[dbo].[收数表])收数表和处理表的表没索引,他们只有一列是自增列。收数表每天都是一个表,应该不存在锁表的可能性。但是收数表每天大概有3000W 的数据,这样一句话发现超级慢,也不知道是什么情况,把这个表的数据复制过来需要7,8个小时,所以想问下有没有快速的copy的方法

解决方案 »

  1.   

    试试这样INSERT  INTO dbo.处理表
    (
     
    )
    SELECT 
    *
    FROM
    openrowset('SQLOLEDB','192.168.0.241';'sa';'123456',[OPInfo].[dbo].[收数表]) with (nolock)
      

  2.   

    菜鸟一枚,感觉这样能快吧。(没有遇到这么大的数据量);不足之处请指出。
    1、做个包,把收数表传到处理服务器上。
    2、
    INSERT  INTO dbo.处理表
    SELECT 
    *
    FROM 收数表。之前用过openrowset,感觉挺慢的。
      

  3.   

    SSIS就是做这个的主要工具,不用的话有点浪费
      

  4.   

    SSIS 跟这个有区别么,,应该底层都是一样的吧。。有什么好建议 ?
      

  5.   

    我用 是存储过程+作业,,感觉SSIS 跟这个好像没什么区别呢。。
      

  6.   

    SSIS当今应用中,最主要的用处是把数据从某个服务器或者库/文件中抽取,并在抽取过程中允许进行一些数据转换,然后插入目标服务器或者文件中,也就是通常的ETL过程。SSIS通常由sql agent进行,但是效率比sp+job高,也灵活。底层是否一样,只有微软的人才能给出判断。
      

  7.   

    with (nolock) 加到后面直接报错
      

  8.   

    可以考虑使用BCP,把表中数据导出到文件,然后压缩rar,拷贝到处理服务器,再使用BCP将文件导入的对应表中
    具体办法,编写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
      

  9.   

    bcp 工具 可能快您可以利用  , 导入导出工具做个测试  , 我每次导入导出 ,速度非常快  200万的数据 几秒中就可以到完。说明
    块拷贝要快
      

  10.   

    我也觉得在实际使用中,用openrowset导入数据速度很不理想
      

  11.   

    关于方案可以推荐两个1。使用ssis做数据同步,写一个数据导入的etl ssis包,然后放入到sql job agent里面,每天自动运行2。将要导入的数据分解成文件,然后每天导入到数据库,写一个bat文件,然后执行task或者agent都可以。
      

  12.   

    建议:
     1.用链接服务器(link server)传数据,
     2.检查网络是否正常,如ping延时.
     3.检查目标表上是否有触发器,索引,约束等.
     4.insert into[目标表]时,加with (tablock)参数.