zoukankan      html  css  js  c++  java
  • SQL Server 数据库还原进度查看

    SQL Server 数据库还原进度查看
    关键字:数据库,还原,进度,查看
    文档说明:
    本文档受某实际需求启发,某约500G大小数据库还原,由于对应服务器性能较差(内存仅4G且可用内存仅2.8G),数据库的还原一直停留在还原界面,只从数据库还原界面无法查看具体数据库还原进度。通过上网搜集整理,现总结本文档,因个人水平有限,部分知识点可能有缺失甚至错漏,敬请指正
    场景描述:
    正常进行SQL Server数据库备份还原,选择源设备等等……

    点击确定开始数据库还原,可以看到左下角有进度:“正在执行(0%)”

    但实际上该进度无实际效果,即使最终数据库完成备份还原,该进度仍然显示“正在执行(0%)”

    进度查看:
    以sa身份执行
    sp_who2
    可以查看当前连接情况,从其中找到Command=‘RESTORE DATABASE’,根据其SPID

    执行,其中session_id即为上面SPID。
    SELECT
    session_id, request_id, start_time, status, command
    , percent_complete, estimated_completion_time,wait_time, cpu_time, total_elapsed_time, scheduler_id
    ,sql_handle
    --,statement_start_offset, statement_end_offset, plan_handle
    , database_id, user_id --,connection_id
    , blocking_session_id
    , wait_type, last_wait_type, wait_resource, open_transaction_count, open_resultset_count, transaction_id
    --, context_info
    --, task_address
    , reads, writes, logical_reads
    --, text_size, language, date_format, date_first, quoted_identifier, arithabort, ansi_null_dflt_on, ansi_defaults, ansi_warnings, ansi_padding, ansi_nulls, concat_null_yields_null, transaction_isolation_level, lock_timeout, deadlock_priority, row_count, prev_error, nest_level, granted_query_memory, executing_managed_code, group_id, query_hash, query_plan_hash
    FROM sys.dm_exec_requests WHERE session_id=56

    也可以使用如下语句,语句执行时注意按照实际情况选择将对应where条件取消注释
    SELECT DB_NAME(er.[database_id]) [DatabaseName]
    ,er.[command] AS [CommandType]
    ,CONVERT(DECIMAL(5, 2), er.[percent_complete]) AS [Complete_Percent]
    ,er.start_time
    ,CONVERT(DECIMAL(38, 2), er.[total_elapsed_time] / 60000.00) AS [ElapsedTime_m]
    ,CONVERT(DECIMAL(38, 2), er.[estimated_completion_time] / 60000.00) AS [EstimatedCompletionTime_m]
    ,CONVERT(DECIMAL(38, 2), (er.[total_elapsed_time] / 60000.00 * ((100-er.[percent_complete])/er.percent_complete))) AS [EstimatedCompletionTime_m2]
    FROM sys.dm_exec_requests AS er
    WHERE 1=1
    --and DB_NAME(er.[database_id]) in ('')
    and er.[percent_complete] >0
    --and er.[command] in ('RESTORE DATABASE' ,'BACKUP DATABASE','BACKUP LOG','RESTORE LOG')
    order by er.start_time desc


    可以从中看到percent_complete,对应数据库还原进度。一般来说当该值变为100时,意味着数据库还原会很快完成。但某现场使用个人PC作为SQL服务器,其内存总4G,可用内存2.8G,数据库备份大小约250G,数据库数据文件大小约300G,数据库日志大小约200G,数据库还原总耗时约19个小时。
    其中percent_complete为100后仍等待了较长时间(超过4个小时),可以查看到其中等待类型:BACKUPTHREAD
    参考网址:
    http://itknowledgeexchange.techtarget.com/sql-server/what-is-the-backupthread-wait-type/
    http://www.sqlserver-dba.com/2014/03/troubleshooting-backupthread-wait-type.html

    等待类型:PAGELATCH_SH
    参考网址:
    http://www.tiejiang.org/2514.html

    等待类型:SOS_SCHEDULER_YIELD
    参考网址
    http://www.itpub.net/thread-1853501-1-1.html

    以上几个等待类型基本上是因为PC性能(主要是内存)有限,导致大量的类似等待,同样较低的电脑性能也整体影响了数据库的还原速度。

    图形化界面不显示进度的替代解决方案
    使用SQL语句。在使用图形化界面还原数据库时,所有设置完成后,点击“脚本”,选择将其生成到新查询窗口。

    注意其中关键在于“STATS”选项
    这样执行结果就可以在消息中看到进程,简单易用

    **
    **

    补充:
    1、 SQL Server 数据库备份和还原认识和总结(二)
    参考网址:http://www.cnblogs.com/PongorXi/archive/2012/08/05/2623522.html
    2、 特别推荐:浅谈SQL Server中的事务日志(一)----事务日志的物理和逻辑构架
    参考网址:http://www.cnblogs.com/CareySon/archive/2012/02/13/2349751.html

  • 相关阅读:
    让VC6.0编译出来的程序支持XP样式或XP风格
    table+js实现网站左侧列表下拉隐藏
    图片或文件保存到数据库
    C#使用Cookie方法
    oracle实现今年数据 去年同期和增长百分比
    检索COM类工厂中CLSID为{000209FF-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误: 80070005
    oracle&&Sqlserver获取表名列名主键及数据类型
    sql中将null转换为空
    sql 游标
    oracle 提示口令失效解决方法
  • 原文地址:https://www.cnblogs.com/moonliu/p/14244968.html
Copyright © 2011-2022 走看看