丢失或损坏NDF文件如何附加数据库
在论坛看到有人遇到 NDF文件丢失并且没有备份,所以无法成功附加数据库。在网上也看到过很多回答是如果没有NDF就无法附加成功。
其实我自己测试下来即使没有NDF也是可以成功附加的。但是有条件,丢失的NDF文件不属于Primary file group并且SQL Server为企业版
下面是我做的测试:
1. --创建数据库
CREATE DATABASE[test1] CONTAINMENT=NONE ON PRIMARY
( NAME=N'test1',FILENAME= N'C:\data\test1.mdf',SIZE = 5120KB,MAXSIZE = UNLIMITED,FILEGROWTH= 1024KB),
FILEGROUP [New]
( NAME=N'new',FILENAME= N'C:\data\new.ndf', SIZE = 5120KB, MAXSIZE = UNLIMITED,FILEGROWTH= 1024KB)
LOG ON
( NAME=N'test1_log',FILENAME= N'C:\data\test1_log.ldf',SIZE = 1024KB,MAXSIZE = 2048GB,FILEGROWTH = 10%)
GO
2. --在primary file group上创建两张表
create tabletest(namevarchar(10)) ON[PRIMARY]
create tabletest2(namevarchar(10)) ON[PRIMARY]
--在NDF上面创建一张表
create tabletest1(namevarchar(10))onnew
条数据
insert intotestvalues ('kevin')
go 10
insert intotest1values ('kevin')
go 10
insert intotest2values ('kevin')
go 10
4. --Detach数据库
USE[master]
GO
EXEC master.dbo.sp_detach_db@dbname=N'test1'
GO
5. 将MDF,NDF,LDF文件复制到其他文件夹
6. 按照第一步的脚步创建一个同名的数据库
--将数据库Offline
use master
go
alter databasetest1set offline
步备份的MDF和LDF文件覆盖现在的数据库MDF和LDF
8. 将出问题的NDF文件Offline
alter databasetest1modify FILE (name=new ,offline)
9. 将数据库Online
alter databasetest1set online
现在可以看到三张表都是存在的
但是访问test1表的时候会出现下面的错误:
Msg 8653,Level 16, State 1, Line 1
The queryprocessor is unable to produce a plan for the table or view 'test1' because thetable resides in a filegroup which is not online.
因为表所在的Filegroup是离线的,所以无法访问。
丢失或损坏NDF文件如何附加数据库的更多相关文章
- SQL SERVER 2000 数据恢复(分离数据库+附加数据库)
一.分离数据库 SQL Server 2000允许分离数据库的数据和事务日志文件,然后将其重新附加到同一台或另一台服务器上.分离数据库将从SQL Server 删除数据库,所以当点击“分离数据 ...
- sql server 2000,Log.LDF文件丢失,附加数据库失败的解决办法[转]
SQL Server数据库备份有两种方式,一种是使用BACKUP DATABASE将数据库文件备份出去,另外一种就是直接拷贝数据库文件mdf和日志文件ldf的方式.下面将主要讨论一下后者的备份与恢复. ...
- ORACLE联机日志文件丢失或损坏的处理方法(转)
经验总结: 联机日志分为当前联机日志和非当前联机日志,非当前联机日志的损坏是比较简单的,一般通过clear命令就可以解决问题. 损坏非当前联机日志:1.启动数据库,遇到ORA-00312 or ORA ...
- SQL Server附加数据库报错:无法打开物理文件,操作系统错误5
问题描述: 附加数据时,提示无法打开物理文件,操作系统错误5.如下图: 问题原因:可能是文件访问权限方面的问题. 解决方案:找到数据库的mdf和ldf文件,赋予权限即可.如下图: 找到mdf ...
- SQL Server附加数据库时失败,提示:“未重新生成日志,因为有不止一个日志文件”
这个只能是试一下的方法,但不一定能成功,可以尝试如下几个方法: 1.登录远程桌面,然后以.登录SQL Server,并以Windows身份登录,然后再附加数据库时把日志文件删除. 2.试下这个脚本: ...
- 附加数据库对于服务器失败(Microsoft.SqlServer.Smo),无法升级数据库,因为它是只读的,或者具有只读文件
今天在将一个 SQL Server 2000 数据库附加到 SQL Server 2005时出现如下的错误:附加数据库对于服务器失败(Microsoft.SqlServer.Smo),无法升级数据库t ...
- 怎样修复“Windows/System32/Config/System中文件丢失或损坏”故障
怎样修复“Windows/System32/Config/System中文件丢失或损坏”故障 英文原文引自 http://xphelpandsupport.mvps.org/how_do_i_repa ...
- 附加数据库报错:无法打开物理文件 XXX.mdf",操作系统错误 5:"5(拒绝访问。)"
今天在附加数据库的时候出现如图报错信息: 无法打开物理文件 XXX.mdf",操作系统错误 5:"5(拒绝访问.)"错信息如图:(是不是远程服务器数据库附加出现只读那个情 ...
- sql server 2008怎样导入mdf,ldf文件,怎样解决导入mdf,ldf文件时出现附加数据库错误的问题
废话不多说,直入主题吧. 1:打开sql server 2008,右键数据库-->附加 2:这时出现这个界面点击添加 3:打开数据库实例的安装目录,打开DATA文件夹;(如我的实例目录地址为:D ...
随机推荐
- 列表CListCtrl类使用
CListCtrl是列表控件类,列表控件的每一行叫做一个item,每一列叫做一个subitem.每一行和每一列都有个ID号,可以确定唯一的单元格. 最近使用了这个控件,有心得总结如下: (Dialog ...
- 洛谷P2018消息传递
传送门啦 这个树形dp就没那么简单了,运用了一下贪心的思想 不同的排序方法对应着不同的转移方程,如果我们用 $ f[x] = max(f[x] , b[i] +cnt - i + 1) $ 来进行转移 ...
- nio复习总结
观察者: 多个对象依赖一个对象的状态, 当这个对象状态发生改变时,依次通知多个对象. 消息的分发和处理 事件驱动 / IO多路复用 借助select epoll等 reactor: io事件触发时, ...
- java IO流的继承体系和装饰类应用
java IO流的设计是基于装饰者模式&适配模式,面对IO流庞大的包装类体系,核心是要抓住其功能所对应的装饰类. 装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的 ...
- springMVC源码分析--HttpMessageConverter参数read操作(二)
上一篇博客springMVC源码分析--HttpMessageConverter数据转化(一)中我们简单介绍了一下HttpMessageConverter接口提供的几个方法,主要有以下几个方法: (1 ...
- CentOS7的firewall和安装iptables
前言:CentOS7 的防火墙默认使用是firewall,而我们通常使用iptables: 本文记录了firewall基础的命令和iptables的安装和使用. firewall部分: part1 : ...
- Asp.net Vnext 实现IView
概述 Iview定义很简单,就是根据View上下文和TextWriter对象实现对View的呈现. 实现 实现IViewEngine public class TestViewEngine : IVi ...
- 同时装有py2 和3,运行scrapy如何区分
1未区分环境 python2 -m scrapy startproject xxx python3 -m scrapy startproject xxx 当然,执行的时候也是 python2 -m s ...
- 【BZOJ】2395: [Balkan 2011]Timeismoney
题解 最小乘积生成树! 我们把,x的总和和y的总和作为x坐标和y左边,画在坐标系上 我们选择两个初始点,一个是最靠近y轴的A,也就是x总和最小,一个是最靠近x轴的B,也就是y总和最小 连接两条直线,在 ...
- bzoj 1237 [SCOI2008]配对 贪心+dp
思路:dp[ i ] 表示 排序后前 i 个元素匹配的最小值, 我们可以发现每个点和它匹配的点的距离不会超过2,这样就能转移啦. #include<bits/stdc++.h> #defi ...