Вставить данные из другой БД в таблицы - PullRequest
0 голосов
/ 20 октября 2010

У меня тут какая-то проблема.Позвольте мне объяснить.

Итак, я закончил миграцию этого проекта и решил запустить набор тестов, чтобы убедиться, что логика все еще работает должным образом.К сожалению, это не ... но это не проблема.

В конце комплекта был хороший скрипт, который выполняет удаление данных 5 таблиц нашей базы данных разработки.Это было бы хорошо, если бы существовал также скрипт для фактического заполнения базы данных ...

Хорошая сторона в том, что у нас все еще есть много данных в производственной среде, поэтому я ищу способ и / иливозможно, инструмент для извлечения данных по этим 5 конкретным таблицам в производстве и вставки их в среду разработки.Между этими таблицами есть все виды первичного и внешнего ключей, возможно, поля с автоинкрементом (а также МНОГО данных), поэтому я не хочу делать это вручную.

Наша база данных - db2 v9если это имеет какое-либо значение.Я также работаю с SQuirreL, возможно, есть плагин, но я еще не нашел.

Спасибо

Ответы [ 4 ]

0 голосов
/ 06 ноября 2010

Франк.

Лично мне неизвестны какие-либо автоматизированные инструменты, которые могут "захватывать" меньшее подмножество ваших производственных данных в набор тестов, но в свое время я смог использовать QMF и некоторые общие запросы для этого. Это требует предварительного планирования / анализа ваших структур таблиц, родительско-дочерних зависимостей, ссылочной целостности и других вещей.

Это заняло некоторую начальную работу, но как только она была выполнена, я смог использовать и повторно использовать эти инструменты для извлечения нескольких различных представлений производственных данных для моих целей тестирования. Если вам это нравится, читайте дальше.

В режиме высокого уровня вы можете сделать это:

  1. Определите, как называются ключевые столбцы.
  2. Создать для них таблицу «ключей».
  3. Напишите несколько запросов, чтобы найти условия тестирования и заполнить таблицу ключей.
  4. Как только вы убедитесь, что keys_table имеет удовлетворительное подмножество ключей, вы можете использовать созданные вами инструменты, чтобы вырезать данные для вас.
  5. Напишите общий запрос, объединяющий key_table с таблицей производственных таблиц, и экспортируйте данные в простые файлы.
  6. Напишите процедуру, которая автоматически сделает все извлечения / заполнения для вас.

Если у вас есть доступ к QMF (и вы, вероятно, делаете это в магазине DB2), вы можете сделать что-то вроде этого:

  1. Определите все нужные вам таблицы.
  2. Определите первичные индексы для этих таблиц.
  3. Определите все требования к ссылочной целостности для этих таблиц.
  4. Определить родительские и дочерние отношения между всеми таблицами.
  5. Для дочерней таблицы самого низкого уровня (обычно таблицы с большинством индексов) запишите все столбцы, используемые для идентификации уникального ключа.

С помощью приведенной выше информации вы можете создать общий запрос, чтобы вырезать меньший подраздел производственных данных, для # 5. Другими словами, вы можете создать ряд конкретных запросов и заполнить небольшую таблицу ключей, которую вы создаете.

В QMF вы можете создать общий запрос следующим образом:

select t.*
  from &t_tbl   t
     , &k_tbl   k
 where &cond
 order by 1, 2, 3

В процедуре вы просто передаете переменные tablename, keys и condtions. Как только данные собраны, вы экспортируете данные в какое-то имя файла.

Вы можете создать процесс EXPORT_TABLE, который будет выглядеть примерно так:

run query1 (&&t_tbl = students_table , &&k_tbl = my_test_keys ,
+ &&cond = (t.stud_id = k.stud_id and t.course_id = k.course_id)
export data to studenttable

run query1 (&&t_tbl = course_table   , &&k_tbl = my_test_keys ,
+ &&cond = (t.cour_id = k.cour_id 
+ (and t.cour_dt between 2009-01-01 and 2010-02-02)
export data to coursetable

.....

Это может захватывать все данные по мере необходимости.

Затем вы можете создать процесс IMPORT_TEST, чтобы сделать обратное:

import data from studenttable
save data as student_table (replace = yes

import data from coursetable
save data as course_table (replace = yes

....

Создание может занять некоторое время, но по крайней мере у вас будет инструмент для повторного использования для извлечения ваших данных.

Надеюсь, это поможет.

0 голосов
/ 20 октября 2010

Опираясь на ответ Арве, в DB2 есть встроенная команда для импорта файлов CSV:

IMPORT FROM 'my_csv_file.csv'
OF del
INSERT INTO my_table

Вы можете указать список столбцов, если они не в порядке по умолчанию:

IMPORT FROM 'my_csv_file.csv'
OF del
-- 1st, 2nd, 3rd column in CSV
METHOD P(1, 2, 3)
INSERT INTO my_table
(foo_col, bar_col, baz_col)

И вы также можете указать другой разделитель, если он не разделен запятыми. Например, следующее указывает файл, разделенный знаком |:

IMPORT FROM 'my_csv_file.csv'
OF del
MODIFIED BY COLDEL|
-- 1st, 2nd, 3rd column in CSV
METHOD P(1, 2, 3)
INSERT INTO my_table
(foo_col, bar_col, baz_col)

Есть еще много вариантов. Официальная документация немного волосатая:

0 голосов
/ 27 октября 2010

У вас есть доступ к эмулятору? в эмуляторе есть функция, позволяющая импортировать CSV в таблицы напрямую.

0 голосов
/ 20 октября 2010

Это своего рода выстрел в темноте, так как я никогда не использовал db2, но из предыдущего опыта моя интуиция безоговорочно говорит: «Попробуйте CSV». Я готов поспорить, что моя бабушка может импортировать / экспортировать csv-файлы в своем программном обеспечении (почему я только начал думать о Джордже из Сейнфельда?) Это также должно оставить вас с ФК и идентификаторами нетронутыми. Возможно, вам придется сбросить значение автоинкремента на любое подходящее, если это необходимо Это, конечно, будет сделано после импорта

Кроме того, CSV-файлы являются открытым текстом и ими очень легко манипулировать, если причуды показывают свою голову.

Удачи тебе!

...