找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2697|回复: 0

SQL Server 2000升级到2005注意屎项

[复制链接]
发表于 2013-1-2 23:35:05 | 显示全部楼层 |阅读模式
SQL Server 2000升级到2005注意屎项  m* g8 b' b- b& k5 |  u8 R
4 I! K* t# L2 A8 P

2 [5 r% x3 ~0 {- v
' F+ Y2 Q1 s$ @$ O& P; z0 R! f# g1 _
! R) ~. q2 ~- J
2 E9 D6 U7 ^( }2 P7 [1 P

2 _$ g( S* C) M1 n' G7 H' X1 O. H
/ T8 s. Z: p' `9 @# A3 ?6 ~5 ?  如果你计划将数据库从SQL Server 2000 升级到 SQL Server 2005。你在升级之前一定会测试每样东西,并且证明应用程序是稳定的。即使这样,如果升级之后发生任何问题的话,你仍然会想要确保你仍然可以回退到原来的环境中去,并且保证不丢失任何的数据修改。" @( u% y7 k2 P
  这篇文章列出了保持原有数据(SQL Server 2000)中数据最新,直到新的环境被证明是最棒的方法。/ u" d3 }& ^5 e1 u$ I, c+ G" O( ]
  保持原有SQL Server环境最新的方法:+ a% t* F4 Q8 ?  `/ X# n/ y: Q
  在SQL Server中,有一些方法可以用来复制数据修改到另外一个数据库中去:) D9 M! @; P+ t# ^" k6 _7 d  @; A9 m
  1、日志传送
- K8 k. w- D; v: t9 R  2、拷贝数据库任务
7 O' B6 e3 j* d0 A  3、复制(事务,快照)
/ |7 ?: k* j, a+ \  4、SQL 追踪7 K) h8 g, m) g+ p# u' w
  5、编程(触发器、DTS,BCP等)
- Z, F1 }. O* O7 t4 ?" f. p  6、第三方工具$ a) K7 x; T; j9 B6 u0 m7 n
  下面我们来讨论其中的三种方法:
# R' z$ n; ^# P/ d  日志传送6 D2 Q6 y2 {; Q! J. N9 F/ l
  我们可以在SQL Server 2005数据库(主数据库)和SQL Server 2000数据库(从数据库)之间传送日志吗?
& }% t4 x" o% G: p  我努力在因特网上寻找这个问题的积极答案,但是很不走运。然后我试图自己创造性地寻找一种解决方法,使用产品自带的标准工具。也没有门,天啊……我只能在第二个数据库中使用WITH NORECOVERY将日志从SQL Server 2000 传送到SQL Server 2005,没有其他办法。所以,答案是“没有”,使用日志传送是不现实的。
  c7 D/ z+ y# u1 x2 e  拷贝数据库
0 u; r9 M! c& L4 z  S  不幸的是,当开启拷贝数据库向导的时候,当源和目标版本不同的时候,你就会收到错误信息,不能继续下去。' M4 R% N" M, Z
  复制9 V6 s  _1 A4 x( D
  事务复制9 ]0 ]1 k0 i9 g& R
  事务复制是在两个版本之间工作的。这个解决方案有两个问题:; S# C7 ^$ Z% T) M* _
  有一些SQL Server的版本不能作为PRIMARY 或者DISTRIBUTOR参加复制模型,《SQL Server 2005 Features Comparison》一书中对此有详细描述。
4 s) m1 C/ d8 a: ^4 m( J& D0 C  没有定义Unique键的表不能参加这个模型。# C- K) I" y8 ^7 z/ d
  快照复制# P: B6 b- Q& D2 h* @0 N0 e5 W- c
  这个解决方案有效,但是也有几项例外。例如,如果表中有用户自定义数据类型,并且必须在表被创建之前创建,那么由于在SQL Server2000没有CREATE TYPE这个命令,就会失败。( L0 S+ T; b+ t4 l
  SQL 追踪
2 \6 J! j( v- j% W  用SQL Server Profiler 或者SQL Trace可以捕捉到工作量,并且导出到 SQL 脚本中。脚本可以在从数据库中再次运行。% ]# A0 a# A8 F3 v7 j2 Q3 X
  这个解决方案存在的问题包括:+ j" r5 A9 v1 K+ s( I
  1、执行的命令是有一定顺序的。如果一个事务在一个单独的执行中被打开或者关闭了,而这个操作不是这一系列命令中的一个,那么脚本就无法使其发生关系,因为“会话”无法被Traces识别了。& g& |3 _6 l: R. m5 y4 q$ M; U
  2、如果在两个版本之间,命令语法有区别,那么在从数据库中的执行一定会失败。
! s# n  F" f3 G9 f  编程
* v+ v' g# a/ ~  p( N" `) p( Q  如果你有一小批数据库要移植,那么你可能会考虑编写一个数据库组件来传输数据的修改。" M' c9 n2 e9 J9 a$ R
  示例:2 O" A- ^/ n# ~& M
  ・ 使用触发器――这可能会影响性能,因为触发器是事务的一部分。7 Z2 W; j+ ]( f# l- v/ ~
  ・ 使用DTS或者BCP来传输数据――这种方法在很大程度上依赖数据量的大小。  e$ y5 U6 ?' m3 W
  第三方工具
! N3 u- h4 C4 n3 G# g* ~# r  你可以使用第三方工具,例如Log Readers来从事务日志、脚本中读取SQL 命令,然后在从数据库中执行它们。还有,虽然我无法自己找到这样的一个工具,但是在SQL Server 2005中肯定会有一个工具能够备份事务日志,并且在SQL Server2000中顺利地重新存储它们。7 z5 R5 v" I$ m  W; N* {- g- z! d
  其它) I9 q5 ~1 S2 w, V8 F4 @
  你还可以创新……6 B# G+ @; T1 i$ s
  例如,在某些情况下,你可以将日志传送到从SQL Server 2005数据库中,把它的兼容级别改为80,然后备份并重新存储到第三个数据库中去。
: |* S$ H2 x: L# G& U  结论
- I' c8 N- [5 P; n  对于关键的数据库,保留要升级的数据库的旧的版本,以及最新的数据修改,以便在需要回滚的时候用到,确实是个好主意。
5 @6 j- w: m6 `3 ?& H& U/ n  但是……任何事物都没有“最好的解决方法”。你必须分析你的数据库特点和结构,然后决定针对你的需求的最佳解决方法。就我个人来说,我倾向于认为复制是最快最可靠的解决方法。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|赛格电脑 华强北 电脑城 南山赛格 龙岗电子世界 龙华电脑城 沙井电脑城 松岗电脑城 pc4g.com ( 粤ICP备16039863号 )

GMT+8, 2025-9-2 03:35 , Processed in 0.085605 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表