【问题标题】:Filename with varing date and time for restore database用于还原数据库的具有可变日期和时间的文件名
【发布时间】:2018-08-08 11:48:34
【问题描述】:

我正在尝试获取一个每日 .bak 文件,该文件具有静态名称,但文件名中的日期和时间戳格式为“Filename_yyyyMMdd_hhmm.bak”。

如果我手动输入时间来匹配文件,我创建的脚本可以工作,但是当我尝试自动化它时,它不会工作,因为生成文件时时间会改变(通常只有几分钟的时间。

有人可以帮助解决这个问题吗?

    DECLARE @BackupFile varchar(1000)

    SELECT @BackupFile = SELECT '\NETWORKLOCATION\FILENAME_' + FORMAT(CAST(GETDATE()  AS date),'yyyyMMdd') + '_HHmm.bak')

    RESTORE DATABASE [Test]
    FROM DISK = @BackupFile
    WITH REPLACE

我正在使用 SQL Server。

【问题讨论】:

  • 您无需将GETDATE() 转换为日期。不过,这个问题令人困惑——您没有指定 time ,因此您无法从任何包含时间元素的文件中恢复。如果不指定时间,你将如何确定当天恢复哪个文件?
  • 请说明您想做什么,而不是您认为可以如何完成。如果一天有 5 个备份,您要恢复哪一个? 恢复也不是盲目的。您是否正在使用备份作为复制数据库的一种方式?为什么不创建一个脚本,将数据库备份到一个特定文件中,然后将它从该文件恢复到另一个服务器?
  • 您好 Panagiotis - 感谢您的回复。我们每天早上从一家外部公司收到一个文件,该文件进入一个包含大约 4 天文件的文件夹,所以我试图将最新文件拉入数据库。我可以得到文件的正确日期(因为最新的总是今天),但是因为文件的生成时间也在文件名中,而且这可能会有所不同,我似乎无法将时间写入脚本。
  • 尝试 sp_DatabaseRestore。在尝试恢复之前,它会列出并解析文件名以找到最新的文件名。我复制了在我的答案中显示文件列表是如何生成的 sn-p。特定数据库名称的 最新 文件是具有 MAX() 文件名的文件
  • 谢谢 - 我会试一试。我对这一切都很陌生,所以只是想弄清楚这一切。

标签: sql-server database datetime filenames restore


【解决方案1】:

T-SQL 在文件 处理方面非常有限。对于复杂的任务,最好使用像 Ola Hallengren 的 Backup script 和 Brent Ozar 的 sp_DatabaseRestore 这样的脚本。

Ola Hallengren 的脚本可以通过验证、清理等备份一个或多个数据库。声明:

EXECUTE dbo.DatabaseBackup
@Databases = 'USER_DATABASES',
@Directory = 'C:\Backup',
@BackupType = 'FULL',
@Verify = 'Y',
@Compress = 'Y',
@CheckSum = 'Y',
@CleanupTime = 24

将查找所有用户数据库,在 c:\Backup 中创建完整备份,其名称格式为:

SERVER_DATABASE_FULL_YYYYMMDD_hhmmss.bak

它还将验证备份并清理旧备份

Brent Ozar 的脚本自动恢复使用 Ola Hallengren 的命名约定创建的备份。

此调用将恢复数据库LogShipMe 的最新完整备份:

EXEC dbo.sp_DatabaseRestore 
  @Database = 'LogShipMe', 
  @BackupPathFull = 'D:\Backup\SQL2016PROD1A\LogShipMe\FULL\', 
  @BackupPathLog = 'D:\Backup\SQL2016PROD1A\LogShipMe\LOG\', 
  @ContinueLogs = 0, 
  @RunRecovery = 1;

如果你查看sp_DatabaseRestore 的源代码,你会发现你真的不想自己写这个。使用以下方式检索文件:

SET @cmd = N'DIR /b "' + @BackupPathFull + N'"';

INSERT INTO @FileList (BackupFile)
EXEC master.sys.xp_cmdshell @cmd; 

这会将所有文件放入一个表变量中,以便对其进行过滤、排序等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-17
    • 2021-07-22
    • 1970-01-01
    • 2015-10-20
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多