陸廠某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手動操作後,將指令碼匯出來
內容檔案路徑名稱、資料庫名稱有改過,避免沒改全,請檢查修正