数据库升迁从sqlserver6.5到sqlserver2000

 更新时间:2016年11月25日 16:40  点击:1989
IUPRG(原作)
本文献给在从sql6.5到sqlserver2000的数据库升级过程中的迷茫的朋友。
笔者有幸碰到这样一个案例:(有一句话叫:困难有多大,幸福就有多大,这不,幸福来了~)
一家电厂,运行着若干应用系统,其中以物资系统最为重要。体系结构,大致是这样的: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 为排序的数据库,再次导入,故障依旧。
经历了一周的反复测试,反复失败,最后决定还是采用第一种的方案比较灵活,先将具体步骤整理一下,以饔读者。
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目录,需要事先建立。
一、残余数据
当您进行SQL Server 2000日志传送的实验时,也许偶而会中断设定过程。如果真是如此,那么某些资料仍然会存入每台服务器的日志传送资料表,并且影响到后续的日志传送设定动作。为了保证这些剩余资料都会被清除,请确实删除每台服务器msdb数据库内日志传送资料表之相关资料。
错误信息:
Error 14261: The specified primary_server_name.primary_database_name ('N') already exists.
Error 14426: A log shipping monitor is already defined (...)
处理方法:
必须手动执行下面几个存储过程来删除Log Shipping在数据库中记录的信息。
1、sp_delete_log_shipping_primary
删除msdb.dbo.log_shipping_primary表中的Primary Server信息
2、sp_delete_log_shipping_plan
删除Log Shipping计划
3、sp_delete_log_shipping_secondary
删除msdb.dbo.log_shipping_secondaries表中的Secondary Server信息
4、sp_remove_log_shipping_monitor
删除Log Shipping监视从表msdb.dbo.log_shipping_monitor
二、数据库的模式
如果正确设置了Log Shipping,但是没有办法正常执行,在SQL Server的日志中可以看到类似这个信息和界面:
Microsoft (R) SQLMaint Utility (Unicode), Version Logged on to SQL Server 'ZTAO-1' as 'ZTAO-1Administrator' (trusted)
Starting maintenance plan 'LOG_Plan_9' on 2003-9-4 14:42:02
Backup can not be performed on database 'ERPLogShipping'. This sub task is ignored.
Deleting old text reports... 0 file(s) deleted.
End of maintenance plan 'LOG_Plan_9' on 2003-9-4 14:42:02
SQLMAINT.EXE Process Exit Code: 1 (Failed)


可能是你没有正确设置数据库的模式,完整模式。


三、Log文件存放路径

