华强北电脑城 龙岗电子世界 龙华电脑城  凯尔电脑

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2562|回复: 0

SQL Server 2000升级到2005注意屎项

[复制链接]
发表于 2013-1-2 23:35:05 | 显示全部楼层 |阅读模式
SQL Server 2000升级到2005注意屎项+ e8 p" }9 k# u0 y

9 a) a2 x- d+ I7 L
7 a+ p0 U  ]' t: W9 X
1 e6 o& A" Y: K& Z7 W6 w/ N  e6 Z( `' m8 ]9 t
  }+ v9 C/ v. z% w/ \3 A) O7 E

5 K; M- A# U0 P' I4 I* z6 U2 c  W
5 B9 y0 r4 d6 W' K$ X! K1 O- ~! Z, V5 b" P! S( n
  如果你计划将数据库从SQL Server 2000 升级到 SQL Server 2005。你在升级之前一定会测试每样东西,并且证明应用程序是稳定的。即使这样,如果升级之后发生任何问题的话,你仍然会想要确保你仍然可以回退到原来的环境中去,并且保证不丢失任何的数据修改。) [& c9 l8 L2 K" f6 l
  这篇文章列出了保持原有数据(SQL Server 2000)中数据最新,直到新的环境被证明是最棒的方法。' c2 w" F$ \8 \: Z$ q
  保持原有SQL Server环境最新的方法:) V- m+ s5 f! s! \6 r
  在SQL Server中,有一些方法可以用来复制数据修改到另外一个数据库中去:
6 y7 i# Y% v- E  1、日志传送  A/ s3 |4 f4 P' o
  2、拷贝数据库任务
  X$ `; M# g; ?' G/ X4 ?0 D. D  3、复制(事务,快照)
7 R) d3 q3 }# u  4、SQL 追踪
0 C3 M7 j1 l+ v4 k" g+ g; M  5、编程(触发器、DTS,BCP等). n; K) @+ |# Q: ^% \8 V: \
  6、第三方工具
/ o) f( P; ]1 ^7 i" k  下面我们来讨论其中的三种方法:$ I3 Q  @6 y/ |6 S
  日志传送" J0 `7 p3 O# D; G9 a
  我们可以在SQL Server 2005数据库(主数据库)和SQL Server 2000数据库(从数据库)之间传送日志吗?( R' p2 R! \, r$ j6 J! _* |7 ^# ~% G
  我努力在因特网上寻找这个问题的积极答案,但是很不走运。然后我试图自己创造性地寻找一种解决方法,使用产品自带的标准工具。也没有门,天啊……我只能在第二个数据库中使用WITH NORECOVERY将日志从SQL Server 2000 传送到SQL Server 2005,没有其他办法。所以,答案是“没有”,使用日志传送是不现实的。
$ o6 m' s: P0 g, z9 q2 O% G  拷贝数据库
; m4 g/ E( [& {5 j1 f% v7 D  不幸的是,当开启拷贝数据库向导的时候,当源和目标版本不同的时候,你就会收到错误信息,不能继续下去。1 w; v+ T+ t* Q5 z( _. F9 L
  复制
! _0 W  u& p' s  事务复制* r; f6 G0 }4 l& o. e9 i
  事务复制是在两个版本之间工作的。这个解决方案有两个问题:
) I/ p- W) d0 l  有一些SQL Server的版本不能作为PRIMARY 或者DISTRIBUTOR参加复制模型,《SQL Server 2005 Features Comparison》一书中对此有详细描述。
; `7 P' L) r7 S& E  没有定义Unique键的表不能参加这个模型。
- p$ `* b3 s% l; @6 M  快照复制
. `( @3 B3 `9 K1 J+ l  这个解决方案有效,但是也有几项例外。例如,如果表中有用户自定义数据类型,并且必须在表被创建之前创建,那么由于在SQL Server2000没有CREATE TYPE这个命令,就会失败。
; s* t$ h- B/ H  SQL 追踪
& x% X# B# _) O* @3 w  用SQL Server Profiler 或者SQL Trace可以捕捉到工作量,并且导出到 SQL 脚本中。脚本可以在从数据库中再次运行。& i% a$ Q* o9 |6 G3 |0 g" l) [
  这个解决方案存在的问题包括:
7 O& P9 R6 }, A8 R! N; K) Z  1、执行的命令是有一定顺序的。如果一个事务在一个单独的执行中被打开或者关闭了,而这个操作不是这一系列命令中的一个,那么脚本就无法使其发生关系,因为“会话”无法被Traces识别了。
# g4 k3 [8 X8 }; A/ X5 s  2、如果在两个版本之间,命令语法有区别,那么在从数据库中的执行一定会失败。
, X3 _/ g& Z% ~2 X; O+ d* f- V  编程  \! ^$ S. I8 J# D' ]
  如果你有一小批数据库要移植,那么你可能会考虑编写一个数据库组件来传输数据的修改。+ F+ G$ p* T& D6 p) [" H
  示例:
$ P" B7 @; o/ C  ・ 使用触发器――这可能会影响性能,因为触发器是事务的一部分。
& X/ z' L0 A% l' G; a  ・ 使用DTS或者BCP来传输数据――这种方法在很大程度上依赖数据量的大小。, ^6 `* i, K7 i. O( o# O2 s% k
  第三方工具& e2 p8 x# @/ F3 ?( p9 n
  你可以使用第三方工具,例如Log Readers来从事务日志、脚本中读取SQL 命令,然后在从数据库中执行它们。还有,虽然我无法自己找到这样的一个工具,但是在SQL Server 2005中肯定会有一个工具能够备份事务日志,并且在SQL Server2000中顺利地重新存储它们。
# v) q" a. L: f: ]+ y4 e6 v7 K  其它
" c; g7 H9 e' t, |, C2 f  你还可以创新……
' G3 n6 ?( I+ Y& _) c/ v  例如,在某些情况下,你可以将日志传送到从SQL Server 2005数据库中,把它的兼容级别改为80,然后备份并重新存储到第三个数据库中去。! m" e6 s3 t8 [$ V
  结论
8 M% m) U- m- C$ h) N5 g  对于关键的数据库,保留要升级的数据库的旧的版本,以及最新的数据修改,以便在需要回滚的时候用到,确实是个好主意。3 Y' z5 H/ p. a: U4 n& q3 [5 J
  但是……任何事物都没有“最好的解决方法”。你必须分析你的数据库特点和结构,然后决定针对你的需求的最佳解决方法。就我个人来说,我倾向于认为复制是最快最可靠的解决方法。
回复

使用道具 举报

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

本版积分规则

QQ|华强北 电脑城 龙岗电子世界 龙华电脑城 pc4g.com ( 粤ICP备16039863号 )

GMT+8, 2025-6-19 22:19 , Processed in 0.088249 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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