数据库升迁从sqlserver6.5到sqlserver2000

[本文由 iuprg发表,iuprg@tom.com, www.newsoftstudio.com 转载请保留]

本文献给在从sql6.5到sqlserver2000的数据库升级过程中的迷茫的朋友。

笔者有幸碰到这样一个案例:(有一句话叫:困难有多大,幸福就有多大,这不,幸福来了~)

[本文由 iuprg发表,iuprg@tom.com, www.newsoftstudio.com]

一家电厂,运行着若干应用系统,其中以物资系统最为重要。体系结构,大致是这样的:NT4.0 server 简体中文版 + SQL server6.5 英文 (物资系统数据)应用系统用powerbuilder6.0开发,已经运行了5年,数据量大概有300M 左右。随着系统不断的使用,现在需要对现有系统升级,从sql6.5到sqlserver2000  从表面上看似乎是数字的变迁,或者是简单的导入导出就可以了,但是我把它想的太简单了。

针对此升级,我使用了三套方案:
1、在sqlserver6.5及其上用外部工具bcp ... out    命令导出;
   用其中的一个表测试,结果导入sqlserver2000

   故障1:bcp ...in 提示“字符串数据,右截位”;
   故障2:汉字的字段显示乱码;
   故障3:有汉字的时间字段格式用bcp in 导入时不能成功。

2、用2000升级向导;
  
   故障1:克服重重困难(要求打补丁,重置登陆方式等)升级完后报告一些不可查看的错误,然后,打开数据库一看,一无所有;
   
   故障2:升级向导无法进行,透明程度高,无法进行错误跟踪。

3、用odbc配置访问sql6.5数据源,然后用sqlserver2000的导入向导;
   故障:在更改了90多个新表名后,开始复制,成功了。但是,汉字显示乱码。随后,在2000上重新建立一个latin general bin1 为排序的数据库,再次导入,故障依旧。

[本文由 iuprg发表,iuprg@tom.com, www.newsoftstudio.com]

   经历了一周的反复测试,反复失败,最后决定还是采用第一种的方案比较灵活,先将具体步骤整理一下,以饔读者。

   1)在nt server 4.0 机器上 打开sqlserver enterprise manager ,选中要升级的数据库,选中表并且生成创建表的脚本;
   2)生成创建存储过程的脚本;
   3)如果有视图,也请另存为文本,以备使用;
   4)打开isql/w工具,选中待升级的数据库,运行以下语句生成bcp out/in 命令(要不然的话,手动编辑很费劲的):
    select 'bcp mydatabase.dbo.' + name + ' out ' +
 '/DATA/' + name + '.TXT' +
 ' -Usa  -P*** -Sservername -c -C1252'
 from mydatabase..sysobjects
 where type = 'U'


 说明:mydatabase 为数据库名。
       '/DATA/'   是运行bcp的目录下的data目录,需要事先建立。
        ***       数据库密码。
       servername 服务器名称。
       1252       是sqlserver6.5 的默认代码页,必须指定,否则输出的汉字会乱码 。
 
 运行后将结果保存为bcpout.bat
 再将 out 换成 in 生成bcpin.bat 文件用以在sqlserver2000的机器上运行。 

   5)好了,要使用bcp 了,但是我们不能使用sql6.5 上的bcp工具,在我的试验当中用它导出的带有日期字段的数据中会生成诸如“2003 十二月 23 15:09AM ”的格式,这样在sqlserver2000机器上用bcp in 导入时会出现不认识日期格式而出现的复制错误。在此处,必须使用sqlserver 2000的bcp工具,方法:
   打开c:/program files/Microsoft SQL Server/80/tools/binn,将bcp.exe 和 resources 目录一同拷贝到ntserver4.0 机器的 sqlserver6.5 bcp 工作路径下(c:/mssql/binn,将原来的bcp.exe文件更名为bcp65.exe);
    注意:这个bcp要配合用odbcbcp.dll(70版的),否则运行bcp导出时会出现版本错误或者不能打开数据库。有朋友一时找不到,请到:http://iuprg.51.net/odbcbcp.dll下载
                (此文件是微软公司所有)

[本文由 iuprg发表,iuprg@tom.com, www.newsoftstudio.com]
   6)在nt 机器上建立 upgradedb目录,将bcpin.bat, bcpout.bat和刚才生成的脚本拷贝进来,再建立data目录;
   7)确保sqlserver 服务启动后,双击运行bcpout.bat ,等待结束;
   8)将 upgradedb 目录拷贝或共享到sqlserver2000机器上;
   9)打开sqlserver 2000 enterprise manager ,新建同名的数据库,排序规则为Chinese_Prc_bin;
   10)打开 query anlyzer ,选中该数据库, 运行刚才生成的建立表的脚本,建立表结构;运行刚才生成的存储过程的建立脚本,生成存储过程...  新建和旧库一样的视图;
   11)打开 命令提示符状态,进入upgradeDb目录,运行bcpin.bat,等待结束(如果出错,请检查密码,server name,路径等)。
   12)打开 enterprise manager ,打开数据库,选中其中的表返回所有行,检查数据
   发现汉字显示正常,日期格式也正常。

   13)拷贝原来的应用程序到sqlserver2000的机器运行,发现一切照常,至此升级数据库成功!

===================
本人水平有限,难免出错,望各位指正,批评。

                                                                  IUPRG (遨云驰行,琢符弄图)
                                                                  2004-4-8 
                                                                
[本文由 iuprg发表,iuprg@tom.com, www.newsoftstudio.com

Microsoft SQL Server 2000(MSSQL) 注意事项 --------------------------- 1 本地连接服务器请使用界面中“服务器名”文本框中的文本作为服务器名连接服务器(MDAC版本必须为2.6或以上版本)。 默认用户名: sa 默认 密码: admin 2 远程连接请使用“IP,端口”连接,连接前请关闭服务器防火墙!(端口在服务器启动后,可以在状态页看到。) 例如:192.168.0.X,7788 3 数据库转换为相对路径后需要重新启动绿色SQL方可任意移动。 4 数据库文件 (*.mdf + *.ldf)直接复制到 MYDB 目录,重新启动SQL,即可自动附加到SQLSERVER中(数据库名已经存在的不予理会,日志文件、库文件对应不上的不予理会)。 5 数据库只有在绝对路径模式下才可以用软件自带的恢复数据库工具恢复数据库。 2009.02.02 Version 6.4.0.2 ---------------------------------------------- 01. 修改 sqlservr.exe 不支持复杂路径造成启动失败的问题. 02. 增加 启动过程中提示信息. 未解决问题 --------------------------- 1 由于防火墙是拦截TCP/IP协议的,所以无法拦截本机使用 Shared Memory、Named Pipes 协议的连接,例如“(local)\实例名”,其他计算机使用任何协议均可被拦截。 如果想拦截所有连接,可设置SQL只接受 TCP/IP 的连接(设置后只能使用 IP,PORT 的办法连接) 2 由于SQL代理需要注册服务,违背了绿色版宗旨,所以未使用本功能。如需要定时执行东西可以使用管理器的计划任务功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安优小青和他的程序生活

我的文档对您有很大的帮助吗?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值