SQL 2000备份问题

allen0118 2015-11-30 08:36:45
通过一个存储过程进行数据库备份,本来是备份在服务器本机的硬盘里面的,但是由于硬盘空间不足,所以我映射了另外一台服务器上面的一个硬盘,打算直接把数据库备份到映射的那个盘上面去,但是我将备份路径改变之后,每天晚上的那个备份的定时任务都执行了,但是在映射的那个盘里面没有任何文件,最开始发现没有写入权限,后来放开了权限,可以创建文件,但是依旧备份不过去。

SQL 2000 的貌似跟2008的不一样,一定要有那个 devices ?

以下是备份代码,因为是公司的东西,所以我把数据库名改了一下。

CREATE PROCEDURE [dbo].[sp_BackUp] AS

DECLARE @DEVICENAME VARCHAR(16), @DEVICENAME_HDB VARCHAR(16), @DEVICENAME_YDB VARCHAR(16),
@DEVICENAME_WDB VARCHAR(16), @DISK VARCHAR(200), @COMMAND VARCHAR(200), @isdaily bit, @CURDATE DATETIME

SELECT @CURDATE=GETDATE()
if datepart(weekday,@CURDATE)<>1
BEGIN
SELECT @isdaily=1, @DEVICENAME = 'VTSDDB_D2'
END
else
SELECT @isdaily=0, @DEVICENAME = 'VTSDDB_W2'

--SELECT @DISK = 'd:\backupdb\'+@DEVICENAME+'.dat' ---这是原来的备份路径,备份在本地D盘。
SELECT @DISK = 'm:\'+@DEVICENAME+'.dat' ---这是我改变之后的路径,映射了一个M盘。

IF NOT EXISTS(SELECT * FROM master.dbo.sysdevices WHERE name = @DEVICENAME)
BEGIN
EXECUTE master.dbo.sp_addumpdevice 'disk', @DEVICENAME, @DISK
IF @@ERROR<>0
BEGIN
RAISERROR('Add backup device fail.', 16, 1)
RETURN
END
END


IF datepart(hour, @CURDATE) BETWEEN 1 AND 23
BEGIN
SELECT @DEVICENAME = 'VTSDDB_D2'
SELECT @COMMAND = 'BACKUP DATABASE DB1 TO ' + @DEVICENAME + ' WITH NOUNLOAD, STATS=10, INIT, NOSKIP, NAME=''DB1'''
EXECUTE(@COMMAND)

SELECT @COMMAND = 'BACKUP DATABASE DB2 TO ' + @DEVICENAME +' WITH NOUNLOAD, STATS=10, NOINIT, NOSKIP, NAME=''DB2'''
EXECUTE(@COMMAND)

SELECT @COMMAND = 'BACKUP DATABASE master TO ' + @DEVICENAME +' WITH NOUNLOAD, STATS=10, NOINIT, NOSKIP, NAME=''master'''
EXECUTE(@COMMAND)

SELECT @COMMAND = 'BACKUP DATABASE msdb TO ' + @DEVICENAME +' WITH NOUNLOAD, STATS=10, NOINIT, NOSKIP, NAME=''msdb'''
EXECUTE(@COMMAND)

SELECT @COMMAND = 'BACKUP DATABASE model TO ' + @DEVICENAME +' WITH NOUNLOAD, STATS=10, NOINIT, NOSKIP, NAME=''model'''
EXECUTE(@COMMAND)

END

GO



以下是 master.dbo.sysdevices 的内容,M 开头的路径是我增加进去的,但是貌似数据库并没有备份到这个位置,

VTSDDB_D 0 0 0 16 2 d:\backupdb\VTSDDB_D.dat
VTSDDB_D2 0 0 0 16 2 m:\VTSDDB_D2.dat
VTSDDB_L 0 0 0 16 2 d:\backupdb\VTSDDB_L.dat
VTSDDB_W 0 0 0 16 2 d:\backupdb\VTSDDB_W.dat
VTSDDB_W2 0 0 0 16 2 m:\VTSDDB_W2.dat
VTSHDB 0 0 0 16 2 d:\backupdb\VTSHDB.dat
VTSHDB2 0 0 0 16 2 m:\VTSHDB2.dat
VTSYDB 0 0 0 16 2 d:\backupdb\VTSYDB.dat
VTSYDB2 0 0 0 16 2 m:\VTSYDB2.dat


