2

現在、LIMS (Laboratory Information Management System) を Oracle から MS-SQL に移行していますが、特定の領域で問題が発生しています。本番、開発、およびテストの 3 つの個別のインスタンスを実行します。Prod インスタンスは、ラボで使用されるライブ インスタンスです。dev インスタンスは、新機能の開発に取り掛かる場所です。test インスタンスは、これらの新機能を本番環境にデプロイする前にテストする場所です。そのため、運用データベースを定期的に (バックアップ/復元を使用して) 他の 2 つのインスタンスにコピーし、オペレーターと同じ構成で作業できるようにしています。ただし、実稼働 DB には、開発/テスト インスタンスでは必要のない大量のアーカイブ データが含まれているため、これらのテーブルをバックアップに含めません。これにより、プロセスで数十分の時間を節約できます。Oracle は、バックアップに含めるテーブルを指定できるため、これに適しています。ただし、これは MS-SQL では不可能ですが、実行できることは、アクティブ テーブルとアーカイブ テーブルを異なるファイル グループに配置することです。これらは個別にバックアップできます。

PRIMARY ファイル グループのバックアップは正常に作成されましたが、復元に非常に苦労しています。コマンドは完了してもデータベースにアクセスできない場合があり、復元が完了していないというメッセージが表示されることもあります。それ以外の場合は、コマンドの実行を拒否するだけです。これはトランザクション ログに関連しているようですが、これで私の知識が広がります。

私が使用しているバックアップコマンドは次のとおりです。 BACKUP DATABASE production FILEGROUP='PRIMARY' TO DISK='C:\Temp\db.bak' WITH FORMAT,COPY_ONLY

私が試している復元コマンドは次のとおりです。 RESTORE DATABASE development FROM DISK='C:\Temp\db.bak' WITH REPLACE,NORECOVERY「バックアップセットには、既存の「開発」データベース以外のデータベースのバックアップが保持されています」と表示されます。

現時点では、ソースと宛先は SQL Server の同じインスタンスにありますが、将来的には完全に異なるマシン上にあり、直接接続されない可能性があります (そのため、何らかの種類のファイル転送を経由する必要があります)。どちらも完全復旧で構成されています。

同様の質問をいくつか見つけましたが、実際には役に立ちませんでした。これは、本番データベースのこの部分的なクローンを作成する合理的な方法ですか? 復元コマンドを必要に応じて機能させるにはどうすればよいですか?

4

2 に答える 2

2

あなたは正しい軌道に乗っていますが、完全復旧モデルであるため、末尾のログもバックアップし、ファイル グループの最後のバックアップ以降のログ ファイルを復元する必要があります。ログ バックアップが頻繁に行われない (1 時間ごとなど) 場合は、ファイル グループを復元した後に末尾のログ バックアップを取得して、この 1 つのログ ファイルを復元するだけで済みます。また、restore コマンドにWITH PARTIALとを追加する必要があります。FILEGROUP = 'PRIMARY'

次のようになります。

BACKUP DATABASE production FILEGROUP='PRIMARY' TO DISK='C:\Temp\db.bak' WITH FORMAT
GO

BACKUP LOG productionLog TO DISK 'C:\Temp\tail.trn'
GO

RESTORE DATABASE development FILEGROUP = 'Primary' FROM DISK='C:\Temp\db.bak' WITH PARTIAL,NORECOVERY
RESTORE LOG FROM DISK 'C:\Temp\tail.trn' WITH RECOVERY
于 2018-07-25T05:02:54.543 に答える