Oracle
 sql >> база данни >  >> RDS >> Oracle

SSIS не успява да запази пакетите и рестартира Visual Studio

Предлагам да четете данните на парчета:

Вместо да зареждате цялата таблица, опитайте се да разделите данните на парчета и да ги импортирате в SQL Server. От известно време отговорих на подобен отговор, свързан със SQLite, ще се опитам да го възпроизведа, за да пасне на синтаксиса на Oracle:

Ръководство стъпка по стъпка

В този пример всяка част съдържа 10 000 реда.

  1. Декларирайте 2 променливи от тип Int32 (@[User::RowCount] и @[User::IncrementValue] )
  2. Добавете Execute SQL Task които изпълняват select Count(*) команда и запишете набора от резултати в променливата @[User::RowCount]

  1. Добавете For Loop със следните предпочитания:

  1. Вътре в контейнера на цикъла for добавете Data flow task
  2. Вътре в задачата за поток от данни добавете ODBC Source и OLEDB Destination
  3. В източника на ODBC изберете SQL Command опция и напишете SELECT * FROM TABLE заявка *(за извличане само на метаданни`
  4. Определете колоните между източник и местоназначение
  5. Върнете се към Control flow и щракнете върху Data flow task и натиснете F4 за да видите прозореца със свойства
  6. В прозореца със свойства отидете на израз и Задайте следния израз на [ODBC Source].[SQLCommand] свойство:(за повече информация вижте Как да предадете SSIS променливи в ODBC SQLCommand израз?)

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

Къде MYTABLE е името на таблицата източник и IDCOLUMN е вашият първичен ключ или колона за идентичност.

Екранна снимка на контролния поток

Препратки

  • ODBC източник – SQL сървър
  • Как да предавам SSIS променливи в ODBC SQLCommand израз?
  • КАК ДА ИЗПОЛЗВАМ SSIS ODBC ИЗТОЧНИК И РАЗЛИКА МЕЖДУ OLE DB И ODBC?
  • Как да огранича броя на редовете, върнати от заявка на Oracle след поръчка?
  • Получаване на първите n до n реда от db2

Актуализация 1 – Други възможни решения

Докато търсех подобни проблеми, намерих някои допълнителни решения, които можете да опитате:

(1) Променете максималната памет на SQL Server

  • SSIS:Мениджърът на буфера не успя да извика за разпределяне на памет

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

(2) Активиране на наречени тръби

  • [Коригирано] Мениджърът на буфери откри, че системата е с малко виртуална памет, но не е в състояние да размени никакви буфери

    1. Отидете на Контролен панел –> Административни инструменти -> Управление на компютъра
    2. По протокол за SQL екземпляр -> Задаване на именувани тръби =Enabled
    3. Рестартирайте услугата за SQL екземпляр
    4. След това опитайте да импортирате данните и той ще извлече данните на парчета сега, вместо да извлече всички наведнъж. Надяваме се, че това ще свърши работа за вас и ще ви спести време.

(3) Ако използвате SQL Server 2008, инсталирайте спешни корекции

  • Процесът по време на изпълнение на SSIS 2008 се срива, когато стартирате пакета SSIS 2008 при условие на ниско ниво на памет

Актуализация 2 – Разбиране на грешката

В следната MSDN връзка причината за грешката беше описана по следния начин:

Виртуалната памет е супернабор от физическа памет. Процесите в Windows обикновено не уточняват кои трябва да се използват, тъй като това (много) би попречило на това как Windows може да изпълнява много задачи. SSIS разпределя виртуална памет. Ако Windows е в състояние, всички тези разпределения се съхраняват във физическата памет, където достъпът е по-бърз. Въпреки това, ако SSIS поиска повече памет, отколкото е физически налична, тогава тази виртуална памет се разлива на диск, което кара пакета да работи с порядък по-бавно. И в най-лошите случаи, ако няма достатъчно виртуална памет в системата, пакетът ще се провали.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. как да направя функция за връщане на тип ред от таблица в pl/sql?

  2. Как да създадете PL/SQL пакети в базата данни на Oracle

  3. Списък на елементите на числовия формат в Oracle

  4. Извикване на друга PL/SQL процедура в рамките на процедура

  5. 4 начина за намиране на редове, които съдържат главни букви в Oracle