Korriger: Du får feilmelding 605 og feil 824 når du kjører en spørring som setter inn data i en midlertidig tabell i SQL Server


Feil: #50003826 (SQL-hurtigreparasjon)
Microsoft distribuerer hurtigreparasjoner for Microsoft SQL Server 2008 som én nedlastbar fil. Fordi reparasjonene er kumulative, inneholder hver nye utgivelse alle hurtigreparasjonene og sikkerhetsreparasjonene som var inkludert i den forrige SQL Server 2008 Løs utgivelsen.

Symptomer


I SQL Server 2008, kan du kjøre en spørring som setter inn data i en midlertidig tabell. Insert-setningen inneholder en delspørring som refererer til den samme midlertidige tabellen. Når du kjører spørringen, kan du få en feilmelding som ligner på følgende:
Msg 605, nivå 21 tilstand 3, linje 1

Forsøk på å hente logisk side (1:225) i 2-databasen mislyktes. Det tilhører tildeling enhet 281474980315136 ikke å 504403158513025024.

Hvis du kjører spørringen på nytt, får du en feilmelding som ligner på følgende:

Msg 824, nivå 24, tilstand 2, linje 1
SQL-serveren oppdaget en logisk konsekvens-baserte i/u-feil: ugyldig kontrollsum (forventet: 0x50758180; faktisk: 0x15658bfc). Det oppstod en lese av siden (1:336) i database-ID 2 på offset 0x000000002a0000 i filen ' C:\Program Files\Microsoft SQL Server\MSSQL10. SQL2008\MSSQL\DATA\tempdb.mdf'. Flere meldinger i SQL Server-feil logg- eller hendelsesloggen kan gi en mer detaljert. Dette er en alvorlig feil som truer databaseintegriteten og må rettes opp umiddelbart. Fullføre en full database Konsistenskontroll (DBCC CHECKDB). Denne feilen kan skyldes mange faktorer; Hvis du vil ha mer informasjon, se SQL Server Books Online.
I noen tilfeller kan du også få en feilmelding som ligner på følgende:
Msg 601, nivå 12, tilstand 3, procedure navn, linjenummer
Kan ikke fortsette skanning med NOLOCK på grunn av flytting av data.

En mulig spørringen konstruksjon som kan produsere disse feilene er som følger:
insert #table1select s.col1, s.col2
from #table2 s inner loop join #table1 t
on s.col3 = t.col3

Oppløsning


Hurtigreparasjonen for dette problemet ble først utgitt i Kumulativ oppdatering 3. Hvis du vil ha mer informasjon om hvordan du får tak i denne kumulative oppdateringen for SQL Server 2008, kan du klikke følgende artikkelnummer for å vise artikkelen i Microsoft Knowledge Base:
960484 kumulativ oppdateringspakke 3 for SQL Server 2008
Obs! Fordi versjoner er kumulative, inneholder hver nye fix-utgivelse alle hurtigreparasjonene og sikkerhetsreparasjonene som var inkludert i den forrige SQL Server 2008 Løs utgivelsen. Vi anbefaler at du vurderer å bruke den nyeste versjonen av hurtigreparasjonen som inneholder denne hurtigreparasjonen. Hvis du vil ha mer informasjon, kan du klikke følgende artikkelnummer for å vise artikkelen i Microsoft Knowledge Base:
956909 for SQL Server 2008 bygger som ble gitt ut etter at SQL Server 2008 ble utgitt
Når du har installert denne kumulative oppdateringen, må du aktivere sporingsflagg 4135. Hvis du vil gjøre dette, kan du legge til -T4135 oppstartsparameteren. Eller du kan bruke dbcc traceon(4135) -setning for en bestemt økt.

Løsningen


Hvis du vil omgå dette problemet, kan du legge til en kolonne som har både en gruppert primærnøkkel og identity-egenskapen til den midlertidige tabellen. Hvis du for eksempel Kjør følgende setning for å endre den midlertidige tabellen:
ALTER TABLE #TempTableADD id integer IDENTITY(1,1) CONSTRAINT id PRIMARY KEY CLUSTERED

Status


Microsoft har bekreftet at dette er et problem i Microsoft-produktene som er oppført i delen "Gjelder for".

Hvis du vil ha mer informasjon


