sql >> Database teknologi >  >> RDS >> Oracle

SSIS kan ikke gemme pakker og genstarter Visual Studio

Jeg foreslår, at du læser data i bidder:

I stedet for at indlæse hele tabellen, prøv at opdele dataene i bidder og importere dem til SQL Server. Fra et stykke tid svarede jeg på et lignende svar relateret til SQLite, jeg vil prøve at gengive det, så det passer til Oracle-syntaksen:

Trin for trin guide

I dette eksempel indeholder hver chunk 10000 rækker.

  1. Deklarer 2 variabler af typen Int32 (@[User::RowCount] og @[User::IncrementValue] )
  2. Tilføj en Execute SQL Task der udfører en select Count(*) kommandoen og gem resultatsættet i variablen @[User::RowCount]

  1. Tilføj en For Loop med følgende præferencer:

  1. Tilføj en Data flow task i for-loop-beholderen
  2. Tilføj en ODBC Source i dataflowopgaven og OLEDB Destination
  3. Vælg SQL Command i ODBC-kilden og skriv en SELECT * FROM TABLE forespørgsel *(kun for at hente metadata`
  4. Kortlæg kolonnerne mellem kilde og destination
  5. Gå tilbage til Control flow og klik på Data flow task og tryk på F4 for at se egenskabsvinduet
  6. I egenskabsvinduet skal du gå til udtryk og tildele følgende udtryk til [ODBC Source].[SQLCommand] egenskab:(for mere information henvises til Sådan overføres SSIS-variabler i ODBC SQLCommand-udtryk?)

    "SELECT * FROM MYTABLE ORDER BY ID_COLUMN
    OFFSET " + (DT_WSTR,50)@[User::IncrementValue] + "FETCH NEXT 10000 ROWS ONLY;"
    

Hvor MYTABLE er kildetabelnavnet og IDCOLUMN er din primære nøgle eller identitetskolonne.

Skærmbillede af kontrolflow

Referencer

  • ODBC-kilde - SQL Server
  • Hvordan sender man SSIS-variabler i ODBC SQLCommand-udtryk?
  • HVORDAN BRUGES SSIS ODBC-KILDE OG FORSKEL MELLEM OLE DB OG ODBC?
  • Hvordan begrænser jeg antallet af rækker, der returneres af en Oracle-forespørgsel efter bestilling?
  • Få top n til n rækker fra db2

Opdatering 1 - Andre mulige løsninger

Mens jeg søgte efter lignende problemer, fandt jeg nogle yderligere løsninger, som du kan prøve:

(1) Skift SQL Server max hukommelse

  • SSIS:Buffer Manager mislykkedes i et hukommelsestildelingsopkald

    sp_configure 'show advanced options', 1;
    GO
    RECONFIGURE;
    GO
    sp_configure 'max server memory', 4096;
    GO
    RECONFIGURE;
    GO
    

(2) Aktiver navngivne rør

  • [Fixed] Buffermanageren registrerede, at systemet havde lav virtuel hukommelse, men var ikke i stand til at udskifte nogen buffere

    1. Gå til Kontrolpanel –> Administrative værktøjer -> Computerstyring
    2. On Protocol for SQL Instance -> Set Named Pipes =Enabled
    3. Genstart SQL-instanstjenesten
    4. Prøv derefter at importere dataene, og det vil hente dataene i bidder nu i stedet for at hente dem på én gang. Håber det vil virke for jer og spare tid.

(3) Installer hotfixes, hvis du bruger SQL Server 2008

  • SSIS 2008 runtime-processen går ned, når du kører SSIS 2008-pakken under en tilstand med lav hukommelse

Opdatering 2 - Forstå fejlen

I det følgende MSDN-link blev fejlårsagen beskrevet som følgende:

Virtuel hukommelse er et supersæt af fysisk hukommelse. Processer i Windows specificerer typisk ikke, hvilke de skal bruge, da det (i høj grad) ville hæmme, hvordan Windows kan multitaske. SSIS tildeler virtuel hukommelse. Hvis Windows er i stand til det, opbevares alle disse tildelinger i fysisk hukommelse, hvor adgangen er hurtigere. Men hvis SSIS anmoder om mere hukommelse, end der er fysisk tilgængeligt, så spildes den virtuelle hukommelse til disken, hvilket får pakken til at arbejde i størrelsesordener langsommere. Og i værste tilfælde, hvis der ikke er nok virtuel hukommelse i systemet, så vil pakken fejle.



  1. Mysql-forespørgsel til dynamisk at konvertere rækker til kolonner på basis af to kolonner

  2. Kun ét udtryk kan angives i valglisten, når underforespørgslen ikke er introduceret med EXISTS

  3. Force Oracle Drop Global Temp Table

  4. ændre tabel omdøb kolonne i Oracle database