Archive for the 'SharePoint Infrastructure' Category

06
Mar
15

RSViewerPage.aspx Controls not Rendering

Are you seeing something like this while attempting to render a report in SSRS in SharePoint 2013…or perhaps any version of SharePoint with integrated SSRS?

image

Try this.

Edit the web.config for the SharePoint site in which SSRS is installed.  C:\inetpub\wwwroot\wss\VirtualDirectories\Portal-80, for example.

In the web.config, find the <handlers> section within the <system.webServer> section and add the following:

<add name=”ReportViewerWebPart” verb=”*” path=”Reserved.ReportViewerWebPart.axd” type=”Microsoft.ReportingServices.SharePoint.UI.WebParts.WebPartHttpHandler, Microsoft.ReportingServices.SharePoint.UI.WebParts, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91″ />

image

Reload the page and voila’!  You’ll at least get some errors you can deal with.

image

Now, on to the next problem…

09
Jan
15

“The database principal owns a schema in the database, and cannot be dropped” Error Running the SharePoint Configuration Wizard

I was applying some CUs to SharePoint 2013 and running the configuration wizard was failing.  You may or may not know this, but the configuration wizard will write a log file to the SharePoint hive as well as an error log.  This error log is the one you want to look at.

 

image

 

In my case, I was receiving

The database principal owns a schema in the database, and cannot be dropped.  User, group, or role ‘SPDataAccess’ already exists in the current database.

When looking at the error log, it was apparent this had something to do with the SPDataAccess principal within the SP15_UsageAndHealth database. 

01/09/2015 15:39:43.99    OWSTIMER (0x359C)    0x2838    SharePoint Foundation Upgrade    SPUpgradeSession    ajxnm    INFO    SPUsageDatabase Name=SP15_UsageAndHealth    012dde9c-16ee-b0ba-8634-adb34afb8eb1
01/09/2015 15:39:43.99    OWSTIMER (0x359C)    0x2838    SharePoint Foundation Upgrade    SPUpgradeSession    ajxnm    ERROR    Upgrade [SPUsageDatabase Name=SP15_UsageAndHealth] failed.    012dde9c-16ee-b0ba-8634-adb34afb8eb1
01/09/2015 15:39:44.01    OWSTIMER (0x359C)    0x2838    SharePoint Foundation Upgrade    SPUpgradeSession    ajxnm    INFO    SPUsageDatabase Name=SP15_UsageAndHealth    012dde9c-16ee-b0ba-8634-adb34afb8eb1
01/09/2015 15:39:44.01    OWSTIMER (0x359C)    0x2838    SharePoint Foundation Upgrade    SPUpgradeSession    ajxnm    ERROR    Exception: The database principal owns a schema in the database, and cannot be dropped.  User, group, or role ‘SPDataAccess’ already exists in the current database.    012dde9c-16ee-b0ba-8634-adb34afb8eb1

