备份数据库:
BACKUP DATABASE Northwind TO DISK = 'c:\XXXXX.bak'
还原数据库:
--返回由备份集内包含的数据库和日志文件列表组成的结果集
RESTORE FILELISTONLY
FROM DISK = 'c:\XXXX.bak'
--还原由BACKUP备份的数据库
RESTORE DATABASE Northwind
FROM DISK = 'c:\XXXX.bak'
--指定还原后的数据库物理文件名称及路径
RESTORE DATABASE TestDB
FROM DISK = 'c:\XXXX.bak'
WITH
MOVE 'Northwind' TO 'c:\test\testdb.mdf',
MOVE 'Northwind_log' TO 'c:\test\testdb.ldf'
MOVE 'logical_file_name' TO 'operating_system_file_name'
指定应将给定的 logical_file_name 移到 operating_system_file_name。
默认情况下,logical_file_name 将还原到其原始位置。如果使用 RESTORE
语句将数据库复制到相同或不同的服务器上,则可能需要使用 MOVE 选项重
新定位数据库文件以避免与现有文件冲突。可以在不同的 MOVE 语句中指定
数据库内的每个逻辑文件。
--强制还原,加上REPLACE参数,则在现有数据库基础上强制还原。
RESTORE DATABASE TestDB
FROM DISK = 'c:\Northwind.bak'
WITH REPLACE,
MOVE 'Northwind' TO 'c:\test\testdb.mdf',
MOVE 'Northwind_log' TO 'c:\test\testdb.ldf'
对于还原数据库过程中 出现失败 主要是由于还原数据库前没有关闭掉该数据库的工作线程。
--再master数据库中 创建一个 kill存储过程 用来kill 需要还原数据库的工作线程
use master
go
create proc p_killspid
@dbname sysname --要关闭进程的数据库名
as
declare @s nvarchar(1000)
declare tb cursor local for
select s='kill '+cast(spid as varchar)
from master..sysprocesses
where dbid=db_id(@dbname)
open tb
fetch next from tb into @s
while @@fetch_status=0
begin
exec(@s)
fetch next from tb into @s
end
close tb
deallocate tb
go
还原数据库 首先要再 其他库上 use master
在master库上 运行存储过程 p_killspid 来kill掉 需要还原的数据库 的工作线程
然后最后进行还原RESTORE DATABASE
--还原数据库最后整理版
use master
go
if exists(select 1 from sysobjects where id=object_id('p_killspid') and xtype='P')
begin
exec('drop procedure p_killspid')
end
go
create proc p_killspid
@dbname sysname
as
declare @s nvarchar(1000)
declare tb cursor local for
select s='kill '+cast(spid as varchar)
from master..sysprocesses
where dbid=db_id(@dbname)
open tb
fetch next from tb into @s
while @@fetch_status=0
begin
exec(@s)
fetch next from tb into @s
end
close tb
deallocate tb
go
use master
go
exec p_killspid 'DBServer'
RESTORE DATABASE DBServer
FROM DISK = 'c:\DBServer.bak'
go
再实际应用的vc++或其他平台里面 还原数据库 注意两方面:
1 在还原前 连接的数据库 应该是 master
use master语句 是无效的 必须用自己写的OnInitADOConn() 来连接数据库
一般函数里面 都在连接某个数据库的基础上OnInitADOConn() 执行SQL函数语句
所以还应该创建一个OnInitADOConnMaster() 连接数据库函数 来专门用来给还原数据库时候使用
2 并且 不能在 string 里面不能含有 go 语句
可以分开 执行多次