When starting the RTC client or open the database in classic client you will get a warning if you have not set the trace flag correct. Because of changed security in SQL Server 2005 Dynamics NAV 2009 will only connect to the SQL Server if the trace flat ‘4616' is set.
The SQL query below shows a list of tables sorted by the largest tables first. For each table, the indexes in the table are shown. For each index it shows when the index was last used. The query is designed to collect various pieces of information in one place, and give an overview to help supporting decisions when doing index tuning.
The left hand columns show data for the table (No. of receords, data- and index size) to have a view of the impact of having indexes on the table.
The right hand columns show data for each index, including Updates (costs) and Reads (benefits) and when it was last used sine the last time SQL Server was restarted.
If you have comments or feedback, please feel free to post them here.
Lars Lohndorf-Larsen (Lohndorf)Microsoft Dynamics UKMicrosoft Customer Service and Support (CSS) EMEA
IF OBJECT_ID ('z_IUQ2_Temp_Index_Keys', 'U') IS NOT NULL
DROP TABLE z_IUQ2_Temp_Index_Keys;
-- Generate list of indexes with key list
create table z_IUQ2_Temp_Index_Keys(
[l1] [int] NOT NULL,
[F_Obj_ID] [int] NOT NULL,
[F_Schema_Name] [nvarchar] (128) NULL,
[F_Table_Name] [nvarchar] (128) NOT NULL,
[F_Row_Count] [int] NULL,
[F_Reserved] [int] NULL,
[F_Data] [int] NULL,
[F_Index_Size] [int] NULL,
[F_UnUsed] [int] NULL,
[F_Index_Name] [nvarchar] (128) NOT NULL,
[F_Index_ID] [int] NOT NULL,
[F_Column_Name] [nvarchar] (128) NOT NULL,
[F_User_Updates] [int] NULL,
[F_User_Reads] [int] NULL,
[F_Last_Used] [datetime] NULL,
[F_Index_Type] [nvarchar] (128) NOT NULL,
[F_Index_Column_ID] [int] NOT NULL,
[F_Last_Seek] [datetime] NULL,
[F_Last_Scan] [datetime] NULL,
[F_Last_Lookup] [datetime] NULL,
[Index_Key_List] [nvarchar] (MAX) NULL
CREATE NONCLUSTERED INDEX [Object_ID_Index] ON [dbo].[z_IUQ2_Temp_Index_Keys]
CREATE NONCLUSTERED INDEX [Index_ID_Index] ON [dbo].[z_IUQ2_Temp_Index_Keys]
CREATE NONCLUSTERED INDEX [RowCount_ID_Index] ON [dbo].[z_IUQ2_Temp_Index_Keys]
(row_number() over(order by a3.name, a2.name))%2 as l1,
a3.name AS [schemaname],
a2.name AS [tablename],
a1.rows as row_count,
(a1.reserved + ISNULL(a4.reserved,0))* 8 AS reserved,
a1.data * 8 AS data,
(CASE WHEN (a1.used + ISNULL(a4.used,0)) > a1.data THEN (a1.used + ISNULL(a4.used,0)) - a1.data ELSE 0 END) * 8 AS index_size,
(CASE WHEN (a1.reserved + ISNULL(a4.reserved,0)) > a1.used THEN (a1.reserved + ISNULL(a4.reserved,0)) - a1.used ELSE 0 END) * 8 AS unused,
-- Index Description
-- Index Stats
US.user_seeks + US.user_scans + US.user_lookups User_Reads,
when (ISNULL(US.last_user_seek,'00:00:00.000') >= ISNULL(US.last_user_scan,'00:00:00.000')) and (ISNULL(US.last_user_seek,'00:00:00.000') >= ISNULL(US.last_user_lookup,'00:00:00.000')) then US.last_user_seek
when (ISNULL(US.last_user_scan,'00:00:00.000') >= ISNULL(US.last_user_seek,'00:00:00.000')) and (ISNULL(US.last_user_scan,'00:00:00.000') >= ISNULL(US.last_user_lookup,'00:00:00.000')) then US.last_user_scan
end as Last_Used_For_Reads,
WHEN (ps.index_id < 2) THEN row_count
) AS [rows],
SUM (ps.reserved_page_count) AS reserved,
WHEN (ps.index_id < 2) THEN (ps.in_row_data_page_count + ps.lob_used_page_count + ps.row_overflow_used_page_count)
ELSE (ps.lob_used_page_count + ps.row_overflow_used_page_count)
) AS data,
SUM (ps.used_page_count) AS used
FROM sys.dm_db_partition_stats ps
GROUP BY ps.object_id) AS a1
LEFT OUTER JOIN
SUM(ps.reserved_page_count) AS reserved,
SUM(ps.used_page_count) AS used
INNER JOIN sys.internal_tables it ON (it.object_id = ps.object_id)
WHERE it.internal_type IN (202,204)
GROUP BY it.parent_id) AS a4 ON (a4.parent_id = a1.object_id)
INNER JOIN sys.all_objects a2 ON ( a1.object_id = a2.object_id )
INNER JOIN sys.schemas a3 ON (a2.schema_id = a3.schema_id)
inner join sys.indexes SI ON (SI.object_id = a1."object_id") ---
inner join sys.index_columns SIC ON (SIC.object_id = SI.object_id and SIC.index_id = SI.index_id)
left outer join sys.dm_db_index_usage_stats US ON (US.object_id = SI.object_id and US.index_id = SI.index_id)
WHERE a2.type <> N'S' and a2.type <> N'IT'
order by row_count desc
-- Populate key string
declare IndexCursor cursor for
select F_Obj_ID, F_Index_ID from z_IUQ2_Temp_Index_Keys
for update of Index_Key_List
declare @objID int
declare @IndID int
declare @KeyString VARCHAR(MAX)
set @KeyString = NULL
set nocount on
fetch next from IndexCursor into @ObjID, @IndID
while @@fetch_status = 0 begin
set @KeyString = ''
select @KeyString = COALESCE(@KeyString,'') + F_Column_Name + ', '
where F_Obj_ID = @ObjID and F_Index_ID = @IndID
ORDER BY F_Index_ID, F_Index_Column_ID
set @KeyString = LEFT(@KeyString,LEN(@KeyString) -2)
set Index_Key_List = @KeyString
where current of IndexCursor
-- clean up table to one line per index
delete from z_IUQ2_Temp_Index_Keys
where [F_Index_Column_ID] > 1
order by F_Row_Count desc, F_Table_Name, [F_Index_ID]
When reinstalling Dynamics NAV 2009 or if you have attached a Demo Database manually you will probably run into this problem:
--------------------------Microsoft Dynamics NAV 2009 Build 27808Error ReportSQL Server optionCronus Sample Database for Microsoft Dynamics NAV 2009Fatal error during installation.
Error -2147467259: failed to execute SQL string, error detail: A database with name Demo Database NAV (6-0) already exists., SQL key: StopIfDatabaseExist SQL string: IF EXISTS (SELECT * FROM [master].[sys].[databases] WHERE name = ‘Demo Database NAV (6-0)') RAISERROR (N'A database with name %s already exists.',20,1,'Demo Database NAV (6-0)') WITH LOG--------------------------The problem is here that a database already exists with from a previous installation. The problem can be solved by starting SQL Server Management Studio and deleting the database that already exists. After you have deleted the database start the installation program again and select repair. In Microsoft Dynamics NAV 2009 SP1 you will have one new option saying replace database that you can set to override existing database. If you need to save the existing database for some reason simple do a backup of it before deleting it or read my previous post about how to have more than one Demo Database installed at the same time.
It’s recommended that you use the installer on the product DVD to install the stored procedures. But if you are running more than one name instance of SQL server on the same machine that approach will not work. Then you need to do it manually:1. Copy the xp_ndo.dll file to the location you want store it. The file can be found under “D:\SQLDatabase\PFiles\Microsoft Dynamics NAV\60\Database” on the product DVD.2. Run the following SQL command to add the stored procedures.
USE masterEXEC sp_addextendedproc xp_ndo_enumusersids, ‘C:\[Location of file]\xp_ndo.dll’GO
GRANT EXECUTEON [xp_ndo_enumusersids]TO PUBLICGO
USE masterEXEC sp_addextendedproc xp_ndo_enumusergroups, ‘C:\ [Location of file]\xp_ndo.dll’GO
GRANT EXECUTEON [xp_ndo_enumusergroups]TO PUBLICGO
We have released a new Statement of Direction document for partners. We know preparation and product roadmap knowledge is a key factor in building a successful business. With the release of the new Statement of Direction we are able to share our vision and plans for the future direction of Microsoft Dynamics NAV. This will bring partners ahead of most competitors, who struggle to provide customers with product roadmaps. Microsoft Dynamics NAV partners can now speak confidently to customers about the future strategy, aspirations and roadmap for the next major releases of Microsoft Dynamics NAV through to 2017, including NAV "7", "8" and "9".
-Lotte Cordt Ihlemann
NAV Server (middle tier) utilises Windows Communication Foundations (WCF), which includes a number of performance counters that you can use to monitor NAV Server performance in real-time. This example shows how to monitor "Calls Per Second" for NAV Server to get some idea of how busy it is over a working day / over time. Many other counters are available.
First, enable WFC Performance Counters as described in this article WCF Performance Counters:
1) Use Notepad to edit "Microsoft.Dynamics.Nav.Server.exe.config" in the NAV Service folder (default is C:\Program Files\Microsoft Dynamics NAV\60\Service).
2) Add the section below, marked with Red:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings file="CustomSettings.config" /> <system.diagnostics> <assert assertuienabled="false" /> </system.diagnostics>
<system.serviceModel> <diagnostics performanceCounters="All" /> </system.serviceModel>
3) Restart NAV Server.
Use Windows Performance Monitor to select and view counters from NAV Server:
1) Start Windows Performance Monitor (Start -> Run -> Perfmon.exe)
2) Add a Counter, then from available categories, select ServiceModelService. This will list the NAV Server, so select this. Then add the counter(s) you are interested in - in this example "Calls Per Second":
I found that in a stand-alone situation, the only counter that really shows anything is "Calls Per Second". But in a multi user system, this could well be very different - please share your experiences here.
These postings are provided "AS IS" with no warranties and confer no rights. You assume all risk for your use.
Lars Lohndorf-Larsen (Lohndorf )
Microsoft Dynamics UK
Microsoft Customer Service and Support (CSS) EMEA
Upgrade procedure to Dynamics NAV 2009 is not very different from upgrade procedures we had in previous versions, but some differences do apply, depending on what we want to achieve with the upgrade.
First scenario is executables only upgrade, which is the same as traditional executables upgrade in NAV. That means upgrading classic NAV client to NAV 2009 version by opening previous database versions with new client, and selecting yes when prompted to convert database, without any object changes or data transfer. Or alternatively, creating a new database with NAV 2009 client, and restoring a backup of customer's database.
This will, as before, upgrade the version of executables running NAV to 2009 version (builds 6.0 and higher) and create necessary system tables, but this will not automatically open up for using new NAV 2009 functionality (like RTC client or Web Services). Running the first scenario is a mandatory part of any upgrade scenario, just as it was in previous versions.
Beware of few issues that can rise from this scenario, see the link below for description.
Another scenario is doing an executable upgrade that would open up for using Web services, but would not include any object upgrade or data transfer.
This is where 3-tier scenario enters stage and a Dynamics NAV server should be set up and connected to the database (this is the normal installation/setup process of the service). Dynamics NAV Web service should also be installed, see Dynamics NAV documentation for installation and setup of different components.
To be able to use Web Services after doing an upgrade of executables and setting up a NST and Web service, one must also import and populate web service form (810) from a NAV 2009 client. This will open up for exposing codeunits (and also pages, but at this stage, pages are not yet present in database).
To further enable using RTC, one should also import tables 9050-9060, these are cue tables used in role centers of RTC. If you are creating and running custom Role Center pages, remember to create a record in each table by specifying any value as primary key (or follow code examples from standard Role Center pages that will insert a record if table is empty). A record in any of these tables will be automatically inserted when using standard NAV Role Page (based on that table).
In addition, reports should be 'transformed' to add RDLC layer and forms should be transformed to pages. You can also run reports with classic engine form RTC (that is run classic NAV report in RTC), in which case no object upgrade is necessary for reports. Note though, to run reports with classic engine on RTC client, each machine running RTC client (and classic reports) needs to have Classic client installed as well.
Furthermore, Role Center pages should be created or standard ones imported from NAV 2009 client (pages in range 9000-9020). Finally, PROFILE table (table 2000000072) should be populated with standard (or custom) profiles, and role center pages tied to these.
Last, but not least, you must make sure the existing code is modified to run in both scenarios (see MSDN documentation on code considerations for NAV 2009).
However, the job needed in this last scenario (specially transforming forms and reports) is not much different than using full database upgrade . In full upgrade version, objects in standard and custom version of NAV (version we are upgrading) would be merged with standard NAV 2009 objects to create custom NAV 2009 database. Note, all forms in standard NAV 2009 version are transformed to pages, so it is advisable to run Form transformation to create pages, once forms are merged to NAV 2009 object version. Also, one should 'upgrade' reports to add RDLC layer, once custom reports are merged to NAV 2009 version.
No data transfer would occur from W1 5.0 to W1 NAV 2009 version, as there are no changes to table structure from 5.0 version. Upgrading from earlier version would still imply data transfer using Upgrade Toolkit.
Jasminka Vukovic (jvukovic )
Microsoft Dynamics NO
By default when you are installing the demo database by the installation program you can only install one Demo Database. But if you would like to have more than one Demo Database to try different things in, how to accomplish that? I assume that you know that you can create a new company in the classic client, but you will then not get the demo data. The solution is simple to use SQL Server Management Studio to attach more than one version of the Demo Database.
We are glad to announce that compatibility between Business Notification and SQL Server 2008 is as of now verified and confirmed. Business Notification can run on SQL Server 2008 provided that the 2 following components are also installed:
- SQL Server Notification Services 2005
- SQL Server 2005 Service Pack 3.
Notification Services is no longer part of SQL Server 2008. What SQL Server 2005 Service Pack 3 does is that it allows Notification Services 2005 to run with the SQL Server 2008 database engine. For further information, please also refer to "What's New in SQL Server 2005 SP3":
While refering to the Business Notification Installation Guide (https://mbs.microsoft.com/customersource/documentation/setupguides/installationmanualsnav2009.htm ) as your main source of information, below are the steps that you need to include in the installation process in order to use SQL Server 2008.
1. Install SQL Server 2008.
2. Install SQL Server 2005 Notification Services only. When the SQL Server 2005 setup is started, a list of installation components is available. Selected Notification Services only and complete the installation.
3. Apply SQL Server 2005 Service Pack 3. This can be downloaded from here:
Continue with the steps described in the Business Notification Installation Guide.
Some of you have noticed that the Chart displayed in “Customer Order - Summary” contained a series label called Series 1.
Well the reason for that being shown is because we have missed to filter out all customer with have no data in the field: Chart_SalesOrderAmountLCY.Value
So how is that actually done? Well let me show you:
1. Design Report 70000
2. Select “View / Layout”
3. Right click the chart in the bottom of the report
4. Select “Filters” tab
5. Type the follow:
6. With this filter we now filter out where "Chart_SalesOrderAmountLCY.Value” is equal blank.
7. Now save and compile the report and display in RoleTailored client. Now only customers with outstanding orders are shown in the chart.
I have updated the demo reports package to reflect this change.
The reports can be downloaded from here.
Claus Lundstrøm, Program Manager, Microsoft Dynamics NAV
One not complete uncommon error when installing Dynamics NAV 2009 is the one bellow:
--------------------------Microsoft Dynamics NAV 2009 Build 27808Error ReportSQL Server optionMicrosoft Dynamics NAV 2009 Components for Microsoft SQL ServerFatal error during installation.
Error -2147217865: failed to execute SQL string, error detail: Invalid object name ‘master.sys.objects'., SQL key: DropXpNdoGroups SQL string: IF EXISTS (SELECT * FROM [master].[sys].[objects] WHERE name = ‘xp_ndo_enumusergroups') EXEC sp_dropextendedproc xp_ndo_enumusergroupsCronus Sample Database for Microsoft Dynamics NAV 2009Fatal error during installation.
Error -2147217865: failed to execute SQL string, error detail: Invalid object name ‘master.sys.databases'., SQL key: StopIfDatabaseExist SQL string: IF EXISTS (SELECT * FROM [master].[sys].[databases] WHERE name = ‘Demo Database NAV (6-0)') RAISERROR (N'A database with name %s already exists.',20,1,'Demo Database NAV (6-0)') WITH LOGFatal error during installation.--------------------------The problem is normally wrong version of SQL Server or access right problems. The first problem is easy to solve since you only need to ensure that you have SQL Server/Express 2005 or 2008 installed or no SQL Server installed at all. The SQL Server need to user service account "NETWORK SERVICE". The user that is installing Dynamic NAV 2009 needs to be sysadmin for the server and on the system database "master".
It's quite normal to upgrade the runtime (executables) to newer versions while leaving the database (application) as it is. This will enable the new runtime features such as Web Services. Recently we have seen a number of questions about whether you can upgrade older databases to NAV 2009. As such, NAV 2009 is just another version, so the default answer would be that yes, you can do that.
Just remember a few additional things to be avare of:
1) There is one potential issue: NAV 2009 has a change from older versions that comparing characters in a CASE structure is case sensitive. For example:
CodeVar := 'A';
CASE CodeVar OF
In version 5 you will get the message. In NAV 2009 you won't. This has one specific implication in the standard application. Most matrix forms have a function called "DimCodeToOption". As an example is Form 113 Budget. The function has a parameter "DimCode" which in version 5 was type Code. This has to be changed to Text. Otherwise, the case sensitive comparison will fail, and Matrix forms will not show any data. So make this change in Form 113 and other forms, for example Form 554 "Analysis by Dimensions". And if you find other matrix forms have stopped working, then check this first.
2) If you want to run RTC, then of course you would also have to import pages or run transformation first.
3) Once you upgrade objects to NAV2009 runtime, you cannot use the objects in previous versions again, even if you export them and import into for example a NAV 5 database. NAV2009 adds new properties to objects which older versions will not be able to handle.
A number of customers have already made the change to NAV 2009 runtime, and to my knowledge no other issues have been reported regarding running the older database in a newer runtime. If you do find any issues not mentioned here, then please do add a comment below,
Lars Lohndorf-Larsen (Lohndorf)
I have collected some resources that can help you when you are considering a multi-site implementation of NAV. (These recommendations can be useful with other Microsoft Dynamics solutions as well.)
Here are some of the key considerations when planning the implementation:
Implementing in a multi-site environment might entail the following:
These considerations are described in more detail in the following resources:
By default when you are installing the demo database it will get installed on the instance named MSSQLSERVER. That is the default instance name for SQL Server 2005. But if you have a SQL Server with another instance name where you would like to install the Demo Database, how do you do then? The answer to that question is to use the msi for the Demo Database installation and not the installation program in the root of the DVD. A small not is that you can't run the installation program found in the root of the DVD (setup.exe) on the computer after you have installed the demo database using this work around since this will uninstalled the demo database. This happens because the central installation program keeps an inventory of the NAV products that have been installed to the computer and will uninstall those which are not in the inventory.So let's take a look how you do it. I assuming that you already have SQL Server installed with a none default instance name with service account "NETWORK SERVICE". I will call it NAVDEMO in my example. The machine you have installed it will simple be called SQLSERVER in my example. I will also assume that you have the DVD in "D:\".
To use the newly installed Demo Database with an already installed NAV server you need to update the server configuration file. To do this follow this steps:
A while a go we posted a blog decribing how to make some basic customizations to style sheets used for export to Excel.
In addition to changes described there (customizing font styles, conditional formatting and adding totals), this will allow adding some basic document properties, choosing to display zero decimal fields as blank, and adding header and footer to the exported document. In addition, code changes added here would allow user to run send to excel, apply described customizations directly in exported document, then import the document to automatically generate customized style sheet. The objects are attached.
These postings are provided "AS IS" with no warranties and confer no rights. You assume all risk for your use.
All feedback regarding issues or suggestion to this post are very welcome!
Jasminka Vukovic (jvukovic), Lars Lohndorf-Larsen (Lohndorf)