PowerShell: Aus Install-DVD-Backup neue Datenbank anlegen

Bild Tipps & Tricks zu den Dynamics NAV Versionen
Hier bitte keine Fragen stellen, sondern nur bereits vorhandene Tricks veröffentlichen.
Forumsregeln
Impressum • Community-Knigge • Nutzungsbedingungen • Datenschutzrichtlinie
Hier bitte keine Fragen stellen, sondern nur bereits vorhandene Tricks veröffentlichen.

PowerShell: Aus Install-DVD-Backup neue Datenbank anlegen

Beitragvon Kowa » 28. Februar 2015 01:51

Mit dieser Funktion kann man den Link zum Datenbankbackup wie hier beschrieben verwenden, um daraus eine neue Datenbank anzulegen, der Name der neuen Datenbank wird dazu jeweils abgefragt und auch fĂĽr die mdf- und ldf-Datei verwendet.
Dazu werden (als Beispiel) fĂĽr einen lokalen und den ĂĽblichen Netzworkaccount die notwendigen Berechtigungen und der "dbo" gesetzt, damit die sonst dazu notwendige Fummelarbeit im Management Studio auch erledigt ist. Ohne diese stĂĽrzt der NAV-Client ab NAV 2013 R2 beim ersten Start ab und beendet den Serverdienst gleich mit :mrgreen: .

Der letzte Codeblock stammt von hier (dortige Hinweise zum import-module sqlps beachten), mit dem restore-SqlDatabase Cmdlet aus dem Blogatikel hatte ich bislang keinen Erfolg, deshalb werden im Block darĂĽber die SQL Management Studio-Methoden direkt verwendet, um das Backup rĂĽckzusichern (Link). Die dortigen Pfade mĂĽssen an die verwendete SQL-Server-Version (hier 11 fĂĽr SQL Server 2012, im Blogartikel 12 fĂĽr SQL Server 2014 ) und Server- bzw. Instanzennamen (hier NAVDEMO) angepasst werden.
Der erste Block ist für die Pfade in einem NAV 2015 Installordner, für ältere Versionen wie im ersten Link beschrieben anpassen (statt 80 und …(8-0).bak -> 71 und …(7-1).bak -> 70 und …(7-0).bak -> 60 und …(6-0).bak), im Restoreblock bei Demo Database NAV (8-0)_Data ebenfalls.

RestoreDatabase1.jpg

RestoreDatabase2.jpg


FĂĽr NAV 2015
Code: Alles auswählen
function CreateNewDB80_NAVDEMO
{
$BasicPath = resolve-path $args
$TargetPath = (get-item $args).parent.FullName
$BackupPath = '\SQLDemoDatabase\CommonAppData\Microsoft\Microsoft Dynamics NAV\80\Database\Demo Database NAV (8-0).bak'
$FullBackupPath = [string]::Concat($BasicPath,$BackupPath)
# Use own servername here
$MySQLServerName = 'MyServerName\NAVDEMO'
$MyNewDatabaseName = Read-host "Name of new database"

# Adapt this block to the employed environment, as written here it is suited for SQL Server 2012 with an instance NAVDEMO
$RelocateData = New-Object 'Microsoft.SqlServer.Management.Smo.RelocateFile, Microsoft.SqlServer.SmoExtended, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' -ArgumentList "Demo Database NAV (8-0)_Data", "C:\Program Files\Microsoft SQL Server\MSSQL11.NAVDEMO\MSSQL\DATA\$MyNewDatabaseName.mdf"
$RelocateLog = New-Object 'Microsoft.SqlServer.Management.Smo.RelocateFile, Microsoft.SqlServer.SmoExtended, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' -ArgumentList "Demo Database NAV (8-0)_Log", "C:\Program Files\Microsoft SQL Server\MSSQL11.NAVDEMO\MSSQL\DATA\$MyNewDatabaseName.ldf"
$file = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile($RelocateData,$RelocateLog)
$myarr=@($RelocateData,$RelocateLog)
Restore-SqlDatabase -ServerInstance $MySQLServerName -Database $MyNewDatabaseName -BackupFile $FullBackupPath -RelocateFil $myarr

Write-host "Creating local service account for database $MyNewDatabaseName"
import-module sqlps -disablenamechecking
$CreateServiceAccountUser = "CREATE USER [MyServerName\kkowa_000] FOR LOGIN [MyServerName\kkowa_000]"
Invoke-Sqlcmd -ServerInstance $MySQLServerName -Database $MyNewDatabaseName -Query $CreateServiceAccountUser
$AddServiceAccountAsDbo = "exec sp_addrolemember 'db_owner', 'MyServerName\kkowa_000'"
Invoke-Sqlcmd -ServerInstance $MySQLServerName -Database $MyNewDatabaseName -Query $AddServiceAccountAsDbo

#Set network service as dbo
Write-host "Creating Network Service account for database $MyNewDatabaseName"
$CreateServiceAccountUser = "CREATE USER [NT-AUTORITĂ„T\Netzwerkdienst] FOR LOGIN [NT-AUTORITĂ„T\Netzwerkdienst]"
Invoke-Sqlcmd -ServerInstance $MySQLServerName -Database $MyNewDatabaseName -Query $CreateServiceAccountUser
$AddServiceAccountAsDbo = "exec sp_addrolemember 'db_owner', 'NT-AUTORITĂ„T\Netzwerkdienst'"
Invoke-Sqlcmd -ServerInstance $MySQLServerName -Database $MyNewDatabaseName -Query $AddServiceAccountAsDbo

pop-location # Finished with SQL commands so popping back to normal PS prompt
}


