копирование из одной базы данных в другую с помощью oracle sql developer — сбой подключения

#sql #database #oracle #oracle11g #oracle-sqldeveloper

#sql #База данных #Oracle #oracle11g #oracle-sqldeveloper

Вопрос:

Я пытаюсь скопировать таблицу из одной базы данных в другую с помощью oracle sql developer. У меня есть имя пользователя, пароль и SID.

 copy from uname1/password1@SID1 to uname2/pwd2@SID2 insert table1 (*) using (select * from message_table);
 

Однако я получаю сообщение об connection failed ошибке.

Две базы данных находятся на разных хостах (имя хоста отличается в свойствах подключения).

Таблица содержит 5 миллионов записей и слишком громоздка для экспорта / импорта

Комментарии:

1. Был ли настроен dbLink? Даст ли «select * from table @SID2» результаты?

2. connection description for remote database not found Это то, что я получаю, когда пробую sid2 с рабочего листа sid1

3. Недостаточно привилегий для создания ссылки на базу данных

4. Похоже, вам нужно, чтобы ваш администратор базы данных настроил dbLink. Что делает его слишком громоздким для экспорта / импорта? Просто размер?

5. да, и столбцы. Существует около 100 столбцов.

Ответ №1:

copy Команда является командой SQL * Plus (не командой SQL Developer). Если у вас настроены записи tnsname для SID1 и SID2 (например, попробуйте tnsping), вы сможете выполнить свою команду.

Другое предположение заключается в том, что table1 имеет те же столбцы, что и message_table (и столбцы имеют только следующие типы данных: CHAR, DATE, LONG, NUMBER или VARCHAR2). Кроме того, с помощью команды insert вам нужно будет беспокоиться о первичных ключах (например, о том, что вы не вставляете повторяющиеся записи).

Я попробовал вариант вашей команды следующим образом в SQL * Plus (без ошибок):

 copy from scott/tiger@db1 to scott/tiger@db2 create new_emp using select * from emp;
 

После того, как я выполнил приведенную выше инструкцию, я также обрезал таблицу new_emp и выполнил эту команду:

 copy from scott/tiger@db1 to scott/tiger@db2 insert new_emp using select * from emp;
 

С помощью SQL Developer вы можете сделать следующее, чтобы выполнить аналогичный подход к копированию объектов:

  1. На панели инструментов выберите Сервис> Копирование базы данных.
  2. Определите исходные и целевые соединения с помощью требуемых параметров копирования. введите описание изображения здесь
  3. Для типа объекта выберите таблицу (таблицы). введите описание изображения здесь
  4. Укажите конкретную таблицу (таблицы) (например, table1). введите описание изображения здесь

Подход команды копирования устарел, и его функции не обновляются с выпуском новых типов данных. Существует ряд более современных подходов к этому, таких как Oracle data pump (даже для таблиц).

Комментарии:

1. Спасибо, Патрик. Я не могу найти тип объекта в соединениях источника и назначения. У меня просто есть параметры создания объекта, усечения объекта и удаления объекта.

2. Я думаю, что я использую более старую версию. Я попробую это и уведомлю вас

3. Я знаю, что эта функция есть в SQL Developer 4.

4. Большое спасибо за скриншоты. Итак, если я хочу скопировать данные в другую таблицу (скажем, имя исходной таблицы — emp, но имя таблицы dest — emp1), возможно ли, что я нигде не смог найти эту опцию

5. ОК. Еще раз большое спасибо.. действительно очень полезное объяснение и скриншоты