2017-11-15 7 views
-4

最新のSQL Serverバックアップをターゲットサーバーにプログラムで復元するにはどうすればよいですか?最新のバックアップをプログラムによって復元するにはどうすればよいですか?

我々は混在環境、アズールとオンプレムを持っていると我々は、我々はレポートを実行するために使用上のプレムSQL Serverに復元するバックアップのAzureでSQLデータベースを必要としています。

Azureの環境では

我々は生産のSQL Serverを持っていると我々はバックアップ1特定のデータベースには、Azureのブロブストレージに、これは深夜に毎日行われます。

バックアップファイル形式はdatabasename_year-month-day.bakです。データベースの名前はscupsです。したがって、バックアップの名前はscups_2017-11-14.bak,scups_2017-11-15.bakなどです。バックアップのサイズは約35GBで、数分で完了します。

オンプレム環境:

がオンプレムSQL ServerのReporting ServicesがAZcopy(アズールのPowerShell)とSQLのバックアップを実行する上

、WindowsのタスクスケジューラがそのローカルディスクにAzureのブロブストレージからダウンロードされ、このプロセスは1から始まります:45 AM、データベースは1時間以内にダウンロードされます。 5:00で

は、当社のオンプレムレポートサーバー上でリストアジョブをSQL Serverエージェント経由で呼び出され、これは、レポートを実行する人々によって使用される準備ができて、データベースを復元しています。

このプロセスが動作しますが、問題は、現在、我々は、データベースのバックアップの正しい日付が復元されるように、毎晩SQL Serverジョブを変更する必要があり、です。

したがって、特定のファイルを含めるようにSQL Serverジョブを変更する必要があります。たとえば、scups_2017-11-15.bakscups_2017-11-16.bakに置き換え、11/16からの最新のデータベースバックアップを復元する必要があります。

スクリプトを修正して、毎朝最新のバックアップを復元するにはどうすればよいですか? そして、このプロセスを自動化する良い方法がありますか?

私はどんな提案もありがとう。

これが私たちのSQL Serverジョブである:

USE MASTER 
GO 

ALTER DATABASE scups 
SET multi_user WITH ROLLBACK IMMEDIATE 
GO 

-- Now put it into single user mode and drop it. Use Rollback Immediate to disconnect any -- sessions and rollback their transactions. Safe since you are about to drop the DB. 
ALTER DATABASE scups 
SET SINGLE_USER WITH ROLLBACK IMMEDIATE 
GO 

DROP DATABASE scups 
GO 
--pause sleep 2 minutes 

USE master 

RESTORE DATABASE [scups] 
FILE = N'scups_Data', 
FILE = N'ftrow_fulltext_catalog', 
FILE = N'ftrow_CourseForumEntries' 
FROM DISK = N'C:\download\ScupsFullBackup\scups_2017-11-14.bak' 
WITH FILE = 1, 
MOVE N'scups_Data' TO N'U:\data\scups.mdf', 
MOVE N'ftrow_fulltext_catalog' TO N'U:\data\scups1.ndf', 
MOVE N'ftrow_CourseForumEntries' TO N'U:\data\scups2.ndf', 
MOVE N'scups_Log' TO N'L:\logs\scups_log.ldf', 
RECOVERY, REPLACE, STATS = 10 
+0

一つの可能​​性は、 'mklink'のようなWindowsツールを使用して、最新のバックアップファイルに*シンボリックリンク*を作成することです。こうすることで、バックアップジョブの*ターゲット*は常に同じになります。 'scups_latest.bak'は実際の最新の' .bak'ファイルへのシンボリックリンクになります。 MKLINKを使用すると、シンボリックリンクのバッチファイルを作成することができます –

答えて

0

バックアップファイルの名前は唯一の変数であると仮定すると、あなたはこのような何かを行うことができるはず:

use maintdb; 
go 

create procedure dbo.restoreScups(@backupFile varchar(4000)) 
as 
begin 
ALTER DATABASE scups 
SET multi_user WITH ROLLBACK IMMEDIATE 
GO 

-- Now put it into single user mode and drop it. Use Rollback Immediate to disconnect any -- sessions and rollback their transactions. Safe since you are about to drop the DB. 
ALTER DATABASE scups 
SET SINGLE_USER WITH ROLLBACK IMMEDIATE 
GO 

DROP DATABASE scups 
GO 
--pause sleep 2 minutes 

USE master 

RESTORE DATABASE [scups] 
FILE = N'scups_Data', 
FILE = N'ftrow_fulltext_catalog', 
FILE = N'ftrow_CourseForumEntries' 
FROM DISK = @backupfile 
WITH FILE = 1, 
MOVE N'scups_Data' TO N'U:\data\scups.mdf', 
MOVE N'ftrow_fulltext_catalog' TO N'U:\data\scups1.ndf', 
MOVE N'ftrow_CourseForumEntries' TO N'U:\data\scups2.ndf', 
MOVE N'scups_Log' TO N'L:\logs\scups_log.ldf', 
RECOVERY, REPLACE, STATS = 10; 

end 

その後、あなたはこのようなPowerShellのようなものから、このプロシージャを呼び出すことができます。 $クエリ= @」 のexec maintdb.dbo.restoreScups @backupFile = 'C:\ダウンロード\ ScupsFullBackup \ scups_2017-11-14.bak' を。 @」

invoke-sqlcmd -ServerInstance yourServer -Query $query; 
+0

ありがとうございます!それは間違いなく私がやろうとしていることです! – iglonius

関連する問題