Hen*_*sen 7 sql-server restore filetable sql-server-2014
我们有一个 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
Run Code Online (Sandbox Code Playgroud)
到目前为止,我有这个结果:
在 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
Run Code Online (Sandbox Code Playgroud)
说:
等待类型=
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'
Run Code Online (Sandbox Code Playgroud)
恢复(VDCFileStreamhespotest):恢复数据库已启动 恢复(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 恢复(VDCFileStreamhespotest):有效选项:校验和=1、压缩=1、加密=0、缓冲区计数=6、MaxTransferSize=1024 KB 恢复(VDCFileStreamhespotest):规划完成 恢复(VDCFileStreamhespotest):开始离线恢复 恢复(VDCFileStreamhespotest):附加数据库为 DB_ID=48 恢复(VDCFileStreamhespotest):准备容器 恢复(VDCFileStreamhespotest):容器已准备就绪 Restore(VDCFileStreamhespotest):恢复备份集 恢复(VDCFileStreamhespotest):估计要传输的总大小 = 45540792320 字节 恢复(VDCFileStreamhespotest):传输数据 1% 处理。
您正尝试在服务器上恢复具有 32GB 内存的 45GB 数据库。
您可以做的是增加服务器上的内存 (RAM) 并使用
BUFFERCOUNT、BLOCKSIZE、MAXTRANSFERSIZE备份参数以及INIT& COMPRESSION(正如我从输出中看到的那样,您正在使用它)来调整您的备份。截至目前,您只能获得 6MB,这是相当低的。