環境:win2k+sqlserver 2K SP3
backup database msdb to disk=’computer estfilename.bak’ --(注意大小寫)
如果SQL異地備份失敗,歸根結底是權限問題! H
那麼你的SQLServer的啓動用戶必須在FileServer上有足夠的權限!
1、SQLServer上新建一SQLUser用戶權限大一點。
2、FileServer上建同一用戶對某一文件夾有足夠權限,就是在兩臺機器上建相同的用戶名和密碼,然後與這個用戶名登入電腦。
3、兩機的SQLUser密碼相同(方便一點)
4、將SQLServer改爲SQLUser啓動
(管理工具-->服務-->mssql項-->屬性-->指定用戶及密碼,是計算機的登入用戶名)
5、backup database 數據庫 to disk=’192.168.*.*文件夾ShareBak.Bak’就可以了。
作業:db_backup2pc @databaseName='databaseName',@filepath='filepath'
@databaseName nvarchar(100) = null, --數據庫名
@filepath nvarchar(125) = null --文件保存路徑(IP+隱藏共享+)
AS
BEGIN
DECLARE
@year1 varchar(4),
@month1 varchar(2),
@day1 varchar(2),
@flag varchar(255),
@proc_result tinyint, /*返回系統存儲過程xp_cmdshell運行結果*/
@sqlstr varchar(2000),
@createdir varchar(255) /*建立文件備份的目錄*/
begin
-- Get year & month &day fromat of the day before yesterday
-- SET @year1 = substring(convert(varchar,datepart(yyyy,getdate()-2)),3,2)
SET @month1 =substring(convert(varchar,datepart(mm,getdate())),1,2)
SET @day1=substring(convert(varchar,datepart(dd,getdate())),1,2)
-- if len(@month1)<2 set @month1 = '0' + @month1 /* 不足兩位的前面加零 */
-- if len(@day1)<2 set @day1 = '0' + @day1
set @sqlstr='dir '+@filepath+@databaseName+'_'+@month1+'-'+@day1
EXEC @proc_result = master..xp_cmdshell @sqlstr,no_output
if (@proc_result<>0) /*系統存儲過程xp_cmdshell返回代碼值:0(成功)或1(失敗)*/
begin
set @createdir='md '+@filepath+@databaseName+'_'+@month1+'-'+@day1 /*建立文件備份的目錄*/
EXEC master..xp_cmdshell @createdir,no_output
set @sqlstr='backup database '+@databaseName+' to disk='''+@filepath+@databaseName+'_'+@month1+'-'+@day1+''+@databaseName+'.bak''' --+' with init'
Execute (@sqlstr) /* 備份databaseName數據 */
set @sqlstr='backup database master to disk='''+@filepath+@databaseName+'_'+@month1+'-'+@day1+'master.bak'''
Execute (@sqlstr) /* 備份 master 數據 */
set @sqlstr='backup database msdb to disk='''+@filepath+@databaseName+'_'+@month1+'-'+@day1+'msdb.bak'''
Execute (@sqlstr) /* 備份 msdb 數據 */
set @flag='Backup database successful.'
end
else
set @flag='The directory "'+@databaseName+'_'+@month1+'-'+@day1+'" has been in, backup database unsuccessful.'
print @flag
END
END
GO
作業:delete_db_backupfile2pc @databaseName='databaseName',@filepath='filepath'
@databaseName nvarchar(100)=null,
@filepath nvarchar(125)=null
AS
DECLARE
@year1 varchar(4),
@month1 varchar(2),
@day1 varchar(2),
@sqlstr varchar(2000),
@flag varchar(255),
@proc_result tinyint /*返回系統存儲過程xp_cmdshell運行結果*/
begin
if @databaseName = null or @filepath = null
set @flag='Variable Error!'
else
begin
--保存7天的數據
SET @month1 =substring(convert(varchar,datepart(mm,getdate()-7)),1,2)
SET @day1=substring(convert(varchar,datepart(dd,getdate()-7)),1,2)
-- if len(@month1)<2 set @month1 = '0' + @month1 /* 不足兩位的前面加零 */
-- if len(@day1)<2 set @day1 = '0' + @day1
set @sqlstr='dir '+@filepath+@databaseName+'_'+@month1+'-'+@day1
EXEC @proc_result = master..xp_cmdshell @sqlstr,no_output
if (@proc_result=0) /*系統存儲過程xp_cmdshell返回代碼值:0(成功)或1(失敗)*/
begin
set @sqlstr='del '+@filepath+@databaseName+'_'+@month1+'-'+@day1+' /q'
exec master..xp_cmdshell @sqlstr,no_output --刪除目錄下的文件
set @sqlstr='rd '+@filepath+@databaseName+'_'+@month1+'-'+@day1
exec master..xp_cmdshell @sqlstr,no_output --刪除目錄
set @flag='Delete file successful!'
end
else
set @flag='Can not find "'+@filepath+@databaseName+'_'+@month1+'-'+@day1+'" file!'
end
print @flag
end
GO