MS SQLでのデータベースミラーリング

良い一日 ここで、データベースミラーリングの調整の経験を説明することにしました。 最近までそのような利益を得ていなかったため、このテーマに関する情報を求めてインターネットをサーフィンし始めました。 そして、主なポイントについて話すためのステップバイステップの指示として投稿を整理しようとします。一般的に、それはそれ以上ではないでしょう。



イントロ

データベースをバックアップするために、2つのオプションが考慮されました。

-複製

-ミラーリング

一部のテーブルはレプリケートできないため、 レプリケーションは消滅しました。一般的に、特にこのビジネスでは、データベースの構造をすぐに提供する必要があります。

ミラーリングはバタンと機能します! テストの結果、彼はメインベースを置き、ミラーをメインベースに移しました。 彼が主なものを持ち上げた後、それは自動的に鏡になり、場所を変えました。 すべてが順調に進みました。 (神は彼女に長い健康を与えます!)



一般に、3つのミラーリングモードがあります。

-自動回復で保護

-手動リカバリで保護

-保護されていない/非同期

保護対象は、ミラーサーバーでのトランザクションの受け入れの確認を待たずに、新しいトランザクションと新しいトランザクションを引き続きキューに入れるという点で、 非同期のものとは異なります。

自動回復で保護するには、自動回復のために3番目のサーバー(監視)を使用する必要があり、原則として、メインサーバーが機能しない場合に切り替えるアプリケーションでバックアップサーバーを指定できる場合にのみ役立ちます。 トラッキングサーバーとデータベースを操作するアプリケーションを情報スペースに注入することは残念でしたので、独立して切り替える機会もありませんでした。

手動リカバリを使用して保護モードで動作するようにデータベースを設定しました。



これは良いTechNetチュートリアルです。

そして、この写真では、GUIを使用してそれを行う方法を示しています。



パート1.サーバー通信の構成。

サーバーを相互に接続するには、両方のマシンでチェックポイントが作成され、接続用のポートが開かれ、ユーザー、証明書などが作成されます。

コントロールポイントを作成してみましょう。認証には、MS SQLサーバーによって生成された証明書を使用します(他の証明書も使用できます)。



1.メインサーバーで証明書を作成し、 D:\ Certsパックに保存します

USE MASTER

GO

IF NOT EXISTS(SELECT 1 FROM sys.symmetric_keys where name = '##MS_DatabaseMasterKey##')

CREATE MASTER KEY ENCRYPTION BY PASSWORD = ' '

GO

IF NOT EXISTS (select 1 from sys.databases where [is_master_key_encrypted_by_server] = 1)

ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY

GO

IF NOT EXISTS (SELECT 1 FROM sys.certificates WHERE name = 'PrincipalServerCert')

CREATE CERTIFICATE PrincipalServerCert

WITH SUBJECT = 'Principal Server Certificate',

START_DATE = '08/15/2011',

EXPIRY_DATE = '08/15/2021';

GO

BACKUP CERTIFICATE PrincipalServerCert TO FILE = 'D:\Certs\PrincipalServerCert.cer'









2.コアサーバーにDBMirrorEndPointブレークポイントを作成します。

USE MASTER

GO

IF NOT EXISTS(SELECT * FROM sys.endpoints WHERE type = 4)

CREATE ENDPOINT DBMirrorEndPoint

STATE = STARTED AS TCP (LISTENER_PORT = 5022)

FOR DATABASE_MIRRORING ( AUTHENTICATION = CERTIFICATE PrincipalServerCert, ENCRYPTION = REQUIRED

,ROLE = ALL

)








3.メインと同様に、ミラー上に証明書とブレークポイントDBMirrorEndPointを作成します。

USE MASTER

GO

IF NOT EXISTS(SELECT 1 FROM sys.symmetric_keys where name = '##MS_DatabaseMasterKey##')

CREATE MASTER KEY ENCRYPTION BY PASSWORD = ' '

GO

IF NOT EXISTS (select 1 from sys.databases where [is_master_key_encrypted_by_server] = 1)

ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY

GO

IF NOT EXISTS (SELECT 1 FROM sys.certificates WHERE name = 'MirrorServerCert')

CREATE CERTIFICATE MirrorServerCert

WITH SUBJECT = 'Mirror Server Certificate',

START_DATE = '08/15/2011',

EXPIRY_DATE = '08/15/2021';

GO

BACKUP CERTIFICATE MirrorServerCert TO FILE = 'D:\Certs\MirrorServerCert.cer'



IF NOT EXISTS(SELECT * FROM sys.endpoints WHERE type = 4)

CREATE ENDPOINT DBMirrorEndPoint

STATE=STARTED AS TCP (LISTENER_PORT = 5023)

FOR DATABASE_MIRRORING ( AUTHENTICATION = CERTIFICATE MirrorServerCert, ENCRYPTION = REQUIRED

,ROLE = ALL

)









作成した証明書とマイルストーン。 サーバーが相互に通信できるようになったので、各サーバーでアカウントを作成し、それらを証明書にバインドする必要があります。



4. 1つのサーバーから別のサーバーに証明書をコピーして、2つの証明書がD:\ Certsフォルダーにあるようにします。





