错误提示!
看过邹建大哥的文章后,我为备份建的存储过程可总不成,如下:
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项--