Selv om du får feilmeldingen 824 eller 605, ikke databasen blir skadet. Disse feilmeldingene refererer også sider fra tempdb-databasen.

Hvis du vil ha mer informasjon om hvilke filer endres, og informasjon om eventuelle forutsetninger for å installere kumulativ oppdateringspakke som inneholder hurtigreparasjonen som er beskrevet i denne Microsoft Knowledge Base-artikkel, kan du klikke følgende artikkelnummer for å vise artikkelen i Microsoft Knowledge Base:
960484 kumulativ oppdateringspakke 3 for SQL Server 2008

SQL Server 2008 R2 BPA-informasjon

SQL Server 2008 R2 Best Practice Analyzer (SQL Server 2008 R2 BPA) gir en regel for å oppdage situasjoner der du ikke har den kumulative oppdateringen eller sporingsflagg aktivert for å løse dette problemet. SQL Server 2008 R2 BPA støtter både SQL Server 2008 og SQL Server 2008 R2.

Hvis du kjører verktøyet BPA og få en "Database Engine - tempdb feil løse eller manglende sporingsflagg" advarsel, må du kontrollere hvilken versjon av SQL Server og spore flaggene som er konfigurert til å aktivere denne hurtigreparasjonen.

Referanser

Regel-programvareRegel-tittelRegel-ID
SQL Server 2008 R2 BPA regelTempDB feil løse eller manglende sporingsflaggRID3808

Obs! Du kan aktivere sporingsflagg 4135 eller sporingsflagg 4199 å aktivere denne hurtigreparasjonen. Sporingsflagg 4135 ble innført i kumulativ oppdateringspakke 3 for SQL Server 2008. Sporingsflagg 4135 er også tilgjengelig i SQL Server 2008 Service Pack 1, SQL Server 2008 Service Pack 2 og SQL Server 2008 R2. Sporingsflagg 4199 ble innført i kumulativ oppdateringspakke 7 for SQL Server 2008, kumulativ oppdateringspakke 7 for SQL Server 2008 Service Pack 1 og kumulativ oppdateringspakke 1 for SQL Server 2008 R2. Hvis du vil ha mer informasjon om sporingsflagg 4199, kan du klikke følgende artikkelnummer for å vise artikkelen i Microsoft Knowledge Base:
 974006 sporingsflagg 4199 er lagt til kontroll har gjort flere endringer i spørringen-optimalisering under flere spor flagg
Fordi hurtigreparasjonen for dette problemet omfatter en kombinasjon av en bestemt hurtigreparasjon build og et sporingsflagg for å aktivere feilrettingen, har vi inkludert tabellen nedenfor for å vise de forskjellige scenariene og den anbefalte handlingen du vil utføre for hvert scenario.



Hvis du vil ha mer informasjon om de nyeste versjoner av SQL Server, kan du klikke følgende artikkelnummer for å vise artikkelen i Microsoft Knowledge Base:
957826 hvor du finner informasjon om siste SQL-serveren bygger

Referanser


Hvis du vil ha mer informasjon om listen over versjoner som er tilgjengelige etter utgivelsen av SQL Server 2008, kan du klikke følgende artikkelnummer for å vise artikkelen i Microsoft Knowledge Base:

956909 for SQL Server 2008 bygger som ble gitt ut etter at SQL Server 2008 ble utgitt

For mer informasjon om trinnvis Vedlikehold modellen for SQL Server, kan du klikke følgende artikkelnummer for å vise artikkelen i Microsoft Knowledge Base:

935897 en trinnvis Vedlikehold modell er tilgjengelig fra SQL Server-teamet å levere hurtigreparasjoner for rapporterte problemer

Hvis du vil ha mer informasjon om navngivingspraksis for SQL Server-oppdateringer, kan du klikke følgende artikkelnummer for å vise artikkelen i Microsoft Knowledge Base:

822499 Ny navngivingspraksis for oppdateringspakker for Microsoft SQL Server-programvare
Hvis du vil ha mer informasjon om terminologi for programvareoppdatering, kan du klikke følgende artikkelnummer for å vise artikkelen i Microsoft Knowledge Base:
824684 beskrivelse av standardterminologien som brukes til å beskrive oppdateringer av Microsoft-programvare