sql server還原數據
如果運行sql server 的數據庫的系統 突然意外崩潰 需要重做系統 而我們一般數據庫數據都會存放在其他盤符 這是就需要重做系統之后 重新安裝數據庫并還原之前存儲的數據庫了
1; 找到系統崩壞前數據庫的存放路徑一般為d:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data 具體的需要根據個人情況判定。
2;把Date下的數據打包復制保存出來,重新安裝所需數據庫。知道安裝成功。
3;打開數據庫登錄,點擊數據庫-右鍵-附加 在附加選項中選擇之前打包的數據庫備份,這是系統會自動識別里面的數據庫文件 選中之后 點擊確認便可附加成功 以此類推把所有數據庫都附加上即可。
#個別情況由于數據庫比較多 一個一個點太過麻煩 這里有一鍵附加的腳本 (內容比較復雜且容易出錯,新手僅供參考 不建議使用 );
運行環境:
服務器系統:win2008s
數據庫版本: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
--以上三個表為臨時表 完成后可以刪除 如果在2005以上的版本可以使用臨時變量表
Insert Into tempFile Exec master.dbo.xp_dirtree 'D:\Program Files (x86)\Microsoft SQL Server\MSSQL\LibraryData',1,1
--以上就為所有要附加的數據庫文件所在文件夾
Declare @Path varchar(2000),
@File nvarchar(255),
@sql nvarchar(4000),
@DataBase sysname
set @Path = 'D:\Program Files (x86)\Microsoft SQL Server\MSSQL\LibraryData\'
-- @Path變量即為所有要附加的數據庫文件所在的文件夾
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'成功附加數據庫: '+@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
代碼結束。
運行完成后 就會顯示哪些數據庫成功附加了 就成功了。