sql >> Databáze >  >> RDS >> Oracle

SSIS se nedaří uložit balíčky a restartuje Visual Studio

Doporučuji číst data po částech:

Místo načítání celé tabulky zkuste data rozdělit na bloky a importovat je na SQL Server. Od chvíle, kdy jsem odpověděl na podobnou odpověď související s SQLite, pokusím se ji reprodukovat, aby odpovídala syntaxi Oracle:

Příručka krok za krokem

V tomto příkladu obsahuje každý blok 10 000 řádků.

  1. Deklarujte 2 proměnné typu Int32 (@[User::RowCount] a @[User::IncrementValue] )
  2. Přidejte Execute SQL Task které provádějí select Count(*) a uložte sadu výsledků do proměnné @[User::RowCount]

  1. Přidejte smyčku For s následujícími preferencemi:

  1. Do kontejneru cyklu for přidejte Data flow task
  2. Do úlohy toku dat přidejte ODBC Source a OLEDB Destination
  3. Ve Zdroji ODBC vyberte SQL Command a napište SELECT * FROM TABLE dotaz *(pouze pro načtení metadat`
  4. Namapujte sloupce mezi zdrojem a cílem
  5. Vraťte se do Control flow a klikněte na Data flow task a stiskněte F4 pro zobrazení okna vlastností
  6. V okně vlastností přejděte na výraz a přiřaďte následující výraz [ODBC Source].[SQLCommand] vlastnost:(další informace naleznete v části Jak předat proměnné SSIS ve výrazu SQLCommand ODBC?)

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

Kde MYTABLE je název zdrojové tabulky a IDCOLUMN je váš primární klíč nebo sloupec identity.

Snímek obrazovky Control Flow

Odkazy

  • Zdroj ODBC – SQL Server
  • Jak předat proměnné SSIS ve výrazu SQLCommand ODBC?
  • JAK POUŽÍVAT ZDROJ SSIS ODBC A ROZDÍL MEZI OLE DB A ODBC?
  • Jak omezím počet řádků vrácených dotazem Oracle po objednání?
  • Získání prvních n až n řádků z db2

Aktualizace 1 – Další možná řešení

Při hledání podobných problémů jsem našel několik dalších řešení, která můžete vyzkoušet:

(1) Změňte maximální paměť SQL Server

  • SSIS:Správce vyrovnávací paměti selhal při volání přidělení paměti

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

(2) Povolte pojmenované kanály

  • [Opraveno] Správce vyrovnávací paměti zjistil, že v systému je málo virtuální paměti, ale nebyl schopen vyměnit žádné vyrovnávací paměti

    1. Přejděte na Ovládací panely –> Nástroje pro správu -> Správa počítače
    2. On Protocol for SQL Instance -> Set Named Pipes =Enabled
    3. Restartujte službu instance SQL
    4. Poté se pokuste data importovat a data budou načtena po částech, místo aby byla načtena všechna najednou. Doufám, že vám to bude fungovat a ušetříte čas.

(3) Pokud používáte SQL Server 2008, nainstalujte opravy hotfix

  • Běhový proces SSIS 2008 se zhroutí, když spustíte balíček SSIS 2008 při nedostatku paměti

Aktualizace 2 – Pochopení chyby

V následujícím odkazu MSDN byla příčina chyby popsána následovně:

Virtuální paměť je nadmnožinou fyzické paměti. Procesy ve Windows obvykle neurčují, které mají být použity, protože by to (velmi) bránilo tomu, jak Windows mohou provádět multitasking. SSIS přiděluje virtuální paměť. Pokud to systém Windows umí, jsou všechna tato přidělení uchovávána ve fyzické paměti, kde je přístup rychlejší. Pokud však SSIS požaduje více paměti, než je fyzicky k dispozici, pak se tato virtuální paměť rozlije na disk, takže balíček bude fungovat řádově pomaleji. A v nejhorších případech, pokud v systému není dostatek virtuální paměti, balíček selže.



  1. orákulum | odstranit duplicitní záznamy

  2. jak používat datový typ Blob v Postgresu

  3. Jak vytvořit databázi zásob v aplikaci Microsoft Access

  4. MySQL:Nelze vytvořit tabulku (errno:150)