SharePointgotchas (https://sharepointgotchas.wordpress.com/2014/04/17/postsetupconfigurationtaskexception-was-thrown-when-installing-sp1/) gave me the hint I needed and Pinal Dave (http://blog.sqlauthority.com/2011/12/26/sql-server-fix-error-15138-the-database-principal-owns-a-schema-in-the-database-and-cannot-be-dropped/) had some more details about this issue.

If you look at SQL Server Management Studio and navigate to the offending database, you can navigate to the Schemas node and investigate who owns each of the schemas by looking at each Schama’s properties.

image

In my case, the schema owner was set to SPDataAccess.  I’m not sure how it got this way, but upon further inspection, this was also true for SP15Farm and SP15MyAppPool.

image

For each of them, I set the schema owner to be the same as the schema name.

image

Now, running the configuration wizard was successful!  All is well in SharePoint land again.

24
Oct
14

Enable the App Catalog on SharePoint 2013

 

Referencing these blog posts, with my own additions:

Alex’s blog: http://www.sharepointalex.co.uk/index.php/2012/11/enabling-sharepoint-2013-apps/

Mirjam van Olst‘s blog: http://www.sharepointchick.com/archive/2012/07/29/setting-up-your-app-domain-for-sharepoint-2013.aspx

For the most part, I followed Alex’s blog post. 

  1. Start the App Management Service (already done)
  2. Provision an App Management Service application (already done)
  3. Create a subdomain in DNS. I created apps.cfgmgt.local
  4. Set the isolated App Domain using PowerShell
    1. Set-SPAppDomain -AppDomain "apps.cfgmgt.local"
  5. Start the SPSubscriptionSettings Service using PowerShell or in SCA (already started)
    1. Get-SPServiceInstance where{$_.GetType().Name -eq "SPSubscriptionSettingsServiceInstance"} | Start-SPServiceInstance
  6. Ensure the App Management Service and SPSubscriptionSettings Services are online (PowerShell or SCA)
    1. Get-SPServiceInstance | where{$_.GetType().Name -eq "AppManagementServiceInstance" -or $_.GetType().Name -eq "SPSubscriptionSettingsServiceInstance"}
  7. Provision a Subscription Settings Service Application (This was done during the initial setup of SharePoint in my case.  Must use PowerShell, as there is no UI in SCA.)
    1. Get-SPServiceApplicationPool (to see all Server Application app pools)

    2. $appPool = Get-SPServiceApplicationPool "SharePoint Service AppPool"

    3. $appSubSvc = New-SPSubscriptionSettingsServiceApplication –ApplicationPool $appPool –Name "Subscription Settings Service Application" –DatabaseName Your_database_name

    4. $proxySubSvc = New-SPSubscriptionSettingsServiceApplicationProxy –ServiceApplication $appSubSvc

  8. Visit the Manage Service Applications page in Central Admin and verify that both the App Management Service App and Subscriptions Settings Service App are provisioned and started.

  9. Create an app catalog.  From SCA, select Apps|Manage App Catalog.  Be sure and select the correct web application where you want the app catalog created.

  10. You’ll get a page where you can fill in all the app catalog details.

  11. Configure the app URLs.  From SCA, select Apps|Configure App URLs.

  12. You need a web application (no site collection needs to be created in it) on port 80 that has no host header.  Others have stated you need to create a site collection, but I haven’t had to. 

Here are some details, with screen shots, of what I did.

Created a web application on port 80 with no host header. 

image

Changed the public URL so it wouldn’t conflict with my default site, CMSP2013.

image

Used an existing app pool.  Each app pool has a lot of overhead, so you don’t want to make too many unless you have a good reason.

image

Changed the name of the content database to match my naming conventions.  I then initiated the creation of the new web application.

image

…and there you go.

image

You might notice your primary site is stopped in IIS.  (Perhaps if you do an IISRESET this will clear up.)

image

So just start it!

image

In Central Administration, configure the app URLs.  The app domain was already there due to executing

Set-SPAppDomain -AppDomain "apps.cfgmgt.local"

in PowerShell earlier.

image

To create an App Catalog use Manage App Catalog.

clip_image002

Select the appropriate web application.  An app catalog is associated with a single web application.

clip_image002[4]

Fill out the details to create the App Catalog site collection.

clip_image002[6]

So then we go to add an app.

image

Select the SharePoint Store.

image

Find the Corporate News app.

image

Pick the free one, because we’re cheap!

image

Go through the download and trust process.

If we look at our Site Contents, we should see the apps that have been downloaded. 

image

If you click on one, you should get the app’s administration page.  If you don’t have your port 80 web application with no host header set up, this will return an error (404) due to the way it redirects using a GUID.

image

Here’s an example URL that uses the subdomain previously set up in DNS.

image

And adding the App Part (like adding a web part) to the default page for testing it out.

image

 

ERRORS

I attempted to look at the details of an app that was downloaded and installed and SharePoint threw an error with a correlation ID.

image

Insufficient SQL database permissions for user ‘Name: NT AUTHORITY\IUSR SID: S-1-5-17 ImpersonationLevel: Impersonation’ in database ‘SP15_UsageAndHealth’ on SQL Server instance ‘SP2013SQL’. Additional error information from SQL Server is included below.  The EXECUTE permission was denied on the object ‘prc_CountAppInstanceData’, database ‘SP15_UsageAndHealth’, schema ‘dbo’.

This was resolved by identifying the account under which the App Management Service was running (don’t let the NT AUTHORITY\IUSR account throw you off).

image

Next, SQL was investigated for the SQL Login and it was found only a few stored procedures had been granted access to the login.  Instead of adding the stored procedures either individually or en masse, I decided to put the login into one of the existing SharePoint roles.

image

I appears that putting it into the SPReadOnly database role provides the required execute permissions for the stored procedures.

image

And for reference, you can see SPReadOnly provides Execute and Select permissions to the database.

image

22
Aug
14

SharePoint 2013: The server was unable to save the form at this time. Please try again.

I got this message, “The server was unable to save the form at this time. Please try again.” when trying to create a folder on a document library.  A quick search found this article where I found that restarting the "Sharepoint Search Hosting Controller" service fixed the problem.  That was weird!

image

29
May
14

Remove-SPUser PowerShell Command: How to Use it in SharePoint 2013

I was trying to use the Remove-SPUser cmdlet and kept getting this error:

Remove-SPUser : You must specify a valid user object or user identity.

image

With claims based authentication the cmdlet Get-SPUser returns all users like this:

image

So, you can see the format of the –Identity (UserLogin) is something like this:

i:0#.w|DOMAIN\USERID

This thread referred to the Get-SPUser cmdlet and using New-SPClaimsPrincipal, but what I found was pretty simple.

http://social.msdn.microsoft.com/Forums/en-US/260ad45b-cfe7-4699-842b-fc2ecdf6e543/powershell-cant-getspuser-adfs-user?forum=sharepointgeneralprevious

Use this format for the cmdlet:

Remove-SPUser -identity "i:0#.w|cfgmgt\rwright" -web http://cmsp2013:5555

The trick for me was to put double quotes around the encoded user name.

Now, if the Microsoft documentation would be more accurate…

12
Mar
14

Changing Host Header for the MySite Host in SharePoint 2013

Update for SharePoint 2013:

I recently set up a SharePoint 2013 site and provisioned the MySite host as "My.domain.com" when I should’ve used something like "MyTest.domain.com."

In order to fix this, it’s very similar to fixing it in 2007. 

Change the alternate access mapping.

image

Edit the default zone URL.

image

Edit the Site Binding in IIS to reflect the new host header.

image

Manage Service Applications

image

Click on your User Profile Service Application to manage it.

image

Go to Setup My Sites.

image

Change the My Site Host location.

image

IISReset and you should be good to go.

image

Hey, and if you want to change the name of the web application so it matches (I know, I know…it’s a bit anal, but I’m kinda’ OCD), here’s some PowerShell.

$WebApp = SPWebApplication | where {$_.Name -match "OldWebAppNameGoesHere"}
$WebApp.Name ="NewWebAppNameGoesHere"
$WebApp.Update()

 

 

 

Original post for SharePoint 2007:

I was playing around with SharePoint on my virtual machine and had set up a new installation of MOSS when I noticed I had entered a host header incorrectly (at least incorrectly from the standpoint of being consistent with my previous installations). I entered "MySite" instead of "MySites" as the first part of the host header. I know, I know, it’s probably more correct to use the singular, but I was trying to be consistent with what others had done.
All I wanted to do was to change the host header and have SharePoint recognize the change. I performed the standard internet search and didn’t get instant gratification, so I started playing around. I found that making the changes in three places and an IISRESET seemed to take care of my problem.
First, in Central Administration under Operations, Global Configuration, Alternate access mappings, edit the internal URL.


Next, open up IIS Manager and select the properties of the MySites web app. Change the host header by clicking on the Advanced… button.


Again in Central Administration, navigate to the Shared Services provider and click on My Site settings in the User Profiles and My Sites section. Change the personal site provider URL.


Perform an IISRESET. All should be well.

22
Dec
13

Installing Microsoft Office SharePoint Server 2007 on SQL Server 2012

Well, I got myself into a pickle.  I needed to create a SharePoint 2007 server instance within my domain so I could test some 2007/2010/2013 interactions.  It’s been a while since I installed 2007, but I thought it would be like riding a bicycle…you never really forget.  Turns out it was more like figuring out how to ride a unicycle.

I was planning on using best practices for all of the accounts necessary to perform a proper SharePoint installation.  And, for the most part, that went well.  The one thing I hadn’t planned on, however, was installing on SQL 2012.

I had recently upgraded my SQL VM to 2012 and that went without a hitch.  It was working fine, so out of sight, out of mind.  I started on my merry way.  I didn’t even consider whether MOSS 2007 would install on SQL 2012.  Hey, it’s SQL, right?  Well, not so fast, bucko!

The slipstreamed installation of 2007 w/SP2 actually went pretty well.  It was only after the installation and applying SP3 and some CU’s that I began to experience the incompatibilities, specifically in the SharePoint Products and Technologies Configuration Wizard.

sp_dboption is Deprecated and No Longer Exists in the Master Database

This was the first issue I had to overcome.  The configuration wizard calls sp_dboption but it no longer exists.  This was fairly easy to fix.  Simply get a copy of sp_dboption and add it back.  I present Exhibit A (sp_dboption) for your perusal.  (Skip to next topic)

USE [master]
GO
/****** Object: StoredProcedure [sys].[sp_dboption] Script Date: 12/08/2013 21:22:10 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE procedure [sp_dboption] -- 1999/08/09 18:25
@dbname sysname = NULL, -- database name to change
@optname varchar(35) = NULL, -- option name to turn on/off
@optvalue varchar(10) = NULL -- true or false
as
set nocount on

declare @dbid int -- dbid of the database
declare @catvalue int -- number of category option
declare @optcount int -- number of options like @optname
declare @allstatopts int -- bit map off all options stored in sysdatqabases.status
-- that can be set by sp_dboption.
declare @alloptopts int -- bit map off all options stored in sysdatqabases.status
-- that can be set by sp_dboption.
declare @allcatopts int -- bit map off all options stored in sysdatqabases.category
-- that can be set by sp_dboption.
declare @exec_stmt nvarchar(max)
declare @fulloptname varchar(35)
declare @alt_optname varchar(50)
declare @alt_optvalue varchar(30)
declare @optnameIn varchar(35)

select @optnameIn = @optname
,@optname = LOWER (@optname collate Latin1_General_CI_AS)

-- If no @dbname given, just list the possible dboptions.
-- Only certain status bits may be set or cleared by sp_dboption.

-- Get bitmap of all options that can be set by sp_dboption.
select @allstatopts=number from master.dbo.spt_values where type = 'D'
and name = 'ALL SETTABLE OPTIONS'

select @allcatopts=number from master.dbo.spt_values where type = 'DC'
and name = 'ALL SETTABLE OPTIONS'

select @alloptopts=number from master.dbo.spt_values where type = 'D2'
and name = 'ALL SETTABLE OPTIONS'

if @dbname is null
begin
select 'Settable database options:' = name
from master.dbo.spt_values
where (type = 'D'
and number & @allstatopts <> 0
and number not in (0,@allstatopts)) -- Eliminate non-option entries
or (type = 'DC'
and number & @allcatopts <> 0
and number not in (0,@allcatopts))
or (type = 'D2'
and number & @alloptopts <> 0
and number not in (0,@alloptopts))
order by name
return (0)
end

-- Verify the database name and get info
select @dbid = dbid
from master.dbo.sysdatabases
where name = @dbname

-- If @dbname not found, say so and list the databases.
if @dbid is null
begin
raiserror(15010,-1,-1,@dbname)
print ' '
select 'Available databases:' = name
from master.dbo.sysdatabases
return (1)
end

-- If no option was supplied, display current settings.
if @optname is null
begin
select 'The following options are set:' = v.name
from master.dbo.spt_values v, master.dbo.sysdatabases d
where d.name=@dbname
and ((number & @allstatopts <> 0
and number not in (-1,@allstatopts)
and v.type = 'D'
and (v.number & d.status)=v.number)
or (number & @allcatopts <> 0
and number not in (-1,@allcatopts)
and v.type = 'DC'
and d.category & v.number <> 0)
or (number & @alloptopts <> 0
and number not in (-1,@alloptopts)
and v.type = 'D2'
and d.status2 & v.number <> 0))
return(0)
end

if @optvalue is not null and lower(@optvalue) not in ('true', 'false', 'on', 'off')
begin
raiserror(15241,-1,-1)
return (1)
end

-- Use @optname and try to find the right option.
-- If there isn't just one, print appropriate diagnostics and return.
select @optcount = count(*) ,@fulloptname = min(name)
from master.dbo.spt_values
where lower(name collate Latin1_General_CI_AS) like '
%' + @optname + '%'
and ((type = '
D'
and number & @allstatopts <> 0
and number not in (-1,@allstatopts))
or (type = '
DC'
and number & @allcatopts <> 0
and number not in (-1,@allcatopts))
or (type = '
D2'
and number & @alloptopts <> 0
and number not in (-1,@alloptopts)))

-- If no option, show the user what the options are.
if @optcount = 0
begin
raiserror(15011,-1,-1,@optnameIn)
print '
'

select '
Settable database options:' = name
from master.dbo.spt_values
where (type = '
D'
and number & @allstatopts <> 0
and number not in (-1,@allstatopts)) -- Eliminate non-option entries
or (type = '
DC'
and number & @allcatopts <> 0
and number not in (-1,@allcatopts))
or (type = '
D2'
and number & @alloptopts <> 0
and number not in (-1,@alloptopts))
order by name

return (1)
end

-- If more than one option like @optname, show the duplicates and return.
if @optcount > 1
begin
raiserror(15242,-1,-1,@optnameIn)
print '
'

select duplicate_options = name
from master.dbo.spt_values
where lower(name collate Latin1_General_CI_AS) like '
%' + @optname + '%'
and ((type = '
D'
and number & @allstatopts <> 0
and number not in (-1,@allstatopts))
or (type = '
DC'
and number & @allcatopts <> 0
and number not in (-1,@allcatopts))
or (type = '
D2'
and number & @alloptopts <> 0
and number not in (-1,@alloptopts))
)
return (1)
end

-- Just want to see current setting of specified option.
if @optvalue is null
begin
select OptionName = v.name,
CurrentSetting = (case
when ( ((v.number & d.status) = v.number
and v.type = '
D')
or (d.category & v.number <> 0
and v.type = '
DC')
or (d.status2 & v.number <> 0
and v.type = '
D2')
)
then '
ON'
when not
( ((v.number & d.status) = v.number
and v.type = '
D')
or (d.category & v.number <> 0
and v.type = '
DC')
or (d.status2 & v.number <> 0
and v.type = '
D2')
)
then '
OFF'
end)
from master.dbo.spt_values v, master.dbo.sysdatabases d
where d.name=@dbname
and ((v.number & @allstatopts <> 0
and v.number not in (-1,@allstatopts) -- Eliminate non-option entries
and v.type = '
D')
or (v.number & @allcatopts <> 0
and v.number not in (-1,@allcatopts) -- Eliminate non-option entries
and v.type = '
DC')
or (v.number & @alloptopts <> 0
and v.number not in (-1,@alloptopts) -- Eliminate non-option entries
and v.type = '
D2')
)
and lower(v.name) = lower(@fulloptname)

return (0)
end

select @catvalue = 0
select @catvalue = number
from master.dbo.spt_values
where lower(name) = lower(@fulloptname)
and type = '
DC'

-- if setting replication option, call sp_replicationdboption directly
if (@catvalue <> 0)
begin
select @alt_optvalue = (case lower(@optvalue)
when '
true' then 'true'
when '
on' then 'true'
else '
false'
end)

select @alt_optname = (case @catvalue
when 1 then '
publish'
when 2 then '
subscribe'
when 4 then '
merge publish'
else quotename(@fulloptname, '
''')
end)

select @exec_stmt = quotename(@dbname, '
[') + '.dbo.sp_replicationdboption'

EXEC @exec_stmt @dbname, @alt_optname, @alt_optvalue
return (0)
end


-- call Alter Database to set options

-- set option value in alter database
select @alt_optvalue = (case lower(@optvalue)
when '
true' then 'ON'
when '
on' then 'ON'
else '
OFF'
end)

-- set option name in alter database
select @fulloptname = lower(@fulloptname)
select @alt_optname = (case @fulloptname
when '
auto create statistics' then 'AUTO_CREATE_STATISTICS'
when '
auto update statistics' then 'AUTO_UPDATE_STATISTICS'
when '
autoclose' then 'AUTO_CLOSE'
when '
autoshrink' then 'AUTO_SHRINK'
when '
ansi padding' then 'ANSI_PADDING'
when '
arithabort' then 'ARITHABORT'
when '
numeric roundabort' then 'NUMERIC_ROUNDABORT'
when '
ansi null default' then 'ANSI_NULL_DEFAULT'
when '
ansi nulls' then 'ANSI_NULLS'
when '
ansi warnings' then 'ANSI_WARNINGS'
when '
concat null yields null' then 'CONCAT_NULL_YIELDS_NULL'
when '
cursor close on commit' then 'CURSOR_CLOSE_ON_COMMIT'
when '
torn page detection' then 'TORN_PAGE_DETECTION'
when '
quoted identifier' then 'QUOTED_IDENTIFIER'
when '
recursive triggers' then 'RECURSIVE_TRIGGERS'
when '
default to local cursor' then 'CURSOR_DEFAULT'
when '
offline' then (case @alt_optvalue when 'ON' then 'OFFLINE' else 'ONLINE' end)
when '
read only' then (case @alt_optvalue when 'ON' then 'READ_ONLY' else 'READ_WRITE' end)
when '
dbo use only' then (case @alt_optvalue when 'ON' then 'RESTRICTED_USER' else 'MULTI_USER' end)
when '
single user' then (case @alt_optvalue when 'ON' then 'SINGLE_USER' else 'MULTI_USER' end)
when '
select into/bulkcopy' then 'RECOVERY'
when '
trunc. log on chkpt.' then 'RECOVERY'
when '
db chaining' then 'DB_CHAINING'
else @alt_optname
end)

if @fulloptname = '
dbo use only'
begin
if @alt_optvalue = '
ON'
begin
if databaseproperty(@dbname, '
IsSingleUser') = 1
begin
raiserror(5066,-1,-1);
return (1)
end
end
else
begin
if databaseproperty(@dbname, '
IsDBOOnly') = 0
return (0)
end
end

if @fulloptname = '
single user'
begin
if @alt_optvalue = '
ON'
begin
if databaseproperty(@dbname, '
ISDBOOnly') = 1
begin
raiserror(5066,-1,-1);
return (1)
end
end
else
begin
if databaseproperty(@dbname, '
IsSingleUser') = 0
return (0)
end
end

select @alt_optvalue = (case @fulloptname
when '
default to local cursor' then (case @alt_optvalue when 'ON' then 'LOCAL' else 'GLOBAL' end)
when '
offline' then ''
when '
read only' then ''
when '
dbo use only' then ''
when '
single user' then ''
else @alt_optvalue
end)

if lower(@fulloptname) = '
select into/bulkcopy'
begin
if @alt_optvalue = '
ON'
begin
if databaseproperty(@dbname, '
IsTrunclog') = 1
select @alt_optvalue = '
RECMODEL_70BACKCOMP'
else
select @alt_optvalue = '
BULK_LOGGED'
end
else
begin
if databaseproperty(@dbname, '
IsTrunclog') = 1
select @alt_optvalue = '
SIMPLE'
else
select @alt_optvalue = '
FULL'
end
end

if lower(@fulloptname) = '
trunc. log on chkpt.'
begin
if @alt_optvalue = '
ON'
begin
if databaseproperty(@dbname, '
IsBulkCopy') = 1
select @alt_optvalue = '
RECMODEL_70BACKCOMP'
else
select @alt_optvalue = '
SIMPLE'
end
else
begin
if databaseproperty(@dbname, '
IsBulkCopy') = 1
select @alt_optvalue = '
BULK_LOGGED'
else
select @alt_optvalue = '
FULL'
end
end

-- construct the ALTER DATABASE command string
select @exec_stmt = '
ALTER DATABASE ' + quotename(@dbname) + ' SET ' + @alt_optname + ' ' + @alt_optvalue + ' WITH NO_WAIT'
EXEC (@exec_stmt)

if @@error <> 0
begin
raiserror(15627,-1,-1)
return (1)
end

return (0) -- sp_dboption
 

dbo.trace_xe_action_map Moved from dbo to sys Schema

This next issue took me quite  a while longer to figure out. 

Kudos to Dan Guzman, SQL Server MVP, (http://www.dbdelta.com) for helping me figure this one out.  Without dragging this out too much, I was getting this error when running the configuration wizard:  Invalid object name ‘dbo.trace_xe_action_map’.

image

This pointed back to system table, dbo.trace_xe_action_map.  From there I found out it, as well as trace_xe_event_map, have been moved to the sys schema and here’s some of the original discussion by Aaron Bertrand and the SQL team.  Well, in case you wondered, it did make it into the final release!

I thought creating a synonym would fix this quickly and easily.  If I had only known what I know now about synonyms!  You have to create them in the context of the database in which they will be called.  What does this mean?  You need to create the synonym for each table the SharePoint Products and Technologies Configuration Wizard will upgrade, as dbo.trace_xe_action_map is referenced within each database context during the process.

I started troubleshooting this first by using SQL Profiler, as I wanted to see what the wizard was doing.  This is what SQL Profiler trapped during the wizard execution.

declare @p3 int
set @p3=NULL
exec sp_executesql N’SELECT @RowCount=COUNT(1) FROM [dbo].[trace_xe_action_map] WITH (NOLOCK)’,N’@RowCount int output’,@RowCount=@p3 output
select @p3

The first database where I fixed the issue was on the AdminContent database. 

use [SharePoint_AdminContent_a974ce72-f4c4-43ff-a3bc-fe08e4e0a553]

go

CREATE SYNONYM [dbo].[trace_xe_action_map] FOR [sys].[trace_xe_action_map];

CREATE SYNONYM [dbo].[trace_xe_event_map] FOR [sys].[trace_xe_event_map];

go

That got me up to task 8 of 9 but then I started getting other errors that were not as well identified.  I was seeing issues such as this one:

The B2B upgrader timer job failed.

clip_image001

Reading some other discussion threads, I invoked psconfig as follows:

psconfig -cmd upgrade -inplace b2b -force -wait

But I continued to get errors.  It was only after looking at the Upgrade text file in the logs folder (C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\LOGS) that I began to see the source of the additional errors.

image

This is where I noticed the Invalid object name error on dbo.trace_xe_action_map that was occurring upon every database context switch. 

[SPManager] [ERROR] [12/22/2013 8:33:39 PM]: Upgrade [SPContentDatabase Name=WSS_Content_RXSP2007 Parent=SPDatabaseServiceInstance] failed.
[SPManager] [ERROR] [12/22/2013 8:33:39 PM]: Invalid object name 'dbo.trace_xe_action_map'.
[SPManager] [ERROR] [12/22/2013 8:33:39 PM]: at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at Microsoft.SharePoint.Utilities.SqlSession.ExecuteNonQuery(SqlCommand command)
at Microsoft.SharePoint.Upgrade.SPSqlCommandFactory.GetRowCount(String strTable)
at Microsoft.SharePoint.Upgrade.SPDatabaseWssSequence.LogTableRowCounts()
at Microsoft.SharePoint.Upgrade.SPDatabaseWssSequence.PreUpgrade()
at Microsoft.SharePoint.Upgrade.SPContentDatabaseSequence.PreUpgrade()
at Microsoft.SharePoint.Upgrade.SPManager.Upgrade(Object o, Boolean bRecurse)
When you run psconfig, you see the count of the successful/unsuccessful configuration settings.  This gives you an idea of how many of these errors you need to fix.
 

image

 

So, what I did was create a synonym in the context of each database as follows:

use [SharePoint_AdminContent_a974ce72-f4c4-43ff-a3bc-fe08e4e0a553]
go
CREATE SYNONYM [dbo].[trace_xe_action_map] FOR [sys].[trace_xe_action_map];
CREATE SYNONYM [dbo].[trace_xe_event_map] FOR [sys].[trace_xe_event_map];
go
use [WSS_Content_RXSP2007_MySite]
go
CREATE SYNONYM [dbo].[trace_xe_action_map] FOR [sys].[trace_xe_action_map];
CREATE SYNONYM [dbo].[trace_xe_event_map] FOR [sys].[trace_xe_event_map];
go
use [SharePoint_Config_RXSP2007]
go
CREATE SYNONYM [dbo].[trace_xe_action_map] FOR [sys].[trace_xe_action_map];
CREATE SYNONYM [dbo].[trace_xe_event_map] FOR [sys].[trace_xe_event_map];
go
use [WSS_Content_RXSP2007]
go
CREATE SYNONYM [dbo].[trace_xe_action_map] FOR [sys].[trace_xe_action_map];
CREATE SYNONYM [dbo].[trace_xe_event_map] FOR [sys].[trace_xe_event_map];
go
 

After creating the synonyms in each database, psconfig ran successfully.

clip_image001[5]

 

And more importantly, the configuration wizard completed successfully!

clip_image002




Asif Rehmani’s SharePoint Videos

SharePoint-Videos

Click to access a wealth of SharePoint videos

SharePoint Rx

SharePoint Rx Home

Categories

Posts by Date

December 2019
M T W T F S S
« Jun    
 1
2345678
9101112131415
16171819202122
23242526272829
3031  
Support Wikipedia