日期:2014-05-18  浏览次数:20740 次

错误提示!
看过邹建大哥的文章后,我为备份建的存储过程可总不成,如下:
create   proc   p_backupdb
@dbname   sysname= 'gzbj_db1 ',       --要备份的数据库名称,不指定则备份当前数据库
@bkpath   nvarchar(260)= '\\192.168.1.6\backup\backup ',   --备份文件的存放目录,不指定则使用SQL默认的备份目录
@bkfname   nvarchar(260)= ' ',   --备份文件名,文件名中可以用\DBNAME\代表数据库名,\DATE\代表日期,\TIME\代表时间
@bktype   nvarchar(10)= 'DB ',   --备份类型: 'DB '备份数据库, 'DF '   差异备份, 'LOG '   日志备份
@appendfile   bit=1       --追加/覆盖备份文件
as
  declare   @sql   varchar(8000)
  if   isnull(@dbname, ' ')= ' '   set   @dbname=db_name()
  if   isnull(@bkpath, ' ')= ' '   set   @bkpath=dbo.f_getdbpath(null)
  if   isnull(@bkfname, ' ')= ' '   set   @bkfname= '\DBNAME\_\DATE\_\TIME\.BAK '
  set   @bkfname=replace(replace(replace(@bkfname, '\DBNAME\ ',@dbname)
    , '\DATE\ ',convert(varchar,getdate(),112))
    , '\TIME\ ',replace(convert(varchar,getdate(),108), ': ', ' '))
  set   @sql= 'backup   '+case   @bktype   when   'LOG '   then   'log   '   else   'database   '   end   +@dbname
    + '   to   disk= ' ' '+@bkpath+@bkfname
    + ' ' '   with   '+case   @bktype   when   'DF '   then   'DIFFERENTIAL, '   else   ' '   end
    +case   @appendfile   when   1   then   'NOINIT '   else   'INIT '   end
  print   @sql
  exec(@sql)
go

可在执行的时候总出现如下错误:
backup   database   ylbx_db1   to   disk= '\\192.168.1.6\E\gzbj_db1_20070529_121005.BAK '   with   NOINIT
服务器:   消息   3201,级别   16,状态   1,行   1
无法打开备份设备   '\\192.168.1.6\E\gzbj_db1_20070529_121005.BAK '。设备出现错误或设备脱机。详细信息请参阅   SQL   Server   错误日志。
服务器:   消息   3013,级别   16,状态   1,行   1
BACKUP   DATABASE   操作异常终止。

这是为什么呢?


------解决方案--------------------
declare @strsql varchar(1000)
declare @strdirname varchar(50)
declare @strcmd varchar(50)
declare @strsend varchar(1000)
declare @strdate varchar(50)
exec master..xp_cmdshell 'net use \\192.168.0.151\d$ ADMIN_PASSWORD /user:192.168.0.151\administrator '
set @strsql= 'backup database new_his to disk= ' '\\192.168.0.151\d$\serverd\ '
set @strdirname=replace(substring(convert(varchar(20),getdate(),120),1,10), '- ', ' ')+ '12 '
set @strcmd= 'md \\192.168.0.151\d$\serverd\ '
set @strcmd=@strcmd+@strdirname
exec master..xp_cmdshell @strcmd
--print @strsql
set @strsql=@strsql+@strdirname+ '\new_hisbackup.dat ' ' with init,nounload,noskip,noformat '
--print @strsql
exec (@strsql)


------------------
ADMIN_PASSWORD 是网络 上机器的系统管理密码

------解决方案--------------------
那你的SQLServer的启动用户必须在FileServer上有足够的权限!
--------------------^^^---------------------------------
1、SQLServer上新建一SQLUser用户权限大一点。
2、FileServer上建同一用户对某一文件夹有足够权限。
3、两机的SQLUser密码相同(方便一点)
4、将SQLServer改为SQLUser启动
(管理工具--> 服务--> mssql项--