<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>rshetwal</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/rshetwal/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/rshetwal/feed.xml</link>
    <description />
    <lastBuildDate>Wed, 17 Apr 2019 03:51:47 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>SharePoint and auto statistics guidance</title>
      <link>https://docs.microsoft.com/archive/blogs/rshetwal/sharepoint-and-auto-statistics-guidance</link>
      <pubDate>Tue, 03 Feb 2015 08:29:50 GMT</pubDate>
      <dc:creator><![CDATA[Ravi Shetwal]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/rshetwal/2015/02/03/sharepoint-and-auto-statistics-guidance/</guid>
      <description><![CDATA[On TechNet, at this link, you will find the guidance for auto-create statistics on a server that...]]></description>
      <content:encoded><![CDATA[<p>On TechNet, at <a href="https://technet.microsoft.com/en-ca/library/hh292622.aspx">this</a> link, you will find the guidance for auto-create statistics on a server that hosts SQl Server and SharePoint. </p>  <p><i></i></p>  <p><i>Do not enable auto-create statistics on a server that hosts SQL Server and SharePoint Server. Enabling auto-create statistics is not supported for SharePoint Server. SharePoint Server configures the required settings during provisioning and upgrade. Manually enabling auto-create statistics on a SharePoint database can significantly change the execution plan of a query. The SharePoint databases either use a stored procedure that maintains the statistics (proc_UpdateStatistics) or rely on SQL Server to do this.</i></p>  <p><i></i></p>  <p>There seems to be no mention for auto_update_statistics. So I worked with my colleague, Derek Wilson, an SME in SQL Server to find the official stand on the update statistics. </p>  <p>For SharePoint 2010, we do not recommend to enable the configurations (Create and Update). However, if you see performance issues, you can enable these settings. <u>For SharePoint 2010 only, this is supported</u> by content databases as it does not affect the SharePoint functionality.</p>  <p>For SharePoint 2013, enabling this setting is <u>NOT supported</u>. </p>  <p><b>Background</b></p>  <p>As far as auto-update, it can be a very helpful feature at times, and other occasions can cause performance issues after it kicks in within a SharePoint environment. If you turn it off then you would have to make sure that either the DBA's or someone on the SharePoint team has a process that manually updates statistics that need to be updated on a fairly regular basis.</p>  <p>While the built-in SharePoint timer job (one of those Health Analyzer rules) will run the stored procedure - proc_UpdateStatistics.&#160; This procedure does not exist in every SharePoint database.&#160; If the stored procedure is not found in a particular database, then that database will end up with stale statistics - which can lead to inappropriate and inefficient query plans based on the amount of data that is being queried (<a href="https://msdn.microsoft.com/en-us/library/ms190397(v=sql.105).aspx">https://msdn.microsoft.com/en-us/library/ms190397(v=sql.105).aspx</a>) .</p>  <p><b>Recommendation: </b></p>  <p>For SharePoint 2010</p>  <p>· If you are manually updating statistics, then you <u>would not</u> need to enable the “auto update statistics asynchronously” option along with the auto update statistics option. If you are not manually updating the statistics, then you can enable the “auto update statistics asynchronously” option on non-content databases. This would be an option that could be enabled on the databases that <u>do not</u> have the proc_UpdateStatistics stored procedure. These databases would include the following (this is not an all-inclusive list):    <br /><b></b></p>  <p><b>     <br /></b></p>  <p><b></b></p>  <p><b>Application Service databases:</b>    <br />Service_BusinessConnectivity    <br />Managed Metadata Service    <br />SessionState    <br />StateService_    <br />Application_Registry_Service_DB    <br />PerformancePoint Service Application    <br />Profile Service Application_SyncDB    <br />Bdc_Service_DB    <br />Secure_Store_Service_DB    <br />ReportServer    <br />ReportServerTempDB    <br /><b>If using FAST Search:</b>    <br />FAST_Content_SSA_DB    <br />FAST_Content_SSA_PropertyStoreDB    <br />FAST_Query_SSA_DB    <br />FAST_Query_SSA_PropertyStoreDB    <br />FASTSearchAdminDatabase    <br /><b>If using SharePoint Search:</b>    <br />Search_Service_Application_DB    <br />Search_Service_Application_PropertyStoreDB    <br /><b>If using Project Server 2010:</b>    <br />ProjectServer    <br />ProjectServer_Draft    <br />ProjectServer_DW    <br />ProjectServer_Published    <br />ProjectServer_Reporting    <br />PPCentralConfig</p>  <p>· Databases that do not have the proc_UpdateStatistics, have a process in place to manually update the statistics on the databases that are not covered by the Health Analyzer rule. This process can include the setup and configuration of a SQL Server Maintenance plan (<a href="https://technet.microsoft.com/en-us/library/cc262731%28v=office.14%29.aspx#DBMaintenanceForSPS2010_CreateSQLS2008MaintPlan">https://technet.microsoft.com/en-us/library/cc262731%28v=office.14%29.aspx#DBMaintenanceForSPS2010_CreateSQLS2008MaintPlan</a>).</p>  <p>FOR 2013,</p>  <p>· Respect SharePoint configuration settings and do not turn it on or off. </p>  <p>· Databases that do not have the proc_UpdateStatistics, have a process in place to manually update the statistics on the databases that are not covered by the Health Analyzer rule</p>  <p>Here is a great video that talks about optimizing SQL Server for SharePoint:&#160; <a href="https://channel9.msdn.com/Events/TechEd/NewZealand/2013/SES312">https://channel9.msdn.com/Events/TechEd/NewZealand/2013/SES312</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Third Party RBS provider corrupting images in Office documents</title>
      <link>https://docs.microsoft.com/archive/blogs/rshetwal/third-party-rbs-provider-corrupting-images-in-office-documents</link>
      <pubDate>Mon, 12 Jan 2015 10:30:00 GMT</pubDate>
      <dc:creator><![CDATA[Ravi Shetwal]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/rshetwal/2015/01/12/third-party-rbs-provider-corrupting-images-in-office-documents/</guid>
      <description><![CDATA[&#160;  Recently, I was working with a customer where they complained of images rendered corrupt in...]]></description>
      <content:encoded><![CDATA[<p>&#160;</p>  <p>Recently, I was working with a customer where they complained of images rendered corrupt in SharePoint document libraries. If you take the busted document and save it as a .zip file and see the media folder, the image will be corrupted. If you try to open it, you will get a message that the image is corrupt. Now, after researching, I found the issue to be with the third party RBS provider. The third party RBS provider was corrupting the images during save to the disc. Nonetheless, the third party provider quickly provided a hot fix, and the issue was resolved. </p>  <p>Having said so, I relaized that there are many misconceptions about RBS. It is not my goal to explain what RBS is as there is a lot of information about it. There are some misconceptions that I want to address. </p>  <h3>Is RBS is a silver bullet for content database size?</h3>  <p>RBS would not be a mechanism to reduce content database size. As per the boundaries and limits. If you are using Remote BLOB Storage (RBS), the total volume of remote BLOB storage and metadata in the content database must not exceed the boundaries specified in the link. <a href="https://technet.microsoft.com/en-us/library/cc262787(v=office.15).aspx#ContentDB">https://technet.microsoft.com/en-us/library/cc262787(v=office.15).aspx#ContentDB</a></p>  <h3>By using RBS can I reduce the time for database backup and restore?</h3>  <p>The answer is no. RBS adds complexity for the backup and restore, AND, RBS must be backed up in synchronization to maintain references consistency. The backup time = time taken to back up content db. + Time to back up RBS. If you look at the section “Implications of using RBS over the IT life cycle” at <a href="https://technet.microsoft.com/en-us/library/ff628583(v=office.15).aspx">https://technet.microsoft.com/en-us/library/ff628583(v=office.15).aspx</a> , RBS adds complexity for the backup and restore, AND, RBS must be backed up in synchronization to maintain references consistency. Here is an excerpt, <i>For example, using a remote RBS provider will require increased IT operations complexity and some cost increases. This is because the content database and the BLOB store must be backed up in synchronization to maintain references consistency</i></p>  <p><i></i></p>  <h3>Does RBS remove the 2 GB file size limit?</h3>  <p>No, it does not.</p>  <h3>Third Party RBS providers, shredded storage and RBS threshold!</h3>  <p>With OOB FILESTREAM either everything is in RBS or nothing. With third party providers, you can specify thresholds. For example, if the content size &gt; 1MB move it to RBS. </p>  <p>Now consider RBS with Shredded storage. By default, shredded storage will slice files that are SharePoint aware (e.g. Office documents) to 64 kb chunks; others (zip and media) to 1MB chunks. So, if you use a third party RBS provider you can set the threshold to 1MB and all media and zip files will move to RBS and all office documents will move to content DB. Note: Office documents will never go to RBS because the split size of 64KB is less than the threshold. I am not suggesting that you use such a threshold to simply keep all office content in SharePoint and everything else in RBS. </p>  <h3>Final thoughts</h3>  <p>RBS is not a mechanism to reduce content database size and does not reduce the backup and restore time. In fact, it adds complexity. I would consider RBS solely for storing real blobs like media files, other very large files and for Records management. It is preferred to have most of the content in the content database along with a proactive approach for data retention and archival which is a topic for some another day. </p>]]></content:encoded>
    </item>
    <item>
      <title>Large SharePoint 2013 migration, HNSC, change URL after Migration, crawling and DNS</title>
      <link>https://docs.microsoft.com/archive/blogs/rshetwal/large-sharepoint-2013-migration-hnsc-change-url-after-migration-crawling-and-dns</link>
      <pubDate>Mon, 15 Dec 2014 17:04:00 GMT</pubDate>
      <dc:creator><![CDATA[Ravi Shetwal]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/rshetwal/2014/12/15/large-sharepoint-2013-migration-hnsc-change-url-after-migration-crawling-and-dns/</guid>
      <description><![CDATA[&nbsp;
Say you are migrating several terabytes of content from SharePoint 2010 to SharePoint 2013....]]></description>
      <content:encoded><![CDATA[<p>&nbsp;</p>
<p>Say you are migrating several terabytes of content from SharePoint 2010 to SharePoint 2013. Chances are that you are creating a temporary migration URL for your 2013 environment where users can test the migration. Further, you migrate content in several stages, probably one business unit at a time, or one web application at a time, so on so forth.</p>
<p>Now once, you move all the content of a business unit or department or project to 2013 and want to keep the same URL as your 2010 environment, what do you do?</p>
<p>Let&rsquo;s put a concrete example.</p>
<ul>
<li>Say your 2010 URL: <a href="https://companyA.contoso.com">https://companyA.contoso.com</a> = intended SharePoint 2013 URL.</li>
<li>You create a 2013 temporary Migration URL: <a href="https://companyABeta.contoso.com">https://companyABeta.contoso.com</a>. This is the URL that you share with the users of the content owners so they can test.</li>
<li>If you have any web parts that were dependent on search, then the temporary migration URL is the content source for crawl.</li>
</ul>
<p>Now, once testing is complete and the testers go ahead, then you switch all the users to the 2013 site. To do so you probably,</p>
<ul>
<li>&middot; Take an outage for migration.</li>
<li>&middot; Change the temporary URL to the desired URL, which is the same as your 2010 URL. For example, rename the <a href="https://companyABeta.contoso.com">https://companyABeta.contoso.com</a> to <a href="https://company.contoso.com">https://company.contoso.com</a></li>
<li>&middot; Point DNS to the 2013 production, and users can now access the new site content.</li>
</ul>
<p>Now the problem is that after you have changed the URL, SharePoint sees a new URL and thought there will be an incremental crawl, it would be like a full crawl. Based on the volume of the content, it could take a while. Search based functionality would not be available till crawl is complete. Also, you will have to do these steps again and again, till you migrated all the business units or departments. Wouldn&rsquo;t it be nice, if you did not have to re-crawl every time you migrated the content from 2010 to 2013?</p>
<p>Ok Let&rsquo;s put a concrete example.</p>
<p>Say in SharePoint 2010 you had the following two web applications. You are using attach/detach method, or a tool like AvePoint or Metalogic to move this content.</p>
<p><strong>SharePoint 2010 web applications</strong></p>
<ul>
<li>CompanyA.contoso.com</li>
<li>CompanyB.contoso.com</li>
</ul>
<p>SharePoint 2013 logical architecture</p>
<ul>
<li>One web application with 2 HNSC having the same URL&rsquo;s; that is,</li>
<li>CompanyA.contoso.com</li>
<li>CompanyB.contoso.com</li>
</ul>
<p><strong>Proposed migration steps. </strong></p>
<ol>
<li>Create your web application in SharePoint 2013. https://mylab</li>
<li>On the <strong>default zone</strong> create the HNSC collection using the script.</li>
</ol>
<p><em>New-SPSite 'https://CompanyA.sp.contoso.com' -HostHeaderWebApplication 'https:// mylab' -Name 'CompanyA portal' -Description 'Portal for CompanyA' -OwnerAlias 'contoso\administrator -language 1033 -Template 'BLANKINTERNET#0'</em></p>
<p>&nbsp;</p>
<p><em>New-SPSite 'https://CompanyB.sp.contoso.com' -HostHeaderWebApplication 'https:// mylab' -Name 'CompanyB portal' -Description 'Portal for CompanyB' -OwnerAlias 'contoso\administrator -language 1033 -Template 'BLANKINTERNET#0'</em></p>
<p>NOTE: <strong>Do not create a DNS entry</strong> for the 2013 environment. If the user types <a href="https://CompanyA.sp.contoso.com">https://CompanyA.sp.contoso.com</a> from their device, they should be navigated to 2010 site, not 2013. Since the HNSC is created in the default zones, search will use this to crawl.</p>
<p><strong>Now, when I migrate the content to 2013, how will users test this content to approve migration?</strong></p>
<p>3) Now, create a separate URL for users to test this site. Use the Internet zone.</p>
<p><em>Set-SPSiteUrl (Get-SPSite 'https://CompanyB.sp.contoso.com') -Url 'https://CompanyBPublic.sp.contoso.com' -Zone Internet</em></p>
<p><em>Set-SPSiteUrl (Get-SPSite 'https://CompanyA.sp.contoso.com') -Url 'https://CompanyAPublic.sp.contoso.com' -Zone Internet</em></p>
<p>4) Now set up DNS entry or host file to point to the public URL&rsquo;s so users can test.</p>
<p>5) Now when migration is complete, the internet public URL may be removed, and DNS reset to the final URL to direct users to that URL. As the original URL is maintained, search will not re-crawl the data.</p>
<p><strong>What if you are not using HNSC?</strong></p>
<p>You could do the same as above. The only difference would be how you make the site available for testing while the 2010 site is still live. Instead of using <em>Set-SPSiteUrl</em> to create a test URL, you should temporarily extend the web application and make it available for testing by creating a DNS entry. Once you are done testing, remove the extended application and the DNS.<a name="_GoBack"></a></p>]]></content:encoded>
    </item>
    <item>
      <title>DNS Zones for SharePoint Apps?</title>
      <link>https://docs.microsoft.com/archive/blogs/rshetwal/dns-zones-for-sharepoint-apps</link>
      <pubDate>Mon, 03 Nov 2014 11:41:23 GMT</pubDate>
      <dc:creator><![CDATA[Ravi Shetwal]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/rshetwal/2014/11/03/dns-zones-for-sharepoint-apps/</guid>
      <description><![CDATA[&#160;  1) I am developing SharePoint hosted apps; do I need to create multiple DNS zones? One for...]]></description>
      <content:encoded><![CDATA[<p>&#160;</p>  <p><b>1) </b><b>I am developing SharePoint hosted apps; do I need to create multiple DNS zones? One for each environment, e.g. dev.contosoapps.com, qa.contosoapps.com</b></p>  <p>For provider hosted apps, NO, you do not need to have multiple DNS zones. This can be managed with virtual sub directories below the root domain. In other words, you could have a single host and sub directories for each environment, and subdirectories under each environment for each app</p>  <p>E.g.: </p>  <p>· <a href="https://app.contoso.com/prod">https://app.contoso.com/prod</a></p>  <p>· <a href="https://app.contoso.com/prod/fooApp">https://app.contoso.com/prod/fooApp</a></p>  <p>· <a href="https://app.contoso.com/dev">https://app.contoso.com/dev</a></p>  <p>· <a href="https://app.contoso.com/dev/fooApp">https://app.contoso.com/dev/fooApp</a></p>  <p>· <a href="https://app.contoso.com/stage">https://app.contoso.com/stage</a></p>  <p>· <a href="https://app.contoso.com/stage/fooApp">https://app.contoso.com/stage/fooApp</a></p>  <p><b>2) </b><b>What about SharePoint hosted apps?</b></p>  <p>For SharePoint hosted apps you will need a different zone for each SharePoint farm. </p>  <p><b>3) </b><b>OK, let me kick this a notch up. So for my production, with multiple web applications, I decide to use provider hosted apps along with the app webs (hybrid). Now, the app web will require four domains as there are four web applications. Can I share a single domain across multiple web applications?</b></p>  <p>The short answer is yes.</p>  <p>One of the feature updates of the <a href="https://go.microsoft.com/fwlink/p/?LinkId=286308">March 2013 Public Update</a> for SharePoint 2013 enables you to <u>use multiple app domains</u> in SharePoint 2013 environments with alternate access mapping or host-header web application configurations. </p>  <p>As per the article at <a href="https://technet.microsoft.com/en-us/library/dn144963(v=office.15).aspx">Enable apps in AAM or host-header environments for SharePoint 2013</a>, </p>  <p><i>Apps domains can be shared across web applications if the zone, application pool identity, and authentication schemes match. For example suppose that webappA is configured to use the Default zone and webappB is also configured to use the Default zone. In addition, both web applications use the same application pool identity, and both web applications use NTLM. In this scenario, the web applications can share a single app domain.</i></p>  <p><i></i></p>  <p>However, you will need a way to update the app to four catalogs. You could probably automate this process. At the end of the day, the app catalog is a document library, so write an app that deploys apps to multiple web applications.</p>]]></content:encoded>
    </item>
    <item>
      <title>App Scoping. Who can see the apps?</title>
      <link>https://docs.microsoft.com/archive/blogs/rshetwal/app-scoping-who-can-see-the-apps</link>
      <pubDate>Wed, 27 Aug 2014 16:39:18 GMT</pubDate>
      <dc:creator><![CDATA[Ravi Shetwal]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/rshetwal/2014/08/27/app-scoping-who-can-see-the-apps/</guid>
      <description><![CDATA[&#160;  We know that there is a single app catalog per web application. With the one web application...]]></description>
      <content:encoded><![CDATA[<p>&#160;</p>  <p>We know that there is a single app catalog per web application. With the one web application matra, you can have separate department or business units site collections under one web application. Further, these departments will develop their own apps that are valid only for their site collections and will have some security needs. So how to prevent users of one department/business unit from installing/seeing apps developed for another department. Here is the solution</p>  <p>Permissions and app scoping can be achieved by the following configuration</p>  <p>&#160;</p>  <ol>   <li>1) Only site owners can install the apps</li>    <li>2) The <b>site owners must have read-only permission</b> on the root of the app catalog to be able to see the app and thereby install it.</li>    <li>3) Security isolation for the apps should be achieved by creating folders in the app catalog and assigning permissions to those folders.</li>    <li>4) Once the folder is created, break inheritance on the folder and only provide read-only access to site owners who should be able to install the apps on their sites.</li> </ol>  <p>For example</p>  <ul>   <li>Site 1 – Site Owner is Bob</li>    <li> Site 2- Site Owner is Joe</li> </ul>  <p>In the app catalog;</p>  <ul>   <li>Provide Bob and Joe read-only access at the site level</li>    <li>Create a folder Site 1 Apps in the app catalog</li>    <ul>     <li>Break inheritance and remove Joe’s access to this folder so that only Bob has access to this folder</li>   </ul>    <li>Similarly, create a folder Site 2 Apps in the app catalog</li>    <ul>     <li>Break inheritance and remove Bob’s access to this folder so that only Joe has access to this folder</li>   </ul> </ul>  <p>With this setup;</p>  <ul>   <li>Only Bob can add apps to his site, Site 1,&#160; from the Site 1 apps folder from the catalog. He will not see the apps in the Site 2 Apps folder</li>    <li>Similarly, Only Bob can add apps to his site, Site 2,&#160; from the Site 2 apps folder from the catalog. He will not see the apps in the Site 1 Apps folder</li> </ul>]]></content:encoded>
    </item>
  </channel>
</rss>