Diagnosing rsInternalError

You know the one.  You try to render a report and you end up hitting the dreaded "An internal catalog exception has occurred" error message.  Generally speaking, this is an indication that something very bad happened within the server which is not necessarily due to any particular action you performed, but rather due to some internal check which failed or an exception which we were unable to recover from was thrown.  We purposefully do not display the entire error message to prevent information disclosure.  Instead, we write some more detailed information into one of our log files.

Tracking down the log file which contains the error can be a little tricky if you have never done it before.  I am going to assume that the error was generated as a result of interaction with the SSRS Web server, which handles all interactive (non-subscription) requests.  This is what you see when you are using the Report Viewer control in server mode, Report Manager, or talking to the ReportServer virtual directory directly via either SOAP or URL Access. 

The log files for the web server are stored in %Program Files%\Microsoft SQL Server\<Instance>\Reporting Services\Log Files.  First thing you will want to do is head over there and look for the most recent file that look has a name like "ReportServer__<TimeStamp>".  There will be a lot of files which almost look like this (such as ReportServerService__Timestamp) but we aren't interested in those just yet.  So crack open the log file which corresponds in time to when the internal catalog exception was thrown, and do a search for the string "InternalCatalogException".  Once you have found the exception, you will see a couple of things:

  1. A call stack which shows where the exception occurred.
  2. Any previous exception which was handled and wrapped in our InternalCatalogException.

Here is an example:

w3wp!library!5!12/01/2006-15:36:47:: e ERROR: Throwing Microsoft.ReportingServices.Diagnostics.Utilities.InternalCatalogException: An internal error occurred on the report server. See the error log for more details., ;
Info: Microsoft.ReportingServices.Diagnostics.Utilities.InternalCatalogException: An internal error occurred on the report server. See the error log for more details. ---> System.Data.SqlClient.SqlException: Could not allocate space for object 'dbo.ChunkData'.'IX_ChunkData' in database 'ReportServerTempDB' because the 'PRIMARY' filegroup is full. Create disk space by deleting unneeded files, dropping objects in the filegroup, adding additional files to the filegroup, or setting autogrowth on for existing files in the filegroup.
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.ReportingServices.Library.CancelableSqlCommand.ExecuteNonQuery()
at Microsoft.ReportingServices.Library.ChunkStorage.CopyImages(Guid fromSnapshotID, Boolean fromIsPermanent, Guid toSnapshotID, Boolean toIsPermanent)
at Microsoft.ReportingServices.Library.ReportSnapshot.CopyImageChunksTo(ReportSnapshotBase target)
at Microsoft.ReportingServices.Library.RSService.RenderAsLive(CatalogItemContext reportContext, ItemProperties properties, ParameterInfoCollection effectiveParameters, Guid reportId, ClientRequest session, String description, ReportSnapshot intermediateSnapshot, DataSourceInfoCollection thisReportDataSources, Boolean cachingRequested, Boolean isLinkedReport, Warning[]& warnings, ReportSnapshot& resultSnapshotData, DateTime& executionDateTime, RuntimeDataSourceInfoCollection& alldataSources, UserProfileState& usedUserProfile)
at Microsoft.ReportingServices.Library.RSService.RenderAsLiveOrSnapshot(CatalogItemContext reportContext, ClientRequest session, Warning[]& warnings, ParameterInfoCollection& effectiveParameters)
at Microsoft.ReportingServices.Library.RSService.RenderFirst(CatalogItemContext reportContext, ClientRequest session, Warning[]& warnings, ParameterInfoCollection& effectiveParameters, String[]& secondaryStreamNames)
--- End of inner exception stack trace ---

Sometimes, this will be enough information for you to diagnose the situation and resolve it on your own.  For example, maybe the database where the RS catalog is being stored has run out of disk space.  Other times, things won't be particularly clear.  In those cases I recommend either contacting Microsoft Support, or posting your question on the SSRS Forum at MSDN.