从SQL Server2000升级到2005的过程解析
作者:leer 发布时间:2009-01-13 14:07:00
如果你计划将数据库从SQL Server 2000 升级到 SQL Server 2005。你在升级之前一定会测试每样东西,并且证明应用程序是稳定的。即使这样,如果升级之后发生任何问题的话,你仍然会想要确保你仍然可以回退到原来的环境中去,并且保证不丢失任何的数据修改。
这篇文章列出了保持原有数据(SQL Server 2000)中数据最新,直到新的环境被证明是最棒的方法。
保持原有SQL Server环境最新的方法:
在SQL Server中,有一些方法可以用来复制数据修改到另外一个数据库中去:
1、日志传送
2、拷贝数据库任务
3、复制(事务,快照)
4、SQL 追踪
5、编程(触发器、DTS,BCP等)
6、第三方工具
下面我们来讨论其中的三种方法:
1:日志传送
我们可以在SQL Server 2005数据库(主数据库)和SQL Server 2000数据库(从数据库)之间传送日志吗?
我努力在因特网上寻找这个问题的积极答案,但是很不走运。然后我试图自己创造性地寻找一种解决方法,使用产品自带的标准工具。也没有门,天啊……我只能在第二个数据库中使用WITH NORECOVERY将日志从SQL Server 2000 传送到SQL Server 2005,没有其他办法。所以,答案是“没有”,使用日志传送是不现实的。
2:拷贝数据库
不幸的是,当开启拷贝数据库向导的时候,当源和目标版本不同的时候,你就会收到错误信息,不能继续下去。
3:复制
事务复制
事务复制是在两个版本之间工作的。这个解决方案有两个问题:
有一些SQL Server的版本不能作为PRIMARY 或者DISTRIBUTOR参加复制模型,《SQL Server 2005 Features Comparison》一书中对此有详细描述。
没有定义Unique键的表不能参加这个模型。
快照复制
这个解决方案有效,但是也有几项例外。例如,如果表中有用户自定义数据类型,并且必须在表被创建之前创建,那么由于在SQL Server2000没有CREATE TYPE这个命令,就会失败。
4:SQL 追踪
用SQL Server Profiler 或者SQL Trace可以捕捉到工作量,并且导出到 SQL 脚本中。脚本可以在从数据库中再次运行。
这个解决方案存在的问题包括:
4.1:执行的命令是有一定顺序的。如果一个事务在一个单独的执行中被打开或者关闭了,而这个操作不是这一系列命令中的一个,那么脚本就无法使其 * ,因为“会话”无法被Traces识别了。
4.2:如果在两个版本之间,命令语法有区别,那么在从数据库中的执行一定会失败。
5:编程
如果你有一小批数据库要移植,那么你可能会考虑编写一个数据库组件来传输数据的修改。
示例:
· 使用触发器——这可能会影响性能,因为触发器是事务的一部分。
· 使用DTS或者BCP来传输数据——这种方法在很大程度上依赖数据量的大小。
6:第三方工具:
你可以使用第三方工具,例如Log Readers来从事务日志、脚本中读取SQL 命令,然后在从数据库中执行它们。还有,虽然我无法自己找到这样的一个工具,但是在SQL Server 2005中肯定会有一个工具能够备份事务日志,并且在SQL Server2000中顺利地重新存储它们。
其它
你还可以创新……
例如,在某些情况下,你可以将日志传送到从SQL Server 2005数据库中,把它的兼容级别改为80,然后备份并重新存储到第三个数据库中去。
结论
对于关键的数据库,保留要升级的数据库的旧的版本,以及最新的数据修改,以便在需要回滚的时候用到,确实是个好主意。
但是……任何事物都没有“最好的解决方法”。你必须分析你的数据库特点和结构,然后决定针对你的需求的最佳解决方法。就我个人来说,我倾向于认为复制是最快最可靠的解决方法。
猜你喜欢
- import turtle as tt.setup(800,600,0,0,)t.pensize(2)t.speed(1)t.color(&
- 使用iframe嵌入网页,页面可自适应在项目中遇到要嵌入第三方网页的需求,因为没有同第三方页面交互的需求,只需展示即可,所以最终决定使用 i
- 在进行CSS网页布局的时候,我们经遇到刷新要保留表单里内容的时候,习惯的做法使用cookie,但是那样做实在是很麻烦,css中的behavi
- 前言:如果正在看文章的你,还不会绘制折线图,请看如何使用matplotlib绘制折线图这篇文章,该文章会仔细而详尽的告诉你绘制折线图的方法。
- 准备工作右击新建的项目,选择Python File,新建一个Python文件,然后在开头import cv2导入cv2库,import nu
- 本文实例为大家分享了js实现瀑布流效果的具体代码,供大家参考,具体内容如下CSS样式:<style> .cont{margin:
- 本文实例讲述了获取django框架orm query执行的sql语句实现方法。分享给大家供大家参考,具体如下:利用Django orM 可以
- 围绕一门语言,学习它的文化精髓,能让你成为一名更优秀的程序员。如果你还没读过Python之禅(Zen of Python) ,那么打开Pyt
- 一、字符串方法1.字符串的分割s.split() 默认是按照空格分割s.split(',') 按照逗号分割(返回的是一个列表
- 本文实例讲述了python简单获取本机计算机名和IP地址的方法。分享给大家供大家参考。具体实现方法如下:方法一:>>> i
- 使用replace做多字符替换import rewords = ''' 钟声响起归家的讯号
- 最近开始学习数据库知识,从mysql下手,下面详细介绍一下安装过程,给小伙伴们一个参考。一、安装 首先,从mysql的中文社区下载,我尝试过
- 使用keras时,加入keras的lambda层以实现自己定义的操作。但是,发现操作结果的shape信息有问题。我的后端是theano,使用
- 网页制作中需要把握好很多原则和细节,今天我们来谈谈网页设计中的平衡、对比、连贯和留白。一、平衡如果你的页面是平衡的,当用户浏览这个页面的时候
- python代码 # -*- coding: utf-8 -*- import Image,ImageDraw,Imag
- Tornado是一种 Web 服务器软件的开源版本。Tornado 和主流Web 服务器框架(包括大多数 Python 的框架)有着明显的区
- 例如:我们在百度中搜索 词典网,则网址后面的参数就是http://www.baidu.com/s?cl=3&wd=%B4%CA%B5
- 前言:今天我来分享几个好用到爆的Pycharm插件,在安装上之后,你的编程效率、工作效率都能够得到极大地提升。一、安装方法插件的安装方法一点
- 本文实例讲述了Python实现将Excel转换成xml的方法。分享给大家供大家参考,具体如下:最近写了个小工具 用于excel转成xml直接
- 本文实例讲述了python实现向ppt文件里插入新幻灯片页面的方法。分享给大家供大家参考。具体实现方法如下:# -*- coding: UT