SQL Server DBA三十问之我答(第7题)

数据库 SQL Server
前几天看到一篇" SQL Server DBA三十问",很不错,比较中肯。这些题目还是需要一定操作经验的才能答得上来,其中的很多题目都可以通过books online查到,有些题目我也非常感兴趣,因为也处理过类似的问题,所以印象深刻,现在把我的答案写出来,希望可以帮到有缘人,如果有更好的方案,当然我也很乐意学学。

前几天看到一篇" SQL Server DBA三十问",很不错,比较中肯。这些题目还是需要一定操作经验的才能答得上来,其中的很多题目都可以通过books online查到,有些题目我也非常感兴趣,因为也处理过类似的问题,所以印象深刻,现在把我的答案写出来,希望可以帮到有缘人,如果有更好的方案,当然我也很乐意学学。

题目:7. 在线系统,一个表有五千万记录,现在要你将其中的两千万条记录导入到另一台服务器的某个表中,导完后,需要将这两千万数据删 除,你预备如何处理,优缺点是什么;

我的答案: (先说明一下我的环境是sqlserver 2000,并且假设他有主键id)

第1步:先做一个表,t_update_log,记录更新过的记录的主键id,记录修改和删除的记录,这步骤的具体作用看下面的步骤;

第2步:导出2000万的数据到另一个库另一表,我起名为 t_2000w ,我是用dts来处理的,效率很好,如果没有大字段,2000万大概3个小时可以导完,如果有大字段,比如很大的varchar,text,ntext 等,那需要的时间久会比较长,具体时间还要看数据的大小。

第3步:删除当前库导出的2000万,我把当前库起名为 t_5000w, 我是这样来处理的,首先建一个和源数据表相同结构的表,起名t_3000w,导入剩下的3000万条数据,然后用sp_rename 分别修改两个表,把t_5000w改成t_5000w_bak,把t_3000w改成t_5000w(即源表), 大概就是这样,很easy吧。

别急,第一步的准备工作还没用上呢,而且还有很多细节的问题。

Q1:如何保证数据的准确性,如果你在导入的同时有人对数据进行了更新怎么办?

Q2:尽量减少对用户的影响,如果在sp_rename修改表名称需要的时间比较长,而且刚好有数据需要insert怎么办?

我的解决方案:

A1:刚好用到了第1步的表t_update_log,把有更新的记录再重新导入到新表t_2000w,从此记录表中t_update_log找出被删除的id,从t_2000w中删除;

A2:修改对表t_5000w的insert操作接口,可以再建一个结构和t_5000w一样的新表,取名t_6000w,如果有自增id,把自增id的当前值设置为6000w,然后新增的数据都insert到t_6000w中,如果你的数据库操作都是通过存储过程统一操作,那很幸运,你只需要修改存储过程,不需要修改你的。net程序,你甚至可以不停止服务就可以顺利升级,在这里存储过程的优越性得到了充分体现,如果你不是通过存储过程,而是sql语句,而且调用的地方很多,那我建议,升级期间你还是暂停服务吧。

当然以上操作都是需要再测试环境下演练一遍,记录下每一部需要的时间,并且做好失败时能及时恢复到之前状态。当然升级期间还是建议暂停服务,因为大部分人可以接受暂停服务,但不能接受数据丢失。

原文链接:http://www.cnblogs.com/gezifeiyang/archive/2011/10/22/2219631.html

【编辑推荐】

  1. 一位资深DBA的十年职业之路
  2. 客户的一次疏忽,DBA的一次噩梦
  3. 数据库应用呈三大趋势 DBA要如何应对
  4. 告诉你,如何成就DBA职业生涯
  5. NoSQL数据库选型,DBA该考虑什么?
责任编辑:艾婧 来源: 鸽子飞扬的博客
相关推荐

2011-10-24 22:13:37

DBASQL Server

2022-04-01 08:37:07

SpringAPI前端

2010-05-28 15:47:16

双绞线

2023-02-07 13:51:11

SQLupdate语句

2012-02-24 10:28:32

2010-06-17 14:29:39

2012-10-31 09:41:47

WAN优化SSLHTTPS

2014-12-15 11:16:34

vCenter SRM

2023-11-06 11:13:58

Bean占位符标记

2011-11-03 09:29:32

2011-08-05 11:06:33

VMware vSph虚拟化

2011-07-07 14:22:24

SQL查询update

2023-11-28 07:48:23

SQL Server数据库

2009-12-02 15:02:17

路由器怎么安装

2016-12-12 14:55:01

AndroidAndroid Vie

2011-03-14 14:40:28

VMware Work

2011-12-08 09:47:08

虚拟化应用虚拟化

2021-01-26 05:07:53

WindowViewWMS

2011-01-20 08:35:23

SQL Server

2013-02-18 09:22:48

虚拟化KVM
点赞
收藏

51CTO技术栈公众号