在MSDN上看过一篇文章说,同一台电脑上再次设置Log Shipping时,不要使用相同的目录存放Log文件。这个没有考证过,只提一下,提醒大家!



  1. 通过工具DTS的设计器进行导入或导出
  DTS的设计器功能强大,支持多任务,也是可视化界面,容易操作,但知道的人一般不多,如果只是进行SQL Server数据库中部分表的移动,用这种方法最好,当然,也可以进行全部表的移动。在SQL Server Enterprise Manager中,展开服务器左边的 ,选择数据库,右击,选择All tasks/Import Data...(或All tasks/Export Data...),进入向导模式,按提示一步一步走就行了,里面分得很细,可以灵活的在不同数据源之间复制数据,很方便的。而且可以另存成DTS包,如果以后还有相同的复制任务,直接运行DTS包就行,省时省力。也可以直接打开DTS设计器,方法是展开服务器名称下面的Data Transformation Services,选Local Packages,在右边的窗口中右击,选New Package,就打开了DTS设计器。值得注意的是:如果源数据库要拷贝的表有外键,注意移动的顺序,有时要分批移动,否则外键主键,索引可能丢失,移动的时候选项旁边的提示说的很明白,或者一次性的复制到目标数据库中,再重新建立外键,主键,索引。
 
  其实建立数据库时,建立外键,主键,索引的文件应该和建表文件分开,而且用的数据文件也分开,并分别放在不同的驱动器上,有利于数据库的优化。
 
  2. 利用Bcp工具
  这种工具虽然在SQL Server7的版本中不推荐使用,但许多数据库管理员仍很喜欢用它,尤其是用过SQL Server早期版本的人。Bcp有局限性,首先它的界面不是图形化的,其次它只是在SQL Server的表(视图)与文本文件之间进行复制,但它的优点是性能好,开销小,占用内存少,速度快。有兴趣的朋友可以查参考手册。
 
  3. 利用备份和恢复
  先对源数据库进行完全备份,备份到一个设备(device)上,然后把备份文件复制到目的服务器上(恢复的速度快),进行数据库的恢复操作,在恢复的数据库名中填上源数据库的名字(名字必须相同),选择强制型恢复(可以覆盖以前数据库的选项),在选择从设备中进行恢复,浏览时选中备份的文件就行了。这种方法可以完全恢复数据库,包括外键,主键,索引。
 
  4. 直接拷贝数据文件
  把数据库的数据文件(*.mdf)和日志文件(*.ldf)都拷贝到目的服务器,在SQL Server Query Analyzer中用语句进行恢复:
  EXEC sp_attach_db @dbname = 'test',
  @filename1 = 'd:mssql7data est_data.mdf',
  @filename2 = 'd:mssql7data est_log.ldf'
  从sql导出到mysql的方法很多,现介绍一种无需编程,直接利用sql和mysql里的图形界面进行导入导出的简单方法。
  前提是已经安装了sqlserver客户端和mysql的图形界面管理工具phpmyadmin。
  在控制台根目录下打开sqlserver企业管理器,新建sqlserver组,根据自己的情况进行选择;然后新建sqlserver 注册,进行对sqlserver的连接。准备妥当后,下面就开始了:
  首先打开数据转换服务,新建包,打开DTS界面,在连接中选择数据源进行配置。再选择将要转换到的目的文件,这里我选的 Textfile(destination),选择好文件的存放位置之后,我们来新建一个任务。这里我们只选择转换数据任务,将带有“选择源连接”“选择目的连接”的鼠标分别选中数据源和目的之后,我们对新生成的连接进行定义,在其属性中将源,目的,转换依次定义。
  执行任务,提示成功。保存任务。然后在新建的任务上导出数据,有向导提示,其中一项选择“从源数据库复制表和视图”。
  这一步已经把数据导出到目的文件中。
  下一步在mysql中新建表,与将要导入的结构保持一致时,直接选取“从文本文件中提取数据,插入到数据表:”,将选项添好后,“发送”就可以了,浏览一下,数据已导入了。若要导入的表已经存在,且属性名也不同,这时就先建一个与要导入的数据相同结构的表并导入数据(按刚才的进行就可以了),然后在mysql中导出“数据和结构”,得到sql语句,将其在文本文件中编辑,利用文本编辑器的替换功能,将表名修改,列名加入,最后将其粘贴在要导入表的执行sql语句的地方,执行一下,数据便导入了。
  若过程中出现错误,请仔细检查配置的选项,确保正确。


收集和分发数据是网络管理的职责之一,而且必须确保这些数据的准确性和安全性。不管它们是什么操作系统,数据库服务器需要特殊的管理以保证操作上的安全性。

良好的安全性开始于安装。现在让我们看一看如何才能在开始的时候就获得SQL Server的安全性。
安装
在开始安装之前,先定位到终端路由器或者防火墙,将UDP和TCP端口1433和1434指明为SQL Server的IP地址,这将有助于在安装的时候防止SQL injection弱点。
请不要在一个域控制器(domain controller)上安装SQL Server,一个程序的弱点可以导致危及整个域。在安装程序的转移数据之前,你最好在一个具有完全补丁修补之后的操作系统上安装SQL Server。
SQL Server服务应该运行于独立的当地帐号之下。这样,即使如果有人破坏程序,其它的服务器也可以不受影响。
如果服务器想要为一个基于Windows的网络服务,与服务器的所有连接都需要Windows认证。这将使得用户不再有必要记住其它连接的密码,从而减轻了用户的负担。

服务帐号
在通常情况下,服务帐号十分注意分配给它们的权限。SQL Server使用两种帐号:SQL Server Engine和SQL Server Agent。这两种帐号都作为一个具有常规帐号权限的域用户而运行。
如果你使用SQL Server认证,而不是使用Windows认证,或者如果你的服务器运行的是ActiveX脚本或CmdExec作业(比如,操作系统命令或者.bat,.cmd,.com,或.exe的可执行程序),SQL Server Agent帐号将需要当地Windows管理员权限。
注意:如果你需要改变与SQL Server服务有关的帐号,可以使用SQL Server企业管理者(SQL Server Enterprise Manager)。企业管理者将对SQL Server使用的文件和注册表键设置合适的权限。不要使用控制面板上MMC的Services applet来更改这些帐号。
安装之后

