我们有一个 SQL Server 2014 (build 12.0.24457.0) 数据库,里面有两个表,都是 FileStream 表,最大的有 2979466 行,SUM(cached_file_size)= 40564905472
.
我们已经尝试将这个数据库恢复到我们的测试服务器上,但是需要相当长的时间。我们的 DBA 在 14 天后放弃了。
有没有其他人尝试过使用 FileStream 表恢复数据库,其中包含更多文件?
我正在运行这个脚本来监控进度:
BEGIN TRY
DROP TABLE #h
END TRY
BEGIN CATCH
END CATCH
DECLARE @r INT=1, @percent_complete NUMERIC(9,2), @Extimated_Completion_Datetime DATETIME2(0)
CREATE TABLE #h ( start_time DATETIME2(0), percent_complete NUMERIC(9,2), Estimated_completion_time NUMERIC(9,2), HoursSinceStart NUMERIC(9,2), Extimated_Completion_Datetime DATETIME2(0), session_id INT, created_date datetime2(0))
DECLARE @d VARCHAR(19) , @e VARCHAR(max)
WHILE @r > 0 BEGIN
INSERT INTO #h
SELECT start_time, percent_complete, CAST(ROUND(estimated_completion_time/3600000.0,1) AS DECIMAL(9,1)) AS Estimated_completion_time
, CAST(ROUND(total_elapsed_time/3600000.0,1) AS DECIMAL(9,1)) AS HoursSinceStart
, DATEADD(HOUR, CAST(ROUND(estimated_completion_time/3600000.0,1) AS DECIMAL(9,1)), GETDATE()) AS Extimated_Completion_Datetime
, session_id
, GETDATE()
FROM
sys.dm_exec_requests AS r
WHERE
r.session_id <> @@SPID
AND r.session_id > 50
AND command LIKE 'restore database'
SELECT @r = @@ROWCOUNT
select top 1 @percent_complete=percent_complete, @Extimated_Completion_Datetime=Extimated_Completion_Datetime from #h ORDER BY created_date DESC
SET @d = CONVERT(VARCHAR(19), @Extimated_Completion_Datetime, 121)
SET @e = CONVERT(VARCHAR(19), GETDATE(), 121) + ' we are ' + LTRIM(@percent_complete) + '% complete. We estimate to finish at: ' + @d
RAISERROR('At %s ', 10, 1, @e) WITH NOWAIT
--WAITFOR DELAY '00:00:10'
WAITFOR DELAY '00:01:00'
END
到目前为止,我得到了这个结果:
在 2016-06-08 10:35:46,我们完成了 00.01%。 在 2016-06-08 14:22:46,我们完成了 39.26%。我们预计结束时间:2016-06-08 18:22:47 在 2016-06-08 14:23:46,我们完成了 39.27%。我们预计结束时间:2016-06-08 18:23:47 在 2016-06-08 14:24:46,我们完成了 39.28%。我们预计结束时间:2016-06-08 18:24:47 ... 在 2016-06-09 08:33:07,我们完成了 44.80%。我们预计结束时间:2016-06-10 09:33:08 在 2016-06-09 08:34:07,我们完成了 44.80%。我们预计结束时间:2016-06-10 09:34:08 在 2016-06-09 08:35:07,我们完成了 44.80%。我们预计结束时间:2016-06-10 09:35:08 在 2016-06-09 08:36:07,我们完成了 44.81%。我们预计结束时间:2016-06-10 09:36:08 在 2016-06-09 08:37:07,我们完成了 44.81%。我们预计结束时间:2016-06-10 09:37:08 在 2016-06-09 08:38:07,我们完成了 44.81%。我们预计结束时间:2016-06-10 09:38:08 在 2016-06-09 08:39:07,我们完成了 44.82%。我们预计结束时间:2016-06-10 09:39:08 ... 在 2016-06-10 08:12:01,我们完成了 47.86%。我们预计结束时间:2016-06-12 08:12:02 在 2016-06-10 08:13:01,我们完成了 47.86%。我们预计结束时间:2016-06-12 08:13:02
不完全快。它已在 13:45 内成功地从 42% 上升到 45%,因此按照目前的速度,它看起来将在 2016-06-27 13:45 或 18 天内完成。44 GB!
SELECT top 10000 resource_description AS resource_description, *
FROM sys.dm_os_waiting_tasks
WHERE session_id=64
说:
等待类型=
BACKUPTHREAD
...有时BACKUPIO
也是
所以我设置了另一个恢复来获取恢复消息:
DBCC TRACEON(3604, 3605, 3014);
RESTORE DATABASE [VDCFileStreamhespotest] FROM DISK = N'\\dkrdsvdcp19\MSSQL_Backup\Full\Misc\VDCFileStream_backup_2016_06_07_180004_7123139.bak' WITH FILE = 1,
NOUNLOAD, REPLACE, STATS = 1
, move 'VDCFileStream' to 'P:\MSSQL\DPA\System\MSSQL10_50.DPA\MSSQL\DATA\UserDBs\VDCFileStream\VDCFileStreamDBhespo.mdf'
, MOVE 'VDCFileStream_log' to 'P:\MSSQL\DPA\Log\Log02\VDCFileStream\VDCFileStreamDBhespo_log.ldf'
, MOVE 'VDCFileStreamF1' to 'G:\VDCFileStream\FileStreamDatahespo'
恢复(VDCFileStreamhespotest):RESTORE DATABASE 已启动 Restore(VDCFileStreamhespotest):打开备份集 Restore(VDCFileStreamhespotest):处理前导元数据 恢复(VDCFileStreamhespotest):计划开始 备份/恢复缓冲区配置参数 内存限制:32767 MB 缓冲区数:6 缓冲器组:2 最大传输大小:1024 KB 最小最大传输大小:1024 KB 总缓冲区空间:12 MB 表格数据设备数:1 全文数据设备数:0 文件流设备数:1 TXF 设备数:0 文件系统 i/o 对齐:512 媒体缓冲区数:6 媒体缓冲区大小:1024 KB 编码缓冲区数:6 Restore(VDCFileStreamhespotest): 有效选项:Checksum=1, Compression=1, Encryption=0, BufferCount=6, MaxTransferSize=1024 KB Restore(VDCFileStreamhespotest):规划完成 恢复(VDCFileStreamhespotest):开始离线恢复 恢复(VDCFileStreamhespotest):附加数据库为 DB_ID = 48 恢复(VDCFileStreamhespotest):准备容器 Restore(VDCFileStreamhespotest):容器准备就绪 Restore(VDCFileStreamhespotest):恢复备份集 恢复(VDCFileStreamhespotest):估计要传输的总大小 = 45540792320 字节 恢复(VDCFileStreamhespotest):传输数据 1% 已处理。
编辑:
我终于设法恢复了数据库。
当我们更改服务器上的一些设置时,只用了 124 分钟。
我在这里找到了设置:https: //support.microsoft.com/da-dk/kb/2160002
在这里https://technet.microsoft.com/en-us/library/cc778996.aspx
如果链接停止工作:在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem NtfsDisableLastAccessUpdate 和 NtfsDisable8dot3NameCreation 中应设置为 1
您正在尝试在服务器上使用 32GB 内存还原 45GB 数据库。
你可以做的是增加服务器上的内存(RAM)并玩
BUFFERCOUNT
,BLOCKSIZE
,MAXTRANSFERSIZE
backup 参数和INIT
&COMPRESSION
(你正在使用它,正如我从你的输出中看到的那样)来调整你的备份。截至目前,您只能获得 6MB,这是非常低的。