Since the release of Microsoft Dynamics GP 2018, on the 1st December 2018, we have been busy with a few upgrade projects for clients. Our standard recommendation is to have a standalone test system for performing UAT and this means backing up and restoring databases.
While the backups are easy to do, the restores can be trickier when one database has been restored into another, as this means the logical filename will not match the physical one.
This isn't an issue when the client has only a handful of databases, but when there are 30 or even a hundred, it becomes much more of an issue. However, you can select database details in SQL Server from the sys.master_files single, system-wide view.
This script gets the logical file names for all Dynamics GP company databases attached to a system database which can be used to update the restore script so you can easily create backup scripts rather than having to go through the Restore Database for each database individually.
The script is configured with the assumption that the system database is called DYNAMICS; if you are using a named system database, change the highlighted section:
/* Created by Ian Grieve of azurecurve|Ramblings of a Dynamics GP Consultant (https://www.azurecurve.co.uk) This code is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0 Int). */ USE DYNAMICS GO SELECT ['Company Master'].INTERID AS InterID ,['Company Master'].CMPNYNAM AS CompanyName ,['databases'].name AS LogicalFileName ,['databases'].physical_name AS PhysicalFileName FROM SY01500 AS ['Company Master'] INNER JOIN sys.master_files ['databases'] ON DB_NAME(['databases'].database_id) = ['Company Master'].INTERID WHERE ['Company Master'].CMPANYID > 0 ORDER BY ['Company Master'].INTERID ,['databases'].name
This gets the logical file names which can be used to update the restore script so you can easily create backup scripts rather than having to go through the Restore Database for each database individually.