2010-10-20 2 views
0

У меня здесь проблема. Позволь мне объяснить.Вставьте данные из другого БД в таблицы

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

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

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

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

Благодаря

ответ

0

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

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

Удачи вам!

+0

Отличная идея, я могу экспортировать в csv, но я не могу найти плагин для импорта cvs :( – ALOToverflow

+0

Можете ли вы импортировать из другого формата? Должно быть довольно тривиально найти инструмент для объединения CVS -> Любой формат таблицы Действительно, быстрый поиск по Google для «db2 cvs import» дал мне эту ссылку http://bit.ly/crs4xH, однако я понятия не имею, действительно ли это хороший пакет или нет. Просто говоря, это не должно быть слишком сложно, если вы делаете некоторые исследования. :) – Arve

+0

Да. Я знаю, что Google может сделать для вас;) К сожалению, наша рабочая среда действительно строгая (для целей безопасности), поэтому я не могу загрузить что-либо, что я нашел в Google. – ALOToverflow

0

Опираясь на ответ ARVE, в 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

У меня нет доступа для подключения к машине, на которой работает db2, имеет ли это значение? – ALOToverflow

+0

Вы имеете в виду среду DB2 DB2 или производственную среду DB2? Какой у вас доступ к нему? Можете ли вы поместить на него скрипт и файл CSV, а затем запустить сценарий для импорта CSV-файла? – Leons

0

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

+0

Я так не думаю, что обе базы данных находятся на внешнем сервере. – ALOToverflow

0

Frank.

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

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

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

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

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

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

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

В СУК, вы можете создать общий запрос, как это:

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

В прок, вы просто передать TABLENAME, ключи и 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 

.... 

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

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

Смежные вопросы