记一次数据库迁移

正在使用的数据库服务器机器名称为DB1,数据库系统是SqlServer2005,版本号:9.0.3042,实例名称Instance1,即DB1/Instance19.0.3042)。此实例下面有若干个数据库系统。在此举一个数据库UR(其它的数据库迁移同此一样)。

UR数据库上面有很多应用于不同Approle&login&user

要迁移到的目标数据库服务器机器名称为DB2,其它的,像数据库系统,版本号,实例名称,和数据库名称都是一样的。App对数据库的访问是基于TCP/IP网络的,不使用机器名称。

 

考虑过的解决方案有:

1.  DB1DB2做一个镜像,将DB1的数据镜像到DB2上面,再对DB2上面的数据库做一个恢复,就可以直接使用。此方案由于之前DB1与另一台机器做了镜像,而无法(此时我想到可不可以一台机器有两个镜像呢?这个要试一下的,或者找到MSDN文档看一下)。总之,镜像这个方案没有实施。

2.  使用发布-订阅功能,使得两边的数据同步,但是,首先,master数据库上面保存的大量的role&login&user无法搞到DB2上面。其次,由于DB1上面并不是所有的表都有主键,所以发布-订阅这一方案流产。

 

其实要解决的问题主要是原先DB1上面大量基于Approle&login&user要迁移到DB2上面。即,不影响App的正常运行,哪怕App停下来一时半刻也不碍事(这个系统就是这样,别动App,但可以让它休息一会儿),想过将DB1上面的用户脚本让系统给创建出来,后来到DB2上面一运行,错误太多,由于脚本量实在太大,便没读下去。

 

现在想出来的法子是,将DB2上面的master数据库还原到DB1上面。再将其它的数据库也还原到DB1上面,就OK了。

 

Step 1.Master数据还原

DB2上面数据库系统以单用户模式启动。方法(我说的是SqlServer2005):

Win+R--->输入services.msc--->打开服务,选择SQL ServerInstance1--->停止--->双击这个服务,打开一个对话框,如下图:

 

在启动参数一栏输入-f –c –m

其中:-c 可以缩短启动时间,SQL Server不作为Windows NT的服务启动;

           -f 用最小配置启动SQL Server

           -m 单用户模式启动SQL Server

启动以后,SqlServer Instance实例就在单用户模式下面运行了。

然后运行下面的脚本来还原DB1上面的Master数据库,(将这段脚本用*.sql文体保存下来,双击这个文件,即,以一个用户来运行这段脚本,不要打开Instance连接,然后再新建立查询,因为打开Instance是一个用户,而新建立查询又是另一个用户,现在SqlServer在单用户模式下面,后面那个新建立的查询是无法运行的!)

use master

go

restore database master

from disk='F:/master.bak'

with replace

运行完这段脚本后,服务器(Instance1实例)会自动停止服务。得再启动SqlServer Instance1的服务,这个时候就不要使用单用户模式了,就像平常那样启动SqlServer服务即可。

 

Step 2.UR数据库还原(其它数据库也像UR数据库一样)

Master数据库还原之后,创建UR数据库,然后还原,就像在一般的还原数据库一样。

 

我在做的时候,由于先还原了UR数据库,而后还原了Master数据库,导致UR数据库变成了数据库库快照。得再次将UR数据库还原才行,还原的时候得选择目标数据库(即,在DB2上面UR数据库)的mdfldf文件,要不然的话,系统会选择DB1上面的数据库路径进行还原,这个时候有可能不成功(如果DB1上面的数据库文件存储目录与DB2上面的数据库文件存储目录不一致,就不会成功)。

 

还有一点就是,我参考MSDN上面的文档,文档上说,在还原UR数据库的时候有两种方式,一种是使用附加数据库的方式,还有一种是使用还原数据库的方式,由于我之前是做的数据库备份(*.bak  &  *.trn)文件,所以我选择使用还原数据库的方式,不过MSDN文档库上面建议使用附加数据库的方式。

 

以上是个人在对实际中一些工作的小结,供自己查阅和大家参考(可能大家做的时候又是另一回事情了)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值