通过运行微软Killpwd.exe程序,可以清除在安装过程中保存在不同安装文件中的纯文本sysadmin密码。
当从新服务器中清除安装文件之后,运行Microsoft Baseline Security Analyzer (MBSA)。这一工具能够扫描和测试安装中产生的问题,这些问题包括:
过多的sysadmin成员都想作为服务器角色。
分配建立CmdExec作业的权限。
空白的或者琐屑的密码。
脆弱的认证方式。
分配给管理者组的过多的权限。
运行于域控制器的系统的SQL Server。
每一组的不合适的配置。
SQL Server服务帐号的不合适的配置。
[!--infotagslink--]

相关文章

  • PHP 数据库缓存Memcache操作类

    操作类就是把一些常用的一系列的数据库或相关操作写在一个类中,这样调用时我们只要调用类文件,如果要执行相关操作就直接调用类文件中的方法函数就可以实现了,下面整理了...2016-11-25
  • C#连接SQL数据库和查询数据功能的操作技巧

    本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
  • php简单数据操作的实例

    最基础的对数据的增加删除修改操作实例,菜鸟们收了吧...2013-09-26
  • C#从数据库读取图片并保存的两种方法

    这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
  • 解决Mybatis 大数据量的批量insert问题

    这篇文章主要介绍了解决Mybatis 大数据量的批量insert问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-09
  • Antd-vue Table组件添加Click事件,实现点击某行数据教程

    这篇文章主要介绍了Antd-vue Table组件添加Click事件,实现点击某行数据教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-17
  • 详解如何清理redis集群的所有数据

    这篇文章主要介绍了详解如何清理redis集群的所有数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-18
  • Intellij IDEA连接Navicat数据库的方法

    这篇文章主要介绍了Intellij IDEA连接Navicat数据库的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借价值,需要的朋友可以参考下...2021-03-25
  • 在数据库里将毫秒转换成date格式的方法

    在开发过程中,我们经常会将日期时间的毫秒数存放到数据库,但是它对应的时间看起来就十分不方便,我们可以使用一些函数将毫秒转换成date格式。 一、 在MySQL中,有内置的函数from_unixtime()来做相应的转换,使用如下: 复制...2014-05-31
  • vue 获取到数据但却渲染不到页面上的解决方法

    这篇文章主要介绍了vue 获取到数据但却渲染不到页面上的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-19
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • 如何解决局域网内mysql数据库连接慢

    通过内网连另外一台机器的mysql服务, 确发现速度N慢! 等了大约几十秒才等到提示输入密码。 但是ping mysql所在服务器却很快! 想到很久之前有过类似的经验, telnet等一些服务在连接请求的时候,会做一些反向域名解析(如果...2015-10-21
  • mybatis-plus 处理大数据插入太慢的解决

    这篇文章主要介绍了mybatis-plus 处理大数据插入太慢的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-18
  • php把读取xml 文档并转换成json数据代码

    在php中解析xml文档用专门的函数domdocument来处理,把json在php中也有相关的处理函数,我们要把数据xml 数据存到一个数据再用json_encode直接换成json数据就OK了。...2016-11-25
  • MySQL快速复制数据库数据表的方法

    某些时候,例如为了搭建一个测试环境,或者克隆一个网站,需要复制一个已存在的mysql数据库。使用以下方法,可以非常简单地实现。假设已经存在的数据库名字叫db1,想要复制一份,命名为newdb。步骤如下:1. 首先创建新的数据库newd...2015-10-21
  • mysqldump命令导入导出数据库方法与实例汇总

    mysqldump命令的用法1、导出所有库系统命令行mysqldump -uusername -ppassword --all-databases > all.sql 2、导入所有库mysql命令行mysql>source all.sql; 3、导出某些库系统命令行mysqldump -uusername -ppassword...2015-10-21
  • Mysql数据库错误代码中文详细说明

    1005:创建表失败1006:创建数据库失败1007:数据库已存在,创建数据库失败1008:数据库不存在,删除数据库失败1009:不能删除数据库文件导致删除数据库失败1010:不能删除数据目录导致删除数据库失败1011:删除数据库...2013-09-23
  • postgresql数据添加两个字段联合唯一的操作

    这篇文章主要介绍了postgresql数据添加两个字段联合唯一的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-04
  • c#异步读取数据库与异步更新ui的代码实现

    这篇文章主要介绍了c#从数据库里取得数据并异步更新ui的方法,大家参考使用吧...2020-06-25
  • Vue生命周期activated之返回上一页不重新请求数据操作

    这篇文章主要介绍了Vue生命周期activated之返回上一页不重新请求数据操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-26