LØSNING: Du mottar feilmeldinger eller data er skadet etter at du kjører en SSIS-pakke som inneholder en dataflytoppgave i en situasjon med lite minne i SQL Server 2005 eller i SQL Server 2008

Microsoft distribuerer Microsoft SQL Server 2008-rettelser som én nedlastbar fil. Fordi rettelsene er kumulative, inneholder hver ny utgivelse alle hurtigreparasjoner og alle sikkerhetsrettelser som fulgte med den forrige utgivelsen av SQL Server 2008-feilrettinger.

Symptomer

Tenk deg følgende:

  • Du kjører en SSIS-pakke (SQL Server Integration Services i SQL Server 2005 eller SQL Server 2008.

  • SSIS-pakken inneholder en dataflytoppgave.

  • Du kjører SSIS-pakken på en datamaskin som har lite tilgjengelig minne. Lite minne kan oppstå midlertidig eller periodisk.

  • Når du kjører SSIS-pakken, skrives databuffere til disken på grunn av tilstanden med lite minne.

I dette scenarioet kan du oppleve ett eller flere av følgende symptomer:

Symptom 1

Data er skadet før dataene når målet for dataflyten. Du oppdager at dataene i dataflytmålet uventet blir følgende verdier.

  • "" : NULL, tomme eller tomme strengverdier
  • 0: nullverdi eller nullverdi som har høyere presisjon og skala.
  • 0-0-0 0:0:0 : Stiplet nulldatoverdi

Obs! Du mottar ikke en feilmelding når du opplever dette symptomet.

Symptom 2

Du får en av følgende feilmeldinger for datatypekonvertering:

Feilmelding 1

Obs!

DTS_E_OLEDBERROR. Det har oppstått en OLE DB-feil. Feilkode: 0x80004005.

En OLE DB-post er tilgjengelig. Kilde: "Microsoft SQL Native Client" Hresult: 0x80004005 Beskrivelse: «Ugyldig tegnverdi for rollebesetningsspesifikasjon».

Feilmelding 2

Obs!

DTS_E_COLUMNSTATUSERROR. Det oppstod en feil med inndatakolonnen «ColumnName» (IDNUMBER) på inndataene «OLE DB Destination Input» (IDNumber). Kolonnestatusen som ble returnert, var: "Konverteringen mislyktes fordi dataverdien var overflytende for den angitte typen.".

Symptom 3

Du får følgende feilmelding om brudd på begrensning:

Obs!

DTS_E_OLEDBERROR. Det har oppstått en OLE DB-feil. Feilkode: 0x80004005.

En OLE DB-post er tilgjengelig. Kilde: "Microsoft SQL Native Client" Hresult: 0x80004005 Beskrivelse: "Setningen har blitt avsluttet.".

En OLE DB-post er tilgjengelig. Kilde: "Microsoft SQL Native Client" Hresult: 0x80004005 Beskrivelse: «Brudd på PRIMARY KEY-begrensningen 'PrimaryKeyName'. Kan ikke sette inn duplikatnøkkel i objektet 'Tabellnavn'.».

Hvis du kjører den samme SSIS-pakken på nytt når minne er tilgjengelig, oppstår ikke dette problemet.

Årsak

Når et varsel om lite minneressurser sendes til dataflytmotoren, skriver dataflytmotoren databuffere til disken midlertidig. Dette problemet oppstår fordi dataverdiene er satt til NULL eller null på feil måte når dataflytmotoren skriver databuffere til disken. Når dataflytmotoren leser data fra databuffere og deretter skriver data til dataflytmålet, vil derfor dataflytmålet inneholde skadede dataverdier. De skadede dataverdiene kan også føre til feil ved konvertering av datatype eller brudd på begrensninger.

Oppløsning

Informasjon om kumulativ oppdatering

Utgivelsesversjonen av SQL Server 2008

Løsningen på dette problemet ble først utgitt i samleoppdatering 6. Hvis du vil ha mer informasjon om hvordan du får tak i denne kumulative oppdateringspakken for SQL Server 2008, klikker du følgende artikkelnummer for å vise artikkelen i Microsoft Knowledge Base:

971490 Kumulativ oppdateringspakke 6 for SQL Server 2008Note Siden byggene er kumulative, inneholder hver nye reparasjonsutgivelse alle hurtigreparasjoner og sikkerhetsrettelser som var inkludert i den forrige SQL Server 2008-utgivelsen. Vi anbefaler at du vurderer å bruke den nyeste utgivelsen som inneholder denne hurtigreparasjonen. Hvis du vil ha mer informasjon, kan du lese følgende artikkel i Microsoft Knowledge Base:

956909 SQL Server 2008-versjonene som ble utgitt etter at SQL Server 2008 ble utgitt

SQL Server 2008 Service Pack 1 (SP1)

Viktig! Du må installere denne løsningen hvis du kjører SQL Server 2008 Service Pack 1 (SP1).

 Løsningen på dette problemet ble også utgitt i kumulativ oppdatering 3 for SQL Server 2008 Service Pack 1. Hvis du vil ha mer informasjon om denne kumulative oppdateringspakken, klikker du følgende artikkelnummer for å vise artikkelen i Microsoft Knowledge Base:

971491 Kumulativ oppdateringspakke 3 for SQL Server 2008 Service Pack 1Note Siden buildene er kumulative, inneholder hver nye reparasjon alle hurtigreparasjoner og sikkerhetsrettelser som fulgte med den forrige SQL Server 2008-utgivelsen. Microsoft anbefaler at du vurderer å bruke den nyeste versjonen av løsningen som inneholder denne hurtigreparasjonen. Hvis du vil ha mer informasjon, kan du lese følgende artikkel i Microsoft Knowledge Base:

970365 SQL Server 2008-versjonene som ble utgitt etter at Service Pack 1 SQL Server 2008 ble utgitt
 Microsoft SQL Server 2008-hurtigreparasjoner opprettes for bestemte SQL Server-oppdateringspakker. Du må bruke en hurtigreparasjon for SQL Server 2008 Service Pack 1 på en installasjon av SQL Server 2008 Service Pack 1. Som standard er alle hurtigreparasjoner som leveres i en SQL Server-oppdateringspakke, inkludert i den neste SQL Server-oppdateringspakken.

SQL Server 2005 Service Pack 2 (SP2)

Viktig! Du må installere denne løsningen hvis du kjører SQL Server 2005 Service Pack 2.

Løsningen på dette problemet ble først utgitt i samleoppdatering 15 for SQL Server 2005 Service Pack 2. Hvis du vil ha mer informasjon om denne kumulative oppdateringspakken, klikker du følgende artikkelnummer for å vise artikkelen i Microsoft Knowledge Base:

972510 Kumulativ oppdateringspakke 15 for SQL Server 2005 Service Pack 2Note Siden byggene er kumulative, inneholder hver nye reparasjonsutgivelse alle hurtigreparasjoner og sikkerhetsrettelser som fulgte med den forrige SQL Server 2005-utgivelsen. Microsoft anbefaler at du vurderer å bruke den nyeste versjonen av løsningen som inneholder denne hurtigreparasjonen. Hvis du vil ha mer informasjon, kan du lese følgende artikkel i Microsoft Knowledge Base:

937137 SQL Server 2005-versjonene som ble utgitt etter at SQL Server Service Pack 2 ble utgitt
Microsoft SQL Server 2005-hurtigreparasjoner opprettes for bestemte SQL Server-oppdateringspakker. Du må bruke en SQL Server 2005 Service Pack 2-hurtigreparasjon på en installasjon av SQL Server 2005 Service Pack 2. Som standard er alle hurtigreparasjoner som leveres i en SQL Server-oppdateringspakke, inkludert i den neste SQL Server-oppdateringspakken.

SQL Server 2005 Service Pack 3 (SP3)

Viktig! Du må bruke denne løsningen hvis du kjører SQL Server 2005 Service Pack 3.

Løsningen på dette problemet ble også utgitt i kumulativ oppdatering 5 for SQL Server 2005 Service Pack 3. Hvis du vil ha mer informasjon om denne kumulative oppdateringspakken, klikker du følgende artikkelnummer for å vise artikkelen i Microsoft Knowledge Base:

972511 Kumulativ oppdateringspakke 5 for SQL Server 2005 Service Pack 3Note Siden buildene er kumulative, inneholder hver nye reparasjon alle hurtigreparasjoner og sikkerhetsrettelser som fulgte med den forrige SQL Server 2005-utgivelsen. Microsoft anbefaler at du vurderer å bruke den nyeste versjonen av løsningen som inneholder denne hurtigreparasjonen. Hvis du vil ha mer informasjon, kan du lese følgende artikkel i Microsoft Knowledge Base:

960598 SQL Server 2005-versjonene som ble utgitt etter at SQL Server 2005 Service Pack 3 ble utgitt
Microsoft SQL Server 2005-hurtigreparasjoner opprettes for bestemte SQL Server-oppdateringspakker. Du må bruke en hurtigreparasjon av SQL Server 2005 Service Pack 3 på en installasjon av SQL Server 2005 Service Pack 3. Som standard er alle hurtigreparasjoner som leveres i en SQL Server-oppdateringspakke, inkludert i den neste SQL Server-oppdateringspakken.

Midlertidig løsning

Du kan omgå dette problemet ved å løse problemet med lite minne. Minimumsmengden minne som kan utløse dette problemet, varierer fra datamaskin til datamaskin. Denne mengden er vanligvis mellom 32 megabyte (MB) og 64 MB tilgjengelig minne. Derfor anbefaler vi at du konfigurerer serveren til å tildele mer enn 64 MB tilgjengelig minne til SSIS.

Standardmengden tilgjengelig minne som signaliserer en varslingshendelse for lite minne, er omtrent 32 MB per 4 gigabyte (GB) til maksimalt 64 MB per 4 GB. Hvis du vil ha mer informasjon, kan du gå til følgende nettsted for Microsoft Developer Network (MSDN):

https://msdn.microsoft.com/library/aa366541(vs.85).aspx
        
Det er imidlertid vanskelig å forhindre dette problemet fullt ut, fordi tilgjengelig minne kan variere mye på travle produksjonsservere. I tillegg kan minnet reduseres av ulike årsaker innenfor vanlige aktiviteter. Bruk en av følgende metoder for å redusere hyppigheten av dette problemet:

Metode 1

Legg til mer fysisk minne på datamaskinen.

Metode 2

Kjør SSIS-pakken på en annen datamaskin enn datamaskinen som kjører forekomsten av SQL Server.

Metode 3

Hvis du kjører SSIS-pakken på samme datamaskin som kjører forekomsten av SQL Server, setter du konfigurasjonsalternativet for maksimalt serverminne for forekomsten til en lavere verdi for å øke tilgjengelig minne på datamaskinen.

Metode 4

Avslutt stressende programmer som bruker mye minne når du kjører SSIS-pakker som inneholder Dataflyt-oppgaver.

Metode 5

Kjør SSIS-pakker og dataflytoppgavene serielt i stedet for parallelt for å redusere det kumulative minnebruket.

Metode 6

Bruk metoden som er beskrevet i underpunktet «Slik overvåker du minneforbruket for SSIS» i delen «Mer informasjon» for å feilsøke tilstanden med lite minne og deretter optimalisere minnebruken for SSIS.

Status

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

Mer informasjon

Mer informasjon om symptomene

Symptom 1

Hvis du finner skadede dataverdier i dataflytmålet, kan de skadede dataverdiene vises som ulike representasjoner, avhengig av datatypen. Følgende datatyper vises for eksempel som forskjellige representasjoner av skadede dataverdier:

DT_STR = "" NULL-, tom- eller tomme strengverdier
DT_I4 = 0 Nullverdi for datatypen heltall
DT_UI1 = 0 Nullverdien for datatypen usignert heltall
DT_NUMERIC = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 Nullverdi som har høyere presisjon og skalering.
DT_DBTIMESTAMP = 0-0-0 0:0:0 Stiplet nulldatoverdi

I de fleste scenarier har alle kolonner og alle rader skadede dataverdier, eller en betydelig del av kolonnene og radene har skadede dataverdier. I tillegg samsvarer det totale antallet rader som når målet, vanligvis med antall forventede rader på målet, selv om dataene er skadet. Dette skyldes et bufferproblem. En hel buffer eller et sett med buffere i den kjørende dataflytoppgaven kan bli påvirket. Avhengig av bufferstørrelsen og datastørrelsen per rad, kan hver buffer inneholde hundrevis av rader.

I noen avanserte utforminger berøres ikke alle kolonnene i dataflytoppgaven. Hvis data manipuleres i dataflytoppgaven ved hjelp av transformasjoner, for eksempel uttrykk, avledet kolonnetransformasjon og oppslagstransformasjon, kan noen kolonner av dataene forbli de samme som de forventede verdiene. Dette er fordi SSIS erstatter de skadede dataene under dataflytoppgaven med de transformerte verdiene.

I andre avanserte utforminger kan noen rader gå tapt. På grunn av den fleksible beskaffenheten til dataretningen i SSIS-dataflytutforminger kan skadede data rutes til et uventet mål hvis de uventede dataverdiene oppfattes i den betingede kolonnen av utformingen. Når du bruker transformasjoner, for eksempel betingede delte transformasjoner eller oppslagstransformasjoner, kan noen rader gå tapt når transformasjonen omdirigerer skadede dataverdier. Hvis for eksempel de skadede radene ikke samsvarer med noen referansedata i oppslagstransformasjoner, blir radene forkastet.

Symptom 2

Siden nullverdier ikke er gyldige verdier i enkelte datatyper, kan konverteringsfeil for datatyper oppstå når OLE DB-leverandøren konverterer datatyper. Av og til kan det også oppstå overflyt for datatypen. En kolonne med datatypen datetime har for eksempel en "0-0-0 0:0:0"-verdi. Denne ugyldige verdien vil føre til denne typen feil fordi OLE DB-leverandøren ikke kan formatere nullene til en gyldig datoverdi for OLE DB-leverandøren for SQL Native Client.

Symptom 3

Brudd på begrensningene kan oppstå fordi dupliserte primærnøkkelverdier settes inn i dataflytmålet. For eksempel settes flere nullverdier inn i en kolonne med datatypen heltall, eller flere NULL-verdier settes inn i en kolonne med datatypen varchar. Likeledes kan en sekundærnøkkelrelasjon brytes når dupliserte nøkkelverdier settes inn i måltabellen.

Slik finner du ut om dette problemet har oppstått

Følgende indikatorer kan brukes til å finne ut om du har dette problemet:

  • Du kan overvåke bufferkøtelleren for SQL Server:SSIS Pipelineperformance-objektet for å finne ut om dataflytmotoren skriver databuffere til disken på grunn av et varsel om lite minneressurs.

  • Du kan også undersøke DTS.tmp filen i den midlertidige katalogen som er angitt i BufferTempStoragePath-egenskapen for dataflytoppgaven. Hvis du legger merke til at størrelsen på den DTS.tmp filen øker, skriver dataflytmotoren databuffere til disken.

  • Hvis du vil finne ut om en eksisterende SSIS-pakke har dette problemet, kan du legge til en multikasting-transformasjon til dataflytoppgaven i SSIS-pakken for å dirigere en kopi av dataene til et flatt filmål for enklere observasjon.

  • En annen indikator på svært lite tilgjengelig minne er at følgende melding er logget i SSIS-pakkeloggen:

    Obs!

    DTS_I_CANTRELIEVEPRESSURE Bufferadministratoren oppdaget at systemet hadde lite virtuelt minne, men at det ikke var mulig å bytte ut buffere. 8 buffere ble vurdert og 8 ble låst. Enten er det ikke nok minne tilgjengelig for rørledningen fordi det ikke er installert nok, andre prosesser bruker det eller fordi for mange buffere er låst.

Slik overvåker du minneforbruket for SSIS

Overvåk minnet for å måle toppbruk for ulike SQL Server Integration Services-kjøretidsprosesser for å beregne maksimal minnebruk

Overvåk maksimal minnebruk for de ulike SQL Server Integration Services-kjøretidsprosessene, for eksempel DTExec.exe- og DTSHost.exe-prosessene, ved hjelp av telleren for private byte for prosessobjektet i ytelsesmåleren.

Når SQL Server Integration Services-pakkene kjører, finner du maksimumsverdien for telleren for private byte for prosessobjektet i ytelsesmåleren. Tenk deg scenarioet der flere pakker kjører parallelt. I dette scenariet legger du til maksimumsverdiene for alle prosessene som kjører, for å oppnå maksimal minnebruk.

Overvåk de eksterne prosessene for å finne topper og daler

Overvåk maksimal minnebruk for andre prosesser enn SQL Server- og SSIS-tjenesten ved hjelp av private byte-telleren for prosessobjektet i ytelsesmåleren. Se etter travle brukstider som kan føre til lite minne for SQL Server Integration Services. Tenk for eksempel på toppperiodene der flere brukere bruker Eksternt skrivebord Protocol (RDP) til å koble til serveren, og tenk på tidene når sikkerhetskopieringsprogramvaren kjører.

Overvåk SQL Server-minnebruken for å finne topper og daler

Hvis meldingen «Bruker låste sider for bufferutvalg.» ikke finnes i den nylige Errorlog-filen, kan telleren for private byte for Sqlservr.exe-prosessen angi hvor mye minne som brukes av SQL Server tjenestene.

Hvis meldingen finnes i den nylige Errorlog-filen, bruker du Total Server Memory (KB)-telleren i ytelsesobjektet SQL Server: Memory Manager til å måle minnebruken i SQL Server-bufferutvalget. I tillegg kan du bruke telleren for private byte for den Sqlservr.exe prosessen for å finne minnetildelinger utenfor bufferutvalget (MemToLeave). Summen av de to verdiene, Total Server Memory (KB)-verdien og MemToLeave-verdien, er et godt estimat av det totale SQL Server-minneforbruket.

Ytelsesmåleren og Oppgavebehandling viser ikke minnet som brukes av disse bufferutvalgssidene hvis ett av følgende er oppfylt:

  • Hvis brukerrettigheten Lås sider i minnet er tilordnet oppstartskontoen for SQL Server-tjenesten.
  • Hvis AWE-minnet er aktivert.

Obs! Hvis brukerrettigheten Lås sider i minnet ikke er tilordnet til oppstartskontoen for SQL Server-tjenesten og AWE ikke er aktivert, skal telleren for private byte for den Sqlservr.exe prosessen angi minnet som brukes av SQL-tjenester for de ulike SQL Server forekomstene.

Overvåk minimumsverdien for tilgjengelig minne i Windows

Hvis du vil overvåke tilgjengelig minne i Windows, kan du bruke en av følgende metoder:

  • Den tilgjengelige MBytes-telleren i ytelsesmåleren.

  • Fysisk minne (MB) – gratisverdien på Ytelse-fanen i Oppgavebehandling.

    Obs! I noen operativsystemer er Fysisk minne (MB) – ledig merket som Fysisk minne (K) – Tilgjengelig.

Kilder

Hvis du vil ha mer informasjon om MainPipeClass.BufferTempStoragePath-egenskapen, kan du gå til følgende MSDN-webområde (Microsoft Developer Network):

https://msdn.microsoft.com/library/microsoft.sqlserver.dts.pipeline.wrapper.mainpipeclass.buffertempstoragepath.aspx
Hvis du vil ha mer informasjon om hvordan du optimaliserer serverytelsen ved hjelp av alternativer for minnekonfigurasjon, kan du gå til følgende webområde for Microsoft Developer Network (MSDN):

https://msdn.microsoft.com/library/aa178118(sql.80).aspx
Hvis du vil ha mer informasjon om ytelsesmålertellere, kan du gå til følgende Microsoft-webområde:

https://technet.microsoft.com/library/cc768048.aspx
Hvis du vil ha mer informasjon om hvordan du bruker multikastingsomfangene, kan du gå til følgende Microsoft-webområde:

https://technet.microsoft.com/library/cc758554(ws.10).aspxHvis du vil ha mer informasjon om den inkrementell vedlikeholdsmodellen for SQL Server, klikker du følgende artikkelnummer for å vise artikkelen i Microsoft Knowledge Base:

935897 En inkrementell vedlikeholdsmodell er tilgjengelig fra SQL Server-teamet som kan levere hurtigreparasjoner for rapporterte problemer

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

822499 Nytt navneskjema for Microsoft SQL Server programvareoppdateringspakker

Hvis du vil ha mer informasjon om terminologi for programvareoppdateringer, kan du klikke følgende artikkelnummer for å vise artikkelen i Microsoft Knowledge Base:

824684 Beskrivelse av standardterminologien som brukes til å beskrive Microsoft-programvareoppdateringer