SQL 2000 Cluster en startup parameters
Wow, na dit weekend heb ik weer een hoop geleerd van SQL server….
Wat nou als je de SQL service start en hij klapt er direct weer uit. Zeker wanneer je een Move group doet op een SQL Cluster en hij faalt direct, ook wanneer je de SQL resource weer terugplaatst naar de originele node en wederom niet opstart. De Event Viewer geeft wazige meldingen zoals:
- Event ID 1000: Faulting application sqlservr.exe, version 2000.80.2039.0, faulting module msvcr71.dll, version 7.10.3052.4, fault address 0x00011da1.
- Event ID 17052: [sqsrvres] StartResourceService: Failed to start MSSQLSERVER service. CurrentState: 1
- Event ID 17052: [sqsrvres] OnlineThread: ResUtilsStartResourceService failed (status 435)
- Event ID 17052: [sqsrvres] OnlineThread: Error 435 bringing resource online.
Met deze events kun je weinig, ook googlen helpt weinig… Goed, dan wordt het tijd om eens goed te kijken naar wat er misgaat. We starten een cmd sessie en starten het SQLservr.exe process, we krijgen de volgende melding:
2007-12-17 10:15:24.24 server Microsoft SQL Server 2000 – 8.00.2039 (Intel X86)
May 3 2005 23:18:38
Copyright (c) 1988-2003 Microsoft Corporation
Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 1)
2007-12-17 10:15:24.24 server Copyright (C) 1988-2002 Microsoft Corporation.
2007-12-17 10:15:24.24 server All rights reserved.
2007-12-17 10:15:24.24 server Server Process ID is 352.
2007-12-17 10:15:24.24 server Logging SQL Server messages in file ‘C:Program FilesMicrosoft SQL ServerMSSQLlogERRORLOG’.
2007-12-17 10:15:24.25 server SQL Server is starting at priority class ‘normal'(4 CPUs detected).
2007-12-17 10:15:24.36 server Using ‘dbghelp.dll’ version ‘4.0.5’
*Stack Dump being sent to C:Program FilesMicrosoft SQL ServerMSSQLlogSQLDump0001.txt
2007-12-17 10:15:24.39 server SqlDumpExceptionHandler: Process 132 generated fatal exception c0000094 EXCEPTION_INT_DIVIDE_BY_ZERO. SQL Server is terminating this process.
* ******************************************************************************
*
*
* BEGIN STACK DUMP:
* 12/17/07 10:15:24 spid 0
*
* Exception Address = 006CE3EB (SQLExit + 001668F4 Line 0+00000000)
* Exception Code = c0000094 EXCEPTION_INT_DIVIDE_BY_ZERO
*
* MODULE BASE END SIZE
* sqlservr 00400000 00CBAFFF 008bb000
* ntdll 7C800000 7C8BFFFF 000c0000
* kernel32 77E40000 77F41FFF 00102000
* Invalid Address 77F50000 77FEBFFF 0009c000
* Invalid Address 77C50000 77CEEFFF 0009f000
* Invalid Address 7C3A0000 7C41AFFF 0007b000
* MSVCR71 7C340000 7C395FFF 00056000
* opends60 41060000 41065FFF 00006000
* SHELL32 7C8D0000 7D0D2FFF 00803000
* GDI32 77C00000 77C47FFF 00048000
* USER32 77380000 77411FFF 00092000
* msvcrt 77BA0000 77BF9FFF 0005a000
* SHLWAPI 77DA0000 77DF1FFF 00052000
* sqlsort 42AE0000 42B6FFFF 00090000
* ums 41070000 4107DFFF 0000e000
* comctl32 77420000 77522FFF 00103000
* sqlevn70 41080000 4108AFFF 0000b000
* dbghelp 02800000 028FFFFF 00100000
*
* Edi: 00000000:
* Esi: 00C45E80: 00032760 01110000 01DF0000 00000012 0003FFFF 000278DD
* Eax: 00000000:
* Ebx: 00000001:
* Ecx: 00000000:
* Edx: 00000000:
* Eip: 006CE3EB: 25E9F1F7 85FFD45B 61850FFF 6AFFD45B E8CE8B00 FFD45A1C
* Ebp: 000AF800: 000AF81C 0041401F 00000001 00000000 00000000 00000000
* SegCs: 0000001B:
* EFlags: 00010246: 00730065 00430000 004D004F 00550050 00450054 004E0052
* Esp: 000AF7D8: 00000000 00C4E0E8 00000001 0000001C 000AF804 00000000
* SegSs: 00000023:
* ******************************************************************************
*
* —————————————————————
—————
–
* Short Stack Dump
* 006CE3EB Module(sqlservr+002CE3EB) (SQLExit+001668F4)
* 0041401F Module(sqlservr+0001401F)
* 00414078 Module(sqlservr+00014078)
* 0041566B Module(sqlservr+0001566B)
* 005A09C9 Module(sqlservr+001A09C9) (SQLExit+00038ED2)
* 005655F8 Module(sqlservr+001655F8)
* 005B26DA Module(sqlservr+001B26DA) (SQLExit+0004ABE3)
* 005B37AB Module(sqlservr+001B37AB) (SQLExit+0004BCB4)
* 77E523CD Module(kernel32+000123CD) (IsProcessorFeaturePresent+0000009E)
* ——————————————————————————-2007-12-17 10:15:29.97 server Stack Signature for the dump is 0x2514D343
2007-12-17 10:15:29.99 server SQL Server is aborting. Fatal exception c0000094 caught.
Goed, nou niet echt. Op een SQL cluster met zo’n 150GB aan database breekt het zweet mij dan toch wel enigszins uit
Ik begin dan met troubleshooten:
- Databases en logs verplaatsen (buiten systeem databases; zoals master, tempdb, pubs, model etc.), controleren en helaas…
- Vervangen van systeem databases, controleren en helaas…
- Verplaatsen van de master.mdf en mastlog.ldf, controleren en hé een andere melding:
2007-12-17 10:53:49.32 server Microsoft SQL Server 2000 – 8.00.2039 (Intel X86)
May 3 2005 23:18:38
Copyright (c) 1988-2003 Microsoft Corporation
Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 1)2007-12-17 10:53:49.32 server Copyright (C) 1988-2002 Microsoft Corporation.
2007-12-17 10:53:49.32 server All rights reserved.
2007-12-17 10:53:49.32 server Server Process ID is 2000.
2007-12-17 10:53:49.33 server Logging SQL Server messages in file ‘C:Program FilesMicrosoft SQL ServerMSSQLlogERRORLOG’.
2007-12-17 10:53:49.33 server initconfig: Error 2(The system cannot find the file specified.) opening ‘C:Program FilesMicrosoft SQL ServerMSSQLdatamaster.mdf’ for configuration information.
Oké, dit is positief, ja positief, want dit zou dan wel eens in de opstartparameters van SQL kunnen zitten (Startup Parameters). En inderdaad wanneer ik het register open en de key ‘HKEY_LOCAL_MACHINESOFTWAREMicrosoftMSSQLServerMSSQLServerParameters’ bekijk zie ik inderdaad iets vreemds: de SQLArg3 string met een waarde ‘-P’. Volgende stap is een export maken van de register key en de waarde SQLArg3 verwijderen. YES, binnen de cmd start de SQL server weer op! Maar goed, nu het Cluster nog, via de Cluster Manager de SQLService resource, Bring online en helaas… Hij faalt direct! En de register waarde SQLArg3 is weer terug… Ok, maar hoe verwijder je nou die opstartparameters dan van een Cluster resource? Ik vermoedde op dat moment dat dit door de Quorum (het hart van Windows Cluster) geregeld zou worden. Nou eerlijk gezegd heb ik daar een beetje hulp bij nodig…. Na een paar uur had ik een goede SQL specialist bij Microsoft te pakken. Hij vertelde me het volgende:
- Ga naar het register en de volgende key: ‘HKEY_LOCAL_MACHINEClusterResources’
- Zoek daar de GUID met als inhoud Name – SQL Server
- Onthou het nummer met de waarde: ‘SOFTWAREMicrosoftMSSQLSERVERMSSQLSERVER’
- Ga naar je Quorum schijf, MSCSGUID en verwijder daar (na eerst een back-up gemaakt te hebben) het bestand met het nummer.cpt
- Verwijder de SQLArg3 waarde
- Breng SQL Server, via het Cluster, weer online
WERKEN DUS!
Cool … Maar wel een héél eng en bizar probleem. Het wordt nog een stapje erger… In onze ontwikkel omgeving heb ik de SQL start-up parameters bekeken, en hé daar staat hij ook: ‘-p’. Maar na een herstart van de SQL Service start de SQL service gewoon, zonder problemen! Ok, vaag?! Dan maak ik er maar voor de grap ‘-P’ van en ja hoor: hij gaat net zo hard onderuit als het op Cluster.
Nou zou ik graag willen weten wat de ‘-p’ switch doet, iemand? De SQL specialist van Microsoft had ook geen idee…
Ok, ik heb nagevraagd wat de -P switch doet en dat is het volgende:
From what I understand and have found the -P startup parameter is used to simulate a specific number of processors for SQL Server regardless of the actual number that exist on the computer. For example if the computer only has 1 processor and -P4 is in the startup parameters then SQL Server acts as if there are 4 processors on the box instead of only 1.
Daniel
http://www.pepperbyte.com
Is interested in everything connected to technology. Has a passion for cloud, virtualization and software development. Always finds appropriate IT solutions for customers that match their needs strategically, technically and financially.
Core qualities
Quick thinker, result driven, ambitious, customer-friendly, enthusiastic
Hobbies
Running, listening to music, good food and doing fun things with family
Job description
CTO PepperByte, LoadGen, and BlueParq