SQLServer使用腳本執行數據庫備份


 背景

sql server express版無法使用作業,提供一種解決思路

 

fullbak.sql 完整備份

數據庫實例級別的完整備份,備份路徑為E:\sqlbak\數據庫名\,注意需要添加好當前數據庫實例各數據庫名的子目錄

EXEC sp_MSForEachDB 'USE [?];
PRINT DB_NAME();
DECLARE @databasename NVARCHAR(128) =DB_NAME();

--恢復模式為完整 
IF EXISTS (SELECT *
           FROM sys.databases
           WHERE name=DB_NAME()AND recovery_model_desc=''FULL'')BEGIN
    DECLARE @backupname NVARCHAR(128);
    SET @backupname=''E:\sqlbak\''+@databasename+''\''+@databasename+''_fullbak_''+REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(50), GETDATE(), 120), ''-'', ''''), '':'', ''''), '' '', ''_'')+''.bak'';
    EXEC(''
BACKUP DATABASE [''+@databasename+''] TO  DISK = N''''''+@backupname+''''''
WITH  RETAINDAYS = 14, NOFORMAT, NOINIT,  NAME = N''''''+@databasename+''-完整 數據庫 備份'''', 
SKIP, NOREWIND, NOUNLOAD, COMPRESSION,  STATS = 10
''   );
END;
'

cleanbak.sql 清理腳本

/*  ---   開啟xp_cmdshell權限,可通過數據庫操作文件  ---
use master;
go

sp_configure 'show advanced options',1
reconfigure
go
sp_configure 'xp_cmdshell',1
reconfigure
go
*/

exec master.dbo.xp_cmdshell 'forfiles /p "E:\sqlbak" /s /m *.bak /d -15 /c "cmd /c del @path"'

SQLBak.bat 使用bat執行sql文件 

@ECHO OFF?

SET dbhost=127.0.0.1
SET dbuser=sa
SET dbpasswd=123456
set dbName=master
SET sqlpath=%~dp0
set bakfile=fullbak.sql
set cleanfile=cleanbak.sql

::執行SQL腳本
osql -S %dbhost% -U %dbuser% -P %dbpasswd% -d %dbName% -i %sqlpath%%bakfile%
ECHO 備份完成!

::執行清理腳本
osql -S %dbhost% -U %dbuser% -P %dbpasswd% -d %dbName% -i %sqlpath%%cleanfile%
ECHO 清理完成!

PAUSE

@ECHO Done!?

配置windows計划任務,執行該bat文件

【管理工具】-【任務計划程序】-【創建基本任務】

選擇每天2:00,執行SQLBak.bat 文件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM