問題点

この記事では、Microsoft SQL Serverデータベースをバックアップおよびリカバリする方法の概略を紹介します。データベースのバックアップおよびリカバリに関する特定の機能について技術的に詳しく解説するためのものではありません。データベース管理者が、LiveCycle ESのために信頼性の高いデータベースバックアップ戦略を作成する際に必要となる、SQL Serverの基本的なコマンドを解説することを目的としています。

注意:LiveCycle ESの実装における他の要素と同様に、バックアップとリカバリの戦略を実運用環境で使用する前に、開発環境またはステージング環境で開発テストして、データの損失を招くことなくソリューション全体が期待どおり動作することを確認してください。

SQL Serverデータベースのドキュメント

この記事では、上記の作業を行うために必要な手順の概要を示します。詳細については、データベースに付属しているメーカーのドキュメントを参照するか、www.msdn.microsoft.comを参照してください。

SQL Serverのバックアップ

データベースのバックアップは、定期的に実行する必要があります。また、新しいデータベースやインデックスの作成後またはログに記録されないある種の操作の実行時にも行う必要があります。

· データベースのフルバックアップ - データベース全体をバックアップします。

バックアップの方法には何種類かありますが、それぞれの方法には固有の長所と短所があります。使用するデータベースシステムの様々な面を考慮した上で、ご利用のLiveCycle ES環境に最適な方法を決定します。

バックアップ戦略の実装に必要な時間とリソースは、サイズとデータベース中のデータが更新される規模と頻度に依存します。LiveCycle ESのアプリケーションデータのフルバックアップが完了したら、定期的に実行するバックアップ方法として、次のどの方法を使用するか決める必要があります。

· 差分バックアップ - 前回の(フルまたは差分)バックアップ以降に更新されたデータだけをバックアップします。

· トランザクションログバックアップ - トランザクションログをバックアップします。

· ログ末尾のバックアップ - ログ末尾(またはアクティブなログ)をバックアップします。

· ミラー化されたバックアップ - データベースをミラーサイトにバックアップします。

システムデータのバックアップ

ユーザデータベース以外にも、システムデータをバックアップする必要があります。システムデータをバックアップしておくことで、例えばハードディスクのエラーなど、システムまたはデータベースの障害時にシステムを再構築できます。ベストプラクティスとして、システムデータベースとユーザデータベースとの混在を避け、独立したメンテナンス計画を作成することを推奨します。また、システムデータベースの中でも、masterは他のシステムデータベースとは独立にバックアップします。これは、masterデータベースはフルバックアップしかできないためです。

SQL Serverのシステムデータベースには、master、msdb、model、tempdbおよびdistributionがあります。これらのシステムデータベースを定期的にバックアップすることは重要ですが、tempdbシステムデータベースをバックアップする必要ありません。このデータベースは、SQL Serverの起動時に、毎回再構築されます。SQL Serverのシャットダウン時に、tempdb中のすべてのデータが、恒久的に削除されます。この理由により、tempdbデータベースには、どのようなアプリケーション固有のデータも保存することはできません。tempdbデータベースは、SQL Serverのみが使用できます。

modelデータベースは、modelデータベースをカスタマイズした場合にのみバックアップする必要があります。同様に、distributionデータベースも、そのサーバがレプリケーションディストリビュータとして構成されている場合にのみバックアップの対象となります。

前提

次のセクションにある手順では、データベース名が「adobe」で、ターゲットバックアップストレージディスクの場所が、「C:¥LCBackup¥MSSQL」であることを仮定しています。使用する環境が異なっている場合、必要に応じてコマンドを修正します。

LiveCycle ES SQL Serverデータベースをターゲットバックアップストレージディスクにバックアップするには、次のコマンドスクリプトが使用できます。すべてのコマンドは、SQL Serverのインストールディレクトリ(例:「C:¥Program Files¥Microsoft SQL Server¥90¥Tools¥Binn¥sqlcmd」)から実行される必要があります。

SQL Serverデータベースの構成

LiveCycle ESデータベースは、障害の発生時にポイントインタイムリカバリ(特定の時点にリカバリ)操作が実行できるように、フルリカバリ用に構成されている必要があります。次の一連のスクリプトは、フルリカバリモードに設定するためのものです。

USE master

GO

ALTER DATABASE adobe SET RECOVERY FULL WITH NO_WAIT

GO

ポイントインタイムリカバリ操作によるリカバリが必要ない場合、次のコマンドの1つを使用して、データベースを単純または一括ログモードに設定できます。

