Did you know that .NET components are used in replication? I sure didn’t until I tried to add a new publication and perform a snapshot.
I had not troubles creating the publication or adding the subscribers but when I attempted to run the snapshot I got the following error:
Exception Type: Microsoft.SqlServer.Replication.ReplicationAgentSqlException
Exception Message: Failed to initialize the Common Language Runtime (CLR) v2.0.50727 with HRESULT 0x800
Not a whole lot to go on there. There happens to be a DMV which will provide you with the status of CLR in SQL.
select * from sys.dm_clr_properties
I was expecting to see
state CLR is initialized
but instead I saw
state CLR initialization permanently failed
Time to open a support case with Microsoft.
After running through some troubleshooting steps with the MS engineers, including verifying the .NET install was good (see http://blogs.msdn.com/b/astebner/archive/2008/10/13/8999004.aspx) the decision was ultimately made to restart SQL to see if this resolved the problem.
After the restart everything was running smoothly and there were no issues performing snapshots. Sadly the restart eliminated any chance of getting a root cause for the problem. I’ve got a filtered dump setup to try and capture something in the event that it happens again. I kind of hope that it does just so we can find out exactly what the cause was.
Here are a couple of interesting notes that I found from this:
- .NET Framework 3.5 is just a wrapper for .NET 2.0
- You can log all .NET events to disk (see http://blogs.msdn.com/b/junfeng/archive/2004/02/14/72912.aspx)
- In the event SQL encounters a .NET/CLR error then it will fail and set a flag internally. That flag will not be reset unless the SQL Instance is restarted and so any CLR functionality will fail
- You want to have your SQL Instance configured to write dumps to a drive with more free disk space than you have memory on your server. By default dumps will be written to the log directory. You can change this by opening “Error and Usage Settings” from the start menu, going to options and changing the error reporting location. Note, you have to restart SQL for this to take effect as this information is read in at startup