丢失或损坏NDF文件如何附加数据库
在論壇看到有人遇到?NDF文件丟失并且沒有備份,所以無法成功附加數(shù)據(jù)庫。在網(wǎng)上也看到過很多回答是如果沒有NDF就無法附加成功。
?
其實(shí)我自己測試下來即使沒有NDF也是可以成功附加的。但是有條件,丟失的NDF文件不屬于Primary?file?group并且SQL?Server為企業(yè)版
下面是我做的測試:
1.???????--創(chuàng)建數(shù)據(jù)庫
CREATE?DATABASE?[test1]?CONTAINMENT=NONE?ONPRIMARY
(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)
LOGON
(NAME=N'test1_log',FILENAME=N'C:\data\test1_log.ldf',SIZE=?1024KB,MAXSIZE=?2048GB,FILEGROWTH=?10%)
GO
2.???????--在primary?file?group上創(chuàng)建兩張表
?
create?table?test(namevarchar(10))ON[PRIMARY]
create?table?test2(namevarchar(10))ON[PRIMARY]
--在NDF上面創(chuàng)建一張表
create?table?test1(namevarchar(10))onnew
?
3.???????--插入10條數(shù)據(jù)
insert?into?test?values?('kevin')
go?10
insert?into?test1values?('kevin')
go?10
insert?into?test2?values?('kevin')
go?10
?
4.???????--Detach數(shù)據(jù)庫
?
USE[master]
GO
EXEC?master.dbo.sp_detach_db@dbname=N'test1'
GO
?
5.???????將MDF,NDF,LDF文件復(fù)制到其他文件夾
?
6.???????按照第一步的腳步創(chuàng)建一個同名的數(shù)據(jù)庫?
--將數(shù)據(jù)庫Offline
usemaster
go
alter?database?test1?set?offline
?
7.將第5步備份的MDF和LDF文件覆蓋現(xiàn)在的數(shù)據(jù)庫MDF和LDF
?
8.將出問題的NDF文件Offline?
?
alter?database?test1?modify?FILE??(name=new,offline)
?
9.將數(shù)據(jù)庫Online
?
alter?database?test1?set?online
?
現(xiàn)在可以看到三張表都是存在的,但是訪問test1表的時候會出現(xiàn)下面的錯誤:
?
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.
?
因?yàn)楸硭诘?span style="font-family:calibri;">Filegroup是離線的,所以無法訪問。
?
轉(zhuǎn)載于:https://blog.51cto.com/lzf328/1265931
總結(jié)
以上是生活随笔為你收集整理的丢失或损坏NDF文件如何附加数据库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iptables连接跟踪ip_connt
- 下一篇: Java根据当前日期获得这一周的日期