免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: liyihongcug
打印 上一主题 下一主题

镜像数据库 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2011-02-28 18:47 |只看该作者
good paper数据库镜像配置
[服务器初始配置]
SQL-A:    主体服务器
SQL-B:    镜像服务器
SQL-W:    见证服务器

[镜像数据库]
TEST

[过程]
配置过程一共分为4个部分

一、准备镜像数据库

-- 1.在SQL-A上,对TEST数据库做完全备份
BACKUP DATABASE TEST
TO  DISK = 'C:\Tools\backup.bak'
GO

-- 2.在SQL-B上,将SQL-A上恢复TEST数据库的备份,并使用NORECOVERY选项
RESTORE DATABASE TEST
FROM  DISK = 'C:\Tools\backup.bak' WITH  NORECOVERY
GO


二、创建数据库镜像端点
--    1.在SQL-A上,创建数据库镜像端点,用于伙伴通讯
CREATE ENDPOINT DbMirroringEP
AS TCP (LISTENER_PORT = 5022)
FOR DATABASE_MIRRORING (ROLE = PARTNER, ENCRYPTION = SUPPORTED);
GO

ALTER ENDPOINT DbMirroringEP STATE = STARTED
GO

-- 2.在SQL-B上,创建数据库镜像端点,用于伙伴通讯
CREATE ENDPOINT DbMirroringEP
AS TCP (LISTENER_PORT = 5022)
FOR DATABASE_MIRRORING (ROLE = PARTNER, ENCRYPTION = SUPPORTED);
GO

ALTER ENDPOINT DbMirroringEP STATE = STARTED
GO

-- 3.在SQL-W上,创建数据库镜像端点,用于见证通讯
CREATE ENDPOINT DbMirroringEP
AS TCP (LISTENER_PORT = 5022)
FOR DATABASE_MIRRORING (ROLE = WITNESS, ENCRYPTION = SUPPORTED);
GO

ALTER ENDPOINT DbMirroringEP STATE = STARTED
GO

-- 4.检查端点配置
SELECT * FROM sys.database_mirroring_endpoints
GO

