Скрипт для копирования данных из одной базы данных Informix в другую - PullRequest
1 голос
/ 17 июня 2009

Мне нужно скопировать данные из одной базы данных Informix в другую. Я не хочу использовать LOAD для этого. Есть ли сценарий, который может помочь мне с этим? Есть ли другой способ сделать это?

Ответы [ 3 ]

2 голосов
/ 17 июня 2009

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

  • dbexport / dbimport
  • выгрузить / загрузить
  • вставленные вручную SQL-вставки

Если структура базы данных идентична, вы можете использовать dbexport / dbimport, однако это позволит выгрузить данные в плоские файлы, либо в файловую систему, либо на ленту, а затем импортировать из плоских файлов.

Обычно я нахожу, что если структура БД одинакова, то загрузка / выгрузка - самое простое решение.

Если вы не хотите использовать load / unload dbimport / dbexport, тогда вы можете использовать прямые SQL INSERTS следующим образом (непроверенный, вам нужно будет проверить синтаксис)

INSERT INTO dbname2@informix_server2:table
SELECT * FROM dbnam1e@informix_server1:table_name

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

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

Я часто обнаруживал, что лучшее решение заключается в следующем

  • Взять схему из базы данных1.
  • Разделите его на 2 части сегмент это все создание таблицы заявления, вторая часть это все ИНДЕКСА СОЗДАНИЯ, референтный заявления о целостности и т. д.
  • Создать базу данных2 из 1-й части схема.
  • Используйте UNLOAD / LOAD для загрузки данных в database2.
  • Применить вторую часть схемы к базе данных2

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

2 голосов
/ 17 июня 2009

Без дополнительной информации о типах имеющихся у вас баз данных Informix трудно сказать, какой именно вариант вам подходит.

Если это небольшое количество таблиц и большие объемы данных, взгляните на onunload, onload и / или High Performance Loader. (Я предполагаю, что мы не говорим о Стандартном Двигателе здесь.)

Если, с другой стороны, у вас много таблиц и HPL будет слишком неудобным, взгляните на myexport / myimport (доступно на сайте iiug.org). Это неблокирующие эквиваленты стандартных утилит dbexport / dbimport.

1 голос
/ 17 июня 2009

UNLOAD и LOAD - самый простой способ сделать это. Исключая их, вы исключаете использование DB-Load и DB-Access, а также DB-Export и DB-Import. Это самый простой способ сделать это.

Как уже отмечалось, вы можете рассмотреть возможность использования HPL.

Вы также можете настроить систему ER - она ​​сложнее, чем UNLOAD, а затем LOAD, но не использует многословные операции.

Если две машины практически идентичны, вы можете рассмотреть onunload и onload; Я не рекомендовал бы это.

...