データベースSQL Server 2012をミラーリングできません


11

次のコマンドを使用してデータベースをミラーリングしようとした場合

ALTER AVAILABILITY GROUP SQLAlwaysonGroup ADD DATABASE test0916aj8CJ

次のエラーが表示されます

メッセージ1475、レベル16、状態105、行1
データベース「test0916aj8CJ」には、バックアップされていない一括ログ変更が含まれている場合があります。プリンシパルデータベースまたはプライマリデータベースでログバックアップを作成します。次に、このバックアップをミラーデータベースで復元してデータベースミラーリングを有効にするか、すべてのセカンダリデータベースで復元して、可用性グループに参加できるようにします。

データベースをバッキングせずにこれを実行できますか?または、バックアップしてからバックアップを破棄する必要があります。新しく作成されたデータベース用なので、この時点ではバックアップは必要ありません。

私は以下を試しました...

BACKUP
DATABASE [test0916aj8CJ] TO DISK = NNUL
WITH COPY_ONLY, NOFORMAT, INIT,
NAME = Ntest-Full Database Backup’,
SKIP, NOREWIND, NOUNLOAD
GO

しかし、上記の方法も機能しませんでした。

ありがとう


いくつかのこと...実際にそのコマンドでミラーリングしているのではなく、データベースを可用性グループに追加しています。次に、AGのセットアップ方法、データベースの回復モード、およびログの問題を修正するために、COPY_ONLYバックアップを実行して、ログに影響を与えずにログをそのまま残している理由を尋ねます。 ?あなたにはいくつかのステップがないか、あなたが何をしようとしているのか非常に混乱しているように思えます。
Steve Mangiameli、2015

回答:


15

あなたが得たエラーを再現するのは簡単です

  • プライマリで完全復旧モードでデータベースを作成します。
  • セカンダリで完全復旧モードでデータベースを作成します。
  • GUIを起動し、プライマリとセカンダリ間のミラーリングを構成してみます。

以下はあなたが得るエラーです:

データベース「test_mirroring_kin」には、バックアップされていない一括ログ変更が含まれている可能性があります。プリンシパルデータベースまたはプライマリデータベースでログバックアップを作成します。次に、このバックアップをミラーデータベースで復元してデータベースミラーリングを有効にするか、すべてのセカンダリデータベースで復元して、可用性グループに参加できるようにします。(Microsoft SQL Server、エラー:1475)

ここに画像の説明を入力してください

そのエラーが何であるかを理解しましょう:

データベースを完全復旧モードで構成し、データベースが実際に完全復旧モードであると考えています。

上記は当てはまりません。データベースを作成した後、完全バックアップを実行しない場合、データベースが完全復旧モードであっても、疑似SIMPLE復旧になります。

dbcc dbinfo-> dbi_dbbackupLSNを使用する0:0:0(0x00000000:00000000:0000)、Paul Randalのスクリプトを使用して、簡単に確認できます。

dbcc traceon (3604)
go
dbcc dbinfo('test_mirroring_kin') with tableresults
go
dbcc traceoff (3604)

ここに画像の説明を入力してください

編集:COPY_ONLYオプションで最初の完全バックアップを作成しても、バックアップチェーンは確立されません

backup database test_mirroring_kin
to disk = 'D:\test_mirroring_kin_FULL.bak'
with init, stats=10, COPY_ONLY

dbcc dbinfo->のdbi_dbbackupLSN値はまだ残っています0:0:0(0x00000000:00000000:0000)。これは、データベースがまだ疑似単純復旧モードであることを意味します。

上記のエラーを解決するために何をする必要がありますか?

プライマリで完全バックアップ+ 1つのトランザクションログバックアップを取得し、それをセカンダリデータベースで復元してからwith norecovery、データベースをAGグループまたはミラーリングに参加させる必要があります。

注意点として万全を期すために、スクリプトの占いのためにbackup to NULゲイルショーで、このブログの記事をお読みください。


5

なんでTO DISK = N’NUL’

