丢失或损坏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 ...
随机推荐
- Python开发环境(1):Eclipse+PyDev插件
电脑:小米笔记本电脑Pro 15.6寸(i5-8250U),操作系统:Windows 10,JDK版本:1.8.0_152(环境变量已配置) Step 1.下载Eclipse 根据我的CPU型号,选择 ...
- ZCTF2015 pwn试题分析
ZCTF的pwn赛题分析, PWN100 这道题与SCTF的pwn100玩法是一样的,区别在于这个要过前面的几个限制条件.不能触发exit(0).否则就不能实现溢出了. 依然是触发canary来lea ...
- OpenCV持久化(一)
在OpenCV中,采用FileStorage类进行数据持久化,可以采用XML或YAML格式存储数据. 将数据写入XML或YAML文件,可采用以下步骤: 1.创建FileStorage对象.可以调用构造 ...
- day7 socket网络编程基础
Socket Socket是什么? 下面来看一下网络的传输过程: 上面图片显示了网络传输的基本过程,传输是通过底层实现的,有很多底层,我们写传输过程的时候,要知道所有的过程那就太复杂了,socket为 ...
- mysql中的包含语句INSTR的使用
1.目前测试百万级数据,效率还是相当可观,感觉比like更精准! 例句 今天项目遇到一个问题,每个用户都有自己的所属渠道,当登录后台操作时,要列出隶属于自己拥有渠道的用户列表,当初想到使用全部遍历出来 ...
- TypeScript学习笔记(一) - 环境搭建
本篇将简单介绍一下TypeScript,并记录开发环境的搭建.使用Visual Studio Code进行一个简单的Demo开发过程. 第一部分.简介 TypeScript是一种由微软开发的自由和开源 ...
- 安装caffe框架所需文件
安装caffe框架所需文件: 1.微软提供的快速卷积神经网络框架caffe-master安装包或者windows提供的caffe-windows安装包. 链接:http://pan.baidu.com ...
- bzoj 1232 [Usaco2008Nov]安慰奶牛cheer
思路:看出跟dfs的顺序有关就很好写了, 对于一棵树来说确定了起点那么访问点的顺序就是dfs序,每个点经过 其度数遍,每条边经过2边, 那么我们将边的权值×2加上两端点的权值跑最小生成树,最后加上一个 ...
- Bootstrap入门七:按钮
1.可作为按钮使用的标签或元素 为 <a>.<button> 或 <input> 元素添加按钮类(button class)即可使用 Bootstrap 提供的样式 ...
- 2017-2018-1 20179202《Linux内核原理与分析》第九周作业
进程的切换和系统的一般执行过程 1.知识总结 (1)进程调度的时机: 中断处理过程直接调用schedule(),或者返回用户态时根据need_resched标记调用schedule(). 内核线程是一 ...