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

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介:

前几天看到一篇“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/

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
7天前
|
SQL 人工智能 算法
【SQL server】玩转SQL server数据库:第二章 关系数据库
【SQL server】玩转SQL server数据库:第二章 关系数据库
46 10
|
1月前
|
SQL 数据库 数据安全/隐私保护
Sql Server数据库Sa密码如何修改
Sql Server数据库Sa密码如何修改
|
17天前
|
SQL
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
15 0
|
7天前
|
SQL 算法 数据库
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
63 6
|
7天前
|
SQL 存储 数据挖掘
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
服务器数据恢复环境: 一台安装windows server操作系统的服务器。一组由8块硬盘组建的RAID5,划分LUN供这台服务器使用。 在windows服务器内装有SqlServer数据库。存储空间LUN划分了两个逻辑分区。 服务器故障&初检: 由于未知原因,Sql Server数据库文件丢失,丢失数据涉及到3个库,表的数量有3000左右。数据库文件丢失原因还没有查清楚,也不能确定数据存储位置。 数据库文件丢失后服务器仍处于开机状态,所幸没有大量数据写入。 将raid5中所有磁盘编号后取出,经过硬件工程师检测,没有发现明显的硬件故障。以只读方式将所有磁盘进行扇区级的全盘镜像,镜像完成后将所
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
|
11天前
|
SQL 安全 Java
SQL server 2017安装教程
SQL server 2017安装教程
14 1
|
24天前
|
SQL 存储 Python
Microsoft SQL Server 编写汉字转拼音函数
Microsoft SQL Server 编写汉字转拼音函数
|
1月前
|
SQL 存储 数据库
数据安全无忧,SQL Server 2014数据库定时备份解密
数据安全无忧,SQL Server 2014数据库定时备份解密
|
1月前
|
SQL 网络协议 Windows
破解SQL Server迷局,彻底解决“管道的另一端无任何进程错误233”
破解SQL Server迷局,彻底解决“管道的另一端无任何进程错误233”
|
1月前
|
SQL 数据库 数据安全/隐私保护
SQL Server的安装步骤_kaic
SQL Server的安装步骤_kaic