工作中需要将生产环境一台win2003的数据库服务器迁移到另一台win2008R的服务器上,迁移过程中服务不能停。
源数据库和目标数据库磁盘空间都为500G,数据库版本分别是2008R2和2012,数据库目前大小是300多G,另外还有一台备份服务器空间很大可以作中转用,机器都处在同一局域网内(千兆),
源机器:192.168.0.7
目标机器:192.168.0.82
中转机器:192.168.0.130,共享目录为“D:\data_bak\”已设置Everyone可读写且无需密码访问。
先后试过以下方法均以失败告终(原因各种各样,主要是数据库版本不一致,数据库表各种不规范建表方式导致)。
1.使用SSMS复制数据库。
2.使用Microsoft Data Migration Assistant 。
3.使用Navicat工具结构同步+数据同步。
4.使用SSMS生成表结构脚本,然后用导入数据的方式。
我能想到最好的方式是用数据库的备份/还原,因为这样兼容性最好,且可以多次增量备份将切换时的两个数据库之间的差异降到可以接受的范围内。
备份好了,但还原时遇到问题,在 SQL Server Management Studio (SSMS) 中定位备份文件中无法看到网络共享,将共享文件夹映射为网络驱动器也看无法看到。
使用 RESTORE DATABASE 数据库名 FROM tape '\192.168.0.130\xxx.bak' 提示“出现操作系统错误5,拒绝访问”.
192.168.0.82 数据库引擎服务也改为了本地系统帐户。
园子里各位大神有什么办法吗?
补充:
在源机器(192.168.0.7)和目标机器(192.168.0.82)上均能用资源管理器访问中转机器上的共享目录\\192.168.0.130\data_bak
且使用 backup database db to disk='\\192.168.0.130\data_bak\xxx.bak 已经执行成功。
遇到的问题是使用 RESTORE DATABASE 数据库名 FROM tape '\\192.168.0.130\data_bak\xxx.bak' 进行还原时出错,提示“出现操作系统错误5,拒绝访问”
解决方法:
使用 net use \\192.168.0.130\data_bak 130机器administrator密码 /user:192.168.0.130\administrator
注意,这儿有坑,先前报错就是栽在这儿的, net use 命令后面的/user参数有三种写法,1.直接写用户名 2. 机器名+用户名 3.ip+用户名,具体用那一种就决定你在备份/还原时使用的网络地址也必须使用用相同的方法。
使用第3种写法
net use \\192.168.0.130\data_bak 130机器administrator密码 /user:192.168.0.130\administrator
还原语句相应就是
RESTORE DATABASE 数据库名 FROM tape '\\192.168.0.130\data_bak\xxx.bak'
使用第2种写法
net use \130计算机名\data_bak 130机器administrator密码 /user:130计算机名\administrator
还原语句相应就是
RESTORE DATABASE 数据库名 FROM tape '\\130计算机名\data_bak\xxx.bak'
至于第一种写法,可以说又是一个坑,有兴趣的可以自己试下,多半是不行的。
可以使用net user 查看已保存的网络地址和帐户
已经试过了,各种报错,解决了一些,但还是没有成功,最后报了一个莫名奇妙的错误,也没有具体详情。
create database 失败,无法创建列出的某些文件名
还原时 把局域网内的备份文件 复制到本地 试下
1、先备份还原好,到时候找人少的时候暂停下 服务,再做增量的备份还原。切换服务器的ip
2、 暂停服务, 直接copy数据库, 然后附加数据库。 切换服务器的ip
服务一点不停好像不行吧。
如果是sql server 2012 r2 的话 可以做 alway on , 能做到不停服务。
可以试试一些专门的备份软件来备份还原你的sql数据库,比如傲梅企业备份网络版。