数据库备份问题

slayerbb 2003-08-12 12:12:02
每次都到企业管理器里面去备份或者是用命令来备份,好像有些困难,能不能直接写一个存储过程,做成.bat文件,每次要备份的时候,只要点击这个bat文件就可以了。。。请问这个可以实现吗?如果可以实现的话,请教各位大虾应该如何写这样的程序,能不能给个简单的例子,谢谢!!
...全文
31 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 元老 2003-08-12
  • 打赏
  • 举报
回复
更简单的方法是设置备份计划,定时备份数据库,这样就不用手工干预了.

企业管理器--右键你的数据库--所有任务--备份数据库--其他选项照正常备份的方法去设置--复选"调度"项--点调度后面的"..."按纽--输入调度名称--点"反复出现"后面的"更改"按纽--设置你的备份时间安排.

设置好后,要将SQL AGENT服务设置为自动启动,这样到你设置的时间就会自动进行备份工作了.
zjcxc 元老 2003-08-12
  • 打赏
  • 举报
回复
或者你写一个.bat文件,包含下面的内容:

isql -S服务器名 -Usa -P -q"backup database 数据库名 to disk='c:\aa.bak'"


就可以点这个.bat文件来进行备份了.

CrazyFor 2003-08-12
  • 打赏
  • 举报
回复
用存储过程,
zjcxc 元老 2003-08-12
  • 打赏
  • 举报
回复
直接用backup database语句就可以了.

在查询分析器或你的程序中执行下面的语句就可以备份了:
backup database 数据库名 to disk='c:\aa.bak'
pengdali 2003-08-12
  • 打赏
  • 举报
回复
或调用:


create PROCEDURE GY_DBBak
@bakequip int, -- 备份设备:磁盘&磁带
@bakpath varchar(50), -- 带全路径的备份文件名
@baktype int, -- 完全备份&增量备份
@baklog int, -- ‘0’备份日志
@bakdb int, -- ‘0’备份数据库
@kind varchar(7), --备份还是恢复

@retmsg varchar(20) output --返回信息
AS
DECLARE @DevName_data varchar(50)
DECLARE @DevName_log varchar(50)
declare @db_path varchar(100)
declare @log_path varchar(100)

DECLARE @RC INT

SELECT @db_path = @bakpath + '.dat'
SELECT @log_path = @bakpath + 'log.dat'
SELECT @RC=0
select @DevName_data='dali',@DevName_log='dalilog'

DBCC CHECKDB(数据库名)
/***********************************************************
** CREATE BACKUP AND RESTORE DEVICES
************************************************************/
IF @RC=0
BEGIN

EXEC sp_addumpdevice 'disk', @DevName_data,@db_path

exec sp_addumpdevice 'disk', @DevName_log,@log_path
select @rc=@@error
IF @RC<>0
begin
EXEC SP_DropDevice @Devname_data
exec sp_dropdevice @devname_log
SELECT @RC=-1000
return @rc
end
END

IF @kind='backup'
BEGIN
IF @bakequip=0
BEGIN
IF @baktype=0
BEGIN
IF @bakdb=0
BEGIN
BACKUP DATABASE 数据库名 TO DISK=@Devname_data
WITH INIT
END
IF @baklog=0
BEGIN
BACKUP LOG 数据库名 WITH NO_LOG
BACKUP LOG 数据库名 TO DISK=@DevName_log
WITH INIT,NO_TRUNCATE
END
END
ELSE BEGIN
IF @bakdb=0
BEGIN
BACKUP DATABASE 数据库名 TO DISK=@DevName_data
WITH NOINIT
END
IF @baklog=0
BEGIN
BACKUP LOG 数据库名 WITH NO_LOG
BACKUP LOG 数据库名 TO DISK=@DevName_log
WITH NOINIT,NO_TRUNCATE
END
END
END
SELECT @retmsg='数据库备份成功!'
END

IF @kind='restore'
BEGIN
RESTORE DATABASE 数据库名 FROM DISK= @DevName_data WITH REPLACE
SELECT @retmsg='恢复数据库成功!'
END

EXEC SP_DropDevice @Devname_data
exec sp_dropdevice @devname_log

RETURN 0

---测试:
declare @ varchar(100)
exec gy_dbbak 0,'aa',0,0,0,'backup',@ output
select @
pengdali 2003-08-12
  • 打赏
  • 举报
回复
--备份
backup database sys to disk='c:\目录\a.bak' with init


--还原
use master
RESTORE DATABASE TestDB FROM DISK = 'c:\2002.dat'
slayerbb 2003-08-12
  • 打赏
  • 举报
回复
ok,结贴!谢谢各位大虾!
luchai 2003-08-12
  • 打赏
  • 举报
回复
停止对该数据库的操作
littlekoral 2003-08-12
  • 打赏
  • 举报
回复
用restore database 数据库名 from disk='c:\backup'恢复数据库时,总是提示数据库正在使用中,如何使得数据库不使用?谢谢

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