加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SqlServer2005数据库镜像实践

发布时间:2020-12-12 15:30:04 所属栏目:MsSql教程 来源:网络整理
导读:?个人数据库镜像实践的代码 ? 参考 http://www.cnblogs.com/killkill/archive/2008/05/23/1205792.html ? http://kb.cnblogs.com/page/45937/ ? ======================?? 主機執行 ======================?? 備機執行 ======================?? 見證服務器

?个人数据库镜像实践的代码

?

参考

http://www.cnblogs.com/killkill/archive/2008/05/23/1205792.html

?

http://kb.cnblogs.com/page/45937/

?

======================?? 主機執行

======================?? 備機執行

======================?? 見證服務器執行

?

?

?

?

?

?

?

======================================================================

環境:

??????數據庫:

?????? 主體服務器IP:192.168.25.192? ?Microsoft?SQL?Server?2005??Standard?Edition???sp3?? /Windows? server2003

????????備份服務器IP:192.168.25.165?? Microsoft?SQL?Server?2005??Standard?Edition???sp3??/Windows? server2003

????????見證服務器IP:192.168.25.105?? Microsoft?SQL?Server?2005??Express?Edition???Sp3???/Windows? XP

步驟提示:

??????1.創建完證書后,需要A,B,C三臺機器互相交換證書

?????2.執行到創建完證書后,需要在備機附加主機數據庫的完全備份?

======================================================================

?

?

======================================================================

創建證書

--查看數據庫版本

select?@@version;

--修改mirror數據庫的備份模式

USE?master;?

ALTER?DATABASE?mirror?

SET?RECOVERY?FULL;

--備份mirror數據庫

BACKUP?DATABASE?mirror?

TO?DISK?=?'c:/mirror/mirror.bak'?

WITH?FORMAT

/*

drop?CERTIFICATE?HOST_A_cert

drop?MASTER?KEY?

*/

USE?master;

CREATE?MASTER?KEY?ENCRYPTION?BY?PASSWORD?=?'jijunwu123';

--為此服務器創建一個證書

CREATE?CERTIFICATE?HOST_A_cert?WITH?SUBJECT?=?'HOST_A?certificate'?,?

START_DATE?=?'11/17/2009';?

----------------------------------------------------------------------------------------------------------------------

/*

drop?CERTIFICATE?HOST_B_cert

drop?MASTER?KEY?

*/

USE?master;

CREATE?MASTER?KEY?ENCRYPTION?BY?PASSWORD?=?'jijunwu123';

CREATE?CERTIFICATE?HOST_B_cert?WITH?SUBJECT?=?'HOST_B?certificate',?

START_DATE?=?'11/17/2009';

----------------------------------------------------------------------------------------------------------------------

/*

drop?CERTIFICATE?HOST_C_cert

drop??MASTER?KEY

*/

USE?master;

CREATE?MASTER?KEY?ENCRYPTION?BY?PASSWORD?=?'jijunwu123';

CREATE?CERTIFICATE?HOST_C_cert?WITH?SUBJECT?=?'HOST_C?certificate',?

START_DATE?=?'11/17/2009';

======================================================================

創建鏡像端點

/*

drop??ENDPOINT?Endpoint_Mirroring?

*/

--使用證書為服務器創建一個鏡像端點

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);

----------------------------------------------------------------------------------------------------------------------

/*

drop?ENDPOINT?Endpoint_Mirroring?

*/

CREATE?ENDPOINT?Endpoint_Mirroring?

STATE?=?STARTED?

AS?

TCP?(?LISTENER_PORT=5022?,?LISTENER_IP?=?ALL?)?

FOR?

DATABASE_MIRRORING?

(?AUTHENTICATION?=?CERTIFICATE?HOST_B_cert?,?ROLE?=?ALL?);

----------------------------------------------------------------------------------------------------------------------

/*

drop?ENDPOINT?Endpoint_Mirroring?

*/

CREATE?ENDPOINT?Endpoint_Mirroring?

STATE?=?STARTED?

AS?

TCP?(?LISTENER_PORT=5022?,?LISTENER_IP?=?ALL?)?

FOR?

DATABASE_MIRRORING?

(?AUTHENTICATION?=?CERTIFICATE?HOST_C_cert?,?ROLE?=?WITNESS?);

?

======================================================================

備份證書

???備份證書后需要三臺機器互相交換證書,每臺機器都包括?證書A,C

?

BACKUP?CERTIFICATE?HOST_A_cert?TO?FILE?=?'C:/mirror/HOST_A_cert.cer';

----------------------------------------------------------------------------------------------------------------------

BACKUP?CERTIFICATE?HOST_B_cert?TO?FILE?=?'C:/mirror/HOST_B_cert.cer';

----------------------------------------------------------------------------------------------------------------------

BACKUP?CERTIFICATE?HOST_C_cert?TO?FILE?=?'C:/mirror/HOST_C_cert.cer';

======================================================================

創建關聯用戶

/*

drop?CERTIFICATE?HOST_B_cert

drop?LOGIN?HOST_B_login

drop?USER?HOST_B_user

*/

--HOST上為HOST_B創建一個登錄名

CREATE?LOGIN?HOST_B_login?WITH?PASSWORD?=?'jijunwu123';

--創建一個使用該登錄名的用戶

CREATE?USER?HOST_B_user?FOR?LOGIN?HOST_B_login;

--使證書與該用戶關聯

CREATE?CERTIFICATE?HOST_B_cert?AUTHORIZATION?HOST_B_user?FROM?FILE?=?'C:/mirror/HOST_B_cert.cer';

--授予对远程镜像端点的登录名的?CONNECT?权限

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