--単純に設定する--

USE master

GO

ALTER DATABASE adobe SET RECOVERY SIMPLE WITH NO_WAIT

GO

--一括ログに設定する--

USE master

GO

ALTER DATABASE adobe SET RECOVERY BULK_LOGGED WITH NO_WAIT

GO

データベースのフルバックアップ

この方法は、データベース全体をバックアップします。また、差分またはトランザクションログのバックアップをする前に実行する必要があります。

--リストアモードをフルに設定し、ポイントインタイムリカバリ操作を有効にするために1度だけ実行します--

USE master

GO

ALTER DATABASE adobe SET RECOVERY FULL WITH NO_WAIT

GO

--フルデータバックアップをするには、このスクリプトを毎日実行します--

BACKUP DATABASE adobe TO DISK=N'c:¥LCBackup¥MSSQL¥adobe_full.bak' WITH NOFORMAT, INIT, NAME=N'adobe-Full Database Backup', CHECKSUM

GO

--バックアップを検証するには、このスクリプトを毎日実行します--

RESTORE VERIFYONLY FROM DISK=N'C:¥LCBackup¥MSSQL¥adobe_full.bak'

GO

次のような結果が表示されます。

Changed database context to 'master'.

Processed 456 pages for database 'adobe', file 'adobe' on file 1.

Processed 1 pages for database 'adobe', file 'adobe_log' on file 1.

BACKUP DATABASE successfully processed 457 pages in 0.436 seconds (8.586

MB/sec).

The backup set on file 1 is valid.

差分バックアップ

差分データベースバックアップとは、前回のフルデータベースバックアップ以降のすべての変更を累積的に含んだ一連のバックアップのことです。前回の差分バックアップからの変更分ではありません。

-- adobeを差分バックアップとしてバックアップする

BACKUP DATABASE adobe TO DISK = N'c:¥LCBackup¥MSSQL¥adobe_diff.bak' WITH DIFFERENTIAL

GO

トランザクションログのバックアップ

注意:トランザクションログのバックアップは、「SQL Serverデータベースの構成」で説明した単純リカバリモデルでは実行できません。

2組のトランザクションログに、同一のトランザクションを記録することはできません。このため、バックアップのリストア順序は、バックアップしたときの順序と同じにします。

--adobeのトランザクションログをバックアップする

BACKUP LOG adobe TO DISK = N'c:¥LCBackup¥MSSQL¥adobeLog.bak'

GO

ログ末尾のバックアップ

ログ末尾のバックアップは、データベースをリカバリする時点での、最新のトランザクションログのバックアップです。この方法は、ポイントインタイムリストア操作に必要です。データファイル(MDF)が利用できない場合、以下に示すように、WITH NO_TRUNCATEを使用する必要があります。

-- adobeログ末尾のバックアップ

BACKUP LOG adobe TO DISK = N'c:¥LCBackup¥MSSQL¥adobeTailLog.bak' WITH NO_TRUNCATE

GO

データベースが、OFFLINEまたはEMERGENCYのいずれかの状態にある場合、ログ末尾のバックアップは実行できません。

ミラー化されたバックアップ

ミラー化されたバックアップは、バックアップを単純に複数の場所に書き込むので、バックアップメディアに問題がある場合でも、正常にリストアできる可能性が高くなります。1つのメディアセットに最大で4つのミラーに書き込めます。次のスクリプトは、2つの場所に書き込みます。

--1つ目のバックアップをd:ディスクに作成し、ミラーをe:ディスクに作成します。

BACKUP DATABASE adobe

--メディアファミリー1

TO DISK = 'd:¥LCBackup¥MSSQL¥adobeMirror_1.bak'

MIRROR

--メディアファミリー1

TO DISK = 'e:¥LCBackup¥MSSQL¥adobeMirror_2.bak'

--ミラー化されたバックアップセットを新規に作成する

WITH FORMAT;

GO

SQL Serverデータベースのリカバリ

データベースのバックアップ時に使用した方法に応じて、リカバリプロセスにも、次の2種類の異なるアプローチがあります。

· 単純なリカバリ - データベースの前回のフルバックアップのみをリストアします。

· フルリカバリ - フル、差分、トランザクションログを含むすべてのバックアップをリストアします。

単純リカバリ

次のコマンドは、前回フルバックアップが実行された時点までデータベースをリストアする方法を示しています。

RESTORE DATABASE adobe FROM DISK = N'C:¥LCBackup¥MSSQL¥adobe_full.bak' WITH FILE=1, RECOVERY

