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

前几天看到一篇“SQL ServerDBA三十问”,很不错,比较中肯。这些题目还是需要一定操作经验的才能答得上来,其中的很多题目都可以通过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语句,而且调用的地方很多,那我建议,升级期间你还是暂停服务吧。

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

本文出自seven的测试人生公众号最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-11-09 02:57:33

SQL Server DBA三十问之我答(第7题)的相关文章

SQL Server DBA三十问

很多开发人员都想成为一名DBA,也有很多人一开始就把自己定位成为一名DBA,DBA究竟需要掌握些什么知识和技能呢?以下是我做DBA工作和面试DBA时,整理的一些DBA方面的三十个问题,三十个大问题中还有许多小的问题,涵括了SQLServer DBA比较多的技术知识点,与大家分享下,希望给有志做DBA的朋友们一些帮助: 1.char.varchar.nvarchar之间的区别(包括用途和空间占用):xml类型查找某个节点的数据有哪些方法,哪个效率高:使用存储过程和使用T-SQL查询数据有啥不一样:

SQL Server DBA需要知道的三件事

TechTarget记者有幸在六月采访了SQL Server顾问和热门博客写手Denny Cherry.他谈到了对于SQL Server DBA需要知道的三件事,并请介绍了SQL Server的发展趋势. 1.SQL Server 2012已经发布.Cherry说:"我遇到 很多人问我,SQL Server 2012什么时间发布.实际上它已经发布了."为什么还 会有这种困惑呢?微软近期发布的新产品太多了,包括Window Server 2012和 Digital Studio 2012

一名小小的SQL Server DBA想谈一下SQL Server的能力

原文:一名小小的SQL Server DBA想谈一下SQL Server的能力 一名小小的SQL Server DBA想谈一下SQL Server的能力 百度上暂时还没有搜索到相关的个人写的比较有价值的文章至少在中文网络的世界里面没有 但是在微软的网站有这样一篇文章<比较 SQL Server 与 IBM DB2> 文章从下面几个方面进行了对比 1.TCO和ROI2.性能和可扩展性3.高可用性4.安全5.管理6.开发效率7.商业智能和数据仓库8.OLTP9.SAP集成 文章介绍得比较牛逼 性能

2年SQL Server DBA调优方面总结

原文:2年SQL Server DBA调优方面总结 2年SQL Server DBA调优方面总结 当2年dba 我觉得,有些东西需要和大家分享探讨,先书单. 书单 1.<深入解析SQL Server 2008 系列> 这个就是mssql 2005 的技术内幕系列.2012版的也出了有兴趣可以看看,技术内幕系列是我接触最早的书,里面内容涵盖量很大,但是都是点到为止.所以很多都是可以细细品味,回头再看的. 2.<Troubleshooting SQL Server A Guide for t

SQL Server DBA:那些年,我们一起用过的工具

作为SQL Server DBA,我们常常抱怨微软自带工具的种种不好,但能做到开箱 即用已经很难得.SQL Server 2012中包含了以下三种单独的GUI工具,供SQL Server DBA与开发者使用. 1.2005年推出的SQL Server Management Studio 2.同样于2005年推出的SQL Server Business Intelligence Development Studio 3.2012年全新推出的SQL Server Data Tools SQL Ser

SQL Server DBA工作内容详解

在Microsoft SQL Server 2008系统中,数据库管理员(Database Administration,简称为DBA)是最重要的角色.DBA的工作目标就是确保Microsoft SQL Server 2008系统正常高效地运行.DBA的工作也是最繁忙的工作,无论是性能调整,还是灾难恢复,都离不开DBA的支持. 一般地,作为一个DBA,至少应该做好以下12项任务: 任务一:安装和配置; 任务二:容量规划; 任务三:应用架构设计; 任务四:管理数据库对象; 任务五:存储空间管理;

SQL Server 存储过程三种分页效率测试对比

很多朋友对大数据库分页技术感兴趣,在 SQL Server 优先会考虑存储过程,本人也是用存储过程分布,而且是本实例中的第二方案,下面我们来用实例对比 利用Not In和SELECT TOP分页,利用ID大于多少和SELECT TOP分页,利用SQL的游标存储过程分页 这三种分页技术的效率. 建立表: CREATE TABLE [TestTable] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [FirstName] [nvarchar] (100) COLL

SQL Server-聚焦深入理解动态SQL查询(三十二)

前言 之前有园友一直关注着我快点出SQL Server性能优化系列,博主我也对性能优化系列也有点小期待,本来打算利用周末写死锁以及避免死锁系列的接着进入SQL Server优化系列,但是在工作中长时间都是利用EF来操作SQL,不免对写SQL语句有些生疏,在某些场景下还是只能利用底层的SQL语句或者写存储过程来实现,很久没写存储过程都忘记怎么写了,所以本节穿插动态SQL查询的文章,别着急,博主说过不会烂尾,博主再忙也会抽空将整个SQL Server系列梳理完毕,那样的话,无论对初级还是中级者都可以

保护 SQL Server 数据库的十大绝招

server|数据|数据库 1.安装最新的服务包 为了提高服务器安全性,最有效的一个方法就是升级到 SQL Server 2000 Service Pack 3a (SP3a). 另外,您还应该安装所有已发布的安全更新. 2.使用 Microsoft 基线安全性分析器(MBSA)来评估服务器的安全性 MBSA 是一个扫描多种 Microsoft 产品的不安全配置的工具,包括 SQL Server 和 Microsoft SQL Server 2000 Desktop Engine (MSDE 2