あなたが使用している理由がわかりませんTO DISK = N’NUL’

BACKUP
DATABASE [test0916aj8CJ] TO DISK = NNUL

その場合、バックアップはに保存されNUL(= = nowhere / nothing)、ファイルが存在しないため使用できません。

ながらNULもLOGバックアップ先として使用することができ、それはログが失われてしまうので、特に製品版のサーバー上で、いずれかを使用すべきではないとバックアップチェーンが切断されます。(〜に似ていますSHRINKFILE

ログのバックアップ

グループにDBを追加する前に、それを準備する必要があります。セカンダリDBを準備する場合、少なくとも1つのトランザクションログバックアップを作成して復元する必要があります。ミラーはこれを使用して、セカンダリデータベースで既に同期されているトランザクションと、プライマリデータベースとまだ同期されていないトランザクションを特定します。

したがって、プライマリDBでトランザクションログをバックアップする必要があります。

BACKUP LOG [test0916aj8CJ] TO  DISK = N'....bak' 
WITH  COPY_ONLY, FORMAT, INIT,  NAME = N'test0916aj8CJ-Transaction Log  Backup', STATS = 10

COPY_ONLYオプションを使用する必要があります。LOGバックアップの最後にログが切り捨てられないようにします。

プライマリDBバックアップチェーン

ただし、ログバックアップだけを復元することはできません。つまり、バックアップチェーンがない場合は復元できません(Kinの回答も参照)。つまり、完全なデータベースバックアップ(および必要に応じてオプションの差分)が作成された後に、トランザクションログのバックアップを作成する必要があります。

このCOPY_ONLYオプションはバックアップチェーンを壊さないため、バックアップチェーンも作成されません。このCOPY_ONLYオプションは、データベースのバックアップには使用できません。

順番にバックアップ:

  • COPY_ONLYオプションなしのフルデータベースバックアップ
  • オプションの差分バックアップ
  • COPY_ONLYオプション付きの1ログバックアップ
  • 必要に応じて別の(またはそれ以上の)LOGバックアップ...

セカンダリDBを復元する

次に、データベースバックアップをセカンダリで復元(+差分)する必要があります。

NORECOVERYフルバックアップが復元されたら、ログバックアップも復元するため、オプションで復元する必要があります。

最後に、LOGバックアップを復元します。NORECOVERYミラーはトランザクションを所定の場所に一度復元し続けるため、このオプションを使用する必要があります。

  • NORECOVERYオプションで完全バックアップを復元します
  • NORECOVERYオプションでDIFFバックアップを復元する
  • NORECOVERYオプションを使用してすべてのLOGバックアップを順番に復元する

まとめてみましょう(環境に合わせてください)

  • プライマリサーバーで次を実行します。

    USE master
    Go
    BACKUP DATABASE [test0916aj8CJ] TO DISK = N'....bak'
    WITH FORMAT, INIT, NAME = N'test0916aj8CJ-Full Database Backup', STATS = 10
    GO
    BACKUP LOG [test0916aj8CJ] TO DISK = N'....bak' 
    WITH COPY_ONLY, FORMAT, INIT, NAME = N'test0916aj8CJ-Transaction Log Backup', STATS = 10
    GO
  • セカンダリサーバーで次を実行します。

    USE master
    Go
    RESTORE DATABASE [test0916aj8CJ] FROM DISK = N'....bak' 
    WITH FILE = 1, NORECOVERY, NOUNLOAD, REPLACE, STATS = 10
    GO
    RESTORE LOG [test0916aj8CJ] FROM DISK = N'....bak' 
    WITH FILE = 1, NORECOVERY, NOUNLOAD, STATS = 10
  • 次に、新しいセカンダリDBを可用性グループに追加します...

オプションのアクション

  • DISKオプションは、プライマリサーバーとセカンダリサーバーの両方から利用できる共有フォルダーに設定することをお勧めします。
  • また、プライマリサーバーとセカンダリサーバーの両方で、同様のディスクと場所にDBファイルを保存することをお勧めします。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.