zoukankan      html  css  js  c++  java
  • SQL Server 在缺少文件组的情况下如何还原数据库

    SQL Server 在缺少文件组的情况下如何还原数据库

    一、背景

      我有一个A库,由于a,b两张表的数据量比较大,所以对表进行分区;在把A库迁移到一个新的集群上去,我只备份了A库的主分区过去进行还原为B库(主分区的备份还原可参考:SQL Server 维护计划备份主分区主分区备份与还原),为了对a,b表进新的数据,我修改了a,b表名,在B库新建了两张不分区的a,b表;

    这样运行都没有什么问题的,但是在一次我分离了数据库B,拷贝了mdf和ldf文件,现在想使用mdf和ldf还原为B库的时候出错了;

    二、解决过程

      在使用SSMS的还原功能进行还原的时候出现了下面的错误:

    clip_image002

    (图1:找不到文件组)

    clip_image004

    (图2:手动创建一个ndf文件报错)

      在还原的时候需要指定ndf文件的目录,但是由于在备份的时候我们只备份了主文件,所以是没有ndf文件的(注意:表结构是在主文件组的,所以这里会显示ndf文件信息),这个时候想通过删除列表中ndf,却发现删除按钮不可用,如图1所示;

      在对应的目录中手动创建一个ndf文件,出现了图2的错误,因为无法读取到文件头;

      难道就无法还原数据库B了嘛?不要着急,我们把上面的操作生成SQL代码,把不需要的ndf文件删除掉,剩下类似下面的SQL代码,执行,还原了数据库B!

    USE [master]
    GO
    CREATE DATABASE [QQMonitor] ON 
    ( FILENAME = N'E:DBBackupDBName.mdf' ),
    ( FILENAME = N'E:DBBackupDBName_log.ldf' )
     FOR ATTACH
    GO

      或者自己直接写代码,例如以下的代码:

    --还原主分区
    RESTORE DATABASE [TestAnt]
    FILEGROUP='PRIMARY'
    FROM DISK='F:DBBackupAnt_PrimaryAnt_Primary_20110916000001.bak' WITH FILE = 1,
    MOVE N'Barefoot.Ant' TO N'F:DBBackupTestAnt.mdf',
    MOVE N'Barefoot.Ant_log' TO N'F:DBBackupTestAnt_log.ldf',
    RECOVERY,REPLACE,  STATS = 10
    GO
  • 相关阅读:
    相当当中 ,还用到一个很重要的类 ,map地图类
    使用ObjectDataSource查询和更新
    sqlserver 简单的存储过程学习记录
    一个winform的基于TCP的服务端的GPS平台的网关。利用多线程异步的方式 。
    个人网站准备之数据处理
    记录日志(自治事务
    android调用lua
    CMarkup类读写xml文件
    MyBatis.Net 配置
    NPOI读取Excel到集合对象
  • 原文地址:https://www.cnblogs.com/gaizai/p/3945384.html
Copyright © 2011-2022 走看看