SQL SERVER 2008 数据库镜像动手实验笔记

 

  1. ----判断数据库是否正在被使用,如果被使用中,那么中止使用数据库的进程 
  2. IF EXISTS(SELECT * FROM sys.sysprocesses WHERE dbid=DB_ID(N'SampleData')) 
  3.    BEGIN 
  4.      DECLARE @s NVARCHAR(1000) 
  5.      DECLARE myCur CURSOR FOR  
  6.      SELECT 'kill '+CAST(spid AS VARCHARFROM sys.sysprocesses WHERE dbid=DB_ID(N'SampleData'
  7.      OPEN myCur 
  8.      FETCH NEXT FROM myCur INTO @s 
  9.      WHILE @@FETCH_STATUS =0 
  10.      BEGIN 
  11.        EXEC(@S) 
  12.        FETCH NEXT FROM myCur INTO @s 
  13.      END 
  14.      CLOSE myCur 
  15.      DEALLOCATE myCur     
  16.    END      
  17.     
  18. ----新建数据库 
  19. IF EXISTS(SELECT * FROM sys.sysdatabases WHERE dbid =db_id(N'SampleData')) 
  20. DROP DATABASE SampleData    
  21. ---IF DB_ID(N'SampleData') IS NOT NULL   
  22. ---   DROP DATABASE SampleData   
  23. CREATE DATABASE SampleData ON PRIMARY  
  24.   (NAME=N'SampleData', FILENAME=N'E:\Sample\SampleData.MDF',SIZE=10MB,MAXSIZE=UNLIMITED,FILEGROWTH=10%),   
  25.   FILEGROUP FG1 DEFAULT  
  26.   (NAME=N'SampleData_01',FILENAME=N'E:\Sample\SampleData_01.ndf',SIZE=10MB,MAXSIZE=UNLIMITED,FILEGROWTH=10%),   
  27.   (NAME=N'SampleData_02',FILENAME=N'E:\Sample\SampleData_02.ndf',SIZE=10MB,MAXSIZE=UNLIMITED,FILEGROWTH=10%) 
  28.   LOG ON  
  29.   (NAME=N'SampleData_Log',FILENAME=N'E:\Sample\SampleData_Log.ldf',SIZE=10MB,MAXSIZE=UNLIMITED,FILEGROWTH=10%)   
  30.   COLLATE Chinese_PRC_CI_AS   
  31. GO   
  32.  
  33. ----将数据库的恢复模式设定为【FULL】 
  34. IF NOT EXISTS(SELECT recovery_model FROM sys.databases WHERE database_id =DB_ID(N'SampleData'AND recovery_model=1) 
  35.    ALTER DATABASE SampleData SET RECOVERY FULL 
  36.  
  37. ----在数据库中新建表[TestTable],并添加测试数据   
  38. USE SampleData  
  39. IF EXISTS(SELECT * FROM sys.objects WHERE object_id =OBJECT_ID(N'dbo.TestTable'AND type IN (N'U')) 
  40. DROP TABLE dbo.TestTable 
  41. CREATE TABLE dbo.TestTable 
  42. (ID       INT                   IDENTITY(1,1), 
  43.  Column1  VARCHAR(50)   NOT NULL
  44.  CONSTRAINT pk_testtableID PRIMARY KEY(ID)) 
  45.  GO 
  46.  
  47. INSERT INTO dbo.TestTable(Column1) VALUES('ROWA'
  48. INSERT INTO dbo.TestTable(Column1) VALUES('ROWB'
  49. INSERT INTO dbo.TestTable(Column1) VALUES('ROWC'
  50. INSERT INTO dbo.TestTable(Column1) VALUES('ROWD'
  51. INSERT INTO dbo.TestTable(Column1) VALUES('ROWE'
  52.  
  53. ----完整备份数据库 
  54. BACKUP DATABASE [SampleData] TO  DISK = N'E:\SampleBack\SampleDataAllback.bak' WITH NOFORMAT, NOINIT,  NAME = N'SampleData-完整数据库备份', SKIP, NOREWIND, NOUNLOAD,  STATS = 10 
  55. ----事务日志备份(截断日志) 
  56. BACKUP LOG [SampleData] TO  DISK = N'E:\SampleBack\SampleDataLogBack.bak' WITH NOFORMAT, NOINIT,  NAME = N'SampleData-事务日志 备份', SKIP, NOREWIND, NOUNLOAD,  STATS = 10 
  57.  
  58. ----在辅助数据库服务器上执行还原 
  59. ------还原完整备份 
  60. --------RESTORE DATABASE [SampleData] FROM  DISK = N'E:\SampleBack\SampleDataAllback.bak' WITH  FILE = 1,  MOVE N'SampleData_01' TO N'E:\Sample\SampleData_1.ndf',  MOVE N'SampleData_02' TO N'E:\Sample\SampleData_2.ndf',  MOVE N'SampleData_Log' TO N'E:\Sample\SampleData_3.ldf',  NORECOVERY,  NOUNLOAD,  STATS = 10 
  61. --------GO 
  62. ------还原事务日志备份 
  63. --------RESTORE LOG [SampleData] FROM  DISK = N'E:\SampleBack\SampleDataLogBack.bak' WITH  FILE = 1, NORECOVERY, NOUNLOAD,  STATS = 10 
  64.  
  65. ----说明:数据库镜像的两种身份验证方式:证书和Windows身份验证 
  66.  
  67. ----使用基于证书的身份验证方式设置数据库镜像 
  68. -------第一步:配置[出站连接] 
  69. ---------配置主机服务器的出站连接 
  70. ------------在master数据库中创建数据库主密钥 
  71. USE master  
  72. CREATE MASTER KEY ENCRYPTION BY PASSWORD='[email protected]' 
  73. ------------为主机服务器数据库实例制作一个证书 
  74. USE master  
  75. CREATE CERTIFICATE HOST_A_Cert WITH SUBJECT='HOST_A certificate' 
  76. ------------使用该证书为主机服务器数据库实例创建一个镜像端口 
  77. CREATE ENDPOINT Endpoint_Mirroring 
  78. STATE=STARTED  
  79. AS TCP (LISTENER_PORT=7024,LISTENER_IP=ALL
  80. FOR DATABASE_MIRRORING (AUTHENTICATION=CERTIFICATE HOST_A_Cert,ENCRYPTION=REQUIRED ALGORITHM AES,ROLE=ALL
  81. ------------备份HOST_A证书,并将其复制到辅助服务器、见证服务器 
  82. BACKUP CERTIFICATE HOST_A_Cert TO FILE='C:\HOST_A_Cert.cer' 
  83.  
  84. ---------配置辅助服务器的出站连接 
  85. ------------在master数据库中创建数据库主密钥 
  86. USE master  
  87. CREATE MASTER KEY ENCRYPTION BY PASSWORD='[email protected]' 
  88. ------------为辅助服务器数据库实例制作一个证书 
  89. USE master  
  90. CREATE CERTIFICATE HOST_B_Cert WITH SUBJECT='HOST_B certificate' 
  91. ------------使用该证书为辅助服务器数据库实例创建一个镜像端口 
  92. CREATE ENDPOINT Endpoint_Mirroring 
  93. STATE=STARTED  
  94. AS TCP (LISTENER_PORT=7024,LISTENER_IP=ALL
  95. FOR DATABASE_MIRRORING (AUTHENTICATION=CERTIFICATE HOST_B_Cert,ENCRYPTION=REQUIRED ALGORITHM AES,ROLE=ALL
  96. ------------备份HOST_B证书,并将其复制到主机服务器、见证服务器 
  97. BACKUP CERTIFICATE HOST_B_Cert TO FILE='C:\HOST_B_Cert.cer' 
  98.  
  99. ----------配置见证服务器的出站连接 
  100. USE master  
  101. CREATE MASTER KEY ENCRYPTION BY PASSWORD='[email protected]' 
  102. ---------为见证服务器数据库实例制作一个证书 
  103. USE master  
  104. CREATE CERTIFICATE HOST_C_Cert WITH SUBJECT='HOST_C_certificate' 
  105. ---------使用该证书为见证服务器数据库实例创建一个镜像端口 
  106. CREATE ENDPOINT Endpoint_Mirroring 
  107. STATE=STARTED 
  108. AS TCP (LISTENER_PORT=7024,LISTENER_IP=ALL
  109. FOR DATABASE_MIRRORING (AUTHENTICATION=CERTIFICATE HOST_C_Cert,ENCRYPTION=REQUIRED ALGORITHM AES,ROLE=ALL
  110. ---------备份HOST_C证书,并将其复制到主机服务器、辅助服务器 
  111. BACKUP CERTIFICATE HOST_C_Cert TO FILE='C:\HOST_C_Cert.cer' 
  112.  
  113. -------第二步:配置[入站连接] 
  114. ---------配置主机服务器的入站连接 
  115. ------------在主机服务器上为镜像服务器创建一个登录名 
  116. USE master  
  117. CREATE LOGIN HOST_B_Login WITH PASSWORD='[email protected]' 
  118. ------------创建一个该登录名的用户 
  119. CREATE USER HOST_B_User FROM LOGIN HOST_B_Login  
  120. ------------使用从镜像服务器复制过来的证书与此用户关联 
  121. CREATE CERTIFICATE HOST_B_Cert AUTHORIZATION HOST_B_User FROM FILE='C:\HOST_B_Cert.cer' 
  122. ------------授予对远程镜像端点的登录名的 CONNECT 权限 
  123. GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_Login] 
  124. ------------在主机服务器上为见证服务器创建一个登录名 
  125. USE master  
  126. CREATE LOGIN HOST_C_Login WITH PASSWORD='[email protected]' 
  127. ------------创建一个该登录名的用户 
  128. CREATE USER HOST_C_User FROM LOGIN HOST_C_Login  
  129. ------------使用从见证服务器复制过来的证书与此用户关联 
  130. CREATE CERTIFICATE HOST_C_Cert AUTHORIZATION HOST_C_User FROM FILE='C:\HOST_C_Cert.cer' 
  131. ------------授予对远程镜像端点的登录名的CONNECT权限 
  132. GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_C_Login] 
  133.  
  134. ---------配置辅助服务器的入站连接 
  135. ------------在辅助服务器上为主机服务器创建一个登录名 
  136. USE master  
  137. CREATE LOGIN HOST_A_Login WITH PASSWORD='[email protected]' 
  138. ------------创建一个该登录名的用户 
  139. CREATE USER HOST_A_User FROM LOGIN HOST_A_Login  
  140. ------------使用从主机服务器复制过来的证书与此用户关联 
  141. CREATE CERTIFICATE HOST_A_Cert AUTHORIZATION HOST_A_User FROM FILE='C:\HOST_A_Cert.cer' 
  142. ------------授予对远程镜像端点的登录名的 CONNECT 权限 
  143. GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_Login] 
  144. ------------在辅助服务器上为见证服务器创建一个登录名 
  145. USE master  
  146. CREATE LOGIN HOST_C_Login WITH PASSWORD='[email protected]' 
  147. ------------创建一个该登录名的用户 
  148. CREATE USER HOST_C_User FROM LOGIN HOST_C_Login  
  149. ------------使用从见证服务器复制过来的证书与此用户关联 
  150. CREATE CERTIFICATE HOST_C_Cert AUTHORIZATION HOST_C_User FROM FILE='C:\HOST_C_Cert.cer' 
  151. ------------授予对远程镜像端点的登录名的CONNECT权限 
  152. GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_C_Login] 
  153.  
  154. ---------配置见证服务器的入站连接 
  155. ------------在见证服务器上为主机服务器创建一个登录名 
  156. USE master  
  157. CREATE LOGIN HOST_A_Login WITH PASSWORD='[email protected]' 
  158. ------------创建一个该登录名的用户 
  159. CREATE USER HOST_A_User FROM LOGIN HOST_A_Login  
  160. ------------使用从主机服务器复制过来的证书与此用户关联 
  161. CREATE CERTIFICATE HOST_A_Cert AUTHORIZATION HOST_A_User FROM FILE='C:\HOST_A_Cert.cer' 
  162. ------------授予对远程镜像端点的登录名的 CONNECT 权限 
  163. GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_Login] 
  164. ------------在见证服务器上为辅助服务器创建一个登录名 
  165. USE master  
  166. CREATE LOGIN HOST_B_Login WITH PASSWORD='[email protected]' 
  167. ------------创建一个该登录名的用户 
  168. CREATE USER HOST_B_User FROM LOGIN HOST_B_Login  
  169. ------------使用从见证服务器复制过来的证书与此用户关联 
  170. CREATE CERTIFICATE HOST_B_Cert AUTHORIZATION HOST_B_User FROM FILE='C:\HOST_B_Cert.cer' 
  171. ------------授予对远程镜像端点的登录名的CONNECT权限 
  172. GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_Login] 
  173.  
  174. -------第三步:配置镜像伙伴 
  175. ---------在镜像服务器上将主机服务器设置为伙伴 
  176. ALTER DATABASE SampleData SET PARTNER='TCP://S1:7024' 
  177. ---------在主机服务器上将镜像服务器设置为伙伴 
  178. ALTER DATABASE SampleData SET PARTNER='TCP://S2:7024' 
  179. ---------在主机服务器上设置见证服务器 
  180. ALTER DATABASE SampleData SET WITNESS='TCP://S2:7024' 
  181. GO 
  182.  
  183. -----以下代码是在没有见证服务器的情况下实现手动故障转移 
  184. ---------若要在高性能模式下配置此会话,在主体服务器实例上,将事务安全性设置为 OFF。 
  185. ALTER DATABASE SampleData SET PARTNER SAFETY OFF 
  186. ---------若要在高安全模式下配置些会话,在主体服务器实例上,将事务安全性设置为FULL 
  187. ALTER DATABASE SampleData SET PARTNER SAFETY FULL 
  188.  
  189. ---------在高性能模式下,使用下列语句在镜像服务器上强制执行实现故障转移,会丢失数据 
  190. ALTER DATABASE SampleData SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS 
  191. ---------在高安全模式下,使用下列语句实现手工故障转移 
  192. ALTER DATABASE SampleData SET PARTNER FAILOVER 
  193.  
  194. ---------原来的主服务器恢复,可以继续工作,需要重新设定镜像 
  195. ---------在辅助服务器上执行: 
  196. USE master 
  197. ALTER DATABASE SampleData SET PARTNER RESUME  --恢复镜像 
  198. ALTER DATABASE SampleData SET PARTNER FAILOVER --切换主备 
  199.  
  200.  
  201.  
  202. ----使用基于Windows的身份验证方式设置数据库镜像 
  203. ------------------------------------------------------------ 
  204. -- 主机服务器               S1                S1\S1User   -- 
  205. -- 辅助服务器               S2                S2\S2User   -- 
  206. -- 见证服务器               S3                S3\S3User   -- 
  207. ------------------------------------------------------------ 
  208. ---在主机服务器上创建一个镜像端点 
  209. CREATE ENDPOINT Endpoint_Mirroring STATE=STARTED AS TCP (LISTENER_PORT=7024) FOR DATABASE_MIRRORING (ROLE=ALL
  210. ---在主机服务器上为辅助服务器创建一个登录 
  211. CREATE LOGIN [S2\S2User] FROM WINDOWS 
  212. ---授予对远程镜像端点的登录名的CONNECT权限 
  213. GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [S2\S2User] 
  214. ---在主机服务器上为见证服务器创建一个登录 
  215. CREATE LOGIN [S3\S3User] FROM WINDOWS 
  216. ---授予对远程镜像端点的登录名的CONNECT权限 
  217. GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [S3\S3User] 
  218.  
  219. ---在辅助服务器上创建一个镜像端点 
  220. CREATE ENDPOINT Endpoint_Mirroring STATE=STARTED AS TCP (LISTENER_PORT=7024) FOR DATABASE_MIRRORING (ROLE=ALL
  221. ---在辅助服务器上为主机服务器创建一个登录 
  222. CREATE LOGIN [S1\S2User] FROM WINDOWS 
  223. ---授予对远程镜像端点的登录名的CONNECT权限 
  224. GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [S1\S2User] 
  225. ---在辅助服务器上为见证服务器创建一个登录 
  226. CREATE LOGIN [S3\S3User] FROM WINDOWS 
  227. ---授予对远程镜像端点的登录名的CONNECT权限 
  228. GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [S3\S3User] 
  229.  
  230. ---在见证服务器上创建一个镜像端点 
  231. CREATE ENDPOINT Endpoint_Mirroring STATE=STARTED AS TCP (LISTENER_PORT=7024) FOR DATABASE_MIRRORING (ROLE=ALL
  232. ---在见证服务器上为主机服务器创建一个登录 
  233. CREATE LOGIN [S1\S1User] FROM WINDOWS 
  234. ---授予对远程镜像端点的登录名的CONNECT权限 
  235. GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [S1\S1User] 
  236. ---在见证服务器上为辅助服务器创建一个登录 
  237. CREATE LOGIN [S2\S2User] FROM WINDOWS 
  238. ---授予对远程镜像端点的登录名的CONNECT权限 
  239. GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [S2\S2User] 
  240.  
  241. ----配置镜像伙伴 
  242. ---------在镜像服务器上将主机服务器设置为伙伴 
  243. ALTER DATABASE SampleData SET PARTNER='TCP://S1:7024' 
  244. ---------在主机服务器上将镜像服务器设置为伙伴 
  245. ALTER DATABASE SampleData SET PARTNER='TCP://S2:7024' 
  246. ---------在主机服务器上设置见证服务器 
  247. ALTER DATABASE SampleData SET WITNESS='TCP://S2:7024' 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章