陸廠某DB,需每天還原台廠的DB Full Backup,但不需要即時、也不想佔用MPLS頻寬
故沒採用log shipping等機制,直接用OneDrive +Powershell來抓同步到陸廠的備份檔,排程每天半夜進行還原
沒記錯話,以下是參考:
《PowerShell V3——SQL Server 2012資料庫自動化運維權威指南》——1.8 建立SQL Server例項物件 原文網址:https://itw01.com/GIJ2EJG.html
Set-Location "D:\OneDrive\SQL_Backup\"
#假設要還原的檔案在D:\OneDrive\SQL_Backup\底下
$source = get-childitem -filter *.bak "D:\OneDrive\SQL_Backup\" |sort lastwritetime |select -last 1 |select-object -ExpandProperty Name
#過濾篩選出最新的bak檔
Import-Module sqlps -DisableNameChecking
#匯入sqlps模組
$instancename = ‘ServerName或IP’
#設定實例名稱為Server的名稱或IP
$server = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Server -ArgumentList $instancename
#建立server instance變數
$server.ConnectionContext.set_LoginSecure($false)
#關閉微軟登入驗證
$server.ConnectionContext.set_Login('登入帳號')
#設定登入帳號
$server.ConnectionContext.set_securePassword((ConvertTo-SecureString '登入密碼' -AsPlainText -Force))
#設定登入密碼
$server.ConnectionContext.ConnectionString
#檢查ConnectionContext是否正確
#下語法
Invoke-Sqlcmd -Query “USE [master]
RESTORE DATABASE [DB_NAME] FROM DISK = N'D:\OneDrive\SQL_Backup\$source' WITH FILE = 1, MOVE N'DB_NAME_Data' TO N'D:\MSSQL\DB_NAME_Data.mdf', MOVE N'DB_NAME_Log' TO N'D:\MSSQL\DB_NAME_log.ldf', NOUNLOAD, REPLACE, STATS = 5
GO”
#這段是直接由MSSQL手動操作後,將指令碼匯出來的,很方便
最後放到排程來進行。內容檔案路徑名稱、資料庫名稱有改過,避免沒改全,請檢查修正