请教:关于数据库备份与恢复的问题
如下文,存储过程 GY_DBBak 实现数据库 AAA的备份和恢复。 但是备份文件只能备份在SQL Server 服务器上。 我想备份到本机,如何实现?
当我给出选择本机路径及文件时, 提示:设备不存在或设备脱机
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
ALTER 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 @db_paths varchar(50)
DECLARE @log_paths varchar(50)
SELECT @db_paths = @bakpath + '.dat'
SELECT @log_paths = @bakpath + 'log.dat'
DBCC CHECKDB(AAA)
IF @kind='backup'
BEGIN
IF @bakequip=0
BEGIN
IF @baktype=0
BEGIN
IF @bakdb=0
BEGIN
BACKUP DATABASE AAA TO DISK=@db_paths
WITH INIT
END
IF @baklog=0
BEGIN
BACKUP LOG AAA WITH NO_LOG
BACKUP LOG AAA TO DISK=@log_paths
WITH INIT,NO_TRUNCATE
END
END
ELSE BEGIN
IF @bakdb=0
BEGIN
BACKUP DATABASE AAA TO DISK=@db_paths
WITH NOINIT
END
IF @baklog=0
BEGIN
BACKUP LOG AAA WITH NO_LOG
BACKUP LOG AAA TO DISK=@log_paths
WITH NOINIT,NO_TRUNCATE
END
END
END
SELECT @retmsg='数据库备份成功!'
END
IF @kind='restore'
BEGIN
RESTORE DATABASE AAA FROM DISK= @db_paths WITH REPLACE
SELECT @retmsg='恢复数据库成功!'
END
RETURN 0
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
问题点数:50、回复次数:6Top
1 楼tj_dns(愉快的登山者)回复于 2002-07-05 09:25:16 得分 0
数据库备份设备只能在服务器上建立,你可以在服务器上备份完后,再将备份文件拷贝到你的机器上。Top
2 楼OpenVMS(半知半解)回复于 2002-07-05 09:31:31 得分 5
USE master
EXEC sp_addumpdevice 'disk', 'networkdevice',
'\\Localservername\sharename\path\filename.ext'
用NT帐号登录SQL,上面的路径指向本地,要加网络路径,开放文件夹共享
Top
3 楼leimin(黄山光明顶)回复于 2002-07-05 11:46:32 得分 40
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
DBCC CHECKDB(Northwind)
/***********************************************************
** 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 Northwind TO DISK=@Devname_data
WITH INIT
END
IF @baklog=0
BEGIN
BACKUP LOG Northwind WITH NO_LOG
BACKUP LOG Northwind TO DISK=@DevName_log
WITH INIT,NO_TRUNCATE
END
END
ELSE BEGIN
IF @bakdb=0
BEGIN
BACKUP DATABASE Northwind TO DISK=@DevName_data
WITH NOINIT
END
IF @baklog=0
BEGIN
BACKUP LOG Northwind WITH NO_LOG
BACKUP LOG Northwind TO DISK=@DevName_log
WITH NOINIT,NO_TRUNCATE
END
END
END
SELECT @retmsg='数据库备份成功!'
END
IF @kind='restore'
BEGIN
RESTORE DATABASE Northwind FROM DISK= @DevName_data WITH REPLACE
SELECT @retmsg='恢复数据库成功!'
END
RETURN 0
Top
4 楼jennifergao()回复于 2002-07-08 15:53:37 得分 0
谢谢!
但是,提示‘逻辑设备名不能为NULL’.
select @DevName_data = 'Mybackupdev'
调试时,提示:逻辑设备 'MyBackupdev' 已存在。
是不是不能在存储过程中添加备份设备, 因为,每调用一次该过程就创建一个新设备。
请问:如何直接在server端添加一个网络路径的备份设备?Top
5 楼xjbs(大鱼)回复于 2002-07-13 12:18:23 得分 5
最好不要在存储过程中添加,,
或是添加前先看是不是存在了,不在再加,,Top




