sqlserver2008 所有库备份恢复问题.做mysql的全部备份 有一个命令 mysqldump --all   可以把机器上所有库(比如 a 库  b 库 c 库等)一次性导入到一个sql文件
全库恢复 mysql 直接<sql文件就可以了.sqlserver 就单个库的备份恢复是简单的 无论图形还是脚本. 现在需要把sqlserver该实例下所有库(比如 a 库  b 库 c 库等)一次性全备份, 再一次性全部恢复 (这样a机器可以在不当机器的情况下,实现所有库 权限甚至job的迁移 ),
(这个功能确实是需要的 有时候生产机器高负荷当机 ,sqlserver不能起来, 只能把全备份恢复)我采用管理计划全备份后发现 他实际是把a 库  b 库 c 库等分别做成一个bak文件 .
现在只能每个单个库的恢复. 这些库文件太大 有几百g. 现在想知道的是1sqlserver 有没有类似mysql的一次性到所有备份库一次性恢复的方法. (当前每个库的做法不知道是否保存job 镜像 logship等配置信息)
2 mysql一次性恢复 可以包括 [事件]---这个相当于sqlserver的job
 不知道sqlserer 的各个库的恢复能否恢复 
保存job 镜像 logship等配置信息?    
  

解决方案 »

  1.   

    与Job相关的系统表. sysjobhistory 包含有关由 SQL Server 代理程序调度作业的执行的
    信息。该表存储在 msdb 数据库中。查看作业运行情况
    http://fygh6318.blog.51cto.com/390568/380816
    select 
    a.job_id '作业ID',a.name '作业的名称',a.enabled '是否启用',a.description '作业的说明',c.step_id '步骤ID',
    c.step_name '步骤名',c.command '执行的命令',
    a.category_id
    '作业类别的ID',
    (Case when a.notify_level_email=0 
          then '从不' 
         when a.notify_level_email=1
          then '作业成功时' 
         when a.notify_level_email=2
          then '作业失败时' 
        when a.notify_level_email=3
          then '作业完成时'
        else
           '未知'
     End
     )as '发送通知电子邮件',a.notify_email_operator_id '通知的操作员',
     a.date_created '作业的创建日期',a.date_modified '修改作业的日期',a.version_number '作业版本',b.message '消息',
    (CASE 
       WHEN b.run_status = 0
            THEN '失败'
       WHEN b.run_status = 1
            THEN '成功'
       WHEN b.run_status = 2
            THEN '重试'
       WHEN b.run_status = 3
            THEN '已取消'
       WHEN b.run_status = 4
            THEN '正在进行中'
       ELSE '未知' 
     END
    )as '作业的执行状态',
    c.last_run_date '上一次执行的日期',c.last_run_time '上一次执行的时间' ,c.last_run_duration '花费的时间' ,c.last_run_retries '重试次数',
    d.next_run_date '下一次执行日期',d.next_run_time '下一次执行时间',
    b.operator_id_emailed '通知的操作员的ID',
    operator_id_netsent '消息通知的操作员的ID',b.operator_id_paged '寻呼通知的操作员的ID',
    c.server '服务器' 
    from msdb.dbo.sysjobs(nolock) a inner join msdb.dbo.sysjobsteps c on a.job_id=c.job_id 
    left join (select *  from msdb.dbo.sysjobhistory(nolock) where instance_id 
      in( select max(instance_id) from msdb.dbo.sysjobhistory(nolock) group by job_id )) b 
     on a.job_id=b.job_id left join msdb.dbo.sysjobschedules(nolock) d on a.job_id=d.job_id2.查看某个job上一次运行情况select b.name '任务名',a.job_id '任务ID',a.step_id '步骤',step_name '步骤名',sql_message_id 'sql信息',message '执行信息',
      run_date+run_time '运行时间',run_duration '运行时长',description '描述' from msdb.dbo.sysjobhistory(nolock) a 
      inner join msdb.dbo.sysjobs(nolock) b on a.job_id=b.job_id 
      where run_date='20090825' and b.name='jobname3.与Job相关的系统表 sysjobhistory   
      包含有关由   SQL   Server   代理程序调度作业的执行的信息。该表存储在   msdb   数据库中。   
        
      sysjobs   
      存储将由   SQL   Server   代理程序执行的每个已调度作业的信息。该表存储在   msdb   数据库中   
        
      sysjobsteps   
      包含将由   SQL   Server   代理程序执行的作业中每个步骤的信息。该表存储在   msdb   数据库中。   
        
      sysjobschedules   
      包含将由   SQL   Server   代理程序执行的作业调度信息。该表存储在   msdb   数据库中。   
        
      sysjobservers   
      存储特定作业与一个或更多目标服务器的关联或关系   
      与备份/还原相关的系统表:   
        
      backupfile   
      每个备份的数据或日志文件在表中占一行。该表存储在   msdb   数据库中。   
        
      backupmediafamily   
      每个媒体家族在表中占一行。该表存储在   msdb   数据库中。   
        
      backupmediaset   
      每个备份媒体集在表中占一行。该表存储在   msdb   数据库中。   
        
      backupset   
      每个备份集在表中占一行。该表存储在   msdb   数据库中。   
        
      restorefile   
      restorefile   表中每个已还原的文件(包括按文件组名间接还原的文件)占一行。该表存储在   msdb   数据库中。   
        
      restorefilegroup   
      restorefilegroup   表中每个已还原的文件组占一行。该表存储在   msdb   数据库中。   
        
      restorehistory   
      restorehistory   表中每个还原操作占一行。该表存储在   msdb   数据库中。
      

  2.   

    master 视图
    msdb  表 和视图 记录权限 logship job mirror replication 例如sqlserver 复制  master 视图dm_repl_articlesmysql能看源代码.可惜sqlserver 的log察看不够方便
    图形化基于windows 平台 看什么显示慢 .linux可以研究深入很多技术细节. linux 的总体感觉db强大好多 
      

  3.   

    sqlserver 也可以啊,自己写脚本啊既然linux你都会这么多了,写个shell脚本应该不算难题吧 ?
      

  4.   

    sql server 需要自己写脚本,简单。
      

  5.   

    查询系统表,可拼凑出批量执行全部数据库恢复的SQL语句。select 'restore database ' + name + ' from disk=...' 
    from master.dbo.sysdatabases
      

  6.   

    在MSSQL的脚本方式可以实现你希望的,甚至更多。比如备份到等量媒体集,对于大容量DB减少备份时间。 备份到镜像媒体集,更加安全。
      

  7.   

    select 'restore database ' + name + ' from disk=...' 
    from master.dbo.sysdatabases where name<> "tempdb"