While moving virtual machines from ESXi 4.1 hypervisors to ESXi 5.1 we discovered that SQL 2000 database services would not start on 5.1 hosts. This issue appeared on several versions of SQL 2000 (MSDE, Standard) on virtual machines with the 4.1 and 5.1 tools and virtual hardware 7 and 9, and on Windows 2003 and XP. There are a number of posts on this forum regarding a simmilar issue with VMware Server but nothing I could find for ESX, so I am posting the solution here. I am not sure why this issue cropped up on 5.1, as the same VMs were running on the same hardware with 4.1. I also noted that if the SQL 2000 database engine is running you can vmotion the machine from 4.1 to 5.1 without issue. But the next reboot / service restart will fail.
Symptoms
MSSQLSERVER service will not start
Application Event Log Errors
Event ID: 17055
Description: 17311 : SQL Server is aborting. Fatal exception c000001d caught.
Event ID: 17055
Description: 17310 : SqlDumpExceptionHandler: Process 3216 generated fatal exception c000001d EXCEPTION_ILLEGAL_INSTRUCTION. SQL Server is terminating this process.
Event ID: 17055
Description: 17066 : SQL Server Assertion: File: <serverma.c>, line=2833 Failed Assertion = '(numSMT & (numSMT - 1)) == 0'.
Cause
Due to code embedded in the SQL 2000 dartabase engine, the service will not start on systems with more than 4 cores or on systems with an odd number of cores.
Further Reading:
http://www.sqlservercentral.com/Forums/Topic985146-146-1.aspx
Solution
Add the following registry entries to the SQL server and start the service.
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\Parameters]
"SQLArg3"="-T3601"
"SQLArg4"="-T3603"
-Jonathan
Note: Discussion successfully moved from VMware ESXi 5 to Virtual Machine & Guest OS
Interesting - thanks for posting!
Thanks!
Just a note, this fix is also applicable to the following error:
Event ID: 17055
17066:
SQL Server Assertion: File <serverma.c>, line=2656
Failed Assertion = '(numSMT & (numSMT -1))==0'.