请大家帮忙看看是哪里出错了,谢谢!!
...全文
114 点赞 收藏 13
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
allen0118 2015-12-12
不好意思,结贴晚了,自己找到原因:SQL本身有限制,不允许直接备份至映射的盘符,转用移动硬盘就可以。
回复
allen0118 2015-11-30
引用 8 楼 Tiger_Zhao 的回复:
执行 Job 的用户不等于当前用户啊,那个用户通常是 Local system,没有网络访问权限的。 你到服务中,把 SQL Server 的启动用户改为 Network service 或某个域用户试试。
我手动执行这个存储过程也是一样的错误呢,,,
回复
中国风 2015-11-30
http://blog.csdn.net/roy_88/article/details/1758497 参照以上局域网备份方法,主要看映射方法
回复
Tiger_Zhao 2015-11-30
执行 Job 的用户不等于当前用户啊,那个用户通常是 Local system,没有网络访问权限的。
你到服务中,把 SQL Server 的启动用户改为 Network service 或某个域用户试试。
回复
allen0118 2015-11-30
引用 2 楼 fredrickhu 的回复:
下面的语句没什么问题 猜测是映射出了问题 建议删除映射 重新建立映射 再调用JOB试试。 另外查看一下ERRORLOG。看看有没有报什么错误。
版主好,我查看了以下log,发现确实提示找不到指定的路径,猜测可能是因为那个映射盘符的问题,但是我在服务器上面又能直接打开那个映射的盘符啊。 下面是日志: BackupDiskFile::CreateMedia: Backup device 'm:\VTSDDB_D2.dat' failed to create. Operating system error = 3(The system cannot find the path specified.).
回复
中国风 2015-11-30
declare @s nvarchar(4000),@del nvarchar(4000)
SQL2000不支持max,自己改改
回复
中国风 2015-11-30
为每一个DB增加一个磁带备份设备 或直接用备份路径 以下提供方法

CREATE PROCEDURE sp_BackDB
	WITH ENCRYPTION
AS

declare @s nvarchar(max),@del nvarchar(MAX),@Dt datetime
select  @s='',@del='',@Dt=getdate()

select 
    @s=@s+
        char(13)+'backup database  '+quotename(Name)+'  to disk =''F:\DBBak\'+Name+'_'+convert(varchar(8),@Dt,112)+'.bak'' WITH INIT;',
    @del=@del+
        char(13)+'exec master..xp_cmdshell '' del F:\DBBak\'+Name+'_'+convert(varchar(8),@Dt-3,112)+'.bak'', no_output;' 
from master..sysdatabases 
where  name  IN('master','msdb')--排除系统DB
order by dbid asc

exec (@del)

exec(@s)
回复
中国风 2015-11-30
以上为备份并删除3天前的备份文件
回复
allen0118 2015-11-30
引用 1 楼 u010192842 的回复:
您手动执行一下备份语句,看看有没有报错。
您好,手动执行确实有个错误,提示不能打开 vtsddb_d2 ,但是这个名字是存在的啊。 Server: Msg 3201, Level 16, State 1, Line 1 Cannot open backup device 'VTSDDB_D2'. Device error or device off-line. See the SQL Server error log for more details. Server: Msg 3013, Level 16, State 1, Line 1 BACKUP DATABASE is terminating abnormally.
回复
--小F-- 2015-11-30
下面的语句没什么问题 猜测是映射出了问题 建议删除映射 重新建立映射 再调用JOB试试。 另外查看一下ERRORLOG。看看有没有报什么错误。
回复
Yole 2015-11-30
您手动执行一下备份语句,看看有没有报错。
回复
Tiger_Zhao 2015-11-30
还有映射应该是会话相关的,你当前操作系统用户的映射其它用户是用不上的。
直接用 UNC 路径。
回复
Tiger_Zhao 2015-11-30
[Quote=引用 10 楼 chenpeng0118 的回复:]我手动执行这个存储过程也是一样的错误呢[/Quote]
你用 sa 登录,用的是 SQL Server 服务的用户权限去备份,和你当前操作系统用户没有关系!
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2015-11-30 08:36
社区公告
暂无公告