Oracle
 sql >> Baza danych >  >> RDS >> Oracle

SSIS nie może zapisać pakietów i ponownie uruchamia program Visual Studio

Sugeruję odczytywanie danych porcjami:

Zamiast ładować całą tabelę, spróbuj podzielić dane na porcje i zaimportować je do SQL Server. Od jakiegoś czasu odpowiadałem na podobną odpowiedź związaną z SQLite, postaram się ją odtworzyć, aby pasowała do składni Oracle:

Przewodnik krok po kroku

W tym przykładzie każdy fragment zawiera 10000 wierszy.

  1. Zadeklaruj 2 zmienne typu Int32 (@[User::RowCount] i @[User::IncrementValue] )
  2. Dodaj Execute SQL Task które wykonują select Count(*) i zapisz zestaw wyników w zmiennej @[User::RowCount]

  1. Dodaj pętlę For z następującymi preferencjami:

  1. Wewnątrz kontenera pętli for dodaj Data flow task
  2. Wewnątrz zadania przepływu danych dodaj ODBC Source i OLEDB Destination
  3. W źródle ODBC wybierz SQL Command i napisz SELECT * FROM TABLE zapytanie *(aby pobrać tylko metadane`
  4. Zmapuj kolumny między źródłem a miejscem docelowym
  5. Wróć do Control flow i kliknij Data flow task i naciśnij F4 aby wyświetlić okno właściwości
  6. W oknie właściwości przejdź do wyrażenia i przypisz następujące wyrażenie do [ODBC Source].[SQLCommand] właściwość:(Aby uzyskać więcej informacji, zobacz Jak przekazać zmienne SSIS w wyrażeniu ODBC SQLCommand?)

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

Gdzie MYTABLE to nazwa tabeli źródłowej, a IDCOLUMN to Twój klucz podstawowy lub kolumna tożsamości.

Zrzut ekranu przepływu sterowania

Referencje

  • Źródło ODBC — serwer SQL
  • Jak przekazać zmienne SSIS w wyrażeniu ODBC SQLCommand?
  • JAK UŻYWAĆ ŹRÓDŁA ODBC SSIS I RÓŻNICY MIĘDZY OLE DB I ODBC?
  • Jak mogę ograniczyć liczbę wierszy zwracanych przez zapytanie Oracle po złożeniu zamówienia?
  • Pobieranie od n do n wierszy z bazy danych db2

Aktualizacja 1 — Inne możliwe obejścia

Podczas wyszukiwania podobnych problemów znalazłem kilka dodatkowych obejść, które możesz wypróbować:

(1) Zmień maksymalną pamięć SQL Server

  • SSIS:Menedżer buforów nie powiódł się podczas wywołania alokacji pamięci

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

(2) Włącz potoki nazwane

  • [Naprawiono] Menedżer buforów wykrył, że system ma mało pamięci wirtualnej, ale nie był w stanie wymienić żadnych buforów

    1. Przejdź do Panelu sterowania -> Narzędzia administracyjne -> Zarządzanie komputerem
    2. On Protocol for SQL Instance -> Set Named Pipes =Enabled
    3. Uruchom ponownie usługę instancji SQL
    4. Następnie spróbuj zaimportować dane, a teraz pobierze je porcjami, zamiast pobierać wszystkie naraz. Mam nadzieję, że to zadziała i zaoszczędzi Twój czas.

(3) Jeśli używasz SQL Server 2008, zainstaluj poprawki

  • Proces środowiska wykonawczego SSIS 2008 ulega awarii po uruchomieniu pakietu SSIS 2008 w warunkach małej ilości pamięci

Aktualizacja 2 — Zrozumienie błędu

W poniższym łączu MSDN przyczyna błędu została opisana w następujący sposób:

Pamięć wirtualna to nadzbiór pamięci fizycznej. Procesy w systemie Windows zazwyczaj nie określają, którego mają używać, ponieważ (znacznie) uniemożliwiłoby to wielozadaniowość systemu Windows. SSIS przydziela pamięć wirtualną. Jeśli system Windows jest w stanie to zrobić, wszystkie te alokacje są przechowywane w pamięci fizycznej, gdzie dostęp jest szybszy. Jeśli jednak usługa SSIS zażąda więcej pamięci niż jest fizycznie dostępna, pamięć wirtualna rozlewa się na dysk, co powoduje, że pakiet działa wolniej o rzędy wielkości. A w najgorszych przypadkach, jeśli w systemie nie ma wystarczającej ilości pamięci wirtualnej, pakiet ulegnie awarii.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Funkcja ATAN2() w Oracle

  2. Błąd połączenia z lokalnym hostem Java Oracle (ORA-12505)

  3. ORA-00932:niespójne typy danych:oczekiwano - uzyskano CLOB

  4. Groovy SQL Oracle Array Funkcja/procedura rejestracja parametrów wyjściowych

  5. Jak przechowywać ciąg dłuższy niż 4000 znaków w bazie danych Oracle przy użyciu Java/JDBC?