作业调度备份数据的存储过程出错

时间:2022-06-22 14:00:50
CREATE PROCEDURE up_BakDataToNet 

AS

begin
--创建映射
--系统数据库备份为192.168.20.88上的共享文件夹,administrator具有读写权限
--12345为administrator网络访问192.168.20.88的密码

exec master..xp_cmdshell 'net use w: \\192.168.20.88\系统数据库备份$ 12345 192.168.20.88/user:administrator',NO_OUTPUT

-----2000用游标:
declare @s nvarchar(200),@del nvarchar(200)
select  @s='',@del=''

declare datebak cursor for
select 
    [bak]='backup database  '+quotename(Name)+'  to disk =''w:'+Name+'_'+convert(char(10),getdate(),112)+'.bak''  with init',
    [del]='exec master..xp_cmdshell '' del w:'+Name+'_'+convert(char(10),getdate()-7,112)+'.bak'', no_output' 
from master..sysdatabases where dbid>4 --不备份系统数据库
open datebak

fetch next from datebak into @s,@del
while @@fetch_status=0
    begin
        exec (@del)
        exec(@s)
        fetch next from datebak into @s,@del
    end
close datebak
deallocate datebak
--删除映射
exec master..xp_cmdshell 'net use w: /delete'
end
GO

--大家帮忙看看那里出错了

16 个解决方案

#1


错误信息贴出来啊

#2


报什么错误

#3


单从脚本看么有问题,估计你的问题在使用了即不被推荐的 网络备份的问题

长出问题也就是必然了

#4


BackupDiskFile::CreateMedia: 备份设备“w:T8CRM_20110519  .bak”create 失败。操作系统错误 = 3(系统找不到指定的路径。)。

#5


liuhuayang 上个帖子加你给方案啥都不给,光在那里说闲话。

#11楼 得分:0回复于:2011-05-14 11:27:42我觉得ls是大公司里的老鸟吧,我们公司买不起磁盘阵列也做不起镜像

1 在本地备份(所有人都会这么备份的)

2 利用SQL SERVER maintance plan 在将你的文件拷贝到任何地方
(如果你备份的文件有问题,那么你将备份文件拷贝到其他地方也是徒然)

1.所有人都会这么备份的
2.如果你的备份的文件有问题,那么你将备份文件拷贝到其他地方也是徒然

我的回答是1对应你的1,2是对应你的2,然后外加一个网络的和FTP的,
或者用OS做个系统调度复制到其他服务器

请问一下我不外加个网络备份、ftp拷贝,在公司不购买磁盘阵列设备做不起镜像的前提下,
你还有什么更好的解决方案么? 

你这老手真有点冬日娜的感觉!

#6


这个错误有配置引起,也会由性能引起。关键看你问题发生的频率。 是否一直发生,还是随机发生

#7


一直发生,从未配置成功过

#8


引用 5 楼 houyichong 的回复:
liuhuayang 上个帖子加你给方案啥都不给,光在那里说闲话。

#11楼 得分:0回复于:2011-05-14 11:27:42我觉得ls是大公司里的老鸟吧,我们公司买不起磁盘阵列也做不起镜像

1 在本地备份(所有人都会这么备份的)

