データベース バックアップ ファイル .bak をサーバーに復元したいのですが、タイムスタンプが異なる .bak ファイルがいくつかあります。たとえば、次のようになります。
dbname_backup_201210290200.bak
dbname_backup_201210300212.bak
dbname_backup_201210310213.bak
データベース バックアップ ファイル .bak をサーバーに復元したいのですが、タイムスタンプが異なる .bak ファイルがいくつかあります。たとえば、次のようになります。
dbname_backup_201210290200.bak
dbname_backup_201210300212.bak
dbname_backup_201210310213.bak
xp_cmdshellが有効で、すべてのファイルがyyyyMMddhhmm.bakで終わると仮定します。
CREATE TABLE #x(n VARCHAR(2048));
DECLARE @cmd VARCHAR(2048), @fn VARCHAR(2048), @folder VARCHAR(255);
SET @folder = 'E:\sqlbackup\MerchantAPIReport\'; --'
SET @cmd = 'dir /b "' + @folder + 'MerchantAPIReport_backup_*.bak"';
INSERT #x EXEC master..xp_cmdshell @cmd;
SELECT TOP (1) @fn = @folder + n
FROM #x
ORDER BY CONVERT(DATETIME,
STUFF(STUFF(LEFT(RIGHT(n, 16), 12), 11, 0, ':'), 9, 0, ' '))
DESC;
-- whatever you do, don't try to construct this yourself.
-- I'll fill in the blanks for you. <sigh>
RESTORE DATABASE [MerchantAPIReport] FROM DISK = @fn
WITH FILE = 1,
MOVE N'MerchantAPIReport' TO N'D:\SQLData01\MerchantAPIReport.mdf',
MOVE N'MerchantAPIReport_log' TO N'F:\SQLLog\MerchantAPIReport.ldf',
NOUNLOAD, REPLACE, STATS = 10;
-- RESTORE DATABASE ... FROM @fn ...; -- fill in the rest here
DROP TABLE #x;