2012-08-08 36 views
1

我做了使用SQL Server/T-SQL如下恢復數據庫:從備份文件,在文件名匹配reg表達式

RESTORE DATABASE UAT 
FROM DISK = 'E:\Databases\backup\MY_LIVE_20120720_070001.bak' 
WITH REPLACE 

但我希望能夠使用該忽略的數字文件位置在我的備份文件中的文件名(代表日期)。將只有一個'MY_LIVE_****.bak',但其數字字符串將改變每一天。

我們的目標是每週從實況中恢復我的UAT實例,使用最新的備份 - 其中只有與該字符串前綴匹配的文件,但數字/日期將每週更改。

+1

我想已經有一個解決方案: http://stackoverflow.com/questions/6101331/sql-to-get-most-recent-full -backup-file-for-a-specific-database-in-sql-server – psadac 2012-08-08 11:56:59

回答

1

您可以使用xp_cmdshell爲您的文件做一個目錄。但請注意,xp_cmdshell通常由於某些原因而被禁用。鑑於這是UAT,這可能不是問題。

在這裏看到更多http://www.sqlusa.com/bestpractices2005/dir/

+0

我怎麼用它來忽略我文件名中不斷變化的數字 – NimChimpsky 2012-08-08 11:32:12

+0

你會發出命令'dir e:\ databases \ backup \ *。bak'並將結果放入您的'restore database'命令。 – podiluska 2012-08-08 11:38:07

0
ALTER DATABASE UAT 
SET SINGLE_USER WITH 
ROLLBACK IMMEDIATE 

declare @fileName varchar(56); 

SELECT @filename = physical_device_name 
FROM msdb.dbo.backupmediafamily 
WHERE media_set_id =(
    SELECT TOP 1 media_set_id 
    FROM msdb.dbo.backupset 
    WHERE database_name='MY_LIVE' 
    ORDER BY backup_start_date DESC) 

ALTER DATABASE UAT 
SET SINGLE_USER WITH 
ROLLBACK IMMEDIATE 

----Restore Database 
RESTORE DATABASE UAT 
FROM DISK = @fileName 
WITH REPLACE 

/*If there is no error in statement before database will be in multiuser 
mode. 
If error occurs please execute following command it will convert 
database in multi user.*/ 
ALTER DATABASE ASLA_DEV SET MULTI_USER 
GO