sql server 遠程備份 bak 刪除


前言:

管理一個公司的一個服務器,最近有一些維護SQLserver數據庫活弄,寫下防止忘了.

因為公司采用SQL\Redis\MongoDB共用,SQL用來存儲基礎的結構\權限\等一些雜七雜八的東西.

Redis用來給自動化系統使用,用來做些不方便在程序里搞的小動作.mongoDB用來存儲大量的用戶\設備上報和操作信息,數據分析庫.

然后老板說了.我們所有的基礎都基於SQLserver,這個做下備份.讓弄個遠程備份.

然后備份了一些日子發現有點大,就弄個刪除,刪除一下.

懶得看的話直接去最后,拷走用.前面有幾個步驟.你得容我扯扯蛋.

1.創建備份文件夾

  • 進入到你的數據庫在的服務器.遠程網絡訪問那個共享文件夾,如果可以了第一步就OK了
  • 遠程到你想備份的電腦,在你想備份的地方建立一個文件夾,共享讀寫.

2.開啟執行備份語句

  • 現在要開啟xp_cmdshell 語句執行,這玩意默認不是開啟的,說防止權限提升.你說防止就防止吧.現在需要備份先開啟
  • EXEC sp_configure 'show advanced options', 1;
    RECONFIGURE;
    EXEC sp_configure 'xp_cmdshell', 1;
    RECONFIGURE;
  • 開啟高級選項 ,開啟xp_cmdshell ,如果想看高級選項的內容可以看 exec sp_configure.看看更改的結果.
  • 高級選項一般是不開啟的.xp_cmdshell也是不開啟的.不要單獨這樣寫.等會把這玩意寫到計划作業里面,就是第三步開頭.

3.遠程備份

  • 建立一個計划作業,在步驟里面寫遠程訪問的命令
  • 用遠程賬戶訪問文件夾,然后用xp_cmdshell執行備份命令,切掉訪問的用戶.
  • 大概的代碼寫一下

 --開啟高級選項和shell命令使用

 EXEC sp_configure 'show advanced options', 1;
 RECONFIGURE;
 EXEC sp_configure 'xp_cmdshell', 1;
 RECONFIGURE;

--驗證用戶 
exec master..xp_cmdshell 'net use \\172.200.218.110\188a password /user:172.200.218.110\administrator'; --准備要備份的地址和文件信息 declare @dstart varchar(50); set @dstart = convert(varchar(100),GetDate(),112); declare @path varchar(400); set @path ='\\172.200.218.110\\188a\\12a\testdb'+@dstart+'.bak' --備份數據庫 backup database testdb to disk=@path WITH FORMAT --斷開 exec master..xp_cmdshell'net use \\172.200.218.110\188a /delete'
  • 開啟選項的就不說了
  • exec master..xp_cmdshell 'net use 固定語句讓你准備開始執行命令, \\172.200.218.110\188a 網絡共享地址, password 存備份的電腦的密碼, /user: 固定句式,
    172.200.218.110\administrator 存備份域下的用戶, 如此就開啟了對這個存備份的電腦的文件夾的操作權限.
  • \\172.200.218.110\\188a\\12a\ 這些是存備份的文件夾,然后就是備份的名字了.可以備份多天的.
  • backup database testdb to disk=@path WITH FORMAT 備份數據庫 testdb ,到指定的路徑和給定的文件名.
  • exec master..xp_cmdshell'net use \\172.200.218.110\188a /delete' 關閉對這個存備份的電腦的文件夾的操作權限.

4.遠程刪除

  上面開啟了多天的備份,或者限時的備份,

 

  跟設置的計划任務有關,

 

  遠程備份要考慮帶寬.我們內部是萬兆的網絡,數據庫又不大.因為我們數據庫開啟的簡單日志模式,

  平時的操作日志太多.刪除的也多.自動化好多設備運行的垃圾數據,如果開啟完全日志,日志量嚇人.所以一天備份一次,耗時3分多,

  但是時間長了也受不了.服務器雖然大也不能可勁造.地主家也沒有余糧.所以固定時間的備份刪除很有必要

 

  exec master..xp_delete_file 0,N'\\172.20.218.11\\188a','bak',time

  • 這個玩意要放在用戶開啟遠程訪問里面.
  • exec master..xp_delete_file 0 固定句式,老子要刪東西了
  • N'\\172.20.218.11\\188a' 要刪這個目錄下的東西
  • 'bak' 我要刪的是這樣東西
  • time 這個時間點以前的都刪

5.關閉備份語句

 前面收開啟了高級選項和shell不安全,有權限提升的危險,我們就關了shell和高級選項.

EXEC sp_configure 'xp_cmdshell', 0;
RECONFIGURE;
EXEC sp_configure 'show advanced options', 0;
RECONFIGURE;

總體合起來像這樣

--開啟高級選項
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;

--驗證用戶 
exec master..xp_cmdshell 'net use \\172.200.218.110\188a password /user:172.200.218.110\administrator';
--准備要備份的地址和文件信息
declare @dstart varchar(50);
set @dstart = convert(varchar(100),GetDate(),112);
declare @path varchar(400);
set @path ='\\172.200.218.110\\188a\testdb'+@dstart+'.bak'
--備份數據庫
backup database testdb to disk=@path WITH FORMAT

--刪除過期數據庫
declare @endtime varchar(200)
set @endtime = convert(varchar(100),GetDate()-60,120)
exec master..xp_delete_file 0,N'\\172.20.218.11\\188a','bak',@endtime

--斷開
exec master..xp_cmdshell'net use \\172.200.218.110\188a /delete'

--關閉高級選項
EXEC sp_configure 'xp_cmdshell', 0;
RECONFIGURE;
EXEC sp_configure 'show advanced options', 0;
RECONFIGURE;

 

大概就這樣,我也是用一次,有些代碼因為怕泄露公司信息,改了下,不知道能用不,

如果不能用就看個意思

 

 

 想搞的更多,你可以到官網上.更多功能 

 


免責聲明!

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



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