找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2773|回复: 0

SQL Server 2000升级到2005注意屎项

[复制链接]
发表于 2013-1-2 23:35:05 | 显示全部楼层 |阅读模式
SQL Server 2000升级到2005注意屎项+ _- B5 W% [+ [* O  g2 i
; y7 w; Q& @8 ]& Z5 F% q6 c3 M* K. H

" [( A/ A: I, `5 g; F5 H8 O9 X+ T, `& U0 |

1 K3 L1 f& `. X3 A8 Z
- L+ {# Z3 k- q2 Q  Y, V" O. Q  o

3 i# E6 p! f2 f) Q; c. F1 x- L2 Z1 d
' y. ]! E) f) F" X. E
  如果你计划将数据库从SQL Server 2000 升级到 SQL Server 2005。你在升级之前一定会测试每样东西,并且证明应用程序是稳定的。即使这样,如果升级之后发生任何问题的话,你仍然会想要确保你仍然可以回退到原来的环境中去,并且保证不丢失任何的数据修改。
2 r5 G- ~6 K2 }9 I  这篇文章列出了保持原有数据(SQL Server 2000)中数据最新,直到新的环境被证明是最棒的方法。
+ Q/ T" p( \  n: L" E' I* Z2 K  保持原有SQL Server环境最新的方法:+ [5 S1 I: d. M, A
  在SQL Server中,有一些方法可以用来复制数据修改到另外一个数据库中去:$ @. g0 v/ s' z+ e
  1、日志传送
5 C( ?" n: i2 k3 s0 Y  2、拷贝数据库任务" U: F$ \9 N* R  [4 q
  3、复制(事务,快照)
2 B* I; |% }' ~+ _  ^: P/ T  4、SQL 追踪
) `! R7 j: M( o+ m+ \' v  5、编程(触发器、DTS,BCP等)
3 t  |* W4 ~" ?2 S8 i) H- n! |. m  6、第三方工具
- F2 y4 S5 p. z) U; Q  下面我们来讨论其中的三种方法:3 R1 S# R; L1 Q  O6 |
  日志传送
8 }7 F5 ?" L: t( f8 Z# l( h  我们可以在SQL Server 2005数据库(主数据库)和SQL Server 2000数据库(从数据库)之间传送日志吗?" z4 B% |' |+ k9 ~" |/ l
  我努力在因特网上寻找这个问题的积极答案,但是很不走运。然后我试图自己创造性地寻找一种解决方法,使用产品自带的标准工具。也没有门,天啊……我只能在第二个数据库中使用WITH NORECOVERY将日志从SQL Server 2000 传送到SQL Server 2005,没有其他办法。所以,答案是“没有”,使用日志传送是不现实的。6 ~0 x' x! ~" \
  拷贝数据库; h5 J8 K: g* f1 q% q
  不幸的是,当开启拷贝数据库向导的时候,当源和目标版本不同的时候,你就会收到错误信息,不能继续下去。
: m! M: T# b+ {8 t7 _/ Y  复制
. J. i) o' W( ]  事务复制5 B+ Y. _7 j2 t9 ^
  事务复制是在两个版本之间工作的。这个解决方案有两个问题:# I# z% V1 s8 ^& h
  有一些SQL Server的版本不能作为PRIMARY 或者DISTRIBUTOR参加复制模型,《SQL Server 2005 Features Comparison》一书中对此有详细描述。
# [* Y$ d$ @) L7 u2 z  没有定义Unique键的表不能参加这个模型。
. z% S. h) F4 f/ Y8 q  ^+ C" \! i  快照复制2 E; k9 @( C: @. R6 ^
  这个解决方案有效,但是也有几项例外。例如,如果表中有用户自定义数据类型,并且必须在表被创建之前创建,那么由于在SQL Server2000没有CREATE TYPE这个命令,就会失败。. \+ U0 Y: g( K% Y
  SQL 追踪/ p, W# @2 ?# a4 U) H
  用SQL Server Profiler 或者SQL Trace可以捕捉到工作量,并且导出到 SQL 脚本中。脚本可以在从数据库中再次运行。
' ?6 j* \' @1 L" R/ W4 f  ~  这个解决方案存在的问题包括:
" B7 o  r  h0 u  1、执行的命令是有一定顺序的。如果一个事务在一个单独的执行中被打开或者关闭了,而这个操作不是这一系列命令中的一个,那么脚本就无法使其发生关系,因为“会话”无法被Traces识别了。( P( f- j  X" I- L. n; c7 i1 U
  2、如果在两个版本之间,命令语法有区别,那么在从数据库中的执行一定会失败。
  e" q2 ~9 c1 D' g. }  编程  b) h3 C' d3 h6 U& Y# ?
  如果你有一小批数据库要移植,那么你可能会考虑编写一个数据库组件来传输数据的修改。7 U+ n* _$ s; L- }2 p1 k" F( }
  示例:) g+ n  O$ C- }+ e( ^/ M
  ・ 使用触发器――这可能会影响性能,因为触发器是事务的一部分。8 l- F8 H# B, Z- g6 c) z3 N. A
  ・ 使用DTS或者BCP来传输数据――这种方法在很大程度上依赖数据量的大小。3 G' v+ r$ K3 W2 C
  第三方工具
, l( i3 N6 F, B0 y  你可以使用第三方工具,例如Log Readers来从事务日志、脚本中读取SQL 命令,然后在从数据库中执行它们。还有,虽然我无法自己找到这样的一个工具,但是在SQL Server 2005中肯定会有一个工具能够备份事务日志,并且在SQL Server2000中顺利地重新存储它们。
- U$ j2 |/ o+ ~  其它
) t( w8 J% M1 R# K  你还可以创新……; t! C: Y5 c) \% z5 p
  例如,在某些情况下,你可以将日志传送到从SQL Server 2005数据库中,把它的兼容级别改为80,然后备份并重新存储到第三个数据库中去。
  \: t& O$ S! D$ A2 v! w% \  结论
6 i# }0 Q1 A2 P* h) ]  对于关键的数据库,保留要升级的数据库的旧的版本,以及最新的数据修改,以便在需要回滚的时候用到,确实是个好主意。
0 ~; a4 W- Y: s3 a8 ?$ x: s  但是……任何事物都没有“最好的解决方法”。你必须分析你的数据库特点和结构,然后决定针对你的需求的最佳解决方法。就我个人来说,我倾向于认为复制是最快最可靠的解决方法。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-7 08:01 , Processed in 0.094223 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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