三、配置数据库镜像安全性

        /*
            说明:
            当前的所有服务器使用相同的服务账户SQL2k5SP1\SQLService名称和口令
  


-- 1.
USE master
GO
GRANT CONNECT ON ENDPOINT::"DbMirroringEP" TO "SQL2k5SP1\SQLService"
GO

-- 2.
USE master
GO
GRANT CONNECT ON ENDPOINT::"DbMirroringEP" TO "SQL2k5SP1\SQLService"
GO

-- 3.
USE master
GO
GRANT CONNECT ON ENDPOINT::"DbMirroringEP" TO "SQL2k5SP1\SQLService"
GO

四、启动数据库镜像

--注意顺序,需要在首先在镜像服务器上配置伙伴

-- 1.在SQL-B上,指定伙伴端点
ALTER DATABASE TEST
SET PARTNER = N'TCP://SQL-A:5022'
GO

-- 2.在SQL-A上,指定伙伴端点
ALTER DATABASE TEST
SET PARTNER = N'TCP://SQL-B:5022'
GO

-- 3.在SQL-A上,指定证服务器端点
ALTER DATABASE TEST
SET WITNESS = N'TCP://SQL-W:5022'
GO

-- 3.配置数据库镜像事务安全级别
ALTER DATABASE TEST SET SAFETY FULL
GO

五、查看数据库镜像的配置状态

-- 1.)通过Management studio 对象资源管理器,查看主体数据库、镜像数据库状态

-- 2.)通过Management studio 对象资源管理器中的数据库属性查看状态

-- 3.)通过系统目录视图查看数据库镜像配置情况
SELECT * FROM sys.database_mirroring_endpoints
SELECT * FROM sys.database_mirroring WHERE database_id =
    (SELECT database_id FROM sys.databases WHERE name = 'SQL')

搜索更多相关主题的帖子: 镜像 数据库

论坛徽章:
0
12 [报告]
发表于 2011-03-09 19:11 |只看该作者
主体
   1. USE [master]  
   2.   
   3.   
   4. --创建数据库主密钥。  
   5. IF EXISTS(SELECT * FROM sys.databases WHERE name='master' and is_master_key_encrypted_by_server=1)      
   6.     --drop master key;  
   7.     OPEN MASTER KEY DECRYPTION BY PASSWORD='123456789';  
   8. ELSE  
   9.     create MASTER KEY ENCRYPTION BY PASSWORD='123456789';  
  10. GO  
  11.   
  12. SELECT * FROM sys.key_encryptions;  
  13. go  
  14.   
  15. --向数据库中添加证书。  
  16. IF EXISTS(select * from sys.database_mirroring_endpoints WHERE name='Endpoint_Mirroring')  
  17.     DROP ENDPOINT Endpoint_Mirroring  
  18. GO  
  19.   
  20. IF EXISTS(select * from sys.certificates WHERE name='HOST_A_cert')  
  21.     DROP CERTIFICATE HOST_A_cert;  
  22. GO  
  23.   
  24. CREATE CERTIFICATE HOST_A_cert WITH SUBJECT = 'HOST_A certificate',  
  25.     START_DATE = '2008-01-01';  
  26. GO  
  27.   
  28. SELECT * FROM sys.certificates;  
  29. GO  
  30.   
  31. --创建数据库端点  
  32. IF EXISTS(SELECT * FROM sys.database_mirroring_endpoints WHERE name='Endpoint_Mirroring')  
  33.     DROP ENDPOINT Endpoint_Mirroring;  
  34. GO  
  35.   
  36. CREATE ENDPOINT Endpoint_Mirroring STATE=STARTED  
  37.     AS TCP ( LISTENER_PORT=5022 ,   
  38.         LISTENER_IP = ALL )  
  39.     FOR DATABASE_MIRRORING( AUTHENTICATION = CERTIFICATE HOST_A_cert ,   
  40.         ENCRYPTION = REQUIRED ALGORITHM RC4 ,   
  41.         ROLE = PARTNER );  
  42. GO  
  43.   
  44.   
  45. SELECT * FROM sys.database_mirroring_endpoints;  
  46. GO  
  47.   
  48.   
  49.   
  50.   
  51.   
  52. --备份证书  
  53. BACKUP CERTIFICATE HOST_A_cert TO FILE = 'D:\MIRROR\HOST_A_cert.cer';  
  54. GO  
  55.   
  56. --在服务器之间手动拷贝证书,保证每个服务只器都有所有证书  
  57.   
  58.   
  59. --创建用户,用于访问MIRROR  
  60. IF EXISTS(select * from sys.certificates WHERE name='HOST_B_cert')  
  61.     DROP CERTIFICATE HOST_B_cert  
  62. GO  
  63.   
  64. IF EXISTS(select * from sys.sql_logins WHERE name='HOST_B_login')  
  65.     DROP LOGIN HOST_B_login  
  66. GO  
  67.   
  68. IF EXISTS(select * from sys.database_principals WHERE  name='HOST_B_user')  
  69.     DROP USER HOST_B_user  
  70. GO  
  71.   
  72. create LOGIN HOST_B_login WITH PASSWORD = '123456789';  
  73. create USER HOST_B_user FOR LOGIN HOST_B_login;  
  74. create CERTIFICATE   
  75.     HOST_B_cert AUTHORIZATION HOST_B_user FROM FILE = 'D:\MIRROR\HOST_B_cert.cer';  
  76. GO  
  77.   
  78. GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_login];  
  79. GO  
  80.   
  81. --创建用户,用于访问WITNESS  
  82. IF EXISTS(select * from sys.certificates WHERE name='HOST_C_cert')  
  83.     DROP CERTIFICATE HOST_C_cert  
  84. GO  
  85.   
  86. IF EXISTS(select * from sys.sql_logins WHERE name='HOST_C_login')  
  87.     DROP LOGIN HOST_C_login  
  88. GO  
  89.   
  90. IF EXISTS(select * from sys.database_principals WHERE  name='HOST_C_user')  
  91.     DROP USER HOST_C_user  
  92. GO  
  93.   
  94. create LOGIN HOST_C_login WITH PASSWORD = '123456789';  
  95. create USER HOST_C_user FOR LOGIN HOST_C_login;  
  96. create CERTIFICATE   
  97.     HOST_C_cert AUTHORIZATION HOST_C_user FROM FILE = 'D:\MIRROR\HOST_C_cert.cer';  
  98. GO  
  99.   
100. GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_C_login];  
101. GO  
102.   
103. --拷贝用户  
104. SELECT [name],[sid] FROM sys.database_principals WHERE [name]='BetterDev'  
105.   
106. --备份数据库  
107.   
108.   
109.   
110. --设置伙伴  
111. ALTER DATABASE northwind SET PARTNER='TCP://192.168.1.116:5022';  
112. GO  
113. --设置见证  
114. ALTER DATABASE NORTHWIND SET WITNESS='TCP://192.168.1.117:5022';  
115. GO  
116. --设置安全选项  
117. ALTER DATABASE NORTHWIND SET SAFETY FULL  

镜像服务器代码:

view plaincopy to clipboardprint?

   1. USE [master]  
   2.   
   3.   
   4. --创建数据库主密钥。  
   5. IF EXISTS(SELECT * FROM sys.databases WHERE name='master' and is_master_key_encrypted_by_server=1)      
   6.     --drop master key;  
   7.     OPEN MASTER KEY DECRYPTION BY PASSWORD='123456789';  
   8. ELSE  
   9.     create MASTER KEY ENCRYPTION BY PASSWORD='123456789';  
  10. GO  
  11.   
  12. SELECT * FROM sys.key_encryptions;  
  13. go  
  14.   
  15. --向数据库中添加证书。  
  16. IF EXISTS(select * from sys.database_mirroring_endpoints WHERE name='Endpoint_Mirroring')  
  17.     DROP ENDPOINT Endpoint_Mirroring  
  18. GO  
  19.   
  20. IF EXISTS(select * from sys.certificates WHERE name='HOST_B_cert')  
  21.     DROP CERTIFICATE HOST_B_cert;  
  22. GO  
  23.   
  24. CREATE CERTIFICATE HOST_B_cert WITH SUBJECT = 'HOST_B certificate',  
  25.     START_DATE = '2008-01-01';  
  26. GO  
  27.   
  28. SELECT * FROM sys.certificates;  
  29. GO  
  30.   
  31. --创建数据库端点  
  32. IF EXISTS(SELECT * FROM sys.database_mirroring_endpoints WHERE name='Endpoint_Mirroring')  
  33.     DROP ENDPOINT Endpoint_Mirroring;  
  34. GO  
  35.   
  36. CREATE ENDPOINT Endpoint_Mirroring STATE=STARTED  
  37.     AS TCP ( LISTENER_PORT=5022 ,   
  38.         LISTENER_IP = ALL )  
  39.     FOR DATABASE_MIRRORING( AUTHENTICATION = CERTIFICATE HOST_B_cert ,   
  40.         ENCRYPTION = REQUIRED ALGORITHM RC4 ,   
  41.         ROLE = PARTNER );  
  42. GO  
  43.   
  44. SELECT * FROM sys.database_mirroring_endpoints;  
  45. GO  
  46.   
  47.   
  48.   
  49.   
  50.   
  51.   
  52. --备份证书  
  53. BACKUP CERTIFICATE HOST_B_cert TO FILE = 'D:\MIRROR\HOST_B_cert.cer';  
  54. GO  
  55.   
  56.   
  57. --在服务器之间手动拷贝证书,保证每个服务器都有所有证书  
  58.   
  59.   
  60.   
  61. --创建用户,用于访问MAIN  
  62. IF EXISTS(select * from sys.certificates WHERE name='HOST_A_cert')  
  63.     DROP CERTIFICATE HOST_A_cert  
  64. GO  
  65.   
  66. IF EXISTS(select * from sys.sql_logins WHERE name='HOST_A_login')  
  67.     DROP LOGIN HOST_A_login  
  68. GO  
  69.   
  70. IF EXISTS(select * from sys.database_principals WHERE  name='HOST_A_user')  
  71.     DROP USER HOST_A_user  
  72. GO  
  73.   
  74. create LOGIN HOST_A_login WITH PASSWORD = '123456789';  
  75. create USER HOST_A_user FOR LOGIN HOST_A_login;  
  76. create CERTIFICATE   
  77.     HOST_A_cert AUTHORIZATION HOST_A_user FROM FILE = 'D:\MIRROR\HOST_A_cert.cer';  
  78. GO  
  79.   
  80. GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_login];  
  81. GO  
  82.   
  83. --创建用户,用于访问WITNESS  
  84. IF EXISTS(select * from sys.certificates WHERE name='HOST_C_cert')  
  85.     DROP CERTIFICATE HOST_C_cert  
  86. GO  
  87.   
  88. IF EXISTS(select * from sys.sql_logins WHERE name='HOST_C_login')  
  89.     DROP LOGIN HOST_C_login  
  90. GO  
  91.   
  92. IF EXISTS(select * from sys.database_principals WHERE  name='HOST_C_user')  
  93.     DROP USER HOST_C_user  
  94. GO  
  95.   
  96. create LOGIN HOST_C_login WITH PASSWORD = '123456789';  
  97. create USER HOST_C_user FOR LOGIN HOST_C_login;  
  98. create CERTIFICATE   
  99.     HOST_C_cert AUTHORIZATION HOST_C_user FROM FILE = 'D:\MIRROR\HOST_C_cert.cer';  
100. GO  
101.   
102. GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_C_login];  
103. GO  
104.   
105. --添加用户  
106. EXEC sp_addlogin  
107.     @loginname=''  
108.     @passwd=''  
109.     @sid='';  
110. GO  
111.   
112. --手动还原数据库  
113.   
114.   
115. --设置伙伴  
116. ALTER DATABASE northwind SET PARTNER='TCP://192.168.1.115:5022';  
117. GO  

USE [master] --创建数据库主密钥。 IF EXISTS(SELECT * FROM sys.databases WHERE name='master' and is_master_key_encrypted_by_server=1) --drop master key; OPEN MASTER KEY DECRYPTION BY PASSWORD='123456789'; ELSE create MASTER KEY ENCRYPTION BY PASSWORD='123456789'; GO SELECT * FROM sys.key_encryptions; go --向数据库中添加证书。 IF EXISTS(select * from sys.database_mirroring_endpoints WHERE name='Endpoint_Mirroring') DROP ENDPOINT Endpoint_Mirroring GO IF EXISTS(select * from sys.certificates WHERE name='HOST_B_cert') DROP CERTIFICATE HOST_B_cert; GO CREATE CERTIFICATE HOST_B_cert WITH SUBJECT = 'HOST_B certificate', START_DATE = '2008-01-01'; GO SELECT * FROM sys.certificates; GO --创建数据库端点 IF EXISTS(SELECT * FROM sys.database_mirroring_endpoints WHERE name='Endpoint_Mirroring') DROP ENDPOINT Endpoint_Mirroring; GO 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 RC4 , ROLE = PARTNER ); GO SELECT * FROM sys.database_mirroring_endpoints; GO --备份证书 BACKUP CERTIFICATE HOST_B_cert TO FILE = 'D:\MIRROR\HOST_B_cert.cer'; GO --在服务器之间手动拷贝证书,保证每个服务器都有所有证书 --创建用户,用于访问MAIN IF EXISTS(select * from sys.certificates WHERE name='HOST_A_cert') DROP CERTIFICATE HOST_A_cert GO IF EXISTS(select * from sys.sql_logins WHERE name='HOST_A_login') DROP LOGIN HOST_A_login GO IF EXISTS(select * from sys.database_principals WHERE name='HOST_A_user') DROP USER HOST_A_user GO create LOGIN HOST_A_login WITH PASSWORD = '123456789'; create USER HOST_A_user FOR LOGIN HOST_A_login; create CERTIFICATE HOST_A_cert AUTHORIZATION HOST_A_user FROM FILE = 'D:\MIRROR\HOST_A_cert.cer'; GO GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_login]; GO --创建用户,用于访问WITNESS IF EXISTS(select * from sys.certificates WHERE name='HOST_C_cert') DROP CERTIFICATE HOST_C_cert GO IF EXISTS(select * from sys.sql_logins WHERE name='HOST_C_login') DROP LOGIN HOST_C_login GO IF EXISTS(select * from sys.database_principals WHERE name='HOST_C_user') DROP USER HOST_C_user GO create LOGIN HOST_C_login WITH PASSWORD = '123456789'; create USER HOST_C_user FOR LOGIN HOST_C_login; create CERTIFICATE HOST_C_cert AUTHORIZATION HOST_C_user FROM FILE = 'D:\MIRROR\HOST_C_cert.cer'; GO GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_C_login]; GO --添加用户 EXEC sp_addlogin @loginname='' @passwd='' @sid=''; GO --手动还原数据库 --设置伙伴 ALTER DATABASE northwind SET PARTNER='TCP://192.168.1.115:5022'; GO

见证服务器代码:

view plaincopy to clipboardprint?

   1. USE [master]  
   2.   
   3.   
   4. --创建数据库主密钥。  
   5. IF EXISTS(SELECT * FROM sys.databases WHERE name='master' and is_master_key_encrypted_by_server=1)      
   6.     --drop master key;  
   7.     OPEN MASTER KEY DECRYPTION BY PASSWORD='123456789';  
   8. ELSE  
   9.     create MASTER KEY ENCRYPTION BY PASSWORD='123456789';  
  10. GO  
  11.   
  12. SELECT * FROM sys.key_encryptions;  
  13. go  
  14.   
  15. --向数据库中添加证书。  
  16. IF EXISTS(select * from sys.database_mirroring_endpoints WHERE name='Endpoint_Mirroring')  
  17.     DROP ENDPOINT Endpoint_Mirroring  
  18. GO  
  19.   
  20. IF EXISTS(select * from sys.certificates WHERE name='HOST_C_cert')  
  21.     DROP CERTIFICATE HOST_C_cert;  
  22. GO  
  23.   
  24. CREATE CERTIFICATE HOST_C_cert WITH SUBJECT = 'HOST_C certificate',  
  25.     START_DATE = '2008-01-01';  
  26. GO  
  27.   
  28. SELECT * FROM sys.certificates;  
  29. GO  
  30.   
  31. --创建数据库端点  
  32. IF EXISTS(SELECT * FROM sys.database_mirroring_endpoints WHERE name='Endpoint_Mirroring')  
  33.     DROP ENDPOINT Endpoint_Mirroring;  
  34. GO  
  35.   
  36. CREATE ENDPOINT Endpoint_Mirroring STATE=STARTED  
  37.     AS TCP ( LISTENER_PORT=5022 ,   
  38.         LISTENER_IP = ALL )  
  39.     FOR DATABASE_MIRRORING( AUTHENTICATION = CERTIFICATE HOST_C_cert ,   
  40.         ENCRYPTION = REQUIRED ALGORITHM RC4 ,   
  41.         ROLE = WITNESS );  
  42. GO  
  43.   
  44. SELECT * FROM sys.database_mirroring_endpoints;  
  45. GO  
  46.   
  47.   
  48.   
  49.   
  50.   
  51.   
  52. --备份证书  
  53. BACKUP CERTIFICATE HOST_C_cert TO FILE = 'E:\MIRROR\HOST_C_cert.cer';  
  54. GO  
  55.   
  56.   
  57. --在服务器之间手动拷贝证书,保证每个服务器都有所有证书  
  58.   
  59.   
  60.   
  61.   
  62. --创建用户,用于访问MAIN  
  63. IF EXISTS(select * from sys.certificates WHERE name='HOST_A_cert')  
  64.     DROP CERTIFICATE HOST_A_cert  
  65. GO  
  66.   
  67. IF EXISTS(select * from sys.sql_logins WHERE name='HOST_A_login')  
  68.     DROP LOGIN HOST_A_login  
  69. GO  
  70.   
  71. IF EXISTS(select * from sys.database_principals WHERE  name='HOST_A_user')  
  72.     DROP USER HOST_A_user  
  73. GO  
  74.   
  75. create LOGIN HOST_A_login WITH PASSWORD = '123456789';  
  76. create USER HOST_A_user FOR LOGIN HOST_A_login;  
  77. create CERTIFICATE   
  78.     HOST_A_cert AUTHORIZATION HOST_A_user FROM FILE = 'E:\MIRROR\HOST_A_cert.cer';  
  79. GO  
  80.   
  81. GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_login];  
  82. GO  
  83.   
  84. --创建用户,用于访问镜像  
  85. IF EXISTS(select * from sys.certificates WHERE name='HOST_B_cert')  
  86.     DROP CERTIFICATE HOST_B_cert  
  87. GO  
  88.   
  89. IF EXISTS(select * from sys.sql_logins WHERE name='HOST_B_login')  
  90.     DROP LOGIN HOST_B_login  
  91. GO  
  92.   
  93. IF EXISTS(select * from sys.database_principals WHERE  name='HOST_B_user')  
  94.     DROP USER HOST_B_user  
  95. GO  
  96.   
  97. create LOGIN HOST_B_login WITH PASSWORD = '123456789';  
  98. create USER HOST_B_user FOR LOGIN HOST_B_login;  
  99. create CERTIFICATE   
100.     HOST_B_cert AUTHORIZATION HOST_B_user FROM FILE = 'E:\MIRROR\HOST_B_cert.cer';  
101. GO  
102.   
103. GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_login];  
104. GO  

http://blog.csdn.net/feng2375/archive/2009/02/16/3896020.aspx

论坛徽章:
0
13 [报告]
发表于 2011-03-09 19:12 |只看该作者
模拟数据库镜像:在一台机器的3个实例中进行配置
预备知识: 数据库镜像基本概念
http://msdn2.microsoft.com/zh-cn/library/ms177412.aspx
http://msdn2.microsoft.com/zh-cn/library/ms189852.aspx
--------一 准备工作----------
-------(一) 安装三个实例,分别为:-----
SZDXBAK\SQLSERVER(默认实例), 作为主体服务器
SZDXBAK\SQL2 作为镜像服务器
SZDXBAK\WITNESS 作为鉴证服务器
注: 所有实例服务使用SQLService账户启动
------(二) 数据库准备-------
--1 在主体服务上创建测试数据库 RecoveryDb
并创建一个完全备份
--2 在镜像服务上使用NORECOVERY选项恢复数据库,
恢复后数据库状态为'正在还原'
----- 二 创建数据库镜像端点----
--1 在主体数据库(SQLSERVER实例)上创建端点,用于伙伴通讯
CREATE ENDPOINT DbMirroring
STATE=STARTED
AS TCP(LISTENER_PORT=5022)
FOR DATABASE_MIRRORING(ROLE=PARTNER,ENCRYPTION=SUPPORTED)
go
--2 在镜像数据库(SQL2实例)上创建端点,用于伙伴通讯
CREATE ENDPOINT DbMirroring
STATE=STARTED
AS TCP(LISTENER_PORT=5033)
FOR DATABASE_MIRRORING(ROLE=PARTNER,ENCRYPTION=SUPPORTED)
go
--3 在鉴证服务器(WITNESS实例)上创建端点,用于鉴证通讯
CREATE ENDPOINT DbMirroring
STATE=STARTED
AS TCP(LISTENER_PORT=5022)
FOR DATABASE_MIRRORING(ROLE=WITNESS,ENCRYPTION=SUPPORTED)
go
ALTER ENDPOINT DbMirroring STATE=STARTED
go
--4 检查端点配置,可分别在不同服务器上运行以下查询
SELECT * FROM sys.database_mirroring_endpoints
----- 三 配置数据库镜像安全性(最好用域帐号启动MSSQLSERVER服务)--------
--1 主体数据库(SQLSERVER实例)
use master
go
GRANT CONNECT ON ENDPOINT::"DbMirroring" TO "SZDXBAK\SQLService"
go
--2 镜像数据库(SQL2实例)
use master
go
GRANT CONNECT ON ENDPOINT::"DbMirroring" TO "SZDXBAK\SQLService"
go
--3 鉴证服务器(WITNESS实例)
use master
go
GRANT CONNECT ON ENDPOINT::"DbMirroring" TO "SZDXBAK\SQLService"
go
----- -四 启动数据库镜像-----
--注意配置顺序
--1 在镜像数据库(SQL2实例)上,指定到主体服务器(SQLSERVER实例)的伙伴端点
ALTER DATABASE RecoveryDb
SET PARTNER=N'TCP://SZDXBAK:5022'
go
--2 在主数据库(SQLSERVER实例)上,指定到镜像服务器(SQL2实例)的伙伴端点
ALTER DATABASE RecoveryDb
SET PARTNER=N'TCP://SZDXBAK:5033'
go
--注: 以上两步完成后,已经配置为高保护级别性模式
--3 如果要创建高可用性模式:在主数据库上(SQLSERVER实例),指定鉴证服务器端点
ALTER DATABASE RecoveryDb
SET WITNESS=N'TCP://SZDXBAK:5044
go
--4 在高可用性模式下:配置数据库镜像事务安全级别
ALTER DATABASE RecoveryDb SET SAFETY FULL
go
--- 五 查看数据库镜像的配置状态
--1 通过Management Studio 对象资源管理器,查看主体数据库,镜像数据库状态
--2 通过Management Studio 对象资源管理器中的数据库属性查看状态
--3 通过系统目录视图查看数据库镜像配置情况
SELECT * FROM sys.database_mirroring_endpoints
SELECT * FROM sys.database_mirroring_endpoints
WHERE database_id = (SELECT database_id FROM sys.database
WHERE name='RecoveryDb')
以上配置完成后,主体数据库的状态为:主体,已同步
镜像数据库的状态为:镜像,已同步/正在还原..
--- 六 服务器角色切换测试----
预备知识
数据库镜像角色切换
自动故障转移
只针对高可用性模式
SAFETY=FULL
手动故障转移
针对高可用性模式和高保护级别性模式
SAFETY=FULL
强制服务
只针对高性能模式
SAFETY=OFF
---(一) 自动故障转移
在主体服务器上,断开网络连接,通过数据库资源管理器查看主体/镜像服务器上数据库的状态
镜像服务器状态: 主体,已断开连接
恢复主体服务器
此时原来主体服务器(SQLSERVER实例)变为镜像服务器状态为:镜像,已同步/正在还原..
原来镜像服务器(SQL2实例)变为主体服务器状态:主体,已同步
---(二) 手动故障转移
-- 主体服务器上执行故障转移过程
USE MASTER
go
ALTER DATABASE RecoveryDb SET PARTNER FAILOVER
go
执行完后主体服务器状态变为: 镜像,已同步/正在还原..
镜像服务器状态变为 主体,已同步
---(三) 强制服务,有可能造成数据丢失
--1) 在镜像服务器上,取消对鉴证服务器的配置
ALTER DATABASE RecoveryDb SET WINTESS OFF
--2) 在镜像服务器上,配置事务安全性为OFF
ALTER DATABASE RecoveryDb SET SAFETY OFF
--3) 断开主体服务器,在镜像服务器上,强制服务 进行角色切换
ALTER DATABASE RecoveryDb SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS
完成后数据库状态为 主体,已断开连接
-----七 如何查询镜像服务器上的数据: 在镜像服务器上创建数据库快照
--1 在镜像服务器上,创建数据库快照
CREATE DATABASE ReconveryDb_snap_1
ON (NAME=RecoveryDb,FILENAM='H:\seconddb\recovery_snap1.ss')
AS SNAPSHOT OF RecoveryDb
--2 访问镜像数据库
USE ReconveryDb_snap_1
go
SELECT * FROM test
------八、删除镜像----------------
ALTER DATABASE RecoveryDbSET PARTNER OFF
注:
1)做镜像时,必须保证主体和镜像数据库的日志一致性,如果在镜像服务器使用NORECOVERY选项恢复数据库时,主体数据库日志有更新,需要在主体数据库备份日志然后在镜像服务器上使用NORECOVERY选项恢复主体服务器更新的日志,否则在主体数据库上指定到镜像服务器的伙伴端点时会报错
2)镜像完成后,对主体数据库新建/修改/删除表,镜像服务器将同步更新
3)镜像完成后,对主体数据库执行收缩文件,镜像服务器将同步更新
http://dbajun.javaeye.com/blog/170439
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP