tag:blogger.com,1999:blog-33080954618520375142024-03-12T19:15:29.983-07:00Math DAXQuand Dynamics rencontre AzureMathieu Tessierhttp://www.blogger.com/profile/04248737547907422016noreply@blogger.comBlogger269125tag:blogger.com,1999:blog-3308095461852037514.post-43870692696102320912018-12-09T23:14:00.011-08:002021-05-18T19:12:31.872-07:00SQL: documentation and scripts<div style="text-align: justify;">
J’utilise souvent les mêmes scripts pour les certaines opérations SQL. Au lieu de partager les scripts sur ce blogue, j’ai décidé de faire un billet, que je vais mettre à jour au fil du temps, qui contient la liste de tous les articles et scripts SQL que je trouve utile. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>Index et Statistics</b></div>
<br />
<ul>
<li>Index</li>
<ul>
<li><a href="https://www.sqlshack.com/how-to-identify-and-monitor-unused-indexes-in-sql-server/" target="_blank">How to identify and monitor unused indexes</a></li><li><a href="http://www.sqlservercentral.com/articles/Indexing/110106/" target="_blank">Finding and eliminating duplicate or overlapping indexes</a></li>
<li><a href="https://blogs.msdn.microsoft.com/azuresqldbsupport/2016/07/03/how-to-maintain-azure-sql-indexes-and-statistics/" target="_blank">Azure SQL: How to maintain indexes and statistics</a></li>
<li><a href="https://gallery.technet.microsoft.com/scriptcenter/Check-SQL-Server-a-a5758043" target="_blank">Check index fragmentation of a specified database </a></li>
<li><a href="https://blog.sqlauthority.com/2016/11/13/find-size-indexes-database-interview-question-week-097/">How to find the size of all the indexes in a database</a></li>
<li><a href="https://dataedo.com/kb/query/sql-server/list-all-indexes-in-the-database" target="_blank">List all indexes in SQL Server database (& index columns)</a></li><li>Index compression</li><ul><li><a href="https://stackoverflow.com/questions/16988326/query-all-table-data-and-index-compression" target="_blank">Query all table data and index compression</a></li><li><a href="https://www.sqlserverinternals.com/blog/2018/6/6/creating-my-own-spestimatedatacompressionsavings" target="_blank">Azure SQL: Creating my own sp_estimate_data_compression_savings</a></li><li><a href="https://www.sqlservercentral.com/scripts/estimate-compression-for-all-tables-and-indexes-with-both-row-and-page" target="_blank">Estimate compression for all tables and indexes with both Row and Page</a></li></ul></ul></ul><ul><li>Table</li>
<ul>
<li><a href="https://stackoverflow.com/questions/7892334/get-size-of-all-tables-in-database" target="_blank">Get size of all tables in a database</a></li><li><a href="https://sqlperformance.com/2014/10/t-sql-queries/bad-habits-count-the-hard-way" target="_blank">Bad habits : Counting rows the hard way</a></li>
</ul>
</ul>
<div>
<b>Security</b></div>
<div>
<ul>
<li><a href="https://stackoverflow.com/questions/31120912/how-to-view-the-roles-and-permissions-granted-to-any-database-user-in-azure-sql" target="_blank">How to view the roles and permissions granted to any database user</a></li>
<li><a href="https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-database-role-members-transact-sql?view=sql-server-2017" target="_blank">Query that returns the members of the databases roles</a> (sys.database_role_members)</li><li><a href="http://www.mathdax.ca/2018/05/sql-script-pour-obtenir-les-permissions.html" target="_blank">Script pour obtenir les permissions</a> (mathdax)</li>
<li><a href="https://docs.microsoft.com/en-us/sql/relational-databases/security/authentication-access/determining-effective-database-engine-permissions?view=sql-server-2017" target="_blank">Determining effective permissions</a></li>
</ul>
</div>
<div>
<b>Architecture</b></div><div><ul><li><a href="https://docs.microsoft.com/en-us/sql/relational-databases/query-processing-architecture-guide">Query Processing Architecture Guide</a></li><li><a href="https://docs.microsoft.com/en-us/sql/relational-databases/sql-server-index-design-guide?view=sql-server-ver15">Index Architecture and Design Guide</a></li><li><a href="https://docs.microsoft.com/en-us/sql/relational-databases/memory-management-architecture-guide?view=sql-server-ver15">Memory Management Architecture Guide</a></li><li><a href="https://docs.microsoft.com/en-us/sql/relational-databases/pages-and-extents-architecture-guide?view=sql-server-ver15">Pages and Extents Architecture Guide</a></li><li><a href="https://docs.microsoft.com/en-us/sql/relational-databases/sql-server-transaction-locking-and-row-versioning-guide?view=sql-server-ver15" target="_blank">SQL Server Transaction Locking and Row Versioning Guide</a></li><li><a href="https://docs.microsoft.com/en-us/sql/relational-databases/sql-server-transaction-log-architecture-and-management-guide?view=sql-server-ver15" target="_blank">SQL Server Transaction Log Architecture and Management Guide</a></li><li><a href="https://docs.microsoft.com/en-us/sql/relational-databases/thread-and-task-architecture-guide?view=sql-server-ver15" target="_blank">Thread and Task Architecture Guide</a></li></ul></div><div><br /></div>
<div>
<br /></div>
<div>
</div>
<div>
<b>Performance</b><br />
<br />
<a href="http://www.sommarskog.se/query-plan-mysteries.html" target="_blank">Slow in the Application, Fast in SSMS?</a></div>
<div>
<ul>
<li>Resource Governor</li>
<ul>
<li><a href="https://www.red-gate.com/simple-talk/sql/learn-sql-server/resource-governor/" target="_blank">Resource Governor</a></li>
</ul>
</ul>
<ul>
<li>SQL Profiler</li>
<ul>
<li><a href="https://www.red-gate.com/simple-talk/sql/performance/how-to-identify-slow-running-queries-with-sql-profiler/" target="_blank">How to Identify Slow Running Queries with SQL Profiler</a></li>
</ul>
</ul>
<ul style="text-align: left;">
<li>Queue Store</li><ul><li><a href="https://docs.microsoft.com/en-us/sql/relational-databases/performance/monitoring-performance-by-using-the-query-store?view=sql-server-ver15">Monitoring performance by using the Query Store</a></li></ul></ul><ul style="text-align: left;"><li>Execution Plans</li>
<ul>
<li><a href="https://www.red-gate.com/simple-talk/sql/performance/execution-plan-basics/" target="_blank">Execution Plan Basics</a></li>
<li><a href="https://www.sqlservergeeks.com/sys-dm_exec_plan_attributes/" target="_blank">Execution Plan attributes</a></li>
<li><a href="https://www.sqlshack.com/searching-the-sql-server-query-plan-cache/" target="_blank">Searching the SQL Server query plan cache</a></li><li><a href="https://www.patrickkeisler.com/2013/09/the-case-of-null-queryplan.html" target="_blank">The case of NULL query plan</a></li>
</ul>
</ul>
<ul style="text-align: left;">
<li>Memory</li><ul><li><a href="https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-buffer-manager-object?view=sql-server-ver15#:~:text=Buffer%20cache%20hit%20ratio,the%20ratio%20moves%20very%20little.">SQL Server, Buffer Manager Object</a></li><li><a href="https://dba.stackexchange.com/questions/88784/what-does-a-buffer-cache-hit-ratio-of-9990-mean">Calculate Buffer cache hit ratio</a></li><li><a href="https://www.red-gate.com/simple-talk/sql/database-administration/great-sql-server-debates-buffer-cache-hit-ratio/">Great SQL Server Debates: Buffer Cache Hit Ratio</a></li></ul></ul><ul style="text-align: left;"><li>Scheduler<br /></li><ul><li><a href="https://docs.microsoft.com/en-us/sql/relational-databases/thread-and-task-architecture-guide" target="_blank">Thread and Task Architecture Guide</a></li><li><a href="https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/configure-the-max-degree-of-parallelism-server-configuration-option" target="_blank">Configure the max degree of parallelism Server Configuration Option</a></li><li><a href="https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/configure-the-max-worker-threads-server-configuration-option?view=sql-server-ver15" target="_blank">Configure the max worker threads Server Configuration Option</a></li><li><a href="https://developpaper.com/task-scheduling-and-cpu-deep-explanation-in-sql-server/" target="_blank">Task Scheduling and CPU Deep Explanation in SQL Server</a></li></ul>
</ul>
</div>
Mathieu Tessierhttp://www.blogger.com/profile/04248737547907422016noreply@blogger.comtag:blogger.com,1999:blog-3308095461852037514.post-37744328640980987872018-10-29T23:33:00.002-07:002018-10-29T23:37:08.234-07:00D365 Finance and Operations : les ports nécessaires pour déployer un environnement Cloud-Hosted<div style="text-align: justify;">
J'ai reçu l'erreur suivante lors du déploiement d'un environnement Cloud-Hosted dans mon infrastructure Azure:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: red;">Attempted to remotely execute a powershell script but was unable to reach the Windows Remote Management service. Please make sure the virtual machine in resource group is accessible.</span></div>
<div style="text-align: justify;">
<span style="color: red;"><br /></span></div>
<div style="text-align: justify;">
Afin de corriger le problème, j'ai ouvert les ports pour accèder WinRM et tenter un nouveau deployment. Cette fois, j'ai reçu le message suivant:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: red;">Script [Run-CommandAOSServiceResetAosAdminUser] failed execution against VM. Last Result: 0xFFFFFFF ().</span></div>
<div style="text-align: justify;">
<span style="color: red;"><br /></span></div>
<div style="text-align: justify;">
Le problème est encore le pare-feu. En fait, ceci est dû au fait que je sélectionne un VNET et un subnet qui existe déjà dans mon infrastructure Azure. Le subnet est attaché à un Network Security Group (NSG) qui restreint les ports accessibles de l'extérieur. Étant donné que j'ai été incapable de trouver les pré-requies en terme de port pour le déploiement d'un environnment Cloud-Hosted, j'ai fait un déploiement et j'ai laissé LCS créer le VNET et le subnet. Ensuite, le déploiement fut un succès et j'ai été regarder la configuration par défaut du NSG.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Ensuite, il suffit de modifier les permissions du NSG existant donc je veux utiliser pour les futures déploiement.</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV72H7yIMigfkZKC9WPMnZcEERlmiLGJW6xHIsxORSehu5ITSORTalSvgYdfdoytmwYjVsMXA4ivijP4aj-gVMQZATX2xcD8fk2Gsdq46CjH3g-zQFmWq4LbmnsjoZPmxa88cEcSDz-bA/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="451" data-original-width="1066" height="168" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV72H7yIMigfkZKC9WPMnZcEERlmiLGJW6xHIsxORSehu5ITSORTalSvgYdfdoytmwYjVsMXA4ivijP4aj-gVMQZATX2xcD8fk2Gsdq46CjH3g-zQFmWq4LbmnsjoZPmxa88cEcSDz-bA/s400/1.png" width="400" /></a></div>
<div style="text-align: justify;">
<br /></div>
Mathieu Tessierhttp://www.blogger.com/profile/04248737547907422016noreply@blogger.comtag:blogger.com,1999:blog-3308095461852037514.post-39154215885815740862018-09-17T17:24:00.000-07:002018-09-18T17:25:55.625-07:00D365 Finance and Operations: Utilisation DTU pour les base de données Azure SQL<div style="text-align: justify;">
Les environnements D365 F&O Tier 2+ utilisent Azure SQL pour les bases de données AX, Financial Reporter et Data Warehouse. Étant donnée que les environnements son hébergé par Microsoft, nous n’avons pas accès aux serveurs Azure SQL via le portail Azure. Ainsi, nous ne pouvons pas utiliser les outils de monitoring d'Azure.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Toutefois, nous pouvons utiliser l’outil <i>Environnement Monitoring</i> de LCS pour voir le pourcentage d’utilisation SQL pour la base de données AxDB.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigA6_dNqngSq0omdGmp8BZsR1mu-bmJcIGe7n4EpCLc1FCwTnJZ00zWWeM7xy4Qlf-sX4E9MRUlK0ogZ4GCPmQsvGsQ11iWFEH2pYWiJxC7epBxN9LuyWM_RyLGAddnYgtR5ai0r2yXO8/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="197" data-original-width="1143" height="68" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigA6_dNqngSq0omdGmp8BZsR1mu-bmJcIGe7n4EpCLc1FCwTnJZ00zWWeM7xy4Qlf-sX4E9MRUlK0ogZ4GCPmQsvGsQ11iWFEH2pYWiJxC7epBxN9LuyWM_RyLGAddnYgtR5ai0r2yXO8/s400/1.png" width="400" /></a></div>
<div>
<br /></div>
<div style="text-align: justify;">
Toutefois, aucune information pour les bases de données AxDW et MrDB. Afin de savoir l’utilisation SQL pour ses deux bases de données, il faut se connecter sur le serveur Azure SQL et exécuter la requête suivante:</div>
<div>
<br /></div>
<div>
<div>
<span style="color: blue;">WITH </span>workload_group_resource_stats_cte (end_time, avg_cpu_percent, avg_data_io_percent, avg_log_write_percent) </div>
<div>
<span style="color: blue;">AS</span> (<span style="color: blue;">SELECT</span> end_time, </div>
<div>
<span style="color: magenta;">Sum</span>(avg_cpu_percent) <span style="color: blue;">AS</span> AVG_CPU_PERCENT, </div>
<div>
<span style="color: magenta;">Sum</span>(avg_data_io_percent) <span style="color: blue;">AS</span> AVG_DATA_IO_PERCENT, </div>
<div>
<span style="color: magenta;">Sum</span>(avg_log_write_percent) <span style="color: blue;">AS</span> AVG_LOG_WRITE_PERCENT </div>
<div>
<span style="color: blue;">FROM</span> sys.dm_db_workload_group_resource_stats </div>
<div>
<span style="color: blue;">GROUP BY</span> end_time)</div>
<div>
<span style="color: blue;">SELECT</span> END_TIME,</div>
<div>
(<span style="color: blue;">SELECT</span> <span style="color: magenta;">Max</span>(v) </div>
<div>
<span style="color: blue;">FROM</span> (<span style="color: blue;">VALUES</span> (avg_cpu_percent), </div>
<div>
(avg_data_io_percent), </div>
<div>
(avg_log_write_percent)) <span style="color: blue;">AS VALUE</span>(v)) <span style="color: blue;">AS</span> DTU_CONSUMPTION_PERCENT,</div>
<div>
avg_cpu_percent,avg_data_io_percent,avg_log_write_percent</div>
<div>
<span style="color: blue;">FROM</span> workload_group_resource_stats_cte</div>
<div>
<span style="color: blue;">ORDER BY</span> END_TIME <span style="color: blue;">DESC</span></div>
</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW6emeUwV9faPkV4Wq0oi8moKkslUqd556U-RVCcjthkblyF1IxEg3mWrmWwniNYnELq1mPzN1cbf3owhutGd-QlueBgAMw8qbCZXZu98lqHL7kngOBdfwRMDlIBUZQhxMSk83W_hKU0Y/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="282" data-original-width="702" height="160" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW6emeUwV9faPkV4Wq0oi8moKkslUqd556U-RVCcjthkblyF1IxEg3mWrmWwniNYnELq1mPzN1cbf3owhutGd-QlueBgAMw8qbCZXZu98lqHL7kngOBdfwRMDlIBUZQhxMSk83W_hKU0Y/s400/2.png" width="400" /></a></div>
<div>
<br /></div>
Mathieu Tessierhttp://www.blogger.com/profile/04248737547907422016noreply@blogger.comtag:blogger.com,1999:blog-3308095461852037514.post-15576529788261263632018-08-21T22:05:00.000-07:002018-08-21T22:12:39.027-07:00SQL Server: FETCH_API consommes beaucoup de resources SQL<div style="text-align: justify;">
Lors d’une investigation d’un problème de performance avec D365 for Finance and Operations, j’ai exécuté le script <a href="https://blog.sqlauthority.com/2010/05/14/sql-server-find-most-expensive-queries-using-dmv/">Find Most Expensive Queries Using DMV</a> de Pinal Dave et j’ai trouvé ceci:</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRjiqSseSJ3E7dziQOaCROSCSjBeIgdkr2SJP-jiRlK7pKVz99eMtjnmxrDH9bsJKXjPiS1ruZa8oPNoRVxC4On2l3yIw7LUxbdJpY_WeNkGG5jP-fkoNyOUG45XxfZ6b3MBO5eZKg6gs/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="116" data-original-width="775" height="58" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRjiqSseSJ3E7dziQOaCROSCSjBeIgdkr2SJP-jiRlK7pKVz99eMtjnmxrDH9bsJKXjPiS1ruZa8oPNoRVxC4On2l3yIw7LUxbdJpY_WeNkGG5jP-fkoNyOUG45XxfZ6b3MBO5eZKg6gs/s400/1.png" width="400" /></a></div>
<br />
<div style="text-align: justify;">
Étant donné que le processus était toujours en cours d’exécution dans l’application, j'ai utilisé mon <a href="http://www.mathdax.ca/2017/03/dynamics-ax-diagnostiquer-les-problemes.html">script</a> qui me retourne toute les requêtes en cours d’exécution et j’ai vu le résultat ci-dessous. Il faut dire que ce fut par chance parce que comme vous pouvez le voir, c’est une petite requête qui ne consomme pas de CPU, reads, writes et logicial reads, donc elle passe vite. J’ai dû exécuter mon script plusieurs fois avant avant de la voir.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVgUCtvxtbLc99aPGwriBP5x8tVnQ0RIn8BXak13r55N8mrA2M2dM79tToMCOErcR9kDfU9UlxYW5nRrBEhjEHEBcsaIEOX79lY8PbU3l-CCYAXw80KGPF_yXV0INCj6Au-uUssF8mQEY/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="148" data-original-width="838" height="70" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVgUCtvxtbLc99aPGwriBP5x8tVnQ0RIn8BXak13r55N8mrA2M2dM79tToMCOErcR9kDfU9UlxYW5nRrBEhjEHEBcsaIEOX79lY8PbU3l-CCYAXw80KGPF_yXV0INCj6Au-uUssF8mQEY/s400/2.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both;">
Qu’est-ce que FETCH_API ? C’est bien expliquer dans l’article suivant: <a href="https://www.sqlskills.com/blogs/joe/hunting-down-the-origins-of-fetch-api_cursor-and-sp_cursorfetch/">Hunting down the origins of FETCH API_CURSOR and sp_cursorfetch</a>. En résumé, le curseur est défini au début de la transaction et SQL travaille a l’intérieur de ce curseur.</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
Afin de voir la requête derrière le curseur, l’article mentionner plus haut propose la requête suivante (il faut remplacer le chiffre 53 par le SPID):</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
<span style="color: blue;">SELECT</span> c.session_id, c.properties, c.creation_time, c.is_open, t.<span style="color: blue;">text</span></div>
<div class="separator" style="clear: both;">
<span style="color: blue;">FROM</span><span style="color: #6aa84f;"> sys.dm_exec_cursors</span> (<span style="background-color: red;">53</span>) c</div>
<div class="separator" style="clear: both;">
<span style="color: #cccccc;">CROSS APPLY</span> <span style="color: #6aa84f;">sys.dm_exec_sql_text</span> (c.<span style="color: blue;">sql_handle</span>) t</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Celle-ci fonctionne bien si le SPID reste le même pour une longue durée. Pour ma part, j’ai fait une modification au script afin de voir tous les curseurs ouverts en ordre de worker_time, read and writes afin de facilement identifier le curseur qui consomme le plus de ressource.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="color: blue;">SELECT</span> c.session_id, c.properties, c.creation_time, c.is_open, t.<span style="color: blue;">text</span>, worker_time, reads, writes</div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="color: blue;">FROM</span> <span style="color: #6aa84f;">sys.dm_exec_cursors</span> (0) c</div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="color: #cccccc;">CROSS APPLY</span> <span style="color: #6aa84f;">sys.dm_exec_sql_text</span> (c.<span style="color: blue;">sql_handle</span>) t</div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="color: blue;">ORDER BY</span> </div>
<div class="separator" style="clear: both; text-align: justify;">
worker_time <span style="color: blue;">DESC</span>, </div>
<div class="separator" style="clear: both; text-align: justify;">
reads <span style="color: blue;">DESC</span>, </div>
<div class="separator" style="clear: both; text-align: justify;">
writes <span style="color: blue;">DESC</span></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgql4PXn15UTRBADf5Ng8_i6Pc6tlYauhfuLp5draSKWtHuodTnXcbr1WNMnHW__AQkuBjwpNzc9BxmD0nw8EFl3Iq4EVt-cR-1UeQZoqanoslkeUETamjKhiO5BudT1OY-_484El3NWNY/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="118" data-original-width="763" height="61" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgql4PXn15UTRBADf5Ng8_i6Pc6tlYauhfuLp5draSKWtHuodTnXcbr1WNMnHW__AQkuBjwpNzc9BxmD0nw8EFl3Iq4EVt-cR-1UeQZoqanoslkeUETamjKhiO5BudT1OY-_484El3NWNY/s400/3.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Voilà, je peux maintenant voir les requêtes en question.</div>
Mathieu Tessierhttp://www.blogger.com/profile/04248737547907422016noreply@blogger.comtag:blogger.com,1999:blog-3308095461852037514.post-42786033172149669532018-07-27T08:10:00.000-07:002018-07-27T08:10:43.273-07:00D365 Finance and Operations: The request channel timed out while waiting a reply after 00:59:59.<div style="text-align: justify;">
Récemment, j’écrivais un article sur comment trouver les messages d’erreur lors de l’exécution d’une job <i>export entity to database</i> qui échoue: <a href="http://www.mathdax.ca/2018/07/d365-for-finance-and-operations-export.html">Export failed while copying data from target to staging</a>.</div>
<br />
<div style="text-align: justify;">
J’ai diagnostiqué un autre cas ou l’export échouait avec l’erreur suivante:</div>
<div style="text-align: justify;">
<br /></div>
<span style="color: red;">The request channel timed out while waiting a reply after 00:59:59. Increase the timeout value passed to the call to Request or increase the SendTimeout value on the Binding.</span><br />
<br />
<div style="text-align: justify;">
Dans une architecture WCF, la valeur du <i>SendTimeout</i> est établie par le client. Dans ce cas-ci, le client est le service AOS et le serveur est Data Import Export Framework service. Afin de modifier la valeur du<i> SendTimeout</i> du côté client, il faut modifier le fichier suivant:</div>
<div>
<br /></div>
<div>
<div>
Fichier: Microsoft.Dynamics.AX.Framework.Tools.DMF.ServiceProxy.dll.config</div>
<div>
<br /></div>
<div>
Microsoft-Hosted</div>
<div>
<ul>
<li>G:\AosService\WebRoot\bin\</li>
</ul>
</div>
<div>
Cloud-Hosted</div>
<div>
<ul>
<li>K:\AosService\WebRoot\bin</li>
</ul>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6YlTdDqW-eRE8doKpT-k43Fl5OhYtMJxK7U-yyy0E1iCBFpkms8iFSgSG3nmvMxHtV-_aUW3BjmdLZmYNGWwe2xGgJfuIkIQCMGl18cFheN0ya-MqgYG8-yQ65vx7OzMsw6CSvW423PU/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="57" data-original-width="746" height="30" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6YlTdDqW-eRE8doKpT-k43Fl5OhYtMJxK7U-yyy0E1iCBFpkms8iFSgSG3nmvMxHtV-_aUW3BjmdLZmYNGWwe2xGgJfuIkIQCMGl18cFheN0ya-MqgYG8-yQ65vx7OzMsw6CSvW423PU/s400/3.png" width="400" /></a></div>
<div>
<br /></div>
<div>
Ensuite il faut redemarrer IIS.</div>
</div>
Mathieu Tessierhttp://www.blogger.com/profile/04248737547907422016noreply@blogger.comtag:blogger.com,1999:blog-3308095461852037514.post-22359925205511439372018-07-27T07:49:00.000-07:002018-07-27T07:49:02.031-07:00Dynamics AX 2012 R3: An error (1332) occurred while enumerating the group membership. <div style="text-align: justify;">
Lors du déploiement des rapports SSRS d’un environnement Dynamics AX 2012 R3, j’ai reçu le message d’erreur suivant:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: red;">Warning: The security group Administrator contains a member that is causing the following error : An error (1332) occurred while enumerating the group membership. The member’s SID could not be resolved.</span></div>
<span style="color: red;"><br /></span>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhD9_Dwk6OHvxVJZQagRT9hKqdk46jcUZxisWKHin47y3P9ZQGYns_cl7HELz1NwSSyg9s0GNJhRQ1uRbnEI2Od3xhIzpj8AgWrAQX2k2JIRo992JTbflxpqmME0FIsD3xoQWOb3JxV6_Q/s1600/7536.errorMessage3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="331" data-original-width="667" height="197" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhD9_Dwk6OHvxVJZQagRT9hKqdk46jcUZxisWKHin47y3P9ZQGYns_cl7HELz1NwSSyg9s0GNJhRQ1uRbnEI2Od3xhIzpj8AgWrAQX2k2JIRo992JTbflxpqmME0FIsD3xoQWOb3JxV6_Q/s400/7536.errorMessage3.jpg" width="400" /></a></div>
<span style="color: red;"><br /></span>
<br />
<div style="text-align: justify;">
L’erreur m’empêchait de déployer les rapports SSRS. Une recherche sur Internet indique que le paramètre <i>-SkipReportServerAdminCheck</i> pour faire partie de la solution, mais je n’ai pas essayer.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Ensuite, je sais que mon compte était membre d’un groupe de domaine et ce groupe était membre du groupe administrateur local. Donc, j’étais bel et bien administrateur de la machine, mais comme le message l’indique, il y a un problème lors de l’énumération des membres du groupe administrateur local. L'erreur est explicite, il semble y avoir un membre du groupe administrateur local qui n’existe plus dans l’Active Directory et ceci cause probleme, mais j’ai oublier de vérifier cela avant d’appliquer la solution suivante: j’ai ajouté mon compte dans le groupe administrateur local et ensuite j’ai fait le déploiement et ça l’a fonctionner.</div>
Mathieu Tessierhttp://www.blogger.com/profile/04248737547907422016noreply@blogger.comtag:blogger.com,1999:blog-3308095461852037514.post-6597207768715128092018-07-20T06:55:00.000-07:002018-07-20T07:08:53.040-07:00D365 for Finance and Operations: Export failed while copying data from target to stagingUn utilisateur rapporte un problème lors de l’exécution d’une job export entity to database. La tache rapporte un warning, mais lorsqu’on clique sur Execution Details, on peut y voir que certaines entités ont complètement échoué.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-O8SqowQlhOgK_eWgOTek4tsL5c-WUA5ZtMUJh_428wbBtC0gRQLU6yiJDV2MUYJXm2PP7DkD6l08lV_8L8f5ZbHs-fA5UQYb_xYhi-6hUyiUbSm6Ix6fewmpqdoRUx8bFuBgXDDtQqs/s1600/0.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="170" data-original-width="665" height="101" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-O8SqowQlhOgK_eWgOTek4tsL5c-WUA5ZtMUJh_428wbBtC0gRQLU6yiJDV2MUYJXm2PP7DkD6l08lV_8L8f5ZbHs-fA5UQYb_xYhi-6hUyiUbSm6Ix6fewmpqdoRUx8bFuBgXDDtQqs/s400/0.png" width="400" /></a></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEielo63WKPaLsS9f8NXxmLqYvoAu9HbjIlj3RmLh44IGA7GaQvnnZS6qacbfxfVnV4IaCxhYK8nWygwYcz1d38ycUMJES0UsBbBQJJScqualzs1QQB11pgEVDu6x2ZL76My3GjRxRiUz0k/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="737" data-original-width="1445" height="203" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEielo63WKPaLsS9f8NXxmLqYvoAu9HbjIlj3RmLh44IGA7GaQvnnZS6qacbfxfVnV4IaCxhYK8nWygwYcz1d38ycUMJES0UsBbBQJJScqualzs1QQB11pgEVDu6x2ZL76My3GjRxRiUz0k/s400/1.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Afin de voir les détails de l’échec, on peut cliquer sur View execution log.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeqUSztNk6S68E1m4CU2kTNV3MVYBurM1n-rkY0lD2Kdc3_9k-sspO09V4QpuP0xekwmkD3mFotvwFJO0-HspLBp8XctsX1xuNkbnfJMFjs14OmgAGmbMZn2nEgihrw5MtghOFtT3qfUA/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="80" data-original-width="781" height="32" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeqUSztNk6S68E1m4CU2kTNV3MVYBurM1n-rkY0lD2Kdc3_9k-sspO09V4QpuP0xekwmkD3mFotvwFJO0-HspLBp8XctsX1xuNkbnfJMFjs14OmgAGmbMZn2nEgihrw5MtghOFtT3qfUA/s320/2.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Toutefois, il n’y a rien dans la section log text.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaCvTECLlm4GSWEoy7KOwVIE_ObJkTRWwZG5dhsaqmsbf-HkxdKRTjsYTDNpa5_HExF2kWhnUMLycuhbY4Zv86DYMozOjHJCi4vMAt7lkrZY6vPWrbN5ekv7S4v4odf8jIsaFrbFLTDuE/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="919" data-original-width="1600" height="228" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaCvTECLlm4GSWEoy7KOwVIE_ObJkTRWwZG5dhsaqmsbf-HkxdKRTjsYTDNpa5_HExF2kWhnUMLycuhbY4Zv86DYMozOjHJCi4vMAt7lkrZY6vPWrbN5ekv7S4v4odf8jIsaFrbFLTDuE/s400/3.png" width="400" /></a></div>
<br />
Dans ce cas, je suis chanceux, ce n’est un environnement de production et je peux aller sur le serveur AOS. Je peux y trouver l’information dans le journal d’évènement sous Application and Services Logs > Microsoft > Dynamics > AX-DIXFRuntime<br />
<br />
Dans ce cas-ci, voici les erreurs que j’ai trouvées:<br />
<br />
<span style="color: red;">Export failed while copying data from target to staging</span><br />
<br />
<span style="color: red;">Exception from HRESULT: 0xC0010009</span><br />
<span style="color: red;"><br /></span>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9jw05kdqJzz1wqu8inIEmy3feHbq7kXIWj4KVdGlUXe008hTIn8vY0-FNvkg3CMcxLGrXjgCOaY7EigNwyrRT15YTEvMdmJj2_1igAs7ez5s_4L8NdEtcJBB2n7QnRAvdIvPcfm775lk/s1600/6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="467" data-original-width="673" height="277" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9jw05kdqJzz1wqu8inIEmy3feHbq7kXIWj4KVdGlUXe008hTIn8vY0-FNvkg3CMcxLGrXjgCOaY7EigNwyrRT15YTEvMdmJj2_1igAs7ez5s_4L8NdEtcJBB2n7QnRAvdIvPcfm775lk/s400/6.png" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBzyTKvXgGIG_8IRO8JTBPi2KqxgXVFYYIRfDZ4lTlLen616dHknn-B4GinSvF8VEzkeSmzveddfuGStPMCSGN0k4uNzbzondsIW3eoeclOHuysJHSI_orUxBT1RTjpkZ6tGWPeo5Lcyk/s1600/5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="481" data-original-width="644" height="297" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBzyTKvXgGIG_8IRO8JTBPi2KqxgXVFYYIRfDZ4lTlLen616dHknn-B4GinSvF8VEzkeSmzveddfuGStPMCSGN0k4uNzbzondsIW3eoeclOHuysJHSI_orUxBT1RTjpkZ6tGWPeo5Lcyk/s400/5.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Pour corriger ce problème, il faut augmenter la valeur du <i>SqlCommandTimeOut</i> du fichier <i>DMFConfig.xml</i> qui se trouve dans: </div>
<div class="separator" style="clear: both; text-align: justify;">
</div>
<ul>
<li>C:\Program Files (x86)\Microsoft Dynamics AX\70\DataImportExportFramework\</li>
</ul>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCHwTJrOhopI7oFSu_0Ldo3HG21rlP-cdGzZ_fFjd_mX8n6EqWlh1-pv58tFVOtkzFCAyGP4Xhf4KO9XVp61rVqcJ1_F5zx8u-6TdYKSBLcGSTTqBVueGW_SZG_3i98qTKKEk1sed54Zs/s1600/7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="93" data-original-width="272" height="68" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCHwTJrOhopI7oFSu_0Ldo3HG21rlP-cdGzZ_fFjd_mX8n6EqWlh1-pv58tFVOtkzFCAyGP4Xhf4KO9XVp61rVqcJ1_F5zx8u-6TdYKSBLcGSTTqBVueGW_SZG_3i98qTKKEk1sed54Zs/s200/7.png" width="200" /></a></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Ensuite, il faut redemarrer les services <i>Batch Management Service</i> et <i>Data Import Export Framework</i> Service.</div>
Mathieu Tessierhttp://www.blogger.com/profile/04248737547907422016noreply@blogger.comtag:blogger.com,1999:blog-3308095461852037514.post-3801992634942578922018-07-20T05:41:00.000-07:002018-07-20T05:45:22.580-07:00Power BI : Tenant identifiers may not be an empty GUID<span style="text-align: justify;">J’effectuais des tests dans mon labo et je voulais utiliser une base de données Azure SQL comme source de données pour Power BI Desktop. Afin de m’authentifier, je voulais utiliser mon compte Azure Active Directory</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJg9mgyOYPM5xphQkdEudUqW42NuELxpXFDAiehxXANW2t0GAxkThdPvcHeVZVrKLhELpofBPYBU2C6dnRkKIeraHKdW4CeeH7kOB-6eht12h36MW-pKwLo7lsjjAhr8RA9ahDEInliHQ/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="564" data-original-width="1043" height="173" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJg9mgyOYPM5xphQkdEudUqW42NuELxpXFDAiehxXANW2t0GAxkThdPvcHeVZVrKLhELpofBPYBU2C6dnRkKIeraHKdW4CeeH7kOB-6eht12h36MW-pKwLo7lsjjAhr8RA9ahDEInliHQ/s320/1.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="text-align: start;">Toutefois, j’obtenais toujours le message d’erreur suivant:</span></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="text-align: start;"><br /></span></div>
<span style="color: red;">AADSTS90002: Requested tenant identifier ‘00000000-0000-0000-0000-000000000000’ is not valid. Tenant identifiers may not be an empty GUID.</span><br />
<span style="color: red;"><br /></span>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjieR8es6_V4l3nRcMHuZYk2_4s7RnsiXcsJb_PI4pmHz10_U3bQ1zuPt0yaZKv7NWIsKCb3g2jwQE9ZRCtwiRvLWokXa2dC4A94DAzLyJrhQOGs-oVT7N59Kd4bYWXTWBK-NTfZGNHslk/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1074" data-original-width="1540" height="223" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjieR8es6_V4l3nRcMHuZYk2_4s7RnsiXcsJb_PI4pmHz10_U3bQ1zuPt0yaZKv7NWIsKCb3g2jwQE9ZRCtwiRvLWokXa2dC4A94DAzLyJrhQOGs-oVT7N59Kd4bYWXTWBK-NTfZGNHslk/s320/2.png" width="320" /></a></div>
<span style="color: red;"><br /></span>
<div style="text-align: justify;">
Je savais qu’il faut configurer un Azure AD Admin sur le serveur Azure SQL via le portail afin de supporter l’authentification AAD. Disons que j’ai chercher longtemps la raison pourquoi ce ne fonctionnais pas parce que je croyais que j’avais configure un Azure AD Admin. Eh bien, je ne l’avais pas faite et c'est la raison pour laquelle je recevais ce message d’erreur.</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxiKDFYigzmPJhc_WIuplDeP5Ky2A258pM9wbYH6CgKm8vgelNOjz6rlDySG6JDB6ijTx1hiJFPnyGsqfW5VFAUvwEos_tprchLipZc2wjnIS5qpm4gyuOqSClSCveJvm2CvFCZNh0cZ8/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="907" data-original-width="1423" height="203" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxiKDFYigzmPJhc_WIuplDeP5Ky2A258pM9wbYH6CgKm8vgelNOjz6rlDySG6JDB6ijTx1hiJFPnyGsqfW5VFAUvwEos_tprchLipZc2wjnIS5qpm4gyuOqSClSCveJvm2CvFCZNh0cZ8/s320/1.png" width="320" /></a></div>
<br />Mathieu Tessierhttp://www.blogger.com/profile/04248737547907422016noreply@blogger.comtag:blogger.com,1999:blog-3308095461852037514.post-41699665290038599802018-07-20T05:28:00.000-07:002018-07-20T07:08:52.989-07:00D365 for Finance and Operations: Grosseur de la base de données de production<div style="text-align: justify;">
Afin de connaitre la grosseur de la base de données Azure SQL d’un environnement de production, il suffit d’aller dans le Projet LCS et cliquer sur Full Details sous l’environnement de production.</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9fs-9OoD5cNgQ5kTJVZ4erui63DzNgYR0TgxUj_3yvonwX5sbq9RTSeUi0bxhFuEM2oUucvgr_Ta-WwnasT78kQ-kQnQfGnTU2X_LK0MQ_7KHzG6FzoWdk-ylUb_QJwgOpmjjS8XSl-0/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="146" data-original-width="485" height="96" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9fs-9OoD5cNgQ5kTJVZ4erui63DzNgYR0TgxUj_3yvonwX5sbq9RTSeUi0bxhFuEM2oUucvgr_Ta-WwnasT78kQ-kQnQfGnTU2X_LK0MQ_7KHzG6FzoWdk-ylUb_QJwgOpmjjS8XSl-0/s320/1.png" width="320" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Ensuite, cliquer sur <i>Full system diagnostics</i> dans la section <i>Monitoring</i>.</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheyxpSx5pcymyd0A-cPK_j0IjlQFT68SCwo7OppVCOnBDPWtvrIHtY0-v1gf5DA16CNOLzsdhfOxuxhnsCmzXCSiEHmJ5fYYwvBxHwCoJp8Gw7GwbeuUNO854zSGi_F0yQSUIhzPZwONw/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="361" data-original-width="521" height="221" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheyxpSx5pcymyd0A-cPK_j0IjlQFT68SCwo7OppVCOnBDPWtvrIHtY0-v1gf5DA16CNOLzsdhfOxuxhnsCmzXCSiEHmJ5fYYwvBxHwCoJp8Gw7GwbeuUNO854zSGi_F0yQSUIhzPZwONw/s320/2.png" width="320" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Ensuite, cliquer sur <i>Report</i> et sélectionner l’envionment de Production.</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0Dq_pn7H7kyjQ0VC-6PozH8kpY18fxtmIMSabzeu89z-yOpo296_Y9pOOJy_bU9DiqYuP0zCmb7ncLYGI9WhpJFa3zgRCVYSm8RYp3SIFotSHDlpWp0PfvOtHwzHcQQjQIkuM79R8iHI/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="185" data-original-width="1195" height="61" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0Dq_pn7H7kyjQ0VC-6PozH8kpY18fxtmIMSabzeu89z-yOpo296_Y9pOOJy_bU9DiqYuP0zCmb7ncLYGI9WhpJFa3zgRCVYSm8RYp3SIFotSHDlpWp0PfvOtHwzHcQQjQIkuM79R8iHI/s400/3.png" width="400" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Dans la section Ax Database File, vous allez y trouver la grosseur des fichiers de la base de données.</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkx5qxf7sCsTVyuGLKniWkAPKUZU-GQ4ti576mjF6GYcJr5j0HkSVicrOklGmu6OpQ6Em8B8UZ9zghiK68RtqRG1RJwLTSBr4wJU2fv1WdM5muRrzyYzsw0sf0bUqSfquI3-NFpoc_vZ8/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="250" data-original-width="1301" height="76" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkx5qxf7sCsTVyuGLKniWkAPKUZU-GQ4ti576mjF6GYcJr5j0HkSVicrOklGmu6OpQ6Em8B8UZ9zghiK68RtqRG1RJwLTSBr4wJU2fv1WdM5muRrzyYzsw0sf0bUqSfquI3-NFpoc_vZ8/s400/4.png" width="400" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Prenez ce chiffre * 8 / 1024 / 1024 et ça vous donne la grosseur de la base de données en GB.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
115505152 * 8 / 1024 / 2014 = 881.23 GB</div>
Mathieu Tessierhttp://www.blogger.com/profile/04248737547907422016noreply@blogger.comtag:blogger.com,1999:blog-3308095461852037514.post-69862872902829751892018-07-06T07:08:00.000-07:002018-07-20T07:08:53.079-07:00D365 for Finance and Operations: iisexpress.exe et registered URLs<div style="text-align: justify;">
J’ai fait face à un problème qui a piqué ma curiosité. Un programmeur m’indique que l’application D365 for Finance and Operations est accessible via le web malgré le fait que le site <i>AOSService</i> soit arrêté. Je vérifie sur le serveur et en effet le site est arrêté et je suis toujours capable d’accéder l’application via le web. </div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUEpSgZz9Q0VjNMXzfAwiKorqqt9XCrecDC1ugwIStE44y0t6dhDOGJaCfJQiiIvSlDh9z-ughyphenhyphennmk_nwPCN5Z2zFaJ08KzBsa0rdsPXXMEGcEZnqwhWeheEirgchdU5PjFs1P7KZJzZE/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="170" data-original-width="256" height="132" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUEpSgZz9Q0VjNMXzfAwiKorqqt9XCrecDC1ugwIStE44y0t6dhDOGJaCfJQiiIvSlDh9z-ughyphenhyphennmk_nwPCN5Z2zFaJ08KzBsa0rdsPXXMEGcEZnqwhWeheEirgchdU5PjFs1P7KZJzZE/s200/2.png" width="200" /></a></div>
<div style="text-align: justify;">
Afin de vérifier, j’ai stoppé le site <i>AOSService</i> sur une seconde machine de développement et l’application D365 F&O devenait non disponible pour celle-ci. Je savais donc que j'avais un cas particulier sur la première machine.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
J’ai regardé quels processus écoutaient sur le port 443 en exécutant les 3 commandes suivantes:</div>
<div>
<div>
<ul>
<li>netstat -ano</li>
<li>netsh http show servicestate</li>
<li>netstat -ab</li>
</ul>
</div>
</div>
<div>
<div>
<div style="text-align: justify;">
J’ai réalisé que le PID 4 écoutais sur le port 443. Le hic c’est que le processus associé au PID 4 est <i>NT Kernel & System</i> et ce processus gère le driver <i>http.sys</i>. Donc, il est normal que le PID 4 écoute sur le port 443.</div>
</div>
<div>
<div style="text-align: justify;">
<br /></div>
</div>
<div>
<div style="text-align: justify;">
C’est alors que j’ai remarqué ceci quand j’ai exécuté <i>netsh http show servicestate:</i></div>
</div>
</div>
<div>
<div style="text-align: justify;">
<br /></div>
</div>
<div>
<div style="text-align: left;">
<span style="text-align: justify;">Le service </span><i style="text-align: justify;">iisexpress.exe</i><span style="text-align: justify;"> écoute sur le port 1433, mais je peux y voir que les URL de D365 F&O sont enregistrées sous son processus. En combinaison avoir le driver </span><i style="text-align: justify;">http.sys</i><span style="text-align: justify;"> qui écoute sur le port 443 et qui redirige l’URL vers le processus assigner, ca l'explique pourquoi l’application fonctionnait toujours. </span></div>
</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOSgN1NaUADUGVZtDTWp6fC2ezic8MXLh6T6O1QihFjhxmRSqCp0R1TUQIIgSFJUXejfsVMIvXzf9Wd_r22rbaJIImYYCbx8U-QTq0uhYYDhD6WtkjeEF6w2wIbt4yJ4IpYyG4Ay7SPxA/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="784" data-original-width="1591" height="196" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOSgN1NaUADUGVZtDTWp6fC2ezic8MXLh6T6O1QihFjhxmRSqCp0R1TUQIIgSFJUXejfsVMIvXzf9Wd_r22rbaJIImYYCbx8U-QTq0uhYYDhD6WtkjeEF6w2wIbt4yJ4IpYyG4Ay7SPxA/s400/1.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjawSGxazj1LquRlEpBfSAZi5qfv0X3ECuu2Mo7s0vDMQBjInkBB6UqczETbfsW2EKTRf2m2Ovgd0KJJvLSM_i4k02HaUoqkOmJlGSyIgf5m4L-oHXnR_bfcV6z1GkfISbQ7iWJKSvho_k/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="105" data-original-width="1092" height="37" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjawSGxazj1LquRlEpBfSAZi5qfv0X3ECuu2Mo7s0vDMQBjInkBB6UqczETbfsW2EKTRf2m2Ovgd0KJJvLSM_i4k02HaUoqkOmJlGSyIgf5m4L-oHXnR_bfcV6z1GkfISbQ7iWJKSvho_k/s400/3.png" width="400" /></a></div>
Mathieu Tessierhttp://www.blogger.com/profile/04248737547907422016noreply@blogger.comtag:blogger.com,1999:blog-3308095461852037514.post-31027575771784413882018-07-06T06:41:00.002-07:002018-07-20T07:08:52.925-07:00D365 for Finance and Operations: Lenteur avec Microsoft Edge<div style="text-align: justify;">
Un utilisateur rapporte un problème de lenteur lors de la navigation dans D365 for Finance and Operations. Le système est extrêmement lent lors d’entrée de donnée dans les formulaires de l'application, chaque touche au clavier prend quelques seconds. Après vérification, le problème survient seulement avec le navigateur Microsoft Edge. Finalement, le problème réside dans la fonctionnalité Save Form Entries de Microsoft Edge. Après avoir désactivé la fonctionnalité, les performances sont devenues normales.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigvel6luo5ci0uKpl8xUh9HBd8RcgHvBY9N6_8dGhZUdp-gkdujWVLit476_fBcsiPiIh3r3sAQ1kGZLOQnwX_dEB94HtkB6gnZEFmDAVl11FJGrU-rs0TdntiByJGs65LzJP6BF8Wq6Y/s1600/save+for+entries.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="164" data-original-width="302" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigvel6luo5ci0uKpl8xUh9HBd8RcgHvBY9N6_8dGhZUdp-gkdujWVLit476_fBcsiPiIh3r3sAQ1kGZLOQnwX_dEB94HtkB6gnZEFmDAVl11FJGrU-rs0TdntiByJGs65LzJP6BF8Wq6Y/s1600/save+for+entries.png" /></a></div>
<br />Mathieu Tessierhttp://www.blogger.com/profile/04248737547907422016noreply@blogger.comtag:blogger.com,1999:blog-3308095461852037514.post-59877601302450698042018-06-12T16:20:00.004-07:002018-07-20T07:08:53.002-07:00D365 for Finance and Operations: The transaction log for database is full due to LOG_Backup.Les utilisateurs d'un système D365 for Finance and Operations d’un environment Tier-2 recevait le message d’erreur suivant:<br />
<br />
<span style="color: red;">Sorry, we lost the connection temporarily. Please be patient while we reconnect you.</span><br />
<span style="color: red;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgG56ERk4XE_4A93TuBtMXWynjWg-81et9M8j3zteCNrluz7u6yqJRwbMfowUQmW1v2Klai2UPeIdkVwss9CjWyICTx6NEFMI8ibcEopi503cnxePooUl4z3IFFRcGj8rkFvxBzo4HUidQ/s1600/d365error.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="551" data-original-width="990" height="222" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgG56ERk4XE_4A93TuBtMXWynjWg-81et9M8j3zteCNrluz7u6yqJRwbMfowUQmW1v2Klai2UPeIdkVwss9CjWyICTx6NEFMI8ibcEopi503cnxePooUl4z3IFFRcGj8rkFvxBzo4HUidQ/s400/d365error.png" width="400" /></a></div>
<span style="color: red;"><br /></span>J’ai été voir dans le l’observateur d’évènement et j’ai trouver les messages d’erreur suivants:<br />
<br />
<span style="color: red;">The transaction log for database is full due to LOG_Backup.</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGT3W0uMAOSO_AYF0KMoQXDWLv1nyd1Gie56ts2sTDzWuU54iL_h9AGZEpY5OM_Shk5bTABzeLiQS5qkJlIVyQnEsxbvnHcqHKUo3WEhhsDKGBwRaYtEZhkbU-O0h1Dunp_qeF6hsjxf8/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="518" data-original-width="1280" height="161" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGT3W0uMAOSO_AYF0KMoQXDWLv1nyd1Gie56ts2sTDzWuU54iL_h9AGZEpY5OM_Shk5bTABzeLiQS5qkJlIVyQnEsxbvnHcqHKUo3WEhhsDKGBwRaYtEZhkbU-O0h1Dunp_qeF6hsjxf8/s400/1.png" width="400" /></a></div>
<br />
<br />
J’étais un peu perplexe puisque c’est une base de données Azure SQL, mais j’ai tout de même fait une investigation. J'ai établi une connexion à la base de données Azure SQL et j’ai exécuté la requête suivante:<br />
<br />
<span style="color: blue;">SELECT</span> file_id, name, type_desc, physical_name, (size * 8) / 1024/1024 "<span style="color: red;">Current Size in GB</span>", (max_size * 8) / 1024/1024 "<span style="color: red;">Maximum Size in GB</span>"<br />
<span style="color: blue;">FROM</span> <span style="color: #38761d;">sys.database_files</span> ;<br />
<br />
On peut y voir qu’effectivement le fichier de log est rempli à pleine capacité.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjhhXRr5RlU4uDNbKsdAwX6RGmB2Az-G9bzb0gg5plG2wKW2i8CTnmRUrkl3IkvMFKrEiypF7DOXMIN-NWTBZmQPJjpBVXzOqguGZtRdqC0dh0KLxj2mc3VBG8bS6qesFUyc_wuS5yjqc/s1600/2.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="174" data-original-width="779" height="88" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjhhXRr5RlU4uDNbKsdAwX6RGmB2Az-G9bzb0gg5plG2wKW2i8CTnmRUrkl3IkvMFKrEiypF7DOXMIN-NWTBZmQPJjpBVXzOqguGZtRdqC0dh0KLxj2mc3VBG8bS6qesFUyc_wuS5yjqc/s400/2.PNG" width="400" /></a></div>
<br />
La taille maximum du fichier de log = 45875200 KB = 367GB.<br />
La taille maximum du fichier données = 134217728 KB = 1TB.<br />
<br />
Ensuite, j’ai exécuté la requête suivante afin de connaitre le service tier de la base de données AxDB<br />
<br />
<span style="color: blue;">SELECT </span> d.name, slo.* <br />
<span style="color: blue;">FROM</span> <span style="color: #38761d;">sys.databases</span> d <br />
<span style="color: blue;">JOIN</span> sys.database_service_objectives slo <br />
<span style="color: blue;">ON</span> d.database_id = slo.database_id;<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxSKP3t8bc8LP7eHChsSN_KYsIpCMfPyrwuqxwmOBz4-ceey8kELYDBYrcxxcR0y-J5ThEPizuJkWCGuZN45Q8ceFLFbRWrQ1EsVI1sMN8hez3VRJ1n3V9638soCjQ73_OkaH873rd1Jk/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="107" data-original-width="889" height="47" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxSKP3t8bc8LP7eHChsSN_KYsIpCMfPyrwuqxwmOBz4-ceey8kELYDBYrcxxcR0y-J5ThEPizuJkWCGuZN45Q8ceFLFbRWrQ1EsVI1sMN8hez3VRJ1n3V9638soCjQ73_OkaH873rd1Jk/s400/3.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Je sais que la grosseur maximum de la base de données pour service tier P11 est de 4TB, donc il est clair que Microsoft a limité la grosseur à 1TB. De plus, 1TB est la grosseur limite de la base de données, aucune information sur la limite du fichier de log.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Je sais que la grosseur maximum de la base de données pour service tier P11 est de 4TB, donc il est clair que Microsoft a limité la grosseur à 1TB. De plus, 1TB est la grosseur limite de la base de données, aucune information sur la limite du fichier de log.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvdZJLhH-N3mBlA5ww9HhKn1mwlBgDDHoIcOtOAkXNbWYBlCAMcrpMo6XwJgolzgtqpfQxdPQrR61a7i9iCr5gOwAUbAR8-e2_wW6zb5JZ1DNPRk0e2W7m8wQZEiHXfT9tRw_2wfIWP_8/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="435" data-original-width="1092" height="158" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvdZJLhH-N3mBlA5ww9HhKn1mwlBgDDHoIcOtOAkXNbWYBlCAMcrpMo6XwJgolzgtqpfQxdPQrR61a7i9iCr5gOwAUbAR8-e2_wW6zb5JZ1DNPRk0e2W7m8wQZEiHXfT9tRw_2wfIWP_8/s400/4.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Dans ce cas-ci, j’ai décidé de réduire la taille du fichier de log plutôt que de demander à Microsoft d’augmenter la limite. J’ai utilisé la requête suivante.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
dbcc SHRINKFILE(1,250000)</div>
Mathieu Tessierhttp://www.blogger.com/profile/04248737547907422016noreply@blogger.comtag:blogger.com,1999:blog-3308095461852037514.post-33412379744110919212018-05-31T18:46:00.003-07:002020-08-19T18:53:06.312-07:00SQL: script pour obtenir les permissions assignées<p> Voici un script qui permet de connaître les permissions assignés aux utilisateurs et roles.</p><p></p>
<script src="https://gist.github.com/mtessier84/f8bc24714ef685f5f1ec600494f34574.js"></script>Mathieu Tessierhttp://www.blogger.com/profile/04248737547907422016noreply@blogger.comtag:blogger.com,1999:blog-3308095461852037514.post-11722237324607926112018-05-19T00:12:00.000-07:002018-07-06T06:43:43.628-07:00SQL Server: Memory (Private Working Set)<div style="text-align: justify;">
Dernièrement, un collègue de travail m’a demandé pourquoi Task Manager indiquait que 98% de la mémoire du serveur SQL était utilisé, mais que le service MSSQLSERVER en utilisait seulement 1.4 Gb.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkknbpVgVeSvExrCQyPPN8LEN9yiYJ4YEq90Xtq2caGouf_S2gkBmuFfgqQzdjwZCSRcm5Kjx8FIm9xjAxnls_jaOhCNjofpvPeR3MsD9kARAg23gW7nfCUG6F5uiuLVkFOk1H4FCbSuM/s1600/4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="177" data-original-width="650" height="108" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkknbpVgVeSvExrCQyPPN8LEN9yiYJ4YEq90Xtq2caGouf_S2gkBmuFfgqQzdjwZCSRcm5Kjx8FIm9xjAxnls_jaOhCNjofpvPeR3MsD9kARAg23gW7nfCUG6F5uiuLVkFOk1H4FCbSuM/s400/4.jpg" width="400" /></a></div>
<br />
<div style="text-align: justify;">
C’est un comportement normal lorsque le compte de service SQL possède les permissions <a href="https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/enable-the-lock-pages-in-memory-option-windows?view=sql-server-2017">Lock Pages in Memory</a> puisque les "locked pages" en mémoire ne fait pas partie du du <i>Memory Private Working Set</i>.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Voici la différence avec une instance SQL dont le compte de service n’est pas configure avec les permissions <i>Lock Pages in Memory.</i></div>
<div style="text-align: justify;">
<i><br /></i></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJGBi-Bez4yZWfrI-8bgA9U9y0_Zg9G1_GwMgNnirR1wXZQqNWCCWJ1iZHDEuEeAUKvRYWn2z0GP7OPSV9JNhzhZ1uJtXCBSmJS16K3KY_Cd2EiiZbeyh5cZ93r3a7_sTChBo03_z93wo/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="295" data-original-width="1082" height="108" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJGBi-Bez4yZWfrI-8bgA9U9y0_Zg9G1_GwMgNnirR1wXZQqNWCCWJ1iZHDEuEeAUKvRYWn2z0GP7OPSV9JNhzhZ1uJtXCBSmJS16K3KY_Cd2EiiZbeyh5cZ93r3a7_sTChBo03_z93wo/s400/2.png" width="400" /></a></div>
<div style="text-align: justify;">
<i><br /></i></div>
<div style="text-align: justify;">
Dans tous les cas, la meilleure façon de savoir la mémoire utilisée par SQL est via la DMV <b>dm_os_process_memory</b>.</div>
<div style="text-align: justify;">
<i><br /></i></div>
<div style="text-align: justify;">
<span style="color: blue;">SELECT</span></div>
<div style="text-align: justify;">
(physical_memory_in_use_kb/1024)Memory_usedby_Sqlserver_MB</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
<span style="color: blue;">FROM</span> <span style="color: #274e13;">sys.dm_os_process_memory</span></div>
<div style="text-align: justify;">
<br /></div>
Mathieu Tessierhttp://www.blogger.com/profile/04248737547907422016noreply@blogger.comtag:blogger.com,1999:blog-3308095461852037514.post-22759971177282497752018-03-06T20:24:00.000-08:002018-03-07T16:58:41.502-08:00Dynamics AX et SQL Resource Governor<div style="text-align: justify;">
Un de mes clients éprouvait des problèmes de performance avec leur serveur SQL. Après avoir utilisé le <a href="http://www.mathdax.ca/2016/12/sql-server-diagnostic-information.html">script de Glen Barry</a> afin d'effectuer un diagnostique, il était évident que SQL souffrait de congestion au niveau de la mémoire et des disques. De plus, j’ai constaté que la majorité des ressources du serveur était utilisée par des bases de données autre que <i>MicrosoftDynamicsAX</i> et <i>MicrosoftDynamicsAX_model</i>. Les instructions du client étaient claires: les bases de données de Microsoft Dynamics AX doivent avoir priorité sur les ressources.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Le client possède une architecture SQL AlwaysOn Availability groups avec 3 serveurs de réplication, dont un dans un leur site de recouvrement (DR). Les serveurs SQL sont hébergés sur la plateforme Azure dans un mode de déploiement Classic. La taille des serveurs est déjà au maximum 8vCPU, 56GB et il est impossible pour le moment de migrer les serveurs dans le mode Azure Resource Manager (ARM). Impossible aussi pour l'instant de déplacer les autres bases de données.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
C’est un excellent cas pour Resource Governor! C'est la première fois que j'utilisais Resource Governor parce que lors de toutes mes implantations précédentes, les clients ont décidé d'y aller avec une architecture SQL dédiée pour Dynamics AX.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Je ne vais pas entrer dans les détails de Resource Governor, mais en résumé c’est un outil qui permet de limiter la consommation de CPU, mémoire et IOPS. Bref, un outil parfait dans mon cas afin de limiter les ressources utilisées par les autres bases de données sur le serveur et laisser plus de performance pour Dynamics AX.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Tout d’abord, j’ai créé un nouveau <b>Resource Pool</b> nommé <i>DynamicsAX</i>. Mon intention est de rediriger toutes les sessions provenant des serveurs AOS vers ce Resource Pool. Je lui assigne un minimum de 50% du CPU et un minimum de 70% de la mémoire. Prenez note que je ne peux pas assigner un minimum et maximum de IOPS via l’interface graphique, l'option est disponible seulement via T-SQL.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Ensuite, j’ai créé 3 différents <b>workload groups</b>. Un pour le serveur AOS qui dessert les utilisateurs, un pour le serveur AOS qui exécute les batch et un pour le serveur AOS qui dessert les utilisateurs Enterprise Portal.</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicfXbEynlENiE50MYWGnamHkWY7gkfLhpzDm0xLghfKU19mjI2jrJULsY4YZCycuN1PmVokUaJMfIRp3Prp2G2SYKnwl0dVrIkpUv7Ky7v-9UMF9Vsvr19bkGf2nDTXPXuhz_udqZt1iQ/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="514" data-original-width="1349" height="151" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicfXbEynlENiE50MYWGnamHkWY7gkfLhpzDm0xLghfKU19mjI2jrJULsY4YZCycuN1PmVokUaJMfIRp3Prp2G2SYKnwl0dVrIkpUv7Ky7v-9UMF9Vsvr19bkGf2nDTXPXuhz_udqZt1iQ/s400/1.png" width="400" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Ensuite, j'ai créer un <b>classifier</b>. Le classifier permet de rediriger les sessions dans un workload group. Le workload group appartient à un Resource Pool. Dans ce cas-ci, j'ai décidé d'utiliser <span style="color: magenta;">HOST_NAME</span>() pour déterminer la source de la session en sachant que mes serveurs AOS se connectent à la base de données Dynamics AX uniquement via le service AOS. Il est aussi possible d’utiliser d’autre variable comme <span style="color: magenta;">APP_NAME</span>(), <span style="color: magenta;">HOST_NAME</span>(), <span style="color: magenta;">ORIGINAL_DB_NAME</span>(), etc.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: blue;">CREATE FUNCTION</span> dbo.DynamicsAXClassifier()</div>
<div style="text-align: justify;">
<span style="color: blue;">RETURNS SYSNAME</span></div>
<div style="text-align: justify;">
<span style="color: blue;">WITH SCHEMABINDING</span></div>
<div style="text-align: justify;">
<span style="color: blue;">AS</span></div>
<div style="text-align: justify;">
<span style="color: blue;">BEGIN</span></div>
<div style="text-align: justify;">
<span style="color: blue;">DECLARE</span> @WorkloadGroup AS SYSNAME</div>
<div style="text-align: justify;">
<span style="color: blue;">IF</span>(<span style="color: magenta;">HOST_NAME</span>() = '<span style="color: red;">AOSSERVERNAME_USERS</span>')</div>
<div style="text-align: justify;">
<span style="color: blue;">SET</span> @WorkloadGroup = '<span style="color: red;">AOS_Users</span>'</div>
<div style="text-align: justify;">
<span style="color: blue;">ELSE IF</span> (<span style="color: magenta;">HOST_NAME</span>() = '<span style="color: red;">AOSSERVERNAME_BATCH</span>')</div>
<div style="text-align: justify;">
<span style="color: blue;">SET</span> @WorkloadGroup = '<span style="color: red;">AOS_Batch</span>'</div>
<div style="text-align: justify;">
<span style="color: blue;">ELSE IF</span> (<span style="color: magenta;">HOST_NAME</span>() = '<span style="color: red;">AOSSERVERNAME_EP</span>')</div>
<div style="text-align: justify;">
<span style="color: blue;">SET</span> @WorkloadGroup = '<span style="color: red;">AOS_EP</span>'</div>
<div style="text-align: justify;">
<span style="color: blue;">ELSE</span></div>
<div style="text-align: justify;">
<span style="color: blue;">SET</span> @WorkloadGroup = '<span style="color: red;">default</span>'</div>
<div style="text-align: justify;">
<span style="color: blue;">RETURN</span> @WorkloadGroup</div>
<div style="text-align: justify;">
<span style="color: blue;">END</span></div>
<div style="text-align: justify;">
<span style="color: blue;">GO</span></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgt11eMtpPvAmsie7Au3aSOrW0agcX6SHBAIpBaCOrXNuDHVjpWCZTBL07HkcUzRxFAn1OcgU2FXGXfEBwjB55mwCTyqGNaTIjc7m79nlac95dDFIKLXkmGWRx1CLVBhisZu1VcvV7A71M/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="823" data-original-width="1600" height="205" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgt11eMtpPvAmsie7Au3aSOrW0agcX6SHBAIpBaCOrXNuDHVjpWCZTBL07HkcUzRxFAn1OcgU2FXGXfEBwjB55mwCTyqGNaTIjc7m79nlac95dDFIKLXkmGWRx1CLVBhisZu1VcvV7A71M/s400/2.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div style="text-align: justify;">
<div style="text-align: justify;">
Toutes les sessions qui ne proviennent pas des serveurs AOS iront dans le resource pool <i>default</i>. Celui -ci a un accès maximum de 100% du CPU et de la mémoire, mais étant donné que le Resource Pool <i>DynamicsAX</i> a une réservation de 70% (CPU) et 70% (mémoire), ceci veut dire que le nouveau maximum est 30% et 30%.</div>
</div>
<div style="text-align: justify;">
<br /></div>
<div class="MsoNormal">
<div style="text-align: justify;">
Je voulais ajouter des limitations supplémentaires au Resource Pool <i>default</i>. Dans mon cas, la configuration global de MAXDOP est 4. Mais, il est possible de limiter MAXPOP à 1 pour toute requête autre que Dynamics AX:<o:p></o:p></div>
</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6DaoDyOlHO0C_vXQ4ogqMaqBuuL5E-eE_7IqFD6qjMCs39Yzjy_tFbgSln0qyrwjZ5998F8h1DucN3MSmpNJbdZzC_P7DFA67lPmkiN243zBJwdIZdVOa6MeOCNiwpGh_ZqVK_7D7Q8s/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="421" data-original-width="1352" height="123" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6DaoDyOlHO0C_vXQ4ogqMaqBuuL5E-eE_7IqFD6qjMCs39Yzjy_tFbgSln0qyrwjZ5998F8h1DucN3MSmpNJbdZzC_P7DFA67lPmkiN243zBJwdIZdVOa6MeOCNiwpGh_ZqVK_7D7Q8s/s400/3.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div>
<div>
Pour finir, j’ai modifié la limite de IOPS a 1000 pour le Resource Pool <i>default</i>:</div>
<div>
<br /></div>
<div>
<span style="color: blue;">ALTER RESOURCE POOL</span> [default] WITH(</div>
<div>
min_cpu_percent=0, </div>
<div>
<span style="white-space: pre;"> </span>max_cpu_percent=100, </div>
<div>
<span style="white-space: pre;"> </span>min_memory_percent=0, </div>
<div>
<span style="white-space: pre;"> </span>max_memory_percent=100, </div>
<div>
<span style="white-space: pre;"> </span>cap_cpu_percent=100, </div>
<div>
<span style="white-space: pre;"> </span><span style="color: blue;">AFFINITY</span> SCHEDULER = <span style="color: blue;">AUTO</span>, </div>
<div>
<span style="white-space: pre;"> </span>min_iops_per_volume=0, </div>
<div>
<span style="white-space: pre;"> </span>max_iops_per_volume=1000)</div>
<div>
<span style="color: blue;">GO</span></div>
</div>
<div>
<br /></div>
<div style="text-align: justify;">
Après que le tout est en place, il faut redemarrer les service AOS afin d'initier de nouvelles sessions. Ensuite, j’utilise un rapport SRRS <a href="https://blogs.msdn.microsoft.com/sql_pfe_blog/2013/06/20/sql-server-resource-governor-monitoring-reports/">SQL Server Resource Governor Monitoring reports</a> pour surveiller l’utilisation des ressources dans les Ressources Pools.</div>
<div style="text-align: justify;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<div style="text-align: justify;">
Finalement, vous avez surment remarqué qu’il y a plusieurs options dont je n’ai pas mentionné. Je suggère la lecture de <a href="https://www.red-gate.com/simple-talk/sql/learn-sql-server/resource-governor/">Resource Governor sur simple-talk</a> afin de connaitre tous les détails.</div>
</div>
Mathieu Tessierhttp://www.blogger.com/profile/04248737547907422016noreply@blogger.comtag:blogger.com,1999:blog-3308095461852037514.post-28274385686998264222018-02-20T20:53:00.000-08:002018-07-06T06:43:57.503-07:00Dynamics AX 2012: Menu de navigation videSuite au redémarrage des serveurs AOS, un utilisateur n’avait plus accès au menu de navigation dans le client AX:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdUQbo13hgimWSmgiBr58VD3Sy7cMAiWLyYWT1osVh5OKByf-PnNG8HWsfoA26uCeoVNQL50S-1I0N99bBWNTse-ffcLn-PKdxISehZixeziFDiL2CbQ4ePbA0MJ_dXl6jJM9XQhx7Ca0/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="766" data-original-width="1348" height="226" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdUQbo13hgimWSmgiBr58VD3Sy7cMAiWLyYWT1osVh5OKByf-PnNG8HWsfoA26uCeoVNQL50S-1I0N99bBWNTse-ffcLn-PKdxISehZixeziFDiL2CbQ4ePbA0MJ_dXl6jJM9XQhx7Ca0/s400/1.png" width="400" /></a></div>
<br />
Pour résoudre ce problème, il suffit de supprimer les éléments <i>NavPaneOptionsButtons</i> et <i>Windows</i> dans le Usage Data de l’utilisateur:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqTBLBuRZqrT_heOiuLewxFUoA9woFCamuwAYWVw2BMP8949GbXD1cBZ2mtLBkngCDhLNpWrd1RTypN3T7RRzpHbdHyc0C2-N8-gO4aL5U8EhyJonCBRVUx4RAqGBW08cO-w5gtwoM1ag/s1600/UsageData.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="628" data-original-width="938" height="267" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqTBLBuRZqrT_heOiuLewxFUoA9woFCamuwAYWVw2BMP8949GbXD1cBZ2mtLBkngCDhLNpWrd1RTypN3T7RRzpHbdHyc0C2-N8-gO4aL5U8EhyJonCBRVUx4RAqGBW08cO-w5gtwoM1ag/s400/UsageData.png" width="400" /></a></div>
Mathieu Tessierhttp://www.blogger.com/profile/04248737547907422016noreply@blogger.comtag:blogger.com,1999:blog-3308095461852037514.post-62031848903545496432018-02-13T03:15:00.000-08:002018-07-20T07:08:53.028-07:00D365 for Finance and Operations: Power BI embedded ne fonctionne pas<div style="text-align: justify;">
Suite au déploiement d’un environnement Tier-2, je voulais tester Power BI embedded qui est déployer et configurer par défaut dans les environnements Tier-2. J’ai donc ouvert CFO workspace et Financial Insights et j’ai reçu le message d’erreur suivant:</div>
<br />
<span style="color: red;">An unexpected client error has occurred</span><br />
<span style="color: red;">Session ID: ee0c7a67-86e8-446b-9015-e2c010b740f7</span><br />
<span style="color: red;">Search timestamp: 2018-02-13T22:38:11.785Z</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaJyWuU35_8lzfNielBJPRwTppnIu1sxdxVSNur1WjzUm643AAAGJhYY27Yg_SYbp1CO3LI1PxYk9uG965zQ3-chw4cheeNHK8VPyuyGDWmXs405fjes8DkIdyljdu_E_tJ-ImxPDA0Zk/s1600/1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="127" data-original-width="543" height="92" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaJyWuU35_8lzfNielBJPRwTppnIu1sxdxVSNur1WjzUm643AAAGJhYY27Yg_SYbp1CO3LI1PxYk9uG965zQ3-chw4cheeNHK8VPyuyGDWmXs405fjes8DkIdyljdu_E_tJ-ImxPDA0Zk/s400/1.jpg" width="400" /></a></div>
<br />
<div>
Ceci est du au fait que le calendrier fiscal n'est pas configurer pour l'entite legale en question. Les configurations se trouvent sous </div>
<div>
- General Ledger --> Chart of Accounts --> Chart of Accounts</div>
<div>
- General Ledger --> Calendard --> Fiscal calendars</div>
<div>
- General Ledger --> Ledger Setup --> Ledger</div>
<div>
<br /></div>
<div>
Ou, vous pouvez utiliser la requête suivante dans SQL et remplacer le nom DAT par la compagnie que vous voulez utiliser.</div>
<div>
<br /></div>
<div>
<div>
<span style="color: blue;">SELECT</span> <span style="color: magenta;">COUNT</span>(*) </div>
<div>
<span style="color: blue;">FROM</span> Ledger l</div>
<div>
<span style="color: blue;">JOIN</span> FISCALCALENDAR f </div>
<div>
<span style="color: blue;">ON</span> l.FiscalCalendar = f.RecId</div>
<div>
<span style="color: blue;">WHERE</span> name = <span style="color: red;">'DAT'</span></div>
</div>
<div>
<span style="color: red;"><br /></span></div>
<div>
Entre temps, vous pouvez toujours vérifier si PowerBI Embedeed est fonctionnel en ouvrant Sales and Profitability ou Cash Overview.</div>
<div>
<span style="color: red;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMiglrtngmxBYAmSTVFhsE6BzfSeacWnCqCuESt97rLJDYoCrQNQSUXu78BZmvQR5n0OuwjvP2sPVfU3idKYk1ViCNrZ4Z_3INmfONoZKRmahj3sZ58u5lQJSVT2rqMU3j01z7xFNeq9s/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="970" data-original-width="1600" height="242" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMiglrtngmxBYAmSTVFhsE6BzfSeacWnCqCuESt97rLJDYoCrQNQSUXu78BZmvQR5n0OuwjvP2sPVfU3idKYk1ViCNrZ4Z_3INmfONoZKRmahj3sZ58u5lQJSVT2rqMU3j01z7xFNeq9s/s400/1.png" width="400" /></a></div>
Mathieu Tessierhttp://www.blogger.com/profile/04248737547907422016noreply@blogger.comtag:blogger.com,1999:blog-3308095461852037514.post-2764307224756704252018-02-06T22:10:00.000-08:002018-07-06T06:44:14.133-07:00Management Reporter: Base de données avec SQL AlwaysOn Availability Groups - Partie 2 (Facile)<div class="MsoNormal" style="text-align: justify;">
J’ai déjà écrit deux billets au sujet de la configuration
de la base de données Management Reporter avec SQL AlwaysOn Availability Groups.</div>
<div class="MsoNormal">
<ul>
<li><a href="http://www.mathdax.ca/2018/01/management-reporter-base-de-donnees.html">Management Reporter: Base de données avec SQL AlwaysOnAvailability Groups - Partie 1 (Difficile)</a></li>
<li><a href="http://www.mathdax.ca/2017/12/management-reporter-decryptdata.html">Management Reporter: The 'DecryptData' procedure attemptedto return a status of NULL</a></li>
</ul>
</div>
<div class="MsoNormal" style="text-align: justify;">
<div style="text-align: justify;">
<br />
Dans le billet <i>Management Reporter : Base de données avec
SQL AlwaysOn Availability Groups - Partie 1 (Difficile),</i> je propose de faire une sauvegarde de la
Service Key (SMK) et de la restaurer sur les serveurs secondaires. Voici une
alternative beaucoup plus simple.<o:p></o:p></div>
</div>
<div class="MsoNormal" style="text-align: justify;">
<div style="text-align: justify;">
<br /></div>
</div>
<div style="text-align: justify;">
<span style="text-align: justify;">Lorsque
SQL nécessite une Database Master Key (DMK) afin de déchiffre ou chiffrer une
clé, SQL essaie de déchiffre la DMK à partir de la Service Master Key (SMK). Si
ceci échoue, SQL regarde si le mot de passe pour ouvrir la DMK se trouve dans
sys.master_key_passwords. Il suffit d'ajouter le mot de passe de la DMK pour ManagementReporter dans le catalogue <i>sys.master_key_passwords</i> pour tous les serveurs du groupe.</span></div>
<div class="MsoNormal" style="text-align: justify;">
<br /></div>
<div class="MsoNormal" style="text-align: justify;">
<span style="color: blue;">EXEC </span><span style="color: #e69138;">sp_control_dbmasterkey_password</span> @db_name = <span style="color: red;">N'ManagementReporter'</span>, </div>
<div class="MsoNormal" style="text-align: justify;">
@password = <span style="color: red;">N'MotDePasseDeLaDMK'</span>, @action = <span style="color: red;">N'add'</span>;<br />
<br /></div>
<div class="MsoNormal" style="text-align: justify;">
<span style="color: black;">Source: <a href="https://technet.microsoft.com/en-us/library/ms182754(v=sql.110).aspx">sp_control_dbmasterkey_password</a></span></div>
Mathieu Tessierhttp://www.blogger.com/profile/04248737547907422016noreply@blogger.comtag:blogger.com,1999:blog-3308095461852037514.post-118811684784216692018-01-31T00:30:00.000-08:002018-07-20T07:08:52.861-07:00D365 for Finance and Operations: Failed to retrieve project from Lifecycle Services. <div style="text-align: justify;">
Il était impossible de sélectionner le projet LCS dans les paramètres Help de Dynamics 365 for Finance and Operations dans un environnement héberger dans un abonnement Azure de Microsoft. </div>
<br />
<span style="color: red;">Failed to retrieve project from Lifecycle Services. </span><br />
<span style="color: red;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiKeYvDKQAXJ6Q7JkDUPYahHenq-u484KzOADWeWH07FQaGDlrvGjhla2ehwOlfg5Sq8SRRXXEdtCfqzAjZ3Nj13oMnDqmU1RbrykKTQHJoFm9p8MSfd0wHYE5Qg09rQ73lNpZzj_NcbU/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="659" data-original-width="1600" height="163" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiKeYvDKQAXJ6Q7JkDUPYahHenq-u484KzOADWeWH07FQaGDlrvGjhla2ehwOlfg5Sq8SRRXXEdtCfqzAjZ3Nj13oMnDqmU1RbrykKTQHJoFm9p8MSfd0wHYE5Qg09rQ73lNpZzj_NcbU/s400/2.png" width="400" /></a></div>
<br />
<div style="text-align: justify;">
Il était impossible de sélectionner mon projet LCS dans les paramètres Help de Dynamics 365 for Finance and Operations dans un environnement héberger dans un abonnement Azure de Microsoft. Le soutien technique de Microsoft m'a dit que le problème est causé par un certificat expiré et qu'il allait corriger la situation. Finalement, après quelques jours j'ai décidé de redéployer l'environnement et la connexion à LCS était rétablie.</div>
Mathieu Tessierhttp://www.blogger.com/profile/04248737547907422016noreply@blogger.comtag:blogger.com,1999:blog-3308095461852037514.post-61138751278886691482018-01-28T21:16:00.000-08:002018-07-20T07:08:53.015-07:00D365 for Finance and Operations: Power BI embedded is not enabled. <div style="text-align: justify;">
Suite au déploiement d’un environnement D365 for Finance and Operations, les utilisateurs ne pouvaient pas utiliser Power BI embedded comme le démontre les images ci-dessous:</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgk-1cu8bLhE0Jl_pBxlZEZzzKssXKwUqbrQYyZKDg6emPYGOGr9wv_PLV6OU__immYIzWuDupqNDtbyTOR6npmcYbwwlo85Ib48mHBDC83BubXSUtk1tmc5dWmHcH-IfCQ9NHirV6Kits/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="153" data-original-width="461" height="106" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgk-1cu8bLhE0Jl_pBxlZEZzzKssXKwUqbrQYyZKDg6emPYGOGr9wv_PLV6OU__immYIzWuDupqNDtbyTOR6npmcYbwwlo85Ib48mHBDC83BubXSUtk1tmc5dWmHcH-IfCQ9NHirV6Kits/s320/1.png" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPWg6xByPVeqtoDXcDQMWK0sl88ZidW5OZn8aNFOtW9CrjX3QtwgrJtZ6C_Qb-zubaeJ_k2cK4xmnJvPyoKAMohSJyr4aj2zHh7clijqC3LPHxOnZchok8zJIP4LXCAEVR8COwLsT_ePQ/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="423" data-original-width="994" height="170" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPWg6xByPVeqtoDXcDQMWK0sl88ZidW5OZn8aNFOtW9CrjX3QtwgrJtZ6C_Qb-zubaeJ_k2cK4xmnJvPyoKAMohSJyr4aj2zHh7clijqC3LPHxOnZchok8zJIP4LXCAEVR8COwLsT_ePQ/s400/2.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div style="text-align: justify;">
Le site <a href="https://docs.microsoft.com/en-us/dynamics365/unified-operations/dev-itpro/analytics/power-bi-embedded-integration">Power BI Embedded Integration</a> dit que P<i>ower BI embedded service</i> doit être disponible dans la région ou se trouve l'environnement. </div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhi0U_lCgi7nnsFWcQqbQh9O7OZIN-lKa3yCk1u347SiGFfIFnWtgUY7iz0g-a2Bpd2ugxQ_5eDGWH3yaO-Kkddlfv-rPKd4_D2YOSRlbu9BSsvoKiIg-FMIBZ1SH43QgvN2FIqudOi4pg/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="169" data-original-width="1177" height="56" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhi0U_lCgi7nnsFWcQqbQh9O7OZIN-lKa3yCk1u347SiGFfIFnWtgUY7iz0g-a2Bpd2ugxQ_5eDGWH3yaO-Kkddlfv-rPKd4_D2YOSRlbu9BSsvoKiIg-FMIBZ1SH43QgvN2FIqudOi4pg/s400/3.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="text-align: justify;"><br /></span></div>
<span style="text-align: justify;">Toutefois, le site <i>Azure Status</i> n'est pas fiable dans ce cas-ci. Il faut plutôt utiliser le site <a href="https://azure.microsoft.com/en-us/pricing/details/power-bi-embedded/">Power BI Embedded pricing</a> pour savoir si le service est disponible dans une région.</span><br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnvvlMm0tivUGGJtBFDQnM7BE_8YDXIPP7AybKxDxCwpc5UNzhoZLXkLo3akmtDddgGzBAEcxnqv33xl1lHcN-49o7h58R29b8DaYMoQdTkZdGIBQ0qTlEdqAsmVSRVP5FcRkSQymc-os/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="388" data-original-width="743" height="166" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnvvlMm0tivUGGJtBFDQnM7BE_8YDXIPP7AybKxDxCwpc5UNzhoZLXkLo3akmtDddgGzBAEcxnqv33xl1lHcN-49o7h58R29b8DaYMoQdTkZdGIBQ0qTlEdqAsmVSRVP5FcRkSQymc-os/s320/4.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgsommLrmkf_AzYCoLPw-717v49U0fplmYjJnzX4k7-YUpG9YMI8WPlYSUrhpinr8FW062wdwBB7dxTR-AuLyb-X3dT9NxtRgxvYz9sPWNpcNr2AtbTF9pX9ZIGuRJ4sZu39oKRzHylFE/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="187" data-original-width="1188" height="99" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgsommLrmkf_AzYCoLPw-717v49U0fplmYjJnzX4k7-YUpG9YMI8WPlYSUrhpinr8FW062wdwBB7dxTR-AuLyb-X3dT9NxtRgxvYz9sPWNpcNr2AtbTF9pX9ZIGuRJ4sZu39oKRzHylFE/s640/1.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="text-align: justify;">
<div class="separator" style="clear: both; text-align: center;">
</div>
Comme solution, vous pouvez déployer l'environnement dans une région qui supporte Power BI embedded ou vous pouvez ouvrir un billet avec l’assistance technique de Microsoft afin qu'ils activent Power BI embedded dans votre abonnement Azure géré par Microsoft.</div>
Mathieu Tessierhttp://www.blogger.com/profile/04248737547907422016noreply@blogger.comtag:blogger.com,1999:blog-3308095461852037514.post-83437726807693356632018-01-17T22:13:00.000-08:002018-07-06T06:44:41.227-07:00Management Reporter: Base de données avec SQL AlwaysOn Availability Groups - Partie 1 (Difficile)<div style="text-align: justify;">
Dernièrement, j’ai écrit un billet sur un problème déchiffrement de données de la base de données Management Reporter lorsqu'elle est restaurée sur un autre serveur SQL. Vous pouvez la lire ici: <a href="http://www.mathdax.ca/2017/12/management-reporter-decryptdata.html">Management reporter : The "DecryptData'" procédure attempted To return à status of NULL.</a><br />
<br />
Le même problème survient lorsque la base de données ManagementReporter est dans un groupe de disponibilité Always On (Availability group). C'est-à-dire que lorsque vous basculez la base de données ManagementReporter vers le serveur secondaire, celui-ci ne sera pas capable de déchiffrer les données de la base de données. Par conséquence, la la base de données DataMart disparait de la console et le message d'erreur suivant apparait dans le journal d'évènements:</div>
<div style="text-align: justify;">
<br />
<span style="color: red;">Please create a master key in the database or open the master key in the session before performing this operation.</span><br />
<span style="color: red;"><br /></span>
<span style="color: red;">The 'DecryptData' procedure attempted to return a status of NULL, which is not allowed. A status of 0 will be returned instead. Originating procedure: DecryptData.</span><br />
<br />
J’ai donc fait des recherches pour savoir comment configurer Management Reporter dans un environnement hautement disponible avec SQL AlwaysOn Availability Group. Je conseille de lire ce billet afin de comprendre le problème, toutefois, j'ai écrit un billet qui offre une solution plus facile: Management Reporter: <a href="http://www.mathdax.ca/2018/02/management-reporter-base-de-donnees.html">Base de données avec SQL AlwaysOn Availability Groups - Partie 2 (Facile)</a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Lors de mes recherches, j’ai trouvé le lien suivant: <a href="https://blogs.msdn.microsoft.com/axinthefield/high-availability-best-practices-for-dynamics-ax-2012/">High Availability best practices for Dynamics AX 2012</a>. Dans la section <i>Financial Reporting High Availability</i>, on peut y lire: <i>[...] If encryption is used, you need to apply the same configuration onto the other node to ensure business continuity after failover.[...].</i></div>
<div style="text-align: justify;">
<i><br /></i></div>
<div style="text-align: justify;">
Tout d’abord, je ne sais pas pourquoi il y a l’utilisation du mot "if" puisqu'a ma connaissance il est obligatoire d’utiliser le cryptage lors de du déploiement de Management Reporter. Ensuite, j’ai lu l’article recommandé et celui-ci explique comment exporter/importer le certificat de cryptage TDE. Cette technique ne fonctionne pas puisque ManagementReporter n’utilise pas TDE, il utilise plutôt une clé symétrique pour crypter des colonnes dans la base de données. Alors, j’ai poussé mes recherches voici ce que j'ai trouvé.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Tout d'abord, il faut comprendre les différente clé utilisées lors du processus de chiffrage/déchiffrage de SQL:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
</div>
1. Service Key (SMK) – G<span style="text-align: justify;">é</span>n<span style="text-align: justify;">é</span>r<span style="text-align: justify;">é</span> par le service SQL, elle est utilis<span style="text-align: justify;">é</span> pour crypter le Database Master Key (DMK).<br />
2. Database Master Key (DMK) – utilisé pour crypter le certificat.<br />
3. Certificat – Utilisé pour crypter la clé symétrique<br />
4. Symmetric Key – Utilisé pour crypter les donn<span style="text-align: justify;">ée</span>s (finalement!).
<br />
<br />
Sommaire: Service Key --> Database Master Key --> Certificat --> Symmetric Key --> Donn<span style="text-align: justify;">ée</span>s<br />
<br />
<div style="text-align: justify;">
Eh oui, assez fou ! Le problème dans notre cas c’est que le Service Key (SMK) du second serveur SQL n’est pas capable de déchiffrer le Database Master Key (DMK) situé dans la a base de données Management Reporter puisque celle-ci fut chiffré avec le Service Key du serveur primaire. Puisque SQL n'est pas capable d'ouvrir la DMK, il ne peut donc pas ouvrir le certificat, etc...<br />
<br />
Regardons la configuration.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Tout d'abord, on peut y voir que SMK se trouve dans la base de données Master. Cette clé est crée lors du démarrage du service SQL et ne possède pas de mot de passe.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: blue;">USE MASTER </span></div>
<div style="text-align: justify;">
<span style="color: blue;">SELECT</span> * </div>
<div style="text-align: justify;">
<span style="color: blue;">FROM</span> sys.symmetric_keys</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLAhlcd_wppCmvxiJnyxAsMZaMqTp5YVxHRlLfF0PgcmAPKCRZfZhdhWDbUgFbkkF8sVyu8JX4r9qYQFgGQ6ZBOpJbp0OYdCYADUs7VtXI_v2O77NmnfKSHDMGiVJbnkGSnUcihFQPpc8/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="270" data-original-width="1119" height="96" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLAhlcd_wppCmvxiJnyxAsMZaMqTp5YVxHRlLfF0PgcmAPKCRZfZhdhWDbUgFbkkF8sVyu8JX4r9qYQFgGQ6ZBOpJbp0OYdCYADUs7VtXI_v2O77NmnfKSHDMGiVJbnkGSnUcihFQPpc8/s400/2.png" width="400" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Ensuite, je peux trouver toutes les bases de donnée avec une DMK encrypter par le SMK:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: blue;">USE MASTER</span></div>
<div style="text-align: justify;">
<span style="color: blue;">SELECT</span> name</div>
<div style="text-align: justify;">
<span style="color: blue;">FROM</span> sys.databases</div>
<div style="text-align: justify;">
<span style="color: blue;">WHERE</span> is_master_key_encrypted_by_server = 1</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhe_ndY8f_dSFyL3ziaWjBvtAWNGEV9NYlbWtx4oQEcurj-HZ7hesOpX6hsB2ytU2tFaN0KWyjzGxUmH151Qvc6-GAbR-JCQpu25kOL3bGp1MunlSJF5C5ZswhELy2JkjRaDrEG60kd5pI/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="282" data-original-width="556" height="162" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhe_ndY8f_dSFyL3ziaWjBvtAWNGEV9NYlbWtx4oQEcurj-HZ7hesOpX6hsB2ytU2tFaN0KWyjzGxUmH151Qvc6-GAbR-JCQpu25kOL3bGp1MunlSJF5C5ZswhELy2JkjRaDrEG60kd5pI/s320/1.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="text-align: justify;">
La DMK permet de déchiffrer les certificats. Donc, regardons les certificats dans la base de données Management Reporter:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: blue;">USE</span> ManagementReporter</div>
<div style="text-align: justify;">
<span style="color: blue;">SELECT</span> name,</div>
<div style="text-align: justify;">
certificate_id,</div>
<div style="text-align: justify;">
subject, </div>
<div style="text-align: justify;">
pvt_key_encryption_type_desc</div>
<div style="text-align: justify;">
<span style="color: blue;">FROM</span> sys.certificates</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTLxJZbgWOZql3JrHIdvPpvQmdKOmSD03cOsG9qiFDPBrGyebQ5Hh6pbsYFZqfEmWXttXMFtVOf4XGltiLUJbtXaJYr1fDfeTNr9QEvQ4D82c2B0i9mUx6IBsxldsZDIpD1oiryRgwyRw/s1600/7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="335" data-original-width="903" height="147" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTLxJZbgWOZql3JrHIdvPpvQmdKOmSD03cOsG9qiFDPBrGyebQ5Hh6pbsYFZqfEmWXttXMFtVOf4XGltiLUJbtXaJYr1fDfeTNr9QEvQ4D82c2B0i9mUx6IBsxldsZDIpD1oiryRgwyRw/s400/7.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Les certificats permettent de déchiffrer les clés symétriques. Donc, regardons les clés symétriques dans la base de données Management Reporter:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: blue;">USE</span> ManagementReporter</div>
<div style="text-align: justify;">
<span style="color: blue;">SELECT</span> * </div>
<div style="text-align: justify;">
<span style="color: blue;">FROM</span> sys.symmetric_keys</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDIfrCVx4xMPbC1TcLAqDgGUc09TAwrg_6bf96wmy3Qra-9I0K83djivYzCACGr53lCE0TRZC7P8qB3IGhHcfxwT4Y6vrODYAebgXp72WAaVXWoQYCFZvp9m_sLoZllImgno9THpZREZA/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="380" data-original-width="644" height="235" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDIfrCVx4xMPbC1TcLAqDgGUc09TAwrg_6bf96wmy3Qra-9I0K83djivYzCACGr53lCE0TRZC7P8qB3IGhHcfxwT4Y6vrODYAebgXp72WAaVXWoQYCFZvp9m_sLoZllImgno9THpZREZA/s400/4.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
En fait, il est possible de voir cela via l'interface graphique:</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiytK9FGvKIX-SY8n2e3KVbfhEh66Lyp8AnyxZK2KlzgD1h1Q9Fj8uMZSdzib-G3tSKIxtde_mseqJNSIUOD0lceVQ1LkKXLZPF8aqv2x-qJt5HTtleRtjgsqNXNS9A4VSUWqSJs2VNpSE/s1600/11.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="549" data-original-width="373" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiytK9FGvKIX-SY8n2e3KVbfhEh66Lyp8AnyxZK2KlzgD1h1Q9Fj8uMZSdzib-G3tSKIxtde_mseqJNSIUOD0lceVQ1LkKXLZPF8aqv2x-qJt5HTtleRtjgsqNXNS9A4VSUWqSJs2VNpSE/s320/11.jpg" width="217" /></a></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Les clés symétriques permettent de déchiffrer les données. Donc, trouvons les données chiffrer dans la base de données Management Reporter:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: blue;">SELECT</span> S.name AS 'Schema',<br />
T.name AS 'Table', </div>
<div style="text-align: justify;">
C.name AS 'Column', ty.name AS 'DataType'</div>
<div style="text-align: justify;">
<span style="color: blue;">FROM</span> sys.columns C</div>
<div style="text-align: justify;">
<span style="color: blue;">JOIN</span> sys.types ty <span style="color: blue;">ON</span> C.system_type_id = ty.system_type_id</div>
<div style="text-align: justify;">
<span style="color: blue;">JOIN</span> sys.tables T <span style="color: blue;">ON </span>C.object_id = T.object_id</div>
<div style="text-align: justify;">
<span style="color: blue;">JOIN</span> sys.schemas S <span style="color: blue;">ON</span> T.schema_id = S.schema_id</div>
<div style="text-align: justify;">
<span style="color: blue;">WHERE</span> ty.name IN ('binary', 'varbinary', 'image')</div>
<div style="text-align: justify;">
<span style="color: blue;">ORDER</span> <span style="color: blue;">BY</span> S.name, T.name, C.name, ty.name;</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTDRK2EJu3TaMNCUh9JSGIv4LMBhgRzGScjQtqrT3Kmtf14TeHo8KuWOABTHcBdMvA-xsmHiUKK31pGOihdQjUuSx1BbNn7N6KWsIR5dBTfoZJhvuFeW9CegFN5uys-WcQ167IRbQkW9g/s1600/5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="928" data-original-width="600" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTDRK2EJu3TaMNCUh9JSGIv4LMBhgRzGScjQtqrT3Kmtf14TeHo8KuWOABTHcBdMvA-xsmHiUKK31pGOihdQjUuSx1BbNn7N6KWsIR5dBTfoZJhvuFeW9CegFN5uys-WcQ167IRbQkW9g/s400/5.png" width="257" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Ultimement, j'aimerais déchiffrer des données avec la cle symétrique, mais malheureuse j'ai trouvé aucune donnée chiffrée dans ma base de données ManagementReporter (les champs sont vides). Donc, le plus loin que je peux aller est d'ouvrir la clé symétrique avec l'aide du certificat.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglDhb9tHeOQOzSzv02Hs3A9-yduwQjNzvhl22ISfoE3pO4o81C7NCvIOJ_KnfQbvkvQG61S4Cg0T22Iqex6UgLTkJz_vdG9UFPu2tAc2BFmXwla8kK1FQnTt3UUaIrdSYZ4qEJMlkGcZw/s1600/9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="394" data-original-width="747" height="210" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglDhb9tHeOQOzSzv02Hs3A9-yduwQjNzvhl22ISfoE3pO4o81C7NCvIOJ_KnfQbvkvQG61S4Cg0T22Iqex6UgLTkJz_vdG9UFPu2tAc2BFmXwla8kK1FQnTt3UUaIrdSYZ4qEJMlkGcZw/s400/9.png" width="400" /></a></div>
<br /></div>
<div style="text-align: justify;">
Ensuite, j'ai basculé la base de données ManagementReporter vers mon serveur secondaire et j'ai testé l'ouverture de la clé symétrique. Sans surprise, j'ai reçu le message d'erreur suivant:<br />
<br />
<span style="color: red;">Please create a master key in the database or open the master key in the session before performing this operation.</span><br />
<span style="color: red;"><br /></span>
<span style="color: blue;">OPEN SYMMETRIC KEY</span> ConnectorServiceSymmetricKey<br />
<span style="color: blue;">DECRYPTION BY CERTIFICATE</span> ConnectorServiceCertificate<br />
<span style="color: blue;">CLOSE SYMMETRIC KEY</span> ConnectorServiceSymmetricKey<br />
<br />
<span style="color: blue;">OPEN SYMMETRIC KEY</span> GeneralUserSymmetricKey<br />
<span style="color: blue;">DECRYPTION BY CERTIFICATE</span> GeneralUserCertificate<br />
<span style="color: blue;">CLOSE SYMMETRIC KEY</span> GeneralUserSymmetricKey<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYmlHLzdfkDzR5H3gSSowqnlofHcCGFKuMW54JpoKrbNfREvCRiHXuRbA5Y8fP_wcSPTZCRRmZCOwHyZHu-xU1Y4C_zBHoAI8fjj8wOPSOr0FlkStAbNdIYtISkf9Hau9VqG22_VTM7rA/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="511" data-original-width="1202" height="170" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYmlHLzdfkDzR5H3gSSowqnlofHcCGFKuMW54JpoKrbNfREvCRiHXuRbA5Y8fP_wcSPTZCRRmZCOwHyZHu-xU1Y4C_zBHoAI8fjj8wOPSOr0FlkStAbNdIYtISkf9Hau9VqG22_VTM7rA/s400/1.png" width="400" /></a></div>
<br />
Le problème est dû au fait que la SMK n'est pas capable d'ouvrir la DMK. Pour corriger le problème, il faut faire une sauvegarde de la SMK du serveur primaire et de la restaurer sur le serveur secondaire.<br />
<br />
Sauvegarde sur le serveur primaire:<br />
<br />
<span style="color: blue;">BACKUP SERVICE MASTER KEY</span><br />
<span style="color: blue;">TO FILE</span> = '<span style="color: red;">C:\SQLBackup\Keys\service_master_key'</span><br />
<span style="color: blue;">ENCRYPTION BY PASSWORD</span> =<span style="color: red;"> 'MettreUnMotdePasseComplexe'</span><br />
<br />
Restauration sur le serveur secondaire:<br />
<br />
<span style="color: blue;">RESTORE SERVICE MASTER KEY </span><br />
<span style="color: blue;">FROM FILE</span> = <span style="color: red;">'C:\SQLBackup\Keys\service_master_key' </span><br />
<span style="color: blue;">DECRYPTION BY PASSWORD</span> = <span style="color: red;">'</span><span style="color: red;">MettreUnMotdePasseComplexe</span><span style="color: red;">'</span><br />
<span style="color: red;"><br /></span>Toutefois, lors de la restauration, j'ai reçu le message suivant:<br />
<br />
<span style="color: red;">The old and new master keys are identical. No data re-encryption is required.</span><br />
<span style="color: red;"><br /></span>
Donc, j'ai basculé la base de données vers le serveur secondaire et j'ai restauré la SMK. Cette fois-ci, j'ai reçu le message suivant:<br />
<span style="color: red;"><br /></span>
<span style="color: red;">An error occurred while decrypting master key 'ManagementReporter' that was encrypted by the old master key. The FORCE option can be used to ignore this error and continue the operation, but data that cannot be decrypted by the old master key will become unavailable.</span><br />
<span style="color: red;"><br /></span>
Cette erreur survient parce que SQL tente de déchiffrer la DMK afin de la rechiffrer avec la nouvelle clé. Il y a l'option FORCE, mais celle-ci peut causer des pertes de données. A la place d'utiliser l'option FORCE, j'ai manuellement ouvert la DMK pour ajouter la SMK:<br />
<br />
<span style="color: blue;">OPEN MASTER KEY DECRYPTION BY PASSWORD</span> = 'PasswordDuringMRInstallation'<br />
<span style="color: blue;">ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY</span><br />
<br />
Si vous ne connaissez pas le mot de passe de la DMK, je suggère de faire la procédure suivante: <a href="https://support.microsoft.com/en-ca/help/2744330/error-messages-when-you-restore-a-microsoft-management-reporter-2012-d">Error messages when you restore a Microsoft Management Reporter 2012 database: The operation could not be completed.</a><br />
<br />
Ensuite, j'ai fait la restauration de la SMK:<br />
<br />
<span style="color: blue;">RESTORE SERVICE MASTER KEY </span><br />
<span style="color: blue;">FROM FILE</span> = <span style="color: red;">'C:\SQLBackup\Keys\service_master_key' </span><br />
<span style="color: blue;">DECRYPTION BY PASSWORD</span> = <span style="color: red;">'</span><span style="color: red;">MettreUnMotdePasseComplexe</span><span style="color: red;">'</span><br />
<span style="color: red;"><br /></span>
Finalement, j'ai fait des tests de basculement de la base de données et j'étais capable d'ouvrir les clés symétriques sur les deux serveurs et Management Reporter fonctionnait parfaitement.<br />
<br />
Source:<br />
- <a href="https://help.k2.com/kb001572">Configuring MS SQL for AlwaysOn Automated Failover of the K2 Database.</a><br />
- <a href="https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-service-master-key-transact-sql">ALTER SERVICE MASTER KEY</a><br />
- <a href="https://docs.microsoft.com/en-us/sql/t-sql/statements/restore-service-master-key-transact-sql">RESTORE SERVICE MASTER KEY</a><br />
- <a href="https://www.mssqltips.com/sqlservertip/3448/finding-encrypted-data-in-a-sql-server-database/">Finding Encrypted Data in a SQL Server Database</a><br />
- <a href="http://www.sqlservercentral.com/articles/Database+Master+Key+(DMK)/107787/">Database Master Key Error After Database Restore</a></div>
Mathieu Tessierhttp://www.blogger.com/profile/04248737547907422016noreply@blogger.comtag:blogger.com,1999:blog-3308095461852037514.post-1128390710709869892018-01-02T09:11:00.000-08:002018-07-20T06:58:26.073-07:00Dynamics AX 2012: Another instance of CIL generation is already in progress.<div style="text-align: justify;">
Lors de la génération d’un Full CIL, le client AX à planter. Après avoir rouvert le client, j’ai tenté de générer un Full CIL et j’ai reçu le message d’erreur suivant: </div>
<br />
<span style="color: red;">Another instance of CIL generation is already in progress. Please wait for the operation to complete before retrying.</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAN2pB8ykfv3fMTizNHeJcDmehiljrPKA2-ZcBPpKHmPKxOOmC_Acw6xlKsf_nDt7wT-aciyMlZ0cRM4lLLy-o3-RbCQ2B9ZllZx2QqKLMp2y3Kt-dWpONvsrBhzbM0KPNCI0LuuiGAFE/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="654" data-original-width="526" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAN2pB8ykfv3fMTizNHeJcDmehiljrPKA2-ZcBPpKHmPKxOOmC_Acw6xlKsf_nDt7wT-aciyMlZ0cRM4lLLy-o3-RbCQ2B9ZllZx2QqKLMp2y3Kt-dWpONvsrBhzbM0KPNCI0LuuiGAFE/s320/1.png" width="257" /></a></div>
<br />
La solution est de supprimer la ligne suivante:<br />
<br />
<span style="color: blue;">DELETE FROM</span> SYSLASTVALUE<br />
<span style="color: blue;">WHERE</span> ELEMENTNAME = '<span style="color: red;">CIL Generation</span>' <span style="color: #999999;">AND</span> USERID = '<span style="color: red;">-AutoSem</span>'Mathieu Tessierhttp://www.blogger.com/profile/04248737547907422016noreply@blogger.comtag:blogger.com,1999:blog-3308095461852037514.post-84958352179266389572017-12-04T22:05:00.000-08:002018-07-06T06:45:00.084-07:00Management Reporter: The 'DecryptData' procedure attempted to return a status of NULL<div style="text-align: justify;">
Lors de la configuration de la base de données <i>datamart</i> pour Management Reporter, je recevais le message d'erreur suivant:</div>
<br />
<span style="color: red;">An error occured while configuring 'Microsoft Dynamics AX 2012 Data Mart'. Check the deployment log for details.</span><br />
<span style="color: red;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRN3H-LpaKfw0JJvtdacAtF26SZN2Cr2GEUw7RkgIcJOeEdsf6aQTGsM599tiWCuF_yt8Tc1UYVVh5LAHNHktMJuvlnygmyMRL13-3dgpoZ9sunLuUhsK0O1Hpqth82lw0YdoiWkUbxFA/s1600/1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="474" data-original-width="860" height="220" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRN3H-LpaKfw0JJvtdacAtF26SZN2Cr2GEUw7RkgIcJOeEdsf6aQTGsM599tiWCuF_yt8Tc1UYVVh5LAHNHktMJuvlnygmyMRL13-3dgpoZ9sunLuUhsK0O1Hpqth82lw0YdoiWkUbxFA/s400/1.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
J'ai trouvé le message d'erreur suivant dans le journal d'événement:</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="color: red;">Please create a master key in the database or open the master key in the session before performing this operation.</span></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="color: red;"><br /></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="color: red;">The 'DecryptData' procedure attempted to return a status of NULL, which is not allowed. A status of 0 will be returned instead. Originating procedure: DecryptData.</span></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
La base de données ManagementReporter est chiffrée avec une Database Master Key (DMK). Lors de la restauration de la base de données sur un autre serveur, la nouvelle instance SQL n'est pas capable d'ouvrir la Database Master Key (DMK) et déchiffrer les données. La solution à ce problème se trouve ici: <a href="https://support.microsoft.com/en-ca/help/2744330/error-messages-when-you-restore-a-microsoft-management-reporter-2012-d">Error messages when you restore a Microsoft Management Reporter 2012 database: “The operation could not be completed”</a>.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
J'ai aussi écrit un autre billet sur la configuration de ManagementReporter avec SQL AlwaysOn Availability: <a href="http://www.mathdax.ca/2018/01/management-reporter-base-de-donnees.html">Management Reporter : Base de données avec SQL AlwaysOn Availability Groups</a></div>
Mathieu Tessierhttp://www.blogger.com/profile/04248737547907422016noreply@blogger.comtag:blogger.com,1999:blog-3308095461852037514.post-40229876369851216832017-12-04T01:03:00.000-08:002018-07-20T06:58:26.113-07:00Dynamics AX 2012: Configuration d'un port HTTPS (SSL)<div style="text-align: justify;">
Dans un autre billet, j'expliquais comment publier un port HTTP avec une address externe. Dans ce billet, j'explique comment publier un port HTTP avec SSL.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Tout d'abord, vous devez configurer HTTPS sur votre site AIF dans IIS:</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIywXXmOgA77R7OItbgP62Ph97fo2KVwJtIaV9wKCOHRdCAVb7J2JgCHth1T_bk7eYf8ghtUCnLLMMXUbrXppfrJlsNZlog0j_W8BlkYvU_ZfNlQo1TY534chTzmgzt_GpnKLqv02pVVE/s1600/1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="240" data-original-width="408" height="117" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIywXXmOgA77R7OItbgP62Ph97fo2KVwJtIaV9wKCOHRdCAVb7J2JgCHth1T_bk7eYf8ghtUCnLLMMXUbrXppfrJlsNZlog0j_W8BlkYvU_ZfNlQo1TY534chTzmgzt_GpnKLqv02pVVE/s200/1.jpg" width="200" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPmXwS2QgX0qkcizgYAuOMxKKtVv3Eljc5wKAd-BOKEL-Ei73yPWKYTZjuj7YskQug1In6S0M0oCUu9hoiRk9HJKYYCCyJliw5rLRJhb182hI6MRl9UwG38Hv0gkH4f8fYNUjgQgFgaYg/s1600/2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="271" data-original-width="988" height="87" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPmXwS2QgX0qkcizgYAuOMxKKtVv3Eljc5wKAd-BOKEL-Ei73yPWKYTZjuj7YskQug1In6S0M0oCUu9hoiRk9HJKYYCCyJliw5rLRJhb182hI6MRl9UwG38Hv0gkH4f8fYNUjgQgFgaYg/s320/2.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Ensuite, cliquer sur <i>Edit</i> et sélectionner votre certificat SSL.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3K2aPMVKPlsymc2qQayOLEqUY6IlutZ3W76j2uzm69GFjRhlKnBbU_3wGPxyMqNOdXeLepYzjnOsq5sgoAQ6wzLzJfxMlKAgsChM9himbLfBtu5L29NdqBgxQ0wEIUj5uHAwOvCcVHf8/s1600/3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="479" data-original-width="809" height="189" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3K2aPMVKPlsymc2qQayOLEqUY6IlutZ3W76j2uzm69GFjRhlKnBbU_3wGPxyMqNOdXeLepYzjnOsq5sgoAQ6wzLzJfxMlKAgsChM9himbLfBtu5L29NdqBgxQ0wEIUj5uHAwOvCcVHf8/s320/3.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div style="text-align: justify;">
Ensuite, ouvrer le client Dynamics AX et naviguer <i>System Administration --> Setup --> Services and Application Integration Framework --> Web sites.</i> Modifier le site existant ou configurer un nouveau site de type HTTPS.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnlYksiFAOgJuZwCGjyAGZ-CIpJO8Tl_ys7yJGH5cRyu2ESChGbkWa9cPL22N6gRm1W9fkIM9pyyNOvbJD6u9hyuddPTuEHjpBtHn_hYidwEFFSTAvWY9UrvGqMShwj7_1WqgukQMFlto/s1600/4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="281" data-original-width="957" height="116" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnlYksiFAOgJuZwCGjyAGZ-CIpJO8Tl_ys7yJGH5cRyu2ESChGbkWa9cPL22N6gRm1W9fkIM9pyyNOvbJD6u9hyuddPTuEHjpBtHn_hYidwEFFSTAvWY9UrvGqMShwj7_1WqgukQMFlto/s400/4.jpg" width="400" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Ensuite, naviguer <i>System Administration --> Setup --> Services and Application Integration Framework --> Inbound Ports</i>. Créer un port avec un adapteur de type HTTP et sélectionner votre site HTTPs. Cliquer sur <i>Configure</i> pour effectuer les configurations WCF avancées.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilBWvS75oX_-f6k8OutAZUhn8bXcJLQnNxTXInPQd7-CrD6q8XZ_87robaCnZEo5z6fIt-xcECXqDKlrDTJlg8zZ530FcHekZ7GkEeATbRU3553CG_-iq0evgbGvGH_Hp7yOQcal-IJ4E/s1600/5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="207" data-original-width="959" height="86" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilBWvS75oX_-f6k8OutAZUhn8bXcJLQnNxTXInPQd7-CrD6q8XZ_87robaCnZEo5z6fIt-xcECXqDKlrDTJlg8zZ530FcHekZ7GkEeATbRU3553CG_-iq0evgbGvGH_Hp7yOQcal-IJ4E/s400/5.jpg" width="400" /></a></div>
<br />
<div style="text-align: justify;">
<span style="text-align: start;">Sélectionner</span> <i>serviceMetadata</i> sous la section <i>Service Behaviors --> routingServiceBehavior</i>. Configurer <i>HttpsGetEnabled</i> avec la valeur <i>True</i>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpTXJI5b46PgLAt4iFz_4OLzgtHVM7iTVjW5dwAnufFAcdTsPaoZg2dEtS5jS7c8lmdK2_IcQlimNuJtskWh88ILr1D1VdNAOSYXe43HahfNF-El2NBPI9wcWun0xRgPEYc5KjlCZ6RoU/s1600/8.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="354" data-original-width="1060" height="132" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpTXJI5b46PgLAt4iFz_4OLzgtHVM7iTVjW5dwAnufFAcdTsPaoZg2dEtS5jS7c8lmdK2_IcQlimNuJtskWh88ILr1D1VdNAOSYXe43HahfNF-El2NBPI9wcWun0xRgPEYc5KjlCZ6RoU/s400/8.jpg" width="400" /></a></div>
<br />
Sous la section <i>Bindings</i>, <span style="text-align: justify;">sélectionner</span> <i>basicHttpBindingWithWindowsAuth</i> et changer le mode pour <i>Transport</i>. Vous ne pouvez pas utiliser <i>basic<u>Https</u>binding</i> puisque cette option est compatible seulement avec WCF 4.5.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9S2sx1WBJeC8y1V7kPCeGYIX3wuYnscBE5oihlzZpWEXtlNtewEiezl3h8u0FPb1j6la8kV0n8MgIEc_VTuwdX7tFjdTK5eABBP0yXWNWn-rUrQSjpXIaeZFaAlgtfh1V0nntVs-cV5g/s1600/6.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="359" data-original-width="1085" height="131" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9S2sx1WBJeC8y1V7kPCeGYIX3wuYnscBE5oihlzZpWEXtlNtewEiezl3h8u0FPb1j6la8kV0n8MgIEc_VTuwdX7tFjdTK5eABBP0yXWNWn-rUrQSjpXIaeZFaAlgtfh1V0nntVs-cV5g/s400/6.jpg" width="400" /></a></div>
<br />
Sous la section <i>Services --> Enpoints</i>, sélectionner <i>ServiceEndpoint</i> et inscriver l'adresse URL HTTPS de votre service dans le champ <i>address</i>. Cette configuration force le <i>basicHttpbinding</i> à utiliser SSL pour le transport.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEie16cXKi2l6m9ePt3_URnj0m7sXKYhVBaYXLfJghA4tzMdhzHofQla_ACrK248oUyrIF2KmKay-C4OueEVd1JXUqfsam6cpt5qc8SltF14DLMDkeGb3-q2Msb-IbZoVsjyW6SCR6WYBM0/s1600/7.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="554" data-original-width="1191" height="185" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEie16cXKi2l6m9ePt3_URnj0m7sXKYhVBaYXLfJghA4tzMdhzHofQla_ACrK248oUyrIF2KmKay-C4OueEVd1JXUqfsam6cpt5qc8SltF14DLMDkeGb3-q2Msb-IbZoVsjyW6SCR6WYBM0/s400/7.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Sous la section <i>Advanced --> Service Behaviors --> routingServiceBehavior</i>, clique <i>Add</i> et ajoute <i>useRequestHeadersForMetadataAddress</i>.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1RfY2AM3y8-0m9uKcA5yc_d6pj7qdqUrXj38lHBXANfJr6ME8wJSG2Ii4qNi1zv7cS1__orj1DE3MPmF4TBIbVD2hJd8g1JbbcpkSvu18DBVdhh4ZRMe5JczJnDZtu4csIlQnlV3rKJE/s1600/9.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="420" data-original-width="721" height="232" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1RfY2AM3y8-0m9uKcA5yc_d6pj7qdqUrXj38lHBXANfJr6ME8wJSG2Ii4qNi1zv7cS1__orj1DE3MPmF4TBIbVD2hJd8g1JbbcpkSvu18DBVdhh4ZRMe5JczJnDZtu4csIlQnlV3rKJE/s400/9.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
Cliquer sur <i>File --> Save</i> et fermer le configurateur WCF. Activer le port AIF.Mathieu Tessierhttp://www.blogger.com/profile/04248737547907422016noreply@blogger.comtag:blogger.com,1999:blog-3308095461852037514.post-40576535058261354892017-11-13T23:04:00.000-08:002018-07-20T07:08:52.974-07:00D365 for Finance and Operations: Service Admin<div style="text-align: justify;">
En tant que partenaire, il y a des outils dont je n'ai pas accès. Aujourd'hui, j'ai appris que le client peut s'ajouter lui-même au projet d'implantation dans LCS, ceci sans y être invité. Ça fait du sens bien entendu. Les utilisateur avec la permission <i>Service Admin</i> dans Azure Active Directory ont accès à un onglet supplémentaire dans LCS. </div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp9Y_I5iN5KCIC2hshckof1YpiyoQSsyWqSDVEIqYLUNB9DFwB-uVdLMeX8RhSJpf4ZhvmPsyQ3tX7vXbu6UKp3aZy96V6k-4e1stv5CRmB28rQy3Y5zIdwWzfhX65wG_cLG2m02DD6y4/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="514" data-original-width="1103" height="186" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp9Y_I5iN5KCIC2hshckof1YpiyoQSsyWqSDVEIqYLUNB9DFwB-uVdLMeX8RhSJpf4ZhvmPsyQ3tX7vXbu6UKp3aZy96V6k-4e1stv5CRmB28rQy3Y5zIdwWzfhX65wG_cLG2m02DD6y4/s400/1.png" width="400" /></a></div>
<br />
<br />
Cet onglet permet de voir tous les projets existant dans l'organisation. Ensuite, il est possible pour cette personne de s'ajouter aux projets en tant que Owner.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjffB7rV_vNuxpTEPWPwdzCwT5xX91xpBl2ddpv5r87xAf_JPQC0PDayt_AYxt6BGMQtTae6KuqYngbggRDNgh4R-y93uW3hZiv9g5f8S3yqHCnPX5P6Io0HxuEremuu8Z4TjTwWylPJGQ/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="392" data-original-width="780" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjffB7rV_vNuxpTEPWPwdzCwT5xX91xpBl2ddpv5r87xAf_JPQC0PDayt_AYxt6BGMQtTae6KuqYngbggRDNgh4R-y93uW3hZiv9g5f8S3yqHCnPX5P6Io0HxuEremuu8Z4TjTwWylPJGQ/s400/4.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpMHAQiRBlZKx-s2PJauRla5b0bknQ6ZWDTmPrhH9gkN9ehRiVrku91H2nVqKtJ5lK8DooDFoywuIDXSKlu5-QQSopV1x43214YfvyDMtCpacFew7xAMPDhKDSSON24rFAJV1IoSngqm0/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="271" data-original-width="730" height="147" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpMHAQiRBlZKx-s2PJauRla5b0bknQ6ZWDTmPrhH9gkN9ehRiVrku91H2nVqKtJ5lK8DooDFoywuIDXSKlu5-QQSopV1x43214YfvyDMtCpacFew7xAMPDhKDSSON24rFAJV1IoSngqm0/s400/3.png" width="400" /></a></div>
<div>
<br /></div>
Mathieu Tessierhttp://www.blogger.com/profile/04248737547907422016noreply@blogger.com