丢失或损坏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 ...
随机推荐
- 将ipa文件安装到测试设备上的几种方法
Installing Your App on Test Devices Using Xcode You can install iOS App files on devices using Xcode ...
- js中的事件委托或是事件代理
JavaScript(jQuery)中的事件委托 https://www.cnblogs.com/zhoushengxiu/p/5703095.html js中的事件委托或是事件代理详解 https: ...
- SQL Server 2000 系统存储过程
SQL Server 2000 系统存储过程 在 Microsoft? SQL Server? 中,许多管理和信息活动可以通过系统存储过程执行.系统存储过程按这些分类分组. 分类 描述 Active ...
- 洛谷P1331 海战 题解
题目传送门 思路 肯定食用dfs啦... 但关键是两条船接触了怎么判断呢?? 上图: 可以发现一下规律 当两条船接触时,必有一条直线连续穿过两条船 当一条船不与另一条船接触时,没有一条直线连续穿过两条 ...
- 一步一步学习IdentityServer4 (7) IdentityServer4成功配置全部配置
auth.liyouming.com 全部配 public class Startup { public Startup(IConfiguration configuration) { Configu ...
- codis+redis集群学习整理(待续)
Codis 由四部分组成: Codis Proxy (codis-proxy) Codis Manager (codis-config) Codis Redis (codis-server) ZooK ...
- Hadoop案例(十)WordCount
WordCount案例 需求1:统计一堆文件中单词出现的个数(WordCount案例) 0)需求:在一堆给定的文本文件中统计输出每一个单词出现的总次数 1)数据准备:Hello.txt hello w ...
- PHP 识别 java 8位 des 加密和 解密方式
代码及使用说明: <?php /** *PHP 识别 java 8位密钥的加密和解密方式 *@desc 加密方式 通用 */ class DES { var $key; var $iv; //偏 ...
- Java访问者模式
结构对象会遍历它自己所保存的聚集中的所有节点,在本系统中就是节点NodeA和NodeB.首先NodeA会被访问到,这个访问是由以下的操作组成的: (1)NodeA对象的接受方法accept()被调用, ...
- IAR搭建unity框架
1. 新建工程 2. 增加组 unit,并加入相应源码 3. 增加需要测试的API源文件 4. 编写相应的测试用例 编译,download and debug view->TerminalIO ...