備忘錄_20160105(定位) 修改 回首頁

程式 2019-08-20 10:59:10 1566269950 100
定期備份資料庫

定期備份資料庫
運用 Windows 內建的排程,用系統管理員帳號密碼設定成不登入也執行的狀態。

【script.sql】
backup database databasename to disk=N'c:\backup_buffer\databasename.dat' with format

【backup.bat】
@echo off
cls

echo 刪除單機舊備份
del /f /q databasename.dat

echo 斷開網路磁碟機
net use z: /delete /yes
ping -n 5 127.0.0.1 > nul

echo 連上網路磁碟機
net use z: \\192.168.1.99\backupfolder password /user:username /persistent:no
ping -n 5 127.0.0.1 > nul

echo 備份資料庫
sqlcmd -U "username" -P "password" -S 192.168.1.66,1433 -d "databasename" -i "script.sql" -o "script.log"

for /F "tokens=1-4 delims=/ " %%i in ('date /t') do (

echo 更改檔名
ren databasename.dat %%l.dat

echo 刪除目的位置檔案
del /f /q z:\%%l.dat

echo 移動備份檔案
move /y %%l.dat z:\%%l.dat

) 

echo 斷開網路磁碟機
net use z: /delete /yes

2020-07-09 追加

【工作排程器】
最高權限,
不登入也可執行dbMain_backup.bat,
起始位置 e:\backup (dbMain_backup.sql與dbMain_backup.bat的位置)

e:\backup\dayofweek (一星期的備份檔)
e:\backup\month (每個月的備份檔)
-------------------------
【dbMain_backup.sql】
use dbMain
go

alter database dbMain set recovery simple with no_wait
dbcc shrinkfile(dbMain_LOG1, 1)
dbcc shrinkfile(dbMain_LOG2, 1)
dbcc shrinkdatabase(dbMain, truncateonly)
alter database dbMain set recovery full with no_wait
go

backup database dbMain
to disk=N'e:\backup\dbMain.dat' 
with format
go
-------------------------
【dbMain_backup.bat】
@echo off
cls

for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "varDT=%%a"
for /f "tokens=2 delims==" %%a in ('wmic path win32_localtime get dayofweek /value') do set "varDOW=%%a"
set "varYYYY=%varDT:~0,4%"
set "varMM=%varDT:~4,2%"
set "varDD=%varDT:~6,2%"
set "varHour=%varDT:~8,2%" 
set "varMin=%varDT:~10,2%"
set "varSec=%varDT:~12,2%"

set "strFN=dbMain-M%varMM%-DOW%varDOW%-%varYYYY%-%varMM%-%varDD%-%varHour%-%varMin%-%varSec%.dat"
set "strFN1=month\dbMain-M%varMM%-*.dat"
set "strFN2=dayofweek\dbMain-*-DOW%varDOW%-*.dat"

net use u: /delete /yes
ping -n 5 127.0.0.1 > nul

net use u: \\192.168.1.166\somewhere\database_backup "your_password" /user:your_username /persistent:no
ping -n 5 127.0.0.1 > nul

del /f /q dbMain.dat
sqlcmd -U "your_login_name" -P "your_login_password" -S 192.168.1.105,1601 -d "dbMain" -i "dbMain_backup.sql" -o "dbMain_backup.log"

ren dbMain.dat %strFN%

del /f /q %strFN1%
del /f /q %strFN2%
del /f /q u:\%strFN1%
del /f /q u:\%strFN2%
move %strFN% dayofweek
copy dayofweek\%strFN% month
copy dayofweek\%strFN% u:\month
copy dayofweek\%strFN% u:\dayofweek

net use u: /delete /yes