之前在已安裝Microsoft Access Database Engine 64位元主機上要再安裝32位元的exe只需要
Microsoft Access Database Engine.exe /passive
現在還得要多加一個安裝參數
Microsoft Access Database Engine.exe /passive /quiet
SSIS Designer及SQL SERVER中的匯出入資料都需要安裝Microsoft Access Database Engine32位元。
之前在已安裝Microsoft Access Database Engine 64位元主機上要再安裝32位元的exe只需要
Microsoft Access Database Engine.exe /passive
現在還得要多加一個安裝參數
Microsoft Access Database Engine.exe /passive /quiet
SSIS Designer及SQL SERVER中的匯出入資料都需要安裝Microsoft Access Database Engine32位元。
想用powershell撰寫SSAS多個資料庫的備份及還原到備援機。
詢問https://chat.openai.com 大概產出了85%的script,剩下的就自已依想要的需求再調整,在工作上很有幫助。
借助一點科技力量再加上自已七拼八湊土法練鋼後,備份及還原大致可以滿足目前的需要,踏出成功的第一步。
備份:
$srv="10.10.1.100" #要備份的主機
$tomail="myemail@mail.com" #通知對象EMAIL
$psfolder="D:\Schedule" #powershell目錄
$abffolder="E:\OLAP\Backup" #備份的主機目錄
$dblist=@("BIDB1","BIDB2","BIDB13","BIDB4")
$body= -join ("執行poweshell目錄:$psfolder\backup_asdb.ps1", "`n")
$body= -join ($body,"開始時間:",(Get-Date -Format "yyyy/MM/dd HH:mm:ss"),"`n","Server:",$srv , "`n")
$body= -join ($body,"========================================================`n")
foreach($db in $dblist)
{
try
{
$body= -join ($body,"Backup database $db.....to $abffolder .....")
Backup-ASDatabase "$abffolder\$db.abf" $db -ApplyCompression -AllowOverwrite -Server $srv
if ($LASTEXITCODE -eq 0)
{
$body= -join ($body,"successed.`n")
}
else
{
$body= -join ($body,"failed!! `n Error Message:`n`n $($_.Exception.Message) `n`n" )
}
}
catch {
$body= -join ($body,"failed!! `n Error Message:`n`n $($_.Exception.Message) `n`n" )
}
}
$body= -join ($body,"========================================================`n")
$body = -join($body,"結束時間:",(Get-Date -Format "yyyy/MM/dd HH:mm:ss"),"`n")
#write-host $body
Send-MailMessage -Encoding "utf8" -SmtpServer "urmailServer" -From '管理員<myadm@mail.com>' -To "$tomail" -Subject "($srv)每月備份AS資料庫處理結果通知...." -Body $body
還原:
## Set the variables
$serverName = "10.10.1.102" # Replace with your server name and instance name
$backupFolder = "\\10.10.1.100\OLAP\Backup" # Replace with your backup folder path
$databases = @("BIDB1","BIDB2","BIDB13","BIDB4") # Replace with your database names
$tomail="myemail@mail.com" #email to
$psfolder="D:\Schedule\powershell"
$body= -join ("執行poweshell目錄:$psfolder\resretor_asdb.ps1", "`n")
$body= -join ($body,"開始時間:",(Get-Date -Format "yyyy/MM/dd HH:mm:ss"),"`n","Server:",$serverName, "`n")
$body= -join ($body,"========================================================`n")
# Restore the databases
foreach ($database in $databases) {
try {
$backupFile = Join-Path $backupFolder "$database.abf"
$body= -join ($body,"Restore database $database.....from $backupFile .....")
if (Test-Path $backupFile) #check backup file exist
{
Restore-ASDatabase -Server $serverName -Name $database -RestoreFile $backupFile -AllowOverwrite
$body= -join ($body," successfully.`n")
}
else
{
$body= -join ($body," failed!! File not exist!! `n")
}
#變更連線字串(因為要將備援機的連線切到唯讀的always on)
$xmla2 = @"
<Alter ObjectExpansion="ExpandFull" xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
<Object>
<DatabaseID>$database</DatabaseID>
<DataSourceID>$database</DataSourceID>
</Object>
<ObjectDefinition>
<DataSource xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ddl2="http://schemas.microsoft.com/analysisservices/2003/engine/2" xmlns:ddl2_2="http://schemas.microsoft.com/analysisservices/2003/engine/2/2" xmlns:ddl100_100="http://schemas.microsoft.com/analysisservices/2008/engine/100/100" xmlns:ddl200="http://schemas.microsoft.com/analysisservices/2010/engine/200" xmlns:ddl200_200="http://schemas.microsoft.com/analysisservices/2010/engine/200/200" xmlns:ddl300="http://schemas.microsoft.com/analysisservices/2011/engine/300" xmlns:ddl300_300="http://schemas.microsoft.com/analysisservices/2011/engine/300/300" xmlns:ddl400="http://schemas.microsoft.com/analysisservices/2012/engine/400" xmlns:ddl400_400="http://schemas.microsoft.com/analysisservices/2012/engine/400/400" xmlns:ddl500="http://schemas.microsoft.com/analysisservices/2013/engine/500" xmlns:ddl500_500="http://schemas.microsoft.com/analysisservices/2013/engine/500/500" xsi:type="RelationalDataSource">
<ID>$database</ID>
<Name>$database</Name>
<ConnectionString>Provider=SQLNCLI11.1;Data Source=$urserver;Persist Security Info=True;User ID=urname;Password=urpwd;Initial Catalog=$database</ConnectionString>
<ImpersonationInfo>
<ImpersonationMode>Default</ImpersonationMode>
</ImpersonationInfo>
<Timeout>PT0S</Timeout>
</DataSource>
</ObjectDefinition>
</Alter>
"@
# Execute the XMLA command using Invoke-ASCmd
Invoke-ASCmd -Server $asServer -Database $database -Query $xmla2
if ($LASTEXITCODE -eq 0)
{
$body= -join ($body,"alert db ($database) connection string successfully.`n" )
}else {
$body= -join ($body,"alert db ($database) connection string failed!!. Error Message:`n`n $($_.Exception.Message) `n`n" )
}
}
catch
{
$body= -join ($body,"failed!! `n Error Message:`n`n $($_.Exception.Message) `n`n" )
}
}
$body= -join ($body,"========================================================`n")
$body= -join($body,"結束時間:",(Get-Date -Format "yyyy/MM/dd HH:mm:ss"),"`n")
write-host $body
Send-MailMessage -Encoding "utf8" -SmtpServer "urmailServer" -From '管理員<myadm@mail.com>' -To "$tomail" -Subject "($serverName)每月還原SSAS DB處理結果通知...." -Body $body
使用UNC(例\\172.12.12.1\dbbackup\test.bak) 目錄還原資料庫,出現錯誤訊息【 作業系統錯誤 5(存取被拒。)】
將SQL Server服務啟動帳號由Network Services改為具目錄操作權限的使用者後,重啟服務即可順利還原資料庫。
次要主機windows update 後自已重開機,然後資料庫狀態就顯示【復原暫止】
但主要主機資料庫狀態仍是【已同步處理】,查看Always on 可用性複本下,次要主機顯示(解析中)
嚐試在次要主機上執行 ALTER DATABASE mydb SET HADR RESUME;
顯示以下訊息,
無法處理此作業。Always On 可用性群組複本管理員正在等候主機電腦啟動 Windows Server 容錯移轉叢集 (WSFC) 叢集並加入叢集。本機電腦不是叢集節點,或者本機叢集節點未上線。若電腦是叢集節點,請等候其加入叢集。若電腦不是叢集節點,請將電腦加入 WSFC 叢集中,然後重試此作業。
在容錯移轉叢集管理員下,連線到叢集後,次要可用性複本就恢復正常了。
bcp產出的資料中,若欄位為空會寫入NUL,故利用powershell將NUL置換掉。
但因檔案是要給linux系統使用,故原本bcp產出的資料是以LF斷行,但經過powershell處理後,會自動將斷行符號換成CRLF。
所以改寫ps檔如下,最後再還原LF斷行.....一波好幾折...
((Get-Content c:\temp\test.txt) -join "`n") + "`n"| ForEach-Object { $_ -replace "`0", "" } | Set-Content -NoNewline c:\temp\test.new
主機事件檢視器在dimension或cube process時,一直不斷出現安全性下的稽核失敗。造成3分鐘內20筆稽核失敗被視為資安警認通報,訊息摘要如下:
帳戶無法登入
登入失敗的帳戶
安全性識別碼:NULL SID
帳號名稱:admin
帳號網域:TESTBI
失敗原因:未將這台機器上要求的登入類型授與使用者。
The user has not been granted the requested logon type (aka logon right) at this machine
登入類型:8
呼叫者理程序名稱: "C:\Program Files\Microsoft SQL Server\MSAS15.SQL2019\OLAP\bin\msmdsrv.exe"
依照登入類型=8,查到NetworkCleartext 使用者從網路登入此電腦。 使用者的密碼已傳遞至其未顯示表單的驗證套件。 內建的驗證會先封裝所有雜湊認證,再傳送給整個網路。 認證不會以純文字或純文字 (稱為 cleartext) 。
但並無任何排程有使用到明碼作認證?而且OLAP查詢或處理也都很正常?
找了好久,最後在OLAP 資料庫的資料來源中看到安全性設定,原本使用ImpersonateAccount 以系統帳號做認證,不知為何,在此台主機如此設定就會有eventid 4625 稽核失敗的紀錄,但另外一台主機同樣的設定則沒有問題。
將模擬資訊改為繼承後,重新處理dimension或cube,事件檢視器就再無稽核失敗問題了。
有個檔案在pdf viewer套件中無法顯示內容,但下載檔案後使用工具又可以正常顯示。 本來以為是套件版本太舊的原因,於是去下載pdf viewer套件 https://github.com/mozilla/pdf.js 更新後還是一樣。 覺得應是字型缺漏的問題,於是用PDF-X...