数据库备份和恢复速记!
所谓的速记,就是追求速度,概要的记录下来一些事情。
一、备份设备
1.1 添加设备
EXEC sp_addumpdevice 'disk', 'test01','f:\bak\1.bak'
go
EXEC sp_addumpdevice 'disk', 'log02','f:\bak\log2.bak'
go
1.2 删除设备
保存相关文件:
Exec sp_dropdevice 'test02'
删除相关设备文件:
Exec sp_dropdevice 'test02','delfile'
二、备份
2.1 备份数据库
Backup database test01 TO test01
go
2.2 备份日志
BACKUP LOG test01 TO log02
go
2.3 多设备备份
Backup database test01 TO test01
go
Backup database test01 TO test02
go
三、恢复
3.1 恢复数据库
restore database test01 from test01
go
3.2 恢复日志
restore LOG test01 from log02 WITH NORECOVERY
go
四、排除疑难
4.1 打开的数据库进程,不能独占访问
▲方案一:
关闭,然后重启服务器。
▲方案二:
删除,数据库然后重建 。
▲方案三:
分离,然后重新载入。
◆◆推荐方案:
关闭连接到这个数据库的进程。
这是个存储过程。
(转自于http://www.yule4.com/?p=267)
--------------- ≯ 存储过程开始 ≮ ---------------
use master
go
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_killspid]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_killspid]
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
--用法
exec p_killspid 'test01'
--------------- ≯ 存储过程结束 ≮ ---------------
4.2 日志
日志这里有很多的问题,暂进还没有得到解决。
比如说:
服务器: 消息 4306,级别 16,状态 1,行 1
先前的还原操作未指定 WITH NORECOVERY 或 WITH STANDBY。请在除最后步骤之外的所有其它步骤中指定 WITH NORECOVERY 或 WITH STANDBY 后,重新启动该还原序列。
服务器: 消息 3013,级别 16,状态 1,行 1
RESTORE LOG 操作异常终止。