sql server還原數(shù)據(jù)

發(fā)布時(shí)間:2019/2/12 17:21:00
sql server還原數(shù)據(jù)
如果運(yùn)行sql server 的數(shù)據(jù)庫(kù)的系統(tǒng) 突然意外崩潰  需要重做系統(tǒng) 而我們一般數(shù)據(jù)庫(kù)數(shù)據(jù)都會(huì)存放在其他盤符 這是就需要重做系統(tǒng)之后 重新安裝數(shù)據(jù)庫(kù)并還原之前存儲(chǔ)的數(shù)據(jù)庫(kù)了
1; 找到系統(tǒng)崩壞前數(shù)據(jù)庫(kù)的存放路徑一般為d:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data 具體的需要根據(jù)個(gè)人情況判定。
2;把Date下的數(shù)據(jù)打包復(fù)制保存出來,重新安裝所需數(shù)據(jù)庫(kù)。知道安裝成功。
3;打開數(shù)據(jù)庫(kù)登錄,點(diǎn)擊數(shù)據(jù)庫(kù)-右鍵-附加 在附加選項(xiàng)中選擇之前打包的數(shù)據(jù)庫(kù)備份,這是系統(tǒng)會(huì)自動(dòng)識(shí)別里面的數(shù)據(jù)庫(kù)文件 選中之后 點(diǎn)擊確認(rèn)便可附加成功 以此類推把所有數(shù)據(jù)庫(kù)都附加上即可。
#個(gè)別情況由于數(shù)據(jù)庫(kù)比較多 一個(gè)一個(gè)點(diǎn)太過麻煩 這里有一鍵附加的腳本 (內(nèi)容比較復(fù)雜且容易出錯(cuò),新手僅供參考 不建議使用 );
運(yùn)行環(huán)境:
服務(wù)器系統(tǒng):win2008s 
數(shù)據(jù)庫(kù)版本:mssql 2000 s3
代碼:
create table tempFile(
Name nvarchar(255) Not Null,depth int Null, IsFile bit Null
)
create table smoPrimaryFileProp(
property sql_variant Null, value sql_variant Null
)
create table smoPrimayChildren(
status int,fileid int,name sysname,filename nvarchar(512)
)
GO
--以上三個(gè)表為臨時(shí)表  完成后可以刪除  如果在2005以上的版本可以使用臨時(shí)變量表
Insert Into tempFile Exec master.dbo.xp_dirtree 'D:\Program Files (x86)\Microsoft SQL Server\MSSQL\LibraryData',1,1
--以上就為所有要附加的數(shù)據(jù)庫(kù)文件所在文件夾
Declare @Path varchar(2000),
@File nvarchar(255),
        @sql nvarchar(4000),
        @DataBase sysname
set @Path = 'D:\Program Files (x86)\Microsoft SQL Server\MSSQL\LibraryData\'
-- @Path變量即為所有要附加的數(shù)據(jù)庫(kù)文件所在的文件夾
Declare cur_File Cursor For 
    Select Name From tempFile As a Where IsFile=1 And Name Like '%.mdf'  
Open cur_File
  Fetch Next From cur_File Into @File
While @@Fetch_Status=0
Begin
    Set @sql = 'dbcc checkprimaryfile (N'''+ @Path+ @File + ''' , 2) With No_Infomsgs'
    Insert Into smoPrimaryFileProp Exec (@sql)
    Set @sql='dbcc checkprimaryfile (N''' +@Path+ @File + ''' , 3) With No_Infomsgs'
    Insert Into smoPrimayChildren Exec (@sql)
    Select @DataBase=Quotename(Convert(nvarchar(255),value)),
         @sql=null        
    From smoPrimaryFileProp Where Convert(nvarchar(255),property)='Database name'  
    Select @sql=Isnull(@sql+','+Char(13)+Char(10), 'Create DataBase '+@DataBase+' On'+Char(13)+Char(10))+'(FileName=N'''+@Path+Right(Rtrim(filename),Charindex('\',Reverse(Rtrim(filename)))-1)+''')'
    From smoPrimayChildren
    Exec(@sql+' For Attach')
      Print N'成功附加數(shù)據(jù)庫(kù): '+@DataBase  
    Delete From tempFile
    Delete From smoPrimayChildren
    Delete From smoPrimaryFileProp  
    Fetch Next From cur_File Into @File
End
Close cur_File
Deallocate cur_File
Go
代碼結(jié)束。
運(yùn)行完成后 就會(huì)顯示哪些數(shù)據(jù)庫(kù)成功附加了  就成功了。


Copyright© 2004-2020 河南海騰電子技術(shù)有限公司 版權(quán)所有   經(jīng)營(yíng)性ICP/ISP證 備案號(hào):B1-20180452   豫公網(wǎng)安備 41019702002018號(hào)    電子營(yíng)業(yè)執(zhí)照