Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 文件名,包含用于还原数据库的可变日期和时间_Sql Server_Database_Datetime_Filenames_Restore - Fatal编程技术网

Sql server 文件名,包含用于还原数据库的可变日期和时间

Sql server 文件名,包含用于还原数据库的可变日期和时间,sql-server,database,datetime,filenames,restore,Sql Server,Database,Datetime,Filenames,Restore,我正在尝试获取一个daily.bak文件,该文件名中有一个静态名称,但有一个日期和时间戳,格式为“Filename_yyyyMMdd_hhmm.bak” 如果我手动输入匹配文件的时间,我创建的脚本就可以工作,但当我尝试将其自动化时,它不会工作,因为生成文件时时间可能会发生变化(通常只需几分钟) 有人能帮忙纠正这个问题吗 DECLARE @BackupFile varchar(1000) SELECT @BackupFile = SELECT '\NETWORKLOCATION\

我正在尝试获取一个daily.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。

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

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; 

它将所有文件放入一个表变量中,以便对其进行筛选、排序等。

您不需要强制转换
GETDATE()
到一个日期。但问题令人困惑-您没有指定时间,因此无法从任何包含时间元素的文件中还原。如果您没有指定时间,您将如何确定当天要还原的文件?请解释您想做什么,而不是您认为可以如何做。如果一天有5个备份,是哪一个是否要还原?还原也不应该盲目进行。您是否使用备份作为复制数据库的一种方式?为什么不创建一个脚本,将数据库备份到特定文件中,然后将其从该文件还原到另一台服务器?嗨,Panagiotis-感谢您的回复。我们从外部服务器收到一个文件这家公司每天早上都会进入一个文件夹,其中包含大约4天的文件,因此我尝试将最新的文件拉入数据库。我可以得到文件的正确日期(因为最新的文件总是今天)但是,由于文件生成的时间也在文件名中,而且可能会有所不同,因此我似乎无法在脚本中输入时间。请尝试sp_DatabaseRestore。在尝试还原之前,它会列出并解析文件名以查找最新的文件名。我复制了在回答中显示如何生成文件列表的代码段。最新的文件是针对某个规范的fic数据库名称是带有
MAX()
filename的名称谢谢-我会尝试一下。我对这一切都很陌生,所以我只是想了解一下。