/*

drop?CERTIFICATE?HOST_C_cert

drop?LOGIN?HOST_C_login

drop?USER?HOST_C_user

*/

CREATE?LOGIN?HOST_C_login?WITH?PASSWORD?=?'jijunwu123';

CREATE?USER?HOST_C_user?FOR?LOGIN?HOST_C_login;

CREATE?CERTIFICATE?HOST_C_cert?AUTHORIZATION?HOST_C_user?FROM?FILE?=?'C:/mirror/HOST_C_cert.cer';

GRANT?CONNECT?ON?ENDPOINT::Endpoint_Mirroring?TO?[HOST_C_login];

----------------------------------------------------------------------------------------------------------------------

/*

drop?CERTIFICATE?HOST_A_cert

drop?LOGIN?HOST_A_login

drop?USER?HOST_A_user

*/

CREATE?LOGIN?HOST_A_login?WITH?PASSWORD?=?'jijunwu123';

CREATE?USER?HOST_A_user?FOR?LOGIN?HOST_A_login;

CREATE?CERTIFICATE?HOST_A_cert?AUTHORIZATION?HOST_A_user?FROM?FILE?=?'C:/mirror/HOST_A_cert.cer';

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

/*

drop?CERTIFICATE?HOST_C_cert

drop?LOGIN?HOST_C_login

drop?USER?HOST_C_user

*/

CREATE?LOGIN?HOST_C_login?WITH?PASSWORD?=?'jijunwu123';

CREATE?USER?HOST_C_user?FOR?LOGIN?HOST_C_login;

CREATE?CERTIFICATE?HOST_C_cert?AUTHORIZATION?HOST_C_user?FROM?FILE?=?'C:/mirror/HOST_C_cert.cer';

GRANT?CONNECT?ON?ENDPOINT::Endpoint_Mirroring?TO?[HOST_C_login];

----------------------------------------------------------------------------------------------------------------------

/*

drop?CERTIFICATE?HOST_A_cert

drop?LOGIN?HOST_A_login

drop?USER?HOST_A_user

*/

CREATE?LOGIN?HOST_A_login?WITH?PASSWORD?=?'jijunwu123';

CREATE?USER?HOST_A_user?FOR?LOGIN?HOST_A_login;

CREATE?CERTIFICATE?HOST_A_cert?AUTHORIZATION?HOST_A_user?FROM?FILE?=?'C:/mirror/HOST_A_cert.cer';

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

/**

drop?CERTIFICATE?HOST_B_cert

drop?LOGIN?HOST_B_login

drop?USER?HOST_B_user

*/

CREATE?LOGIN?HOST_B_login?WITH?PASSWORD?=?'jijunwu123';

CREATE?USER?HOST_B_user?FOR?LOGIN?HOST_B_login;

CREATE?CERTIFICATE?HOST_B_cert?AUTHORIZATION?HOST_B_user?FROM?FILE?=?'C:/mirror/HOST_B_cert.cer';

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

?

?

?

======================================================================

創建登錄用戶

?

主機執行

USE?master;

select?sid,name?from?syslogins;

--查詢結果如圖,如果在程序中使用test登錄數據庫

用户

?

備機執行

USE?master;

exec?sp_addlogin?

@loginame?=?'test',?

@passwd?=?'test用戶的密碼',?

@sid?=?0xC091ADF7CF65C84183FD67EB206CD835?;

?

======================================================================

設置伙伴服務器

?

備機中執行

ALTER?DATABASE??mirror??SET?PARTNER?=?'TCP://192.168.25.192:5022';

----------------------------------------------------------------------------------------------------------------------

主機中執行

--在主體中設置備份服務器為伙伴,使備份機做為初始鏡像服務器

ALTER?DATABASE?mirror?SET?PARTNER?=?'TCP://192.168.25.165:5022';

--設置見證服務器

ALTER?DATABASE?mirror?SET?WITNESS?=?'TCP://192.168.25.105:5022';

?

======================================================================

查看狀態

在主/備服務器中分別執行

select?mirroring_role_desc,mirroring_partner_name,mirroring_partner_instance,mirroring_witness_name,mirroring_witness_state_desc?from?sys.database_mirroring?

where?database_id=?(select?database_id?from?sys.databases?where?name='mirror')

?

在見證服務器執行

?

比較重要的,查看??mirroring_witness_state_desc???是否是??CONNECTED

如果不是,可以嘗試從新啟動見證服務器鏡像端點

--重新启动,鏡像端點

ALTER?ENDPOINT?Endpoint_Mirroring?

STATE?=?STOPPED

GO

?

--?5?秒钟

WAITFOR?DELAY?'00:00:05'

GO

?

ALTER?ENDPOINT?Endpoint_Mirroring?

STATE?=?STARTED

?

======================================================================

鏡像角色的修改

--主備互換,主機執行

ALTER?DATABASE?mirror??SET??PARTNER?FAILOVER

======================================================================

服務器故障處理

--備機執行

--主服務器(主體)與見證服務器同時Down掉,備機緊急啟動并且開始服務

USE?master;

ALTER?DATABASE?mirror??SET?PARTNER?FORCE_SERVICE_ALLOW_DATA_LOSS;

======================================================================

主機恢復切換狀態

--備機執行

--原來主服務器恢復,可以繼續工作,需要從新設定鏡像

USE?master;

--恢復鏡像

ALTER?DATABASE?BIMS_OFFLINE?SET?PARTNER?RESUME;??

--切換主備

ALTER?DATABASE?BIMS_OFFLINE?SET?PARTNER?FAILOVER;?

======================================================================

程序中連接字符串的寫法

Data?Source=192.168.25.105;Failover?Partner=192.168.25.165;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读