Monday, November 23, 2015

SharePoint 2013: CREATE TABLE permission denied in database [farm config]

Problem

You installed this month's cumulative update for your SharePoint Server 2013 Enterprise farm.  That Monday, checking the farm's application server Application event log, you see the following error event, #5586, recurring hourly in blocks of 5:
Unknown SQL Exception 262 occurred. Additional error information from SQL Server is included below.
CREATE TABLE permission denied in database '[farm config]'.
You also see server application error event #5617, recurring hourly at at the exact same time as the other error:
There is a compatibility range mismatch between the Web server and database "", and connections to the data have been blocked to due to this incompatibility. This can happen when a content database has not been upgraded to be within the compatibility range of the Web server, or if the database has been upgraded to a higher level than the web server. The Web server and the database must be upgraded to the same version and build level to return to compatibility range.
Reviewing event logs of the web front servers (WFE), you find the same error event messages appearing in their server application logs.

The User for both these error event types is the DocAve SharePoint Administrator service account (eg, spDocAve).  You begin troubleshooting.

Troubleshooting

  1. SQL Server server event logs: found no related events appearing in event logs.
  2. SQL Server security login mappings: found DocAve service account was not mapped to farm configuration database; also found it was not mapped to other farm databases, including:  Config_CA, all content DBs, Profile, Social.
    1. Remapped DocAve service account as db_owner to all farm databases.

Solution

  • Remap DocAve service account as db_owner to appropriate farm databases.

References

  • Farm database server: SQL Server 2012.
  • Occurred for October 2015 and November 2015 CUs.

Friday, November 20, 2015

SharePoint 2013: Application error when access /...[site page] Error=Request timed out

Problem

You administrator a small SharePoint 2013 Enterprise farm having traditional topology: 1 application, 2 web front ends, 1 database server and 1 OWA.  Some users report that they can connect to the customer main website just fine.  However, when they then attempt to navigate to a specific site in that website, their browser stays busy for awhile, and then their browsers display an error message:
Sorry, something went wrong
An unexpected error has occurred.
Technical Details
You do a spot check among some users and find that some have been able to access this particular subsite, but others haven't.

Troubleshooting

  1. Central Administration Health report: you find no error messages.
  2. Server Event Logs: same for the WFE server event logs, no issues.  Given that some users are experiencing this issue and some are not, you suspect that the problem is occurring on just one of the two web front ends.  
  3. ULS logs on both machines: you conduct searches based upon usernames and URL of the site.  On one of the WFEs, you find the following curious entries:
    Application error when access /.../SitePages/Home.aspx, Error=Request timed out.

    System.Web.HttpException: Request timed out. Getting Error Message for Exception

    System.Web.HttpException (0x80004005): Request timed out. Redirect to error.aspx failed.

    Exception: System.Web.HttpException (0x80004005): Cannot redirect after HTTP headers have been sent. at System.Web.HttpResponse.Redirect(String url, Boolean endResponse, Boolean permanent) at Microsoft.SharePoint.Utilities.SPUtility.Redirect(String url, SPRedirectFlags flags, HttpContext context, String queryString) 
  4. SecurityTokenServiceApplicationPool: restarted both.  Problem still occurs.
  5. IIS: performed an IISRESET on the WFE exhibiting the curious ULSlog entries.  Afterwards, all users report they are now able to access the subsite without issue.

Solution

  1. Identify which WFE the issue is localized to.
  2. Perform IISRESET on that WFE.

References

  • None

Friday, November 13, 2015

SharePoint 2013 TIP: Cannot Co-locate SharePoint Designer and Office Web Apps

SharePoint Designer 2013 can be installed to your farm's existing Office Web Apps 2013 Server, and both Designer and OWA will function just fine.  However, updates to OWA will fail.  You will be able to install OWA updates, but you will not be able to rebuild the OWA server, after installing the updates.  In other words, this commandlet will fail:
New-OfficeWebAppsFarm -InternalURL "http://MyOWAServer" -AllowHttp –EditingEnabled
The reason for this is that SharePoint Designer employs Microsoft Office components.  A sparsely documented prerequisite of Office Web Apps 2013 deployment is that Microsoft Office (and Microsoft Office based products) are not installed.

To work around this, if you need to use the OWA server for SharePoint Designer, is to simply uninstall Designer, run the rebuild the OWA farm, and then re-install Designer. This will work fine until next month's patching.

References

Tuesday, November 3, 2015

SharePoint 2013: adding a new content type to an existing list

Introduction

Notes and procedure on adding the ability to capture new meeting request information to an existing help desk ticketing service list.  Though the application is specific, the concepts that are presented here are general and apply to any situation in which you need to add a new content type to be used for capturing a new type of user information.  The help desk ticketing system has a number of different content types, each devoted to specific type of information to be captured from the user.  All of this information, no matter what type, is stored in a single list, the help desk ticketing system list.
   