GO

注意:上のスクリプトでRECOVERYを使用している箇所は、データベースが既に存在しないということを前提にしています。データベースが存在する場合は、代わりにREPLACEを使用します(SQL Serverのドキュメントを参照してください)。

フルリカバリ

複数のバックアップがある場合、それらのバックアップをすべて、バックアップしたときと同じ順序でリストアする必要があります。タスクの実行順序は次のとおりです。

注意:複数のトランザクションログを適用するには、最後のものを除いて、すべてのリストア操作にNORECOVERYオプションを使用します。

1. NORECOVERYを指定しないでフルバックアップからデータベースをリストアします。

2. NORECOVERYを指定して、差分バックアップからデータベースをリストアします。

3. NORECOVERYを指定してトランザクションログをリストアします(すべてのログのバックアップについて繰り返します)。

4. データベースをRECOVERYを指定してリストアします。

RESTORE DATABASE adobe FROM DISK = N'C:¥LCBackup¥MSSQL¥adobe_full.bak' WITH FILE=1, NORECOVERY

RESTORE DATABASE adobe FROM DISK = N'C:¥LCBackup¥MSSQL¥adobe_diff.bak WITH FILE=1, NORECOVERY

RESTORE LOG adobe FROM DISK = N'C:¥LCBackup¥MSSQL¥adobe_log.bak WITH FILE=1, RECOVERY

GO

特定の時点までデータベースをリストアする

データベースを、ある特定の時点、マークまたはログシーケンス番号(LSN)まで、リカバリおよびリストアできます。例えば、トランザクションにより一部のデータが誤って変更された場合、不正なデータが入力される前の時点まで、データベースをリストアすることが必要になる場合があります。データベースのリカバリポイントを指定したリカバリは、ポイントインタイムリストアと呼ばれています。

ポイントインタイムリストアのリカバリポイントは、通常、トランザクションログバックアップ内に存在します。これは、ポイントインタイムリストアシーケンスで使用された最後のバックアップです。このログバックアップを適用する場合、リカバリできるのは、STOPAT句、SOTPAMARK句またはSTOPBEFOREMARK句のいずれかでターゲットリカバリポイントとして指定されている時点より以前のトランザクションです。リカバリが完了すると、データベースの時刻が最初のファイルのリカバリポイントにより決定されます。さらにリストアを行う必要がある場合、各時点でのデータベースに対応するリストアポイントが存在している必要があります。

ターゲットリカバリポイントを指定するには、次のいずれかを使用します。

· トランザクションログ内の特定の時点(ここで説明したもの)

· トランザクションレコードに挿入された名前付きマーク

· ログシーケンス番号(LSN)

RESTORE DATABASE adobe FROM DISK = N'C:¥LCBackup¥MSSQL¥adobe.bak' WITH FILE=1, NORECOVERY

GO

RESTORE LOG adobe FROM DISK = N'C:¥LCBackup¥MSSQL¥adobe_log.bak WITH FILE=1, RECOVERY, STOPAT = N'01/14/2008 10:07:53'

GO

その他のリソース

このセクションでは、データベースの管理とバックアップ作業に関係のある記事について紹介します。

注意:ここに記載されている外部のWebサイトは、この記事の発行時点で有効だったものです。

SQL Serverのドキュメント

MicrosoftのWebサイトの1つ、「Microsoft Developer Network」には、優れたリファレンスガイドがいくつかあります。このサイトから以下のドキュメントや記事を検索できます。

· SQL Server 2005のドキュメント

· 「SQL Server Management Studioの概要」

· 「SQL Serverにおける自動拡張および自動圧縮の構成に関する注意事項」(文書番号315512)

· 「SQL Serverを実行しているコンピュータでトランザクションログのサイズが予期せず増大する、またはログがいっぱいになる」(文書番号317375)

参考文献

· 『SQL Server administration best practices』

· 『BACKUP and RESTORE in SQL Server -- Full Backups』www.sqlteam.com

· 『Selecting a SQL Server recovery model』http://searchsqlserver.com

Windows Server用Ntbackupに関する参考文献

· Windows Server用Ntbackupコマンドリファレンス

· 『Utilizing the Built-in Windows Backup (ntbackup.exe) for Windows』www.fishbrains.com

本作品は Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License によってライセンス許可を受けています。  Twitter™ および Facebook の投稿には、Creative Commons の規約内容は適用されません。

法律上の注意   |   プライバシーポリシー