2 利用SQL SERVER maintance plan 在将你的文件拷贝到任何地方
(如果你备份的文件有问题,那么你将备份文件拷贝到其他……

。。。

#9


net use命令怎么这么别扭

net use w: \\192.168.20.88\系统数据库备份$ 12345 /user:administrator

#10


如果administrator帐号存在于对方机器
net use w: \\192.168.20.88\系统数据库备份$ 12345 /user:192.168.20.88\administrator

顺便说一下 不要用映射盘的方式尽量 会带来很多问题

#11


会带来什么问题呢?

#12


给我说带来什么问题嘛,高手!!!

#13


引用 12 楼 houyichong 的回复:
给我说带来什么问题嘛,高手!!!

因为通过xp_cmdshell方式调用windows接口net use生成的作用于和windows直接调用net use的作用域完全不一样,也就是说相互是不可见的.你可以试试你在sqlserver里通过xp_cmdshell调用net use生成的盘符在windows里是不可见的.

但是在有的时候(注意是有时候)这个作用域会有交集,也就是说互相又可见了.这个应该是一个bug,不太清楚2008里面修正了没有

就谈谈我以前碰到一个问题就是有系统管理员因为在不知道sqlserver的情况下,建立了映射盘进行文件备份等操作(当然盘符和tsql里面的一致),造成了xp_cmdshell调用出错(agent调用),手动去调试代码又没有任何错误,这个问题浪费了我1天的时间.

所以建议还是能不用尽量不用

#14


那你的意思是说:
xp_cmdshell调用cmd命令,有时候对windows来说是看不见的
而在windows里直接先建立好映射,再用sqlserver来备份,但是
sqlserver又看不到
windows里直接先建立好映的映射目录,
这个我倒测试应验了,

但是如果是能够成功应用起来的,那也不是什么坏事情或给你带来什么大问题啊

#15


引用 14 楼 houyichong 的回复:
那你的意思是说:
xp_cmdshell调用cmd命令,有时候对windows来说是看不见的
而在windows里直接先建立好映射,再用sqlserver来备份,但是
sqlserver又看不到
windows里直接先建立好映的映射目录,
这个我倒测试应验了,

但是如果是能够成功应用起来的,那也不是什么坏事情或给你带来什么大问题啊


你说的映射目录是什么?我的意思是用\\computer\share 这样的方式来备份(避免建立虚拟盘符) 这样不会有问题 而且也可以用net use进行认证 比如 net use \\computer\share /user:192.168.20.88/administrator

#16


右键网上邻居,“映射网络驱动器”,我用delphi做了个程序测试读写映射的网络驱动器,是可以正常使用的,但是这个xp_cmdshell就不行

#1


错误信息贴出来啊

#2


报什么错误

#3


单从脚本看么有问题,估计你的问题在使用了即不被推荐的 网络备份的问题

长出问题也就是必然了

#4


BackupDiskFile::CreateMedia: 备份设备“w:T8CRM_20110519  .bak”create 失败。操作系统错误 = 3(系统找不到指定的路径。)。

#5


liuhuayang 上个帖子加你给方案啥都不给,光在那里说闲话。

#11楼 得分:0回复于:2011-05-14 11:27:42我觉得ls是大公司里的老鸟吧,我们公司买不起磁盘阵列也做不起镜像

1 在本地备份(所有人都会这么备份的)

2 利用SQL SERVER maintance plan 在将你的文件拷贝到任何地方
(如果你备份的文件有问题,那么你将备份文件拷贝到其他地方也是徒然)

1.所有人都会这么备份的
2.如果你的备份的文件有问题,那么你将备份文件拷贝到其他地方也是徒然

我的回答是1对应你的1,2是对应你的2,然后外加一个网络的和FTP的,
或者用OS做个系统调度复制到其他服务器

请问一下我不外加个网络备份、ftp拷贝,在公司不购买磁盘阵列设备做不起镜像的前提下,
你还有什么更好的解决方案么? 

你这老手真有点冬日娜的感觉!

#6


这个错误有配置引起,也会由性能引起。关键看你问题发生的频率。 是否一直发生,还是随机发生

#7


一直发生,从未配置成功过

#8


引用 5 楼 houyichong 的回复:
liuhuayang 上个帖子加你给方案啥都不给,光在那里说闲话。

#11楼 得分:0回复于:2011-05-14 11:27:42我觉得ls是大公司里的老鸟吧,我们公司买不起磁盘阵列也做不起镜像

1 在本地备份(所有人都会这么备份的)

2 利用SQL SERVER maintance plan 在将你的文件拷贝到任何地方
(如果你备份的文件有问题,那么你将备份文件拷贝到其他……

。。。

#9


net use命令怎么这么别扭

net use w: \\192.168.20.88\系统数据库备份$ 12345 /user:administrator

#10


如果administrator帐号存在于对方机器
net use w: \\192.168.20.88\系统数据库备份$ 12345 /user:192.168.20.88\administrator

顺便说一下 不要用映射盘的方式尽量 会带来很多问题

#11


会带来什么问题呢?

#12


给我说带来什么问题嘛,高手!!!

#13


引用 12 楼 houyichong 的回复:
给我说带来什么问题嘛,高手!!!

因为通过xp_cmdshell方式调用windows接口net use生成的作用于和windows直接调用net use的作用域完全不一样,也就是说相互是不可见的.你可以试试你在sqlserver里通过xp_cmdshell调用net use生成的盘符在windows里是不可见的.

但是在有的时候(注意是有时候)这个作用域会有交集,也就是说互相又可见了.这个应该是一个bug,不太清楚2008里面修正了没有

就谈谈我以前碰到一个问题就是有系统管理员因为在不知道sqlserver的情况下,建立了映射盘进行文件备份等操作(当然盘符和tsql里面的一致),造成了xp_cmdshell调用出错(agent调用),手动去调试代码又没有任何错误,这个问题浪费了我1天的时间.

所以建议还是能不用尽量不用

#14


那你的意思是说:
xp_cmdshell调用cmd命令,有时候对windows来说是看不见的
而在windows里直接先建立好映射,再用sqlserver来备份,但是
sqlserver又看不到
windows里直接先建立好映的映射目录,
这个我倒测试应验了,

但是如果是能够成功应用起来的,那也不是什么坏事情或给你带来什么大问题啊

#15


引用 14 楼 houyichong 的回复:
那你的意思是说:
xp_cmdshell调用cmd命令,有时候对windows来说是看不见的
而在windows里直接先建立好映射,再用sqlserver来备份,但是
sqlserver又看不到
windows里直接先建立好映的映射目录,
这个我倒测试应验了,

但是如果是能够成功应用起来的,那也不是什么坏事情或给你带来什么大问题啊


你说的映射目录是什么?我的意思是用\\computer\share 这样的方式来备份(避免建立虚拟盘符) 这样不会有问题 而且也可以用net use进行认证 比如 net use \\computer\share /user:192.168.20.88/administrator

#16


右键网上邻居,“映射网络驱动器”,我用delphi做了个程序测试读写映射的网络驱动器,是可以正常使用的,但是这个xp_cmdshell就不行