您的位置:首页 > 数据库

SQL Server 2005 镜像功能实现

2008-07-18 10:12 405 查看
这几天为了解决数据库的备份以及出现问题能够在最快的时间内恢复的问题,用到了sql server 2005的数据库镜像功能,参考了园子里一些文章,在局域网测试成功后就在服务器上实施了。

数据库镜像不一定要在域环境中实施, 由于服务器限制我没有用见证服务器,认证方式采用证书认证,据说采用证书认证是最容易成功的一种方式。

主机、镜像分别MASTER KEY。
主机执行:

USE
master;

CREATE
MASTER
KEY
ENCRYPTION
BY
PASSWORD
=
'password';

CREATE
CERTIFICATE HOST_A_cert WITH
SUBJECT
=
'HOST_A certificate'
,

START_DATE
=
'01/01/2008';

镜像执行:

USE
master;

CREATE
MASTER
KEY
ENCRYPTION
BY
PASSWORD
=
'password';

CREATE
CERTIFICATE HOST_B_cert WITH
SUBJECT
=
'HOST_B certificate',

START_DATE
=
'01/01/2008';

 

这个MASTER KEY对于每个sql server实例唯一的,如果数据库中已经创建了MASTER KEY,可以用如下的sql删除之后重新执行:

DROP
MASTER
KEY

主机、镜像分别创建EndPoint
主机执行:

CREATE
ENDPOINT Endpoint_Mirroring

STATE
=
STARTED

AS

TCP
(
LISTENER_PORT=5022 ,
LISTENER_IP
=
ALL
)

FOR

DATABASE_MIRRORING

(
AUTHENTICATION
=
CERTIFICATE HOST_A_cert ,
ENCRYPTION
=
REQUIRED ALGORITHM AES ,
ROLE
=
ALL
);

镜像执行:

CREATE
ENDPOINT Endpoint_Mirroring

STATE
=
STARTED

AS

TCP
(
LISTENER_PORT=5022 ,
LISTENER_IP
=
ALL
)

FOR

DATABASE_MIRRORING

(
AUTHENTICATION
=
CERTIFICATE HOST_B_cert ,
ENCRYPTION
=
REQUIRED ALGORITHM AES ,
ROLE
=
ALL
);

EndPoint 貌似也是唯一的,如果已经提示错误如没有权限之类的,可以先删除创建过的EndPoint(如果你用图形界面创建过镜像则ENDPOINT的名称默认为"镜像")

DROP
ENDPOINT
镜像

备份证书,将主机和镜像的证书互换
主机执行

BACKUP
CERTIFICATE HOST_A_cert TO
FILE
=
'D:\HOST_A_cert.cer';

镜像执行

BACKUP
CERTIFICATE HOST_B_cert TO
FILE
=
'D:\HOST_B_cert.cer';

将备份好的证书文件相互copy

同步login
主机执行

CREATE
LOGIN HOST_B_login WITH
PASSWORD
=
'password';

CREATE
USER HOST_B_user FOR
LOGIN HOST_B_login;

CREATE
CERTIFICATE HOST_B_cert AUTHORIZATION HOST_B_user FROM
FILE
=
'D:\HOST_B_cert.cer';

GRANT CONNECT ON
ENDPOINT::Endpoint_Mirroring TO [HOST_B_login];

镜像执行

CREATE
LOGIN HOST_A_login WITH
PASSWORD
= 'password';

CREATE
USER HOST_A_user FOR
LOGIN HOST_A_login;

CREATE
CERTIFICATE HOST_A_cert AUTHORIZATION HOST_A_user FROM
FILE
=
'D:\HOST_A_cert.cer';

GRANT CONNECT ON
ENDPOINT::Endpoint_Mirroring TO [HOST_A_login];

经过以上步骤,两个sql server 实例的准备工作就差不多了,加入我们要同步的数据库为billing。
首先将主机上的billing数据库完整备份,在镜像机上创建同名数据库,用主机的备份还原(选择覆盖现有数据库以及RESTOR WITH NORECOVERY),还原后数据库的状态为"正在还原"。

将主机的billing数据库的事务日志备份,同样在镜像机上还原。

下面我们就要开始执行镜像的同步了,
镜像执行

ALTER
DATABASE Billing SET
PARTNER
=
'TCP://主机IP:5022';

主机执行

ALTER
DATABASE Billing SET
PARTNER
=
'TCP://镜像IP:5022';

 

如遇错误,首先保证防火墙等是否将相关端口屏蔽,sql server是否允许远程连接等,如果还是没有解决问题,如提示'TCP://镜像IP:5022'无法访问,

那么————————————"重启"!

完成后主机数据库显示"主题-已同步",镜像显示"镜像-已同步/正在还原"。

也许你还会用到如下语句:

关闭镜像

ALTER
DATABASE Billing SET
PARTNER
OFF

在主机执行一下sql切换主机和镜像

USE
MASTER

Go

ALTER
DATABASE Billing SET
PARTNER
FAILOVER

Go

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: