Dit zal waarschijnlijk ook werken op NAV2013, maar ik heb het alleen getest met NAV2017, en direct een disclaimer: Het zal best slimmer en sneller kunnen, maar dit werkt voor mij...
De eerste stap die gedaan moet worden is het aanmaken van een multitenant database op je lokale machine. Zorg er dus voor dat SQL Server Development edition op je PC is geinstalleerd. Installeer daarnaast ook SQL Server Management Studio.
Maak lokaal een multitenantomgeving aan
Installeer een Dynamics NAV database, en zorg ervoor dat je daarbij ook een Dynamics NAV Server installeert. Van deze database gaan we lokaal een multitenant omgeving maken. Ik gebruik daarvoor het volgende powershell script, wat elevated moet worden gestart (ik gebruik daarvoor Powershell ISE, maar als je een andere manier hebt is dat ook prima, uiteraard)
import-module 'C:\Program Files\Microsoft Dynamics NAV\100\Service\Microsoft.Dynamics.Nav.Management.dll'
$srvInstance='DynamicsNAV100'
$dbServer='localhost'
$dbInstance='SQLServer2016dev'
$dbName='CronusDatabase'
$appDbName='CronusDatabase-app'
$tenantID='prod'
$dbServer = $dbServer+"\"+$dbInstance
}
# Export the application from the database to the new Application DB
Export-NAVApplication –DatabaseServer $dbServer –DatabaseName $dbName –DestinationDatabaseName $appDbName | Remove-NAVApplication –DatabaseName $dbName -Force
# Change the serverconfiguration: Clear the databasename
Set-NAVServerConfiguration –ServerInstance $srvInstance –element appSettings –KeyName 'DatabaseName' –KeyValue ''
# Start the service
Set-NAVServerInstance -ServerInstance $srvInstance -start
# Mount the application database
Mount-NAVApplication –ServerInstance $srvInstance –DatabaseServer $dbServer –DatabaseName $appDbName -Force
# Mount the tenant database
Mount-NAVTenant -ServerInstance $srvInstance -ID $tenantID -databaseserver $dbServer -DatabaseName $dbName -OverwriteTenantIdInDatabase -AllowAppDatabaseWrite
Dit zorgt ervoor dat de "Cronus Database" wordt opgesplitst in een appdatabase en een database waar alleen gegevens in staan. Beide databases gaan we uploaden naar de SQL on Azure omgeving.
Om een verbinding te kunnen maken moet er een account worden gemaakt op de SQL on Azure omgeving. Dit moet je doen met een paar TSQL commando's:
go
$Credentials = (New-Object PSCredential -ArgumentList $userName,(ConvertTo-SecureString -AsPlainText -Force $password))
$DBname = "CronusDatabase-app"
$DBServer = "mysqlserver.database.windows.net"
Install-WindowsFeature -Name NET-HTTP-Activation
New-NAVEncryptionKey -KeyPath "C:\Install\Key\DynamicsNAV.key” -Password (ConvertTo-SecureString -AsPlainText -Force $password) -Force
Import-NAVEncryptionKey -ServerInstance $instance `
-ApplicationDatabaseServer $DBServer `
-ApplicationDatabaseCredentials $Credentials `
-ApplicationDatabaseName $DBName `
-KeyPath C:\install\Key\DynamicsNAV.key `
-Password (ConvertTo-SecureString -AsPlainText -Force $password) `
-Force -Verbose
Set-NAVServerConfiguration -DatabaseCredentials $Credentials -ServerInstance $Instance -Force
Set-NAVServerConfiguration $Instance -KeyName DatabaseServer -KeyValue $DBServer -Force
Set-NAVServerConfiguration $Instance -KeyName DatabaseName -KeyValue $DBName
Set-NAVServerConfiguration $Instance -KeyName EnableSqlConnectionEncryption -KeyValue true
Set-NAVServerInstance $Instance -Restart
$srvInstance='dynamicsnav100'
$dbServer='mysqlserver.database.windows.net'
$dbName='CronusDatabase'
$appDbName='CronusDatabase-app'
$tenantID='prod'
$Credentials = (New-Object PSCredential -ArgumentList $userName,(ConvertTo-SecureString -AsPlainText -Force $password))
Set-ExecutionPolicy unrestricted -Force
# stop the running service
Set-NAVServerInstance -ServerInstance $srvInstance -stop
# Change the serverconfiguration: Clear the databasename
Set-NAVServerConfiguration –ServerInstance $srvInstance –element appSettings –KeyName 'DatabaseName' –KeyValue ''
# Start the service
Set-NAVServerInstance -ServerInstance $srvInstance -start
# Mount the application database
Mount-NAVApplication –ServerInstance $srvInstance –DatabaseServer $dbServer –DatabaseName $appDbName -Force -DatabaseCredentials $Credentials
# Mount the tenant database
Mount-NAVTenant -ServerInstance $srvInstance -ID $tenantID -databaseserver $dbServer -DatabaseCredentials $credentials -DatabaseName $dbName -AllowAppDatabaseWrite