FĂĽr NAV 2013 R2
Code: Alles auswählen
function CreateNewDB71_NAVDEMO
{
$BasicPath = resolve-path $args
$TargetPath = (get-item $args).parent.FullName
$BackupPath = '\SQLDemoDatabase\CommonAppData\Microsoft\Microsoft Dynamics NAV\71\Database\Demo Database NAV (7-1).bak'
$FullBackupPath = [string]::Concat($BasicPath,$BackupPath)
# Use own servername here
$MySQLServerName = 'MyServerName\NAVDEMO'
$MyNewDatabaseName = Read-host "Name of new database"

# Adapt this block to the employed environment, as written here it is suited for SQL Server 2012 with an instance NAVDEMO
$RelocateData = New-Object 'Microsoft.SqlServer.Management.Smo.RelocateFile, Microsoft.SqlServer.SmoExtended, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' -ArgumentList "Demo Database NAV (7-1)_Data", "C:\Program Files\Microsoft SQL Server\MSSQL11.NAVDEMO\MSSQL\DATA\$MyNewDatabaseName.mdf"
$RelocateLog = New-Object 'Microsoft.SqlServer.Management.Smo.RelocateFile, Microsoft.SqlServer.SmoExtended, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' -ArgumentList "Demo Database NAV (7-1)_Log", "C:\Program Files\Microsoft SQL Server\MSSQL11.NAVDEMO\MSSQL\DATA\$MyNewDatabaseName.ldf"
$file = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile($RelocateData,$RelocateLog)
$myarr=@($RelocateData,$RelocateLog)
Restore-SqlDatabase -ServerInstance $MySQLServerName -Database $MyNewDatabaseName -BackupFile $FullBackupPath -RelocateFil $myarr

Write-host "Creating local service account for database $MyNewDatabaseName"
import-module sqlps -disablenamechecking
$CreateServiceAccountUser = "CREATE USER [MyServerName\kkowa_000] FOR LOGIN [MyServerName\kkowa_000]"
Invoke-Sqlcmd -ServerInstance $MySQLServerName -Database $MyNewDatabaseName -Query $CreateServiceAccountUser
$AddServiceAccountAsDbo = "exec sp_addrolemember 'db_owner', 'MyServerName\kkowa_000'"
Invoke-Sqlcmd -ServerInstance $MySQLServerName -Database $MyNewDatabaseName -Query $AddServiceAccountAsDbo

#Set network service as dbo
Write-host "Creating Network Service account for database $MyNewDatabaseName"
$CreateServiceAccountUser = "CREATE USER [NT-AUTORITĂ„T\Netzwerkdienst] FOR LOGIN [NT-AUTORITĂ„T\Netzwerkdienst]"
Invoke-Sqlcmd -ServerInstance $MySQLServerName -Database $MyNewDatabaseName -Query $CreateServiceAccountUser
$AddServiceAccountAsDbo = "exec sp_addrolemember 'db_owner', 'NT-AUTORITĂ„T\Netzwerkdienst'"
Invoke-Sqlcmd -ServerInstance $MySQLServerName -Database $MyNewDatabaseName -Query $AddServiceAccountAsDbo

pop-location # Finished with SQL commands so popping back to normal PS prompt
}
GruĂź, Kai

Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, Messenger oder Telefon! DafĂĽr ist dieses Forum da.

Download: Dynamics NAV Object Text Explorer (Alternativlink). MVP Alumni
Benutzeravatar
Kowa
Moderator
Moderator
 
Beiträge: 7827
Registriert: 17. Juni 2005 17:32
Wohnort: Bremen
Realer Name: Kai Kowalewski
Arbeitsort: Osterholz-Scharmbeck
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics 365
Microsoft Dynamics Version: BC, NAV 2018 bis Navision 2.01

ZurĂĽck zu NAV Tipps & Tricks

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast