<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Database</title>
        <link>http://blog.crmbuzz.net/category/7.aspx</link>
        <description>Database</description>
        <language>en-US</language>
        <copyright>Abe Saldana</copyright>
        <managingEditor>abraham@CRMBuzz.net</managingEditor>
        <generator>Subtext Version 1.9.4.78</generator>
        <item>
            <title>CRM Learning Resources</title>
            <link>http://blog.crmbuzz.net/archive/2009/05/07/CRM-Learning-Resources.aspx</link>
            <description>&lt;p&gt;Working on a CRM customization project one of my customer’s employee ask me on how to learn Microsoft Dynamics CRM 4.0, and what public resources are available for him to get for free and learn on his own time, I was recalling some of the  training documentation I was using at the beginning, but after a wile i lost some of the important links, so I resulted to find and publish some of the resources i used, so here is a short list with my personal top 15 resources.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Learning and Implementation&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=1ceb5e01-de9f-48c0-8ce2-51633ebf4714&amp;amp;DisplayLang=en"&gt;CRM 4.0 Implementation&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/dd393296.aspx"&gt;Developer Ramp up kit for Microsoft Dynamics CRM 4.0&lt;/a&gt; (Videos)&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=5852b14a-394c-4898-8374-caf5e6479eb0&amp;amp;DisplayLang=en"&gt;Performance and Scalability White papers&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?familyid=B73912E8-861E-43AE-97B4-72B3E809F287&amp;amp;displaylang=en"&gt;Logical Database Diagrams&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?familyid=3BF7ECDA-7EAF-4F1C-BBFE-CAE19BC8BB78&amp;amp;displaylang=en"&gt;Suggested hardware for deployments of up to 500 concurrent users&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Development Links:&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=82e632a7-faf9-41e0-8ec1-a2662aae9dfb"&gt;Microsoft Dynamics CRM 4.0 Software Development Kit (SDK)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?familyid=2874D878-E28D-4530-A185-4DEE1FCDD12E&amp;amp;displaylang=en"&gt;Microsoft Dynamics CRM 4.0 Deployment Software Development Kit (SDK)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://code.msdn.microsoft.com/crmplugin/"&gt;CRM Plug-In registration Tool&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Diagnostics and Administration&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://blogs.msdn.com/benlec/archive/2008/03/04/crmdiagtool4-for-microsoft-crm-4-0-has-been-released.aspx"&gt;CRM Diagnostics Tool&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://blogs.msdn.com/crm/archive/2008/02/29/microsoft-dynamicstm-crm-4-0-performance-toolkit.aspx"&gt;CRM Performance Tool&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://support.microsoft.com/kb/949256"&gt;Latest Updates and Roll Ups&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Books&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://www.amazon.com/Programming-Microsoft-Dynamics-CRM-Pro-Developer/dp/0735625948/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1241718372&amp;amp;sr=1-1"&gt;Programming Microsoft Dynamics CRM 4.0 (Pro-Developer)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://www.amazon.com/Working-Microsoft-Dynamics-CRM-4-0/dp/0735623783/ref=pd_bxgy_b_img_b"&gt;Working with Microsoft Dynamics CRM 4.0&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://www.amazon.com/CRM-as-Rapid-Development-Platform/dp/0981511813/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1241718475&amp;amp;sr=1-1"&gt;CRM as a Rapid Development Platform&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Abe Saldaña &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.crmbuzz.net/"&gt;CrmBuzz.net&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Everything here, though, is my personal opinion and is not read nor approved before being posted. No warranties or other guarantees will be offered as to the quality of the opinions or anything else offered here. &lt;/p&gt;&lt;img src="http://blog.crmbuzz.net/aggbug/31.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Abe Saldana</dc:creator>
            <guid>http://blog.crmbuzz.net/archive/2009/05/07/CRM-Learning-Resources.aspx</guid>
            <pubDate>Thu, 07 May 2009 18:00:31 GMT</pubDate>
            <wfw:comment>http://blog.crmbuzz.net/comments/31.aspx</wfw:comment>
            <comments>http://blog.crmbuzz.net/archive/2009/05/07/CRM-Learning-Resources.aspx#feedback</comments>
            <wfw:commentRss>http://blog.crmbuzz.net/comments/commentRss/31.aspx</wfw:commentRss>
            <trackback:ping>http://blog.crmbuzz.net/services/trackbacks/31.aspx</trackback:ping>
        </item>
        <item>
            <title>Purging rows on Princiapl Object Access</title>
            <link>http://blog.crmbuzz.net/archive/2007/05/07/Purging-rows-on-Princiapl-Object-Access.aspx</link>
            <description>&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Arial; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;[Disclaimer:All postings are provided "AS IS" with no warranties, and confer no rights.]&lt;br /&gt;
&lt;br /&gt;
Purging some tables on Crm is simple as calling the delete service and make sure that everything continues running properly, but when you have more than 10 million rows on one table (PrincipalObjectAccess) how do you will be able to take the delete process on stages?&lt;br /&gt;
&lt;br /&gt;
[MS Crm support response: There is an un-supported option that you could try if you want to get rid of all sharing that is currently setup in CRM. You could directly update the PrincipalObjectAccess table and set the AccessRightsMask and InheritedAccessRightsMask columns to 0. Then we have a deletion service that will go through and automatically clean up that table. This is not technically supported, but if you want to remove all sharing this could be an option that you could do.&lt;br /&gt;
&lt;br /&gt;
Ok that is awesome, but how to identify the rows that are not in use or ready to be deleted.&lt;br /&gt;
&lt;br /&gt;
This is one of the Sql scripts to get the total of rows ready to be deleted and terminated&lt;/span&gt;&lt;/p&gt;
&lt;div style="BORDER-RIGHT: black 1pt dashed; PADDING-RIGHT: 4pt; BORDER-TOP: black 1pt dashed; PADDING-LEFT: 4pt; BACKGROUND: #cccccc; PADDING-BOTTOM: 1pt; BORDER-LEFT: black 1pt dashed; PADDING-TOP: 1pt; BORDER-BOTTOM: black 1pt dashed; mso-element: para-border-div; mso-border-themecolor: text1; mso-border-alt: dot-dash black .75pt; mso-shading: windowtext; mso-pattern: gray-20 auto"&gt;
&lt;p class="CodeStyle"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p class="CodeStyle"&gt;declare @totalRows int&lt;br /&gt;
declare @ToDelete int&lt;br /&gt;
declare @ToDeleteMarked int&lt;br /&gt;
&lt;br /&gt;
SELECT @totalRows = count( * )&lt;br /&gt;
FROM PrincipalObjectAccess (nolock)&lt;br /&gt;
&lt;br /&gt;
SELECT @ToDelete= count( *) &lt;br /&gt;
FROM PrincipalObjectAccess (nolock)&lt;br /&gt;
where AccessRightsMask = 0&lt;br /&gt;
and InheritedAccessRightsMask &amp;gt; 0&lt;br /&gt;
&lt;br /&gt;
SELECT @ToDeleteMarked= count( *) &lt;br /&gt;
FROM PrincipalObjectAccess (nolock)&lt;br /&gt;
where AccessRightsMask = 0&lt;br /&gt;
and InheritedAccessRightsMask = 0&lt;br /&gt;
&lt;br /&gt;
Select @totalRows as TotalRows, &lt;br /&gt;
@ToDelete as ToDelete, &lt;br /&gt;
(@totalRows - @ToDelete) as RemainingRows, &lt;br /&gt;
@ToDeleteMarked as ToDeleteMarked&lt;span style="mso-tab-count: 1"&gt;  &lt;/span&gt;&lt;br style="mso-special-character: line-break" /&gt;
&lt;br style="mso-special-character: line-break" /&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Arial','sans-serif'; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Arial; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Arial','sans-serif'; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Arial; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;Using the previous script will give you the totals only the following script is the one that will update your columns and marked the rows for deletion..&lt;br /&gt;
&lt;br /&gt;
[IMPORTANT: Make sure that you have SQL database backups before trying this and know that you may have to restore your databases if you run into issues. Also this can ONLY be done if you want to remove ALL sharing. There is not a way to leave some sharing intact. ]&lt;br style="mso-special-character: line-break" /&gt;
&lt;br style="mso-special-character: line-break" /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;div style="BORDER-RIGHT: black 1pt dashed; PADDING-RIGHT: 4pt; BORDER-TOP: black 1pt dashed; PADDING-LEFT: 4pt; BACKGROUND: #cccccc; PADDING-BOTTOM: 1pt; BORDER-LEFT: black 1pt dashed; PADDING-TOP: 1pt; BORDER-BOTTOM: black 1pt dashed; mso-element: para-border-div; mso-border-themecolor: text1; mso-border-alt: dot-dash black .75pt; mso-shading: windowtext; mso-pattern: gray-20 auto"&gt;
&lt;p class="CodeStyle" style="BACKGROUND: #cccccc; mso-shading: windowtext; mso-pattern: gray-20 auto"&gt;&lt;span style="COLOR: #008a3e"&gt;SELECT&lt;/span&gt; top 500000 * &lt;br /&gt;
&lt;span style="COLOR: #008a3e"&gt;into&lt;/span&gt; #TempPOA &lt;span style="COLOR: #008a3e"&gt;FROM&lt;/span&gt; &lt;br /&gt;
&lt;span style="COLOR: #c00000"&gt;PrincipalObjectAccess&lt;/span&gt; (nolock)&lt;br /&gt;
&lt;span style="COLOR: #008a3e"&gt;where&lt;/span&gt; AccessRightsMask = 0 &lt;br /&gt;
and InheritedAccessRightsMask &amp;gt; 0&lt;br /&gt;
&lt;br /&gt;
&lt;span style="COLOR: #008a3e"&gt;update&lt;/span&gt; &lt;span style="COLOR: #c00000"&gt;PrincipalObjectAccess&lt;/span&gt; &lt;br /&gt;
&lt;span style="COLOR: #008a3e"&gt;set&lt;/span&gt; InheritedAccessRightsMask = 0&lt;br /&gt;
&lt;span style="COLOR: #008a3e"&gt;where&lt;/span&gt; rowguid in (&lt;span style="COLOR: #008a3e"&gt;Select&lt;/span&gt; rowguid &lt;span style="COLOR: #008a3e"&gt;from&lt;/span&gt; #tempPOA)&lt;br /&gt;
&lt;br /&gt;
drop table #TempPOA&lt;br style="mso-special-character: line-break" /&gt;
&lt;br style="mso-special-character: line-break" /&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%"&gt;After finishing marking all the rows for deletion, now you can run the delete service, stop the service (not required) then run the following dos command&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style="BORDER-RIGHT: black 1pt dashed; PADDING-RIGHT: 4pt; BORDER-TOP: black 1pt dashed; PADDING-LEFT: 4pt; BACKGROUND: #cccccc; PADDING-BOTTOM: 1pt; BORDER-LEFT: black 1pt dashed; PADDING-TOP: 1pt; BORDER-BOTTOM: black 1pt dashed; mso-element: para-border-div; mso-border-themecolor: text1; mso-border-alt: dot-dash black .75pt; mso-shading: windowtext; mso-pattern: gray-20 auto"&gt;
&lt;p class="CodeStyle"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="CodeStyle"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;C:\Program Files\Microsoft CRM\Server\bin\&lt;span style="COLOR: #c00000"&gt;CrmDeletionService.exe&lt;/span&gt; &lt;span style="COLOR: #008a3e"&gt;-runonce&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
[NOTE: -runonce = Clean up database right now.] &lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;we schedule the deletion service to run only once a day, on a business downtime, this process will keep your tables purged and on optimal conditions&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
regards, &lt;br /&gt;
Abe Saldaña&lt;/p&gt;
&lt;p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;img src="http://blog.crmbuzz.net/aggbug/3.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Abe Saldana</dc:creator>
            <guid>http://blog.crmbuzz.net/archive/2007/05/07/Purging-rows-on-Princiapl-Object-Access.aspx</guid>
            <pubDate>Tue, 08 May 2007 03:23:24 GMT</pubDate>
            <wfw:comment>http://blog.crmbuzz.net/comments/3.aspx</wfw:comment>
            <comments>http://blog.crmbuzz.net/archive/2007/05/07/Purging-rows-on-Princiapl-Object-Access.aspx#feedback</comments>
            <wfw:commentRss>http://blog.crmbuzz.net/comments/commentRss/3.aspx</wfw:commentRss>
            <trackback:ping>http://blog.crmbuzz.net/services/trackbacks/3.aspx</trackback:ping>
        </item>
    </channel>
</rss>