- ----判斷數據庫是否正在被使用,如果被使用中,那麼中止使用數據庫的進程
- IF EXISTS(SELECT * FROM sys.sysprocesses WHERE dbid=DB_ID(N'SampleData'))
- BEGIN
- DECLARE @s NVARCHAR(1000)
- DECLARE myCur CURSOR FOR
- SELECT 'kill '+CAST(spid AS VARCHAR) FROM sys.sysprocesses WHERE dbid=DB_ID(N'SampleData')
- OPEN myCur
- FETCH NEXT FROM myCur INTO @s
- WHILE @@FETCH_STATUS =0
- BEGIN
- EXEC(@S)
- FETCH NEXT FROM myCur INTO @s
- END
- CLOSE myCur
- DEALLOCATE myCur
- END
- ----新建數據庫
- IF EXISTS(SELECT * FROM sys.sysdatabases WHERE dbid =db_id(N'SampleData'))
- DROP DATABASE SampleData
- ---IF DB_ID(N'SampleData') IS NOT NULL
- --- DROP DATABASE SampleData
- CREATE DATABASE SampleData ON PRIMARY
- (NAME=N'SampleData', FILENAME=N'E:\Sample\SampleData.MDF',SIZE=10MB,MAXSIZE=UNLIMITED,FILEGROWTH=10%),
- FILEGROUP FG1 DEFAULT
- (NAME=N'SampleData_01',FILENAME=N'E:\Sample\SampleData_01.ndf',SIZE=10MB,MAXSIZE=UNLIMITED,FILEGROWTH=10%),
- (NAME=N'SampleData_02',FILENAME=N'E:\Sample\SampleData_02.ndf',SIZE=10MB,MAXSIZE=UNLIMITED,FILEGROWTH=10%)
- LOG ON
- (NAME=N'SampleData_Log',FILENAME=N'E:\Sample\SampleData_Log.ldf',SIZE=10MB,MAXSIZE=UNLIMITED,FILEGROWTH=10%)
- COLLATE Chinese_PRC_CI_AS
- GO
- ----將數據庫的恢復模式設定爲【FULL】
- IF NOT EXISTS(SELECT recovery_model FROM sys.databases WHERE database_id =DB_ID(N'SampleData') AND recovery_model=1)
- ALTER DATABASE SampleData SET RECOVERY FULL
- ----在數據庫中新建表[TestTable],並添加測試數據
- USE SampleData
- IF EXISTS(SELECT * FROM sys.objects WHERE object_id =OBJECT_ID(N'dbo.TestTable') AND type IN (N'U'))
- DROP TABLE dbo.TestTable
- CREATE TABLE dbo.TestTable
- (ID INT IDENTITY(1,1),
- Column1 VARCHAR(50) NOT NULL,
- CONSTRAINT pk_testtableID PRIMARY KEY(ID))
- GO
- INSERT INTO dbo.TestTable(Column1) VALUES('ROWA')
- INSERT INTO dbo.TestTable(Column1) VALUES('ROWB')
- INSERT INTO dbo.TestTable(Column1) VALUES('ROWC')
- INSERT INTO dbo.TestTable(Column1) VALUES('ROWD')
- INSERT INTO dbo.TestTable(Column1) VALUES('ROWE')
- ----完整備份數據庫
- BACKUP DATABASE [SampleData] TO DISK = N'E:\SampleBack\SampleDataAllback.bak' WITH NOFORMAT, NOINIT, NAME = N'SampleData-完整數據庫備份', SKIP, NOREWIND, NOUNLOAD, STATS = 10
- ----事務日誌備份(截斷日誌)
- BACKUP LOG [SampleData] TO DISK = N'E:\SampleBack\SampleDataLogBack.bak' WITH NOFORMAT, NOINIT, NAME = N'SampleData-事務日誌 備份', SKIP, NOREWIND, NOUNLOAD, STATS = 10
- ----在輔助數據庫服務器上執行還原
- ------還原完整備份
- --------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
- --------GO
- ------還原事務日誌備份
- --------RESTORE LOG [SampleData] FROM DISK = N'E:\SampleBack\SampleDataLogBack.bak' WITH FILE = 1, NORECOVERY, NOUNLOAD, STATS = 10
- ----說明:數據庫鏡像的兩種身份驗證方式:證書和Windows身份驗證
- ----使用基於證書的身份驗證方式設置數據庫鏡像
- -------第一步:配置[出站連接]
- ---------配置主機服務器的出站連接
- ------------在master數據庫中創建數據庫主密鑰
- USE master
- CREATE MASTER KEY ENCRYPTION BY PASSWORD='[email protected]'
- ------------爲主機服務器數據庫實例製作一個證書
- USE master
- CREATE CERTIFICATE HOST_A_Cert WITH SUBJECT='HOST_A certificate'
- ------------使用該證書爲主機服務器數據庫實例創建一個鏡像端口
- CREATE ENDPOINT Endpoint_Mirroring
- STATE=STARTED
- AS TCP (LISTENER_PORT=7024,LISTENER_IP=ALL)
- FOR DATABASE_MIRRORING (AUTHENTICATION=CERTIFICATE HOST_A_Cert,ENCRYPTION=REQUIRED ALGORITHM AES,ROLE=ALL)
- ------------備份HOST_A證書,並將其複製到輔助服務器、見證服務器
- BACKUP CERTIFICATE HOST_A_Cert TO FILE='C:\HOST_A_Cert.cer'
- ---------配置輔助服務器的出站連接
- ------------在master數據庫中創建數據庫主密鑰
- USE master
- CREATE MASTER KEY ENCRYPTION BY PASSWORD='[email protected]'
- ------------爲輔助服務器數據庫實例製作一個證書
- USE master
- CREATE CERTIFICATE HOST_B_Cert WITH SUBJECT='HOST_B certificate'
- ------------使用該證書爲輔助服務器數據庫實例創建一個鏡像端口
- CREATE ENDPOINT Endpoint_Mirroring
- STATE=STARTED
- AS TCP (LISTENER_PORT=7024,LISTENER_IP=ALL)
- FOR DATABASE_MIRRORING (AUTHENTICATION=CERTIFICATE HOST_B_Cert,ENCRYPTION=REQUIRED ALGORITHM AES,ROLE=ALL)
- ------------備份HOST_B證書,並將其複製到主機服務器、見證服務器
- BACKUP CERTIFICATE HOST_B_Cert TO FILE='C:\HOST_B_Cert.cer'
- ----------配置見證服務器的出站連接
- USE master
- CREATE MASTER KEY ENCRYPTION BY PASSWORD='[email protected]'
- ---------爲見證服務器數據庫實例製作一個證書
- USE master
- CREATE CERTIFICATE HOST_C_Cert WITH SUBJECT='HOST_C_certificate'
- ---------使用該證書爲見證服務器數據庫實例創建一個鏡像端口
- CREATE ENDPOINT Endpoint_Mirroring
- STATE=STARTED
- AS TCP (LISTENER_PORT=7024,LISTENER_IP=ALL)
- FOR DATABASE_MIRRORING (AUTHENTICATION=CERTIFICATE HOST_C_Cert,ENCRYPTION=REQUIRED ALGORITHM AES,ROLE=ALL)
- ---------備份HOST_C證書,並將其複製到主機服務器、輔助服務器
- BACKUP CERTIFICATE HOST_C_Cert TO FILE='C:\HOST_C_Cert.cer'
- -------第二步:配置[入站連接]
- ---------配置主機服務器的入站連接
- ------------在主機服務器上爲鏡像服務器創建一個登錄名
- USE master
- CREATE LOGIN HOST_B_Login WITH PASSWORD='[email protected]'
- ------------創建一個該登錄名的用戶
- CREATE USER HOST_B_User FROM LOGIN HOST_B_Login
- ------------使用從鏡像服務器複製過來的證書與此用戶關聯
- CREATE CERTIFICATE HOST_B_Cert AUTHORIZATION HOST_B_User FROM FILE='C:\HOST_B_Cert.cer'
- ------------授予對遠程鏡像端點的登錄名的 CONNECT 權限
- GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_Login]
- ------------在主機服務器上爲見證服務器創建一個登錄名
- USE master
- CREATE LOGIN HOST_C_Login WITH PASSWORD='[email protected]'
- ------------創建一個該登錄名的用戶
- CREATE USER HOST_C_User FROM LOGIN HOST_C_Login
- ------------使用從見證服務器複製過來的證書與此用戶關聯
- CREATE CERTIFICATE HOST_C_Cert AUTHORIZATION HOST_C_User FROM FILE='C:\HOST_C_Cert.cer'
- ------------授予對遠程鏡像端點的登錄名的CONNECT權限
- GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_C_Login]
- ---------配置輔助服務器的入站連接
- ------------在輔助服務器上爲主機服務器創建一個登錄名
- USE master
- CREATE LOGIN HOST_A_Login WITH PASSWORD='[email protected]'
- ------------創建一個該登錄名的用戶
- CREATE USER HOST_A_User FROM LOGIN HOST_A_Login
- ------------使用從主機服務器複製過來的證書與此用戶關聯
- CREATE CERTIFICATE HOST_A_Cert AUTHORIZATION HOST_A_User FROM FILE='C:\HOST_A_Cert.cer'
- ------------授予對遠程鏡像端點的登錄名的 CONNECT 權限
- GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_Login]
- ------------在輔助服務器上爲見證服務器創建一個登錄名
- USE master
- CREATE LOGIN HOST_C_Login WITH PASSWORD='[email protected]'
- ------------創建一個該登錄名的用戶
- CREATE USER HOST_C_User FROM LOGIN HOST_C_Login
- ------------使用從見證服務器複製過來的證書與此用戶關聯
- CREATE CERTIFICATE HOST_C_Cert AUTHORIZATION HOST_C_User FROM FILE='C:\HOST_C_Cert.cer'
- ------------授予對遠程鏡像端點的登錄名的CONNECT權限
- GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_C_Login]
- ---------配置見證服務器的入站連接
- ------------在見證服務器上爲主機服務器創建一個登錄名
- USE master
- CREATE LOGIN HOST_A_Login WITH PASSWORD='[email protected]'
- ------------創建一個該登錄名的用戶
- CREATE USER HOST_A_User FROM LOGIN HOST_A_Login
- ------------使用從主機服務器複製過來的證書與此用戶關聯
- CREATE CERTIFICATE HOST_A_Cert AUTHORIZATION HOST_A_User FROM FILE='C:\HOST_A_Cert.cer'
- ------------授予對遠程鏡像端點的登錄名的 CONNECT 權限
- GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_Login]
- ------------在見證服務器上爲輔助服務器創建一個登錄名
- USE master
- CREATE LOGIN HOST_B_Login WITH PASSWORD='[email protected]'
- ------------創建一個該登錄名的用戶
- CREATE USER HOST_B_User FROM LOGIN HOST_B_Login
- ------------使用從見證服務器複製過來的證書與此用戶關聯
- CREATE CERTIFICATE HOST_B_Cert AUTHORIZATION HOST_B_User FROM FILE='C:\HOST_B_Cert.cer'
- ------------授予對遠程鏡像端點的登錄名的CONNECT權限
- GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_Login]
- -------第三步:配置鏡像夥伴
- ---------在鏡像服務器上將主機服務器設置爲夥伴
- ALTER DATABASE SampleData SET PARTNER='TCP://S1:7024'
- ---------在主機服務器上將鏡像服務器設置爲夥伴
- ALTER DATABASE SampleData SET PARTNER='TCP://S2:7024'
- ---------在主機服務器上設置見證服務器
- ALTER DATABASE SampleData SET WITNESS='TCP://S2:7024'
- GO
- -----以下代碼是在沒有見證服務器的情況下實現手動故障轉移
- ---------若要在高性能模式下配置此會話,在主體服務器實例上,將事務安全性設置爲 OFF。
- ALTER DATABASE SampleData SET PARTNER SAFETY OFF
- ---------若要在高安全模式下配置些會話,在主體服務器實例上,將事務安全性設置爲FULL
- ALTER DATABASE SampleData SET PARTNER SAFETY FULL
- ---------在高性能模式下,使用下列語句在鏡像服務器上強制執行實現故障轉移,會丟失數據
- ALTER DATABASE SampleData SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS
- ---------在高安全模式下,使用下列語句實現手工故障轉移
- ALTER DATABASE SampleData SET PARTNER FAILOVER
- ---------原來的主服務器恢復,可以繼續工作,需要重新設定鏡像
- ---------在輔助服務器上執行:
- USE master
- ALTER DATABASE SampleData SET PARTNER RESUME --恢復鏡像
- ALTER DATABASE SampleData SET PARTNER FAILOVER --切換主備
- ----使用基於Windows的身份驗證方式設置數據庫鏡像
- ------------------------------------------------------------
- -- 主機服務器 S1 S1\S1User --
- -- 輔助服務器 S2 S2\S2User --
- -- 見證服務器 S3 S3\S3User --
- ------------------------------------------------------------
- ---在主機服務器上創建一個鏡像端點
- CREATE ENDPOINT Endpoint_Mirroring STATE=STARTED AS TCP (LISTENER_PORT=7024) FOR DATABASE_MIRRORING (ROLE=ALL)
- ---在主機服務器上爲輔助服務器創建一個登錄
- CREATE LOGIN [S2\S2User] FROM WINDOWS
- ---授予對遠程鏡像端點的登錄名的CONNECT權限
- GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [S2\S2User]
- ---在主機服務器上爲見證服務器創建一個登錄
- CREATE LOGIN [S3\S3User] FROM WINDOWS
- ---授予對遠程鏡像端點的登錄名的CONNECT權限
- GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [S3\S3User]
- ---在輔助服務器上創建一個鏡像端點
- CREATE ENDPOINT Endpoint_Mirroring STATE=STARTED AS TCP (LISTENER_PORT=7024) FOR DATABASE_MIRRORING (ROLE=ALL)
- ---在輔助服務器上爲主機服務器創建一個登錄
- CREATE LOGIN [S1\S2User] FROM WINDOWS
- ---授予對遠程鏡像端點的登錄名的CONNECT權限
- GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [S1\S2User]
- ---在輔助服務器上爲見證服務器創建一個登錄
- CREATE LOGIN [S3\S3User] FROM WINDOWS
- ---授予對遠程鏡像端點的登錄名的CONNECT權限
- GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [S3\S3User]
- ---在見證服務器上創建一個鏡像端點
- CREATE ENDPOINT Endpoint_Mirroring STATE=STARTED AS TCP (LISTENER_PORT=7024) FOR DATABASE_MIRRORING (ROLE=ALL)
- ---在見證服務器上爲主機服務器創建一個登錄
- CREATE LOGIN [S1\S1User] FROM WINDOWS
- ---授予對遠程鏡像端點的登錄名的CONNECT權限
- GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [S1\S1User]
- ---在見證服務器上爲輔助服務器創建一個登錄
- CREATE LOGIN [S2\S2User] FROM WINDOWS
- ---授予對遠程鏡像端點的登錄名的CONNECT權限
- GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [S2\S2User]
- ----配置鏡像夥伴
- ---------在鏡像服務器上將主機服務器設置爲夥伴
- ALTER DATABASE SampleData SET PARTNER='TCP://S1:7024'
- ---------在主機服務器上將鏡像服務器設置爲夥伴
- ALTER DATABASE SampleData SET PARTNER='TCP://S2:7024'
- ---------在主機服務器上設置見證服務器
- ALTER DATABASE SampleData SET WITNESS='TCP://S2:7024'