zoukankan      html  css  js  c++  java
  • SQL SERVER-系统数据库还原

     摘要:

    一台SQL SERVER的系统数据库突然坏掉了(例如master),在有备份的情况下可以参考下文还原,无备份就只能重建了。

    如果一台旧的实例需要搬迁到新的一台,这种整实例搬迁可以参考下文。

    系统数据库介绍

    master   记录实例的系统信息(login,linkserver...),SQL SERVER启动时打开的第一个数据库。

    model   SQL SERVER启动时需要用它创建tempDB,无tempDB不能启动。还原方式与用户DB一样。

    msdb    保存代理,备份等信息。(默认该DB是简单恢复模式,如果要对其备份计划,则建议改为完整恢复模式)还原方式与用户DB一样。

    tempdb

    Resource    一个只读的数据库,不会写入数据。相同版本的sql server他们的resource数据库是一样的(可以手动备份文件),还原时停掉实例,手动放到相应路径。

    默认位置:C:Program FilesMicrosoft SQL ServerMSSQL13.MSSQLSERVERMSSQLBinn

    还原数据库SQL

    --参数recovery意思是回滚未提交的事务好让DB可用,norecovery意思不回滚未提交事务这样还原完DB是不可用的。
    restore database  database_name  from  backup_device  with recovery
    --发生错误继续还原,还原完查看错误日志看遇到了哪些错误
    restore database  database_name  from  backup_device  with continue_after_error,recovery

    还原系统数据库

    还原master

    1.要确保新的SQL SERVER和旧的版本一致。

    --查询的版本号要一致
    select @@version

    2.在备用服务器上停止所有SQL SERVER服务,以单用户启动SQL SERVER实例(我这里指定用sqlcmd登陆)。

    net start mssqlserver /m"SQLCMD"

    3.sqlcmd连接

     4.还原master

    还原完成后,实例自动停止

    restore database master from disk='E:mastermaster_backup_2020_03_27_114340_1691283.bak'  with replace

    新实例也有master所以要采用覆盖(with replace)不然会报错

    The backup set holds a backup of a database other than the existing 'master' database.

    5.由于master记录的是旧的系统DB路径,如果和现在的不同的话,直接启动会失败,所以要加个跟踪标志3608来启动,然后修改路径不同的系统DB的路径。

    如果2台系统DB路径是相同的则可直接正常启动。

    net start MSSQLSERVER /f /m /T3608

    --mssqlsystemresource
    alter database mssqlsystemresource modify file(name=data,file='C:Program FilesMicrosoft SQL ServerMSSQL13.MSSQLSERVERMSSQLDATAmssqlsystemresource.mdf')
    alter database mssqlsystemresource modify file(name=log,file='C:Program FilesMicrosoft SQL ServerMSSQL13.MSSQLSERVERMSSQLDATAmssqlsystemresource.ldf')
    
    --msdb
    alter database msdb modify file(name=MSDBData,file='C:Program FilesMicrosoft SQL ServerMSSQL13.MSSQLSERVERMSSQLDATAmsdbdata.mdf')
    alter database msdb modify file(name=MSDBLog,file='C:Program FilesMicrosoft SQL ServerMSSQL13.MSSQLSERVERMSSQLDATAmsdblog.ldf')
    
    --model
    alter database model modify file(name=modeldev,file='C:Program FilesMicrosoft SQL ServerMSSQL13.MSSQLSERVERMSSQLDATAmodel.mdf')
    alter database model modify file(name=modellog,file='C:Program FilesMicrosoft SQL ServerMSSQL13.MSSQLSERVERMSSQLDATAmodellog.ldf')
    
    --tempdb
    alter database tempdb modify file(name=tempdev,file='C:Program FilesMicrosoft SQL ServerMSSQL13.MSSQLSERVERMSSQLDATA	empdb.mdf')
    alter database tempdb modify file(name=tempdev,file='C:Program FilesMicrosoft SQL ServerMSSQL13.MSSQLSERVERMSSQLDATA	empdb.ldf')

    6.我这次2台系统DB的路径是相同的,所以就直接启动了,

    还原msdb

    restore database  msdb from  disk='E:msdbmsdb_backup_2020_03_27_114340_3878743.bak' 
    with move 'MSDBData' to 'C:Program FilesMicrosoft SQL ServerMSSQL13.MSSQLSERVERMSSQLDATAmsdbdata.mdf',
    move 'MSDBLog' to 'C:Program FilesMicrosoft SQL ServerMSSQL13.MSSQLSERVERMSSQLDATAmsdblog.ldf',
    replace

    还原model

    restore database  model from  disk='E:modelmodel_backup_2020_03_27_114340_2316265.bak' 
    with move 'modeldev' to 'C:Program FilesMicrosoft SQL ServerMSSQL13.MSSQLSERVERMSSQLDATAmodel.mdf',
    move 'modellog' to 'C:Program FilesMicrosoft SQL ServerMSSQL13.MSSQLSERVERMSSQLDATAmodellog.ldf',
    replace

    7.修改服务器名

    因为master是旧的那台的,所以他保存的是旧的服务器名

    --查询服务器名
    select  @@servername
    
    
    --删除旧的,添加当前的
    sp_dropserver'oldservername'
    go
    
    sp_addserver 'newservername','local'
    go

    实例重启后即生效。

    8.这时实例级的job.linkserver,login等都已配置到了新的一台,但是用户数据是怀疑状态,因为还没有还原用户DB,还原即可。

  • 相关阅读:
    mysql check约束无效
    Illegal mix of collations for operation 'concat'
    执行automake时报错 error while making link: Operation not supported
    GCC 编译详解[转]
    gcc的选项
    关于MFLAGS与MAKEFLAGS
    gcc和g++的区别
    g++参数介绍
    gcc/g++基本命令简介
    semver语义化版本号
  • 原文地址:https://www.cnblogs.com/JinweiChang/p/12580146.html
Copyright © 2011-2022 走看看