<script type="text/javascript">
</script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
本文献给在从sql6.5到 sqlserver2000的数据库升级过程中的迷茫的朋友。
笔者有幸碰到这样一个案例:(有一句话叫:困难有多大,幸福就有多大,这不,幸福来了~)
一家电厂,运行着若干应用系统,其中以物资系统最为重要。体系结构,大致是这样的:NT4.0server简体中文版+ sqlserver6.5英文(物资系统数据)应用系统用powerbuilder6.0开发,已经运行了5年,数据量大概有300M 左右。随着系统不断的使用,现在需要对现有系统升级,从sql6.5到 sqlserver2000 从表面上看似乎是数字的变迁,或者是简单的导入导出就可以了,但是我把它想的太简单了。
针对此升级,我使用了三套方案:
1、在 sqlserver6.5及其上用外部工具bcp...out 命令导出;
用其中的一个表测试,结果导入 sqlserver2000
故障1:bcp...in提示“字符串数据,右截位”;
故障2:汉字的字段显示乱码;
故障3:有汉字的时间字段格式用bcpin导入时不能成功。
2、用2000升级向导;
故障1:克服重重困难(要求打补丁,重置登陆方式等)升级完后报告一些不可查看的错误,然后,打开数据库一看,一无所有;
故障2:升级向导无法进行,透明程度高,无法进行错误跟踪。
3、用odbc配置访问sql6.5数据源,然后用 sqlserver2000的导入向导;
故障:在更改了90多个新表名后,开始复制,成功了。但是,汉字显示乱码。随后,在2000上重新建立一个latingeneralbin1为排序的数据库,再次导入,故障依旧。
经历了一周的反复测试,反复失败,最后决定还是采用第一种的方案比较灵活,先将具体步骤整理一下,以饔读者。
1)在ntserver4.0机器上打开 sqlserverenterprisemanager,选中要升级的数据库,选中表并且生成创建表的脚本;
2)生成创建存储过程的脚本;
3)如果有视图,也请另存为文本,以备使用;
4)打开isql/w工具,选中待升级的数据库,运行以下语句生成bcpout/in命令(要不然的话,手动编辑很费劲的):
select'bcpmydatabase.dbo.'+name+'out'+
'/DATA/'+name+'.TXT'+
'-Usa -P***-Sservername-c-C1252'
frommydatabase..sysobjects
wheretype='U'
说明:mydatabase为数据库名。
'/DATA/' 是运行bcp的目录下的data目录,需要事先建立。
*** 数据库密码。
servername服务器名称。
1252 是 sqlserver6.5的默认代码页,必须指定,否则输出的汉字会乱码。
运行后将结果保存为bcpout.bat
再将out换成in生成bcpin.bat文件用以在 sqlserver2000的机器上运行。
5)好了,要使用bcp了,但是我们不能使用sql6.5上的bcp工具,在我的试验当中用它导出的带有日期字段的数据中会生成诸如“2003十二月2315:09AM”的格式,这样在 sqlserver2000机器上用bcpin导入时会出现不认识日期格式而出现的复制错误。在此处,必须使用 sqlserver2000的bcp工具,方法:
打开c:/programfiles/Microsoft/80/tools/binn,将bcp.exe和resources目录一同拷贝到ntserver4.0机器的 sqlserver6.5bcp工作路径下(c:/mssql/binn,将原来的bcp.exe文件更名为bcp65.exe);
1 <script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript">
</script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
本文献给在从sql6.5到 sqlserver2000的数据库升级过程中的迷茫的朋友。
笔者有幸碰到这样一个案例:(有一句话叫:困难有多大,幸福就有多大,这不,幸福来了~)
一家电厂,运行着若干应用系统,其中以物资系统最为重要。体系结构,大致是这样的:NT4.0server简体中文版+ sqlserver6.5英文(物资系统数据)应用系统用powerbuilder6.0开发,已经运行了5年,数据量大概有300M 左右。随着系统不断的使用,现在需要对现有系统升级,从sql6.5到 sqlserver2000 从表面上看似乎是数字的变迁,或者是简单的导入导出就可以了,但是我把它想的太简单了。
针对此升级,我使用了三套方案:
1、在 sqlserver6.5及其上用外部工具bcp...out 命令导出;
用其中的一个表测试,结果导入 sqlserver2000
故障1:bcp...in提示“字符串数据,右截位”;
故障2:汉字的字段显示乱码;
故障3:有汉字的时间字段格式用bcpin导入时不能成功。
2、用2000升级向导;
故障1:克服重重困难(要求打补丁,重置登陆方式等)升级完后报告一些不可查看的错误,然后,打开数据库一看,一无所有;
故障2:升级向导无法进行,透明程度高,无法进行错误跟踪。
3、用odbc配置访问sql6.5数据源,然后用 sqlserver2000的导入向导;
故障:在更改了90多个新表名后,开始复制,成功了。但是,汉字显示乱码。随后,在2000上重新建立一个latingeneralbin1为排序的数据库,再次导入,故障依旧。
经历了一周的反复测试,反复失败,最后决定还是采用第一种的方案比较灵活,先将具体步骤整理一下,以饔读者。
1)在ntserver4.0机器上打开 sqlserverenterprisemanager,选中要升级的数据库,选中表并且生成创建表的脚本;
2)生成创建存储过程的脚本;
3)如果有视图,也请另存为文本,以备使用;
4)打开isql/w工具,选中待升级的数据库,运行以下语句生成bcpout/in命令(要不然的话,手动编辑很费劲的):
select'bcpmydatabase.dbo.'+name+'out'+
'/DATA/'+name+'.TXT'+
'-Usa -P***-Sservername-c-C1252'
frommydatabase..sysobjects
wheretype='U'
说明:mydatabase为数据库名。
'/DATA/' 是运行bcp的目录下的data目录,需要事先建立。
*** 数据库密码。
servername服务器名称。
1252 是 sqlserver6.5的默认代码页,必须指定,否则输出的汉字会乱码。
运行后将结果保存为bcpout.bat
再将out换成in生成bcpin.bat文件用以在 sqlserver2000的机器上运行。
5)好了,要使用bcp了,但是我们不能使用sql6.5上的bcp工具,在我的试验当中用它导出的带有日期字段的数据中会生成诸如“2003十二月2315:09AM”的格式,这样在 sqlserver2000机器上用bcpin导入时会出现不认识日期格式而出现的复制错误。在此处,必须使用 sqlserver2000的bcp工具,方法:
打开c:/programfiles/Microsoft/80/tools/binn,将bcp.exe和resources目录一同拷贝到ntserver4.0机器的 sqlserver6.5bcp工作路径下(c:/mssql/binn,将原来的bcp.exe文件更名为bcp65.exe);
1 <script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript">
</script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>