本部mssqlserver服务器:IP 192.168.1.33  数据库 MoneyManange 表 A,B
店铺1 sqlserver服务器:IP 192.168.13.1  数据库 MoneyManange 表 A,B
店铺2 sqlserver服务器:IP 192.168.23.1  数据库 MoneyManange 表 A,B本部和各店铺的数据库的表结构是一样的。店铺实际数量为150以上,需要传送数据的表的个数为60。以上只以2家店铺,2个表为例说明。
现在要在各个店铺做一个工具,将店铺内的A,B表中的数据传送到本社的A,B表中去。
方法1:建立存储过程,使用insert into [192.168.1.33].MoneyManageSecond.dbo.A select * from MoneyManageSecond.dbo.A类似的语句
考虑到每个店铺可能会同时执行存储过程,多个店铺都同时往A表中插入数据的可能性存在,导致某些店铺的数据插入失败。实际上已经发生了这种情况。
方法2:本部数据库中建立视图A,B,以及相应的分区表A_店铺1,B_店铺2。此方法不可行的原因有2个,1是本部数据库的表改成了试图,可能会影响到别的使用这些
表的系统,因为像A inner join B 这样的语句,分区表数量不能超过256,并且像 insert A select A.num+1... from A的语句也不能成功;2是店铺数150*表数60=9000,数据库中的表的个数太庞大。
方法3:店铺侧将数据生成文件上传到本部ftp,然后本部从ftp取出数据导入到数据库中,不过此方法被客户否定了,顾客是上帝,莫有办法呀!
方法4:各位老师帮我想想!分不多,聊表心意!

解决方案 »

  1.   

    店铺实际数量为150以上,需要传送数据的表的个数为60
    这种实际情况本身就是一个难题,
    既要保证正确,又要效率,实在是很为难(毕竟那是150个服务器)
    试问:
    你在自己的本机上,建立150个数据库,每个库60个表,
    向本机另一个数据库里汇总,或向另一个服务器里汇总
    想一下要多少时间(呵呵,我不知道那表的数据量大不大?)
    更何况是异地的?
    简单的是,过程只是导数据
    复杂的是,数据过于分散把表联在一起进行数据的导出和导入可以保证出错回滚,但一旦出错,那就说不好要回滚多久分开导入导出的话,就只能单个的事物回滚,如果分开导可以考虑,按店来到导出和导入,这样出错的话,也是某个店的数据没有及时导入设计时加上出错时给负责人发邮件的功能,以保证可以及时对应出错的店的数据可以用批处理写,或者在本部的数据库里建DTS(也叫SSIS)呵呵,以上仅为菜鸟发表的一点想法关注一下
    帮你顶顶
      

  2.   

    呵呵,暂时过渡下,可以用VPN,如果有钱的话,可以用专线或者光纤。呵呵
      

  3.   

    必须要把事务隔离,而且隔离等级最高SET  TRANSACTION  ISOLATION  LEVEL
    {READ UNCOMMITTED
    | READ COMMITTED
    | REPEATABLE READ
    | SERIALIZABLE
    }
    1. READ UNCOMMITTED:完全没有隔离效果,读取到的数据随时都可能被别人更改事删除。
    2. READ COMMITTED:不允许读取尚未COMMIT的数据。因为该数据被改动的几率很大。不过,在读取完数据后就和READ UNCOMMITTED一样,不会在乎该数据是否还会被别人更改。因此每次读取到的数据可能会不相同。
    3. REPEATABLE READ:事务中所读取到的数据,将不允许别人更改或删除,以保证在事务中每次都可以读取到相同的内容。但别人仍然可以在该数据表中新增记录。
    4. SERIALIZABLE:数据表全部锁定,不允许别人来修改、删除或新增数据。由于必须等到事务完成后,其他事务才能使用这些数据表,因此Serializable的并发性最低,要使用相同数据的事务必须一个个顺序地进行。如下:
    CREATE PROC dbo.proc_name
    AS
    SET  TRANSACTION  ISOLATION  LEVEL   --这个语句一定要有
    BEGIN TRAN
    ....................
    ......COMMIT TRAN
    RETURN errHandle:  --发生错误时回滚
    ROLLBACK TRAN
    RETURN
      

  4.   

    象你这种情况适合用:
    SET  TRANSACTION  ISOLATION  LEVEL SERIALIZABLE保证不会读取到脏数据