5.メインサーバーでMirrorServerUserユーザーを作成します。このユーザーは、ミラーサーバーから生成およびコピーされたMirrorDBCertPub証明書に関連付けられています。

USE MASTER

GO

IF NOT EXISTS(SELECT 1 FROM sys.syslogins WHERE name = 'MirrorServerUser')

CREATE LOGIN MirrorServerUser WITH PASSWORD = '2'

IF NOT EXISTS(SELECT 1 FROM sys.sysusers WHERE name = 'MirrorServerUser')

CREATE USER MirrorServerUser;

IF NOT EXISTS(SELECT 1 FROM sys.certificates WHERE name = 'MirrorDBCertPub')

CREATE CERTIFICATE MirrorDBCertPub AUTHORIZATION MirrorServerUser

FROM FILE = 'D:\Certs\MirrorServerCert.cer'

GRANT CONNECT ON ENDPOINT::DBMirrorEndPoint TO MirrorServerUser

GO









6.バックアップサーバーでPrincipalServerUserユーザーを作成し、メインサーバーから生成およびコピーされたPrincipalDBCertPub証明書にユーザーをバインドします。

USE MASTER

GO

IF NOT EXISTS(SELECT 1 FROM sys.syslogins WHERE name = 'PrincipalServerUser')

CREATE LOGIN PrincipalServerUser WITH PASSWORD = '2'

IF NOT EXISTS(SELECT 1 FROM sys.sysusers WHERE name = 'PrincipalServerUser')

CREATE USER PrincipalServerUser;

IF NOT EXISTS(SELECT 1 FROM sys.certificates WHERE name = 'PrincipalDBCertPub')

CREATE CERTIFICATE PrincipalDBCertPub AUTHORIZATION PrincipalServerUser

FROM FILE = 'D:\Certs\PrincipalServerCert.cer'

GRANT CONNECT ON ENDPOINT::DBMirrorEndPoint TO PrincipalServerUser

GO








サーバー間の通信が構成されました!



パート2.データベースのセットアップ。

ここで、作業ベースからバックアップを削除し、 NORECOVERYモードでミラーサーバーでバックアップを取得し、ミラーリングモードを有効にする必要があります。

ミラーリングされたデータベースには、 完全復旧モデルが必要です。



1.バックアップ作業データベースを削除します。

BACKUP DATABASE [MIRROR_TEST] TO DISK = N'D:\MIRROR_TEST.bak'

WITH FORMAT, INIT, NAME = N'MIRROR_TEST-Full Database Backup',STATS = 10








2.ミラーに上げます(スクリプトは、バックアップファイルがディスクDのミラーサーバーに転送されたことを意味します)

RESTORE DATABASE [MIRROR_TEST]

FROM DISK = 'D:\MIRROR_TEST.bak' WITH NORECOVERY

,MOVE N'MIRROR_TEST' TO N'D:\MSSQL_DB\MIRROR_TEST.mdf'

,MOVE N'MIRROR_TEST_log' TO N'D:\MSSQL_DB\MIRROR_TEST_log.ldf'









3.ミラーサーバーでミラーリングを開始するには、次の手順を実行します。

ALTER DATABASE MIRROR_TEST SET PARTNER = 'TCP://MSSQLMAINSERV:5022'







4.次に、メインで:

ALTER DATABASE MIRROR_TEST SET PARTNER = 'TCP://MSSQLMIRRORSERV:5023'







次のようなエラーの場合:



The mirror database, “MIRROR_TEST”, has insufficient transaction log data to preserve the log backup chain of the principal database. This may happen if a log backup from the principal database has not been taken or has not been restored on the mirror database. (Microsoft SQL Server, Error: 1478)







または



The remote copy of database "DBmirrorTest" has not been rolled forward to a point in time that is encompassed in the local copy of the database log.







メインサーバー上のデータベースからログのバックアップを作成し、それをミラーに復元します(再びNORECOVERYモードになります)。

バックアップ:

BACKUP LOG MIRROR_TEST TO DISK = 'D:\MIRROR_TEST.trn'







回復:

RESTORE LOG MIRROR_TEST

FROM DISK = 'D:\MIRROR_TEST.trn' WITH NORECOVERY








パート3.障害からの回復。 役割を変更します。

データベースの右クリックGUI- タスク - ミラー - フェールオーバーまたはT-SQLコマンドを使用して、ミラーがメインロールとひげになるようにサーバーロールを変更できます。

ALTER DATABASE MIRROR_TEST SET PARTNER FAILOVER







ミラーベースがクラッシュした場合、メインのベースは保護されていないモードで動作し続けます(これはクライアントに影響しません)。 ミラーが再開されると、バックアップベースは自動的に接続し、メインベースに追いつきます。



メインベースがクラッシュした場合、バックアップを復元するには、強制リカバリを実行する必要があります

ALTER DATABASE MIRROR_TEST SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS







この場合、一部のデータが失われるリスクがあります(この点については、 ここで詳しく説明しています



強制復元を実行すると、ミラーベースがメインになり、復元後の前のメインベースが自動的にミラーベースになり、ミラーリングセッションを継続する許可が保留されます。 なぜ実行する必要があるのですか

ALTER DATABASE MIRROR_TEST SET PARTNER RESUME





それだけです! 作業中8-)



All Articles