Procedure

  1. Create new content type
    1. Navigate to the website hosting the list
    2. Go: Settings > Web Designer Galleries > Site content types
    3. Click the Create link.
    4. Complete the information for the new content type.  If you have already created other content types for your help desk ticketing list, be sure to select the appropriate Parent Content Type.  This should be the same parent content type used for the other help desk user request forms used in your list.
    5. Click OK. The Site Content Type Information page is displayed.  Look down in the Columns section.  If your new content type is based upon a general parent content type, you'll see an entry for the Item content type, the Title column (unless you have renamed this), and the other columns associated with your base help desk ticket list content type.
  2. Create new columns for this content type
    1. Navigate to the list.
    2. Go: Ribbon LIST tab > Settings Group > List Settings.
    3. Scroll down to the Columns section.
    4. Click Create column.  Completed as needed.  Main thing is, made sure that the Add to all content types and Add to default view options were unchecked.
    5. Repeat until all new columns have been created that you want to add to the new content type.
  3. Add new content type to list
    1. Navigate to the list.
    2. Go: Ribbon LIST tab > Settings Group > List Settings.
    3. Scroll down to the Content Types.
    4. Click Add from existing site content types.
    5. Select the appropriate content type, and then click the Add > button.
    6. Click OK.  The new content type now appears in the Content Types list.
  4. Add columns to the new content type
    1. Navigate to the list.
    2. Go: Ribbon LIST tab > Settings Group > List Settings.
    3. Scroll down to the Content Types.
    4. Click the link of the new content type.
    5. Add the columns that you created previously. Add them in the order that you want them to appear to the user in the form.
    6. Click OK.
  5. Add new content type form for adding items (Optional)
    1. Launch SharePoint Designer 2013
    2. Open the site containing the target list
    3. In the left Navigation panel, select Lists and Libraries.
    4. In the right Action panel, select the target list.
    5. In the Forms section, in the Action panel, click the New... button.
    6. Enter a name, select New item form, and then select the content type to use.
    7. Click OK.  The new form name will appear listed in the Forms section.  This form will include all list fields.
  6. Modify new item form (Optional)
    1. Launch SharePoint Designer 2013
    2. Open the site containing the target list
    3. In the left Navigation panel, select Lists and Libraries.
    4. In the right Action panel, select the target list.
    5. In the Forms section, click on the form you want to edit.  This opens the form in code view.
    6. Scroll down until you see a number of row elements featuring the names of the new columns you added.  To remove a column from this form, select the entire row, including the row markup, and then delete.  To move elements, cut and paste these rows where desired.
    7. Once you're done, click the Save button at top.  The edited form will be available immediately.

References

Notes

  • If you create a new form for this content type that adds items, this form may appear different from the new item form for this content type available from the New Item drop down on the ITEMS tab of the ribbon.  The form available from the New Item dropdown displays only those fields in the content type.  While the new item form you create via SharePoint Designer will have all fields.

Monday, November 2, 2015

SharePoint 2013 TIP: updating list columns and showing progress

Here's a quick bit of PowerShell that saves the Created and Created By columns to CreatedArchive and CreatedByArchive and also at the same time presented to you a progress bar.  I'm saving these columns data because:

  1. The Created column is overwritten when you perform an export followed by an import and 
  2. The Created By column is overwritten by your username (assuming you are the one performing this import) if the particular username being imported is no longer in Active Directory.  

The loss of that data presents a problem when trying to archive lists for which it is important to preserve these column data, such as in employee time and issue tracking lists.  These lists can be thousands of items long, and it can take several minutes or more to update them and thus it's helpful to have a progress bar.  Using a progress bar gives me instant feedback on how my PowerShell script is progressing.
   

Script

$SourceWebURL = "http:/[yourfarmURL]/yoursite" $SourceListName = "Time log" $SourceWeb = Get-SPWeb $SourceWebURL $SourceList = $SourceWeb.Lists[$SourceListName] $total=$SourceList.Items.count $count=1 $Updated = $FALSE $ItemsUpdated = 0 ForEach ($Item in $SourceList.Items) { $percent = [math]::Round(($count/$total)*100,2); Write-Progress -Activity 'Updating Electronic Attendance Log ArchivedUsername field' -Status "$percent percent" -PercentComplete $percent; $cb = $Item["Created By"]; $cba = $Item["CreatedByArchive"]; $c = $Item["Created"]; $ca = $Item["CreatedArchive"]; If (($cba -eq "") -OR ($cba -eq $NULL)) { $cb = $cb.SubString($cb.IndexOf("#")+1); $Item["CreatedByArchive"] = $cb; $Item.Update(); $Updated = $TRUE; }; If (($ca -eq "") -OR ($ca -eq $NULL)) { $Item["CreatedArchive"] = $c; $Item.Update(); $Updated = $TRUE; }; If ($Updated) { $ItemsUpdated = $ItemsUpdated + 1; $Updated = $FALSE; }; $count = $count+1; }; $count=1; Write-Host $ItemsUpdated