копирование таблицы из одной базы данных в другую - PullRequest
0 голосов
/ 04 февраля 2009

Я пытаюсь заархивировать некоторые из моих таблиц в другую базу данных на том же сервере. Однако INSERT INTO ... SELECT ... FROM выдает ошибку (SQLSTATE = 42704) при сборке. Таблица существует во второй базе данных. Может кто-нибудь помочь с этим?

Ответы [ 6 ]

1 голос
/ 16 февраля 2009

Мы взломали это! Если следующий скрипт используется, то он работает. ЗАГРУЗКА работает без коммита между скопированными пакетами строк. (Проблема с ошибкой 'Transaction Log full ...' также решена)

ПОДКЛЮЧИТЬСЯ К LS2DB001; ЭКСПОРТ В "C: \ temp \ TIN_TRIGGER_OUT.IXF" из IXF СООБЩЕНИЯ "C: \ temp \ TIN_TRIGGER_OUT.EXM" SELECT * FROM LS2USER.TIN_TRIGGER_OUT; СОЕДИНИТЬ СБРОС; ПОДКЛЮЧИТЕ К LQIFCOLD; ЗАГРУЗКА ИЗ "C: \ temp \ TIN_TRIGGER_OUT.IXF" из IXF СООБЩЕНИЯ "C: \ temp \ TIN_TRIGGER_OUT.IMM" INSERT INTO LS2USER.TIN_TRIGGER_OUT COPY NO INDEXING MODE AUTOSELECT; COMMIT; СОЕДИНИТЬ СБРОС;

1 голос
/ 04 февраля 2009

Из вашего вопроса не ясно, какая версия DB2 используется. Я предполагаю, что это версия для Linux, Unix и Windows. Вы используете федерацию для связи двух баз данных.

Работает ли часть запроса SELECT с LS2DB001? Стоит попытаться определить, с какой базой данных у вас возникла проблема.

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

0 голосов
/ 06 февраля 2009

Я пишу этот ответ как еще один ответ, поэтому у меня больше места.

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

a) В вашей базе данных FROM, подключаясь в качестве пользователя, которого вы используете для федеративной ссылки, работает ли выбранный вами файл?

б) В вашем TO db, используя ссылку, работает select?

c) Работает ли select в вашей базе данных TO по ссылке через сохраненный процесс?

d) Можете ли вы вставить в таблицу значения TO IN, используя значения INSERT ... (x, y, z)?

e) Вы можете вставить в свою базу данных TO через сохраненный процесс, используя INSERT ... значения (x, y, z)?

Без дополнительной информации это лучшая линия атаки, которую я могу предложить.

0 голосов
/ 04 февраля 2009

Лучший способ сделать это - создать собственный скрипт. В зависимости от размера таблиц (сколько записей) вы можете либо выбрать все данные в памяти, а затем перевернуть их, вставив их в копию созданной вами таблицы, либо экспортировать данные как CSV-файл или другой текстовый файл, а затем переверните его, чтобы вставить данные в другую таблицу.

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

Примечание: некоторые базы данных db2, например, в iSeries, на самом деле не имеют «баз данных», у них есть библиотеки. С правильным профилем пользователя вы можете получить доступ к двум библиотекам одновременно, объединяя таблицы из них вместе или делая

create table library/newFilename as 
(select * from originallibrary/originalfilename) with data

Но это относится только к iSeries, которым я верю.

0 голосов
/ 04 февраля 2009

Вы можете сделать

 Select 'insert into tblxxxx (blabla,blabal) values(' + fld1 + ',' + fld2 + ',' ...... + ')'

From tblxxxxxx

скопировать результат в виде текстового скрипта и выполнить его в другой БД.

0 голосов
/ 04 февраля 2009

Я нашел это на http://www.connx.com/products/connx/Connx%208.6%20UserGuide/CONNXCDD32D/DB2_SQL_States.htm: 42704 Неопределенный объект или имя ограничения. Измените синтаксис SQL и повторите попытку.

Для получения дополнительной помощи постарайтесь быть более конкретным, например, вставить полный оператор SQL, схему таблицы и т. Д.

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