【问题标题】:Restore database from backup file, where file name matches reg expression从备份文件恢复数据库,其中文件名匹配正则表达式
【发布时间】:2012-08-08 23:24:31
【问题描述】:

我正在使用 SQL Server / T-SQL 执行以下操作:

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

但我希望能够使用忽略备份文件中文件名中的数字(代表日期)的文件位置。永远只有一个'MY_LIVE_****.bak',但它的数字字符串每天都会改变。

目标是每周使用最新的备份从实时恢复我的 UAT 实例 - 其中只有与该字符串前缀匹配的文件,但数字/日期每周都会更改。

【问题讨论】:

标签: sql sql-server tsql backup


【解决方案1】:

您可以使用xp_cmdshell 为您的文件创建目录。但是请注意,xp_cmdshell 通常被禁用是有充分理由的。鉴于这是 UAT,这可能不是问题。

查看更多http://www.sqlusa.com/bestpractices2005/dir/

【讨论】:

  • 我将如何使用它来忽略我文件名中不断变化的数字
  • 您将发出命令dir e:\databases\backup\*.bak 并将结果放入您的restore database 命令中。
【解决方案2】:
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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多