大数据量数据库的简单备份迁移数据技巧 推荐
2012-11-05 21:55
417 查看
今天真汗颜啊。。。。由于我的一不小心,我把几百万条数据给删了,囧。客户的几年重要数据就这样没了,我当时愁的,还好后来找回来了。
对于大数据的操作,大家一定要慎重操作。
在SQLServer2005中,想从一个数据库服务器迁移一个数据表的数据到另一数据库服务器的表中,大家一般会怎么做呢?
我先来说说我今天的做法:(因为自己的笔记本上没有装软件,不能截图给大家看了,大家可以自己动手操作下)
刚开始我利用一种方法,很笨且不安全的,大家引以为戒。
老大交给我任务了,我一想那么多数据,总不能一条一条手工插入吧。我思考了一段时间,我决定利用SQLServer的自带工具,右键点击,导入/导出数据功能。先用T-SQL语句根据条件筛选出需要的数据,在一台数据库服务器上操作,将查询出的数据右键另存为.rpt和.txt格式的文件。然后在另一个服务器上导入这些数据。当我操作前几个表的数据正常的时候,我还洋洋得意,到了最后一个表时发现导入的数据再遇到datetime类型时,发现傻眼了,前几十条数据正常导入,到了后面的一条数据以后,后面的几万条数据导不了了啊,有木有?囧!这是为什么呢?我检查了下数据,发现到那条卡壳的数据时,那里有个null值。嗯???为什么空就不能导入了?varchar和datetime类型的区别,我想大家都知道吧。对,问题就出在这。当我们把数据导出去的时候,那些数据最严重的缺点就是少了字段描述了,全变成了varchar类型了。不信的话,你用导入工具导入到一个新表里试试(这里没法截图,大家自己可以试试),你会发现默认的数据都成varchar类型了。悲剧,这个方法遗憾失败!
正确的做法是:
一、 用T-SQL语句新建一个临时表,这个表和你需要导出数据表的字段定义一样。假设我们要导出的数据库表为A,那么这个临时表叫A_Temp。
看T-SQL语句:
将筛选出来的数据拷贝到A_Temp表中。
再在另一个数据库服务器上操作:
用T-SQL语句新建一个临时表,这个表和你需要导出数据表的字段定义一样。
二、 利用SQLServer导入导出工具将22的数据库表A_Temp导入到23的数据库表B_Temp中,现在再将B_Temp表中的数据添加到B表中。这样就搞定了。
总结这样的好处:
1) 可以很清楚明白的知道你要导出的数据,方便后来维护查询;
2) 不会出现数据类型对不上的情况,当时是因为自己的粗心大意,在查询数据的时候把Delete看成了Select执行了,结果导致严重的后果,差点就赔钱了啊。汗。。。
3) 思路明确,严谨。
好了,今天的总结就到这,学无止境,工作中一定要心细。大家在操作大数量的数据时,每当使用Update、Delete、Insert时一定要考虑好,重新检查一遍,想想你正在做什么?不要一失足成千古恨,到时候悔之晚矣。
对于大数据的操作,大家一定要慎重操作。
在SQLServer2005中,想从一个数据库服务器迁移一个数据表的数据到另一数据库服务器的表中,大家一般会怎么做呢?
我先来说说我今天的做法:(因为自己的笔记本上没有装软件,不能截图给大家看了,大家可以自己动手操作下)
刚开始我利用一种方法,很笨且不安全的,大家引以为戒。
老大交给我任务了,我一想那么多数据,总不能一条一条手工插入吧。我思考了一段时间,我决定利用SQLServer的自带工具,右键点击,导入/导出数据功能。先用T-SQL语句根据条件筛选出需要的数据,在一台数据库服务器上操作,将查询出的数据右键另存为.rpt和.txt格式的文件。然后在另一个服务器上导入这些数据。当我操作前几个表的数据正常的时候,我还洋洋得意,到了最后一个表时发现导入的数据再遇到datetime类型时,发现傻眼了,前几十条数据正常导入,到了后面的一条数据以后,后面的几万条数据导不了了啊,有木有?囧!这是为什么呢?我检查了下数据,发现到那条卡壳的数据时,那里有个null值。嗯???为什么空就不能导入了?varchar和datetime类型的区别,我想大家都知道吧。对,问题就出在这。当我们把数据导出去的时候,那些数据最严重的缺点就是少了字段描述了,全变成了varchar类型了。不信的话,你用导入工具导入到一个新表里试试(这里没法截图,大家自己可以试试),你会发现默认的数据都成varchar类型了。悲剧,这个方法遗憾失败!
正确的做法是:
一、 用T-SQL语句新建一个临时表,这个表和你需要导出数据表的字段定义一样。假设我们要导出的数据库表为A,那么这个临时表叫A_Temp。
看T-SQL语句:
INSERT INTO A_Temp SELECT * FROM A WHERE 1 = 1 AND BeginTime > ’2012-11-05 00:00:00’ AND BeginTime < ‘2012-11-06 00:00:00’
将筛选出来的数据拷贝到A_Temp表中。
再在另一个数据库服务器上操作:
用T-SQL语句新建一个临时表,这个表和你需要导出数据表的字段定义一样。
二、 利用SQLServer导入导出工具将22的数据库表A_Temp导入到23的数据库表B_Temp中,现在再将B_Temp表中的数据添加到B表中。这样就搞定了。
INSERT INTO B SELECT * FROM B_Temp
总结这样的好处:
1) 可以很清楚明白的知道你要导出的数据,方便后来维护查询;
2) 不会出现数据类型对不上的情况,当时是因为自己的粗心大意,在查询数据的时候把Delete看成了Select执行了,结果导致严重的后果,差点就赔钱了啊。汗。。。
3) 思路明确,严谨。
好了,今天的总结就到这,学无止境,工作中一定要心细。大家在操作大数量的数据时,每当使用Update、Delete、Insert时一定要考虑好,重新检查一遍,想想你正在做什么?不要一失足成千古恨,到时候悔之晚矣。
相关文章推荐
- oracle导入大数据、数据库之间迁移数据简单方法
- MVC5中Model层开发数据注解 EF Code First Migrations数据库迁移 C# 常用对象的的修饰符 C# 静态构造函数 MSSQL2005数据库自动备份问题(到同一个局域网上的另一台电脑上) MVC 的HTTP请求
- 仅通过SQL备份文件将MOSS服务器场及所有网站数据迁移到新的一台服务器上 推荐
- SQLServer2005,大数据量备份与数据导入简单编程
- 恢复OA系统数据库--ORACLE11G通过冷备份迁移数据-(很简单,很实用,特别是数据量不大时很好用)
- Outlook应用指南(6)——数据备份还原技巧 推荐
- 推荐SQL Server 2005 2000 各版本数据库 数据迁移工具
- 数据库没有备份---应如何还原丢失的数据 推荐
- db2 迁移数据库数据 、导出导入 、 备份
- 较大数据量数据不同数据库迁移
- 恢复OA系统数据库--ORACLE11G通过冷备份迁移数据-(很简单,很实用,特别是数据量不大时很好用)
- 优化数据库语句的几个简单技巧
- 一个简单MYSQL的数据备份类
- Oracl数据库中大数据的备份-2
- 报表服务器无法解密用于访问报表服务器数据库中的敏感数据或加密数据的对称密钥。必须还原备份密钥或删除所有加密的内容。
- 每天一点数据库之-----Day 4 数据的简单查询
- ORACLE 11G数据库迁移到9I报 IMP-00003 ORA-00096 IMP-00000 推荐
- 有关数据库与界面传数据简单处理模式 ajax
- 大数据量的数据库表设计技巧
- IBM WPS v8.5 数据迁移至DB2时因数据库用户权限不足引起的迁移失败问题解决示例