#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 с рабочего листа sid13. Недостаточно привилегий для создания ссылки на базу данных
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 вы можете сделать следующее, чтобы выполнить аналогичный подход к копированию объектов:
- На панели инструментов выберите Сервис> Копирование базы данных.
- Определите исходные и целевые соединения с помощью требуемых параметров копирования.
- Для типа объекта выберите таблицу (таблицы).
- Укажите конкретную таблицу (таблицы) (например, table1).
Подход команды копирования устарел, и его функции не обновляются с выпуском новых типов данных. Существует ряд более современных подходов к этому, таких как Oracle data pump (даже для таблиц).
Комментарии:
1. Спасибо, Патрик. Я не могу найти тип объекта в соединениях источника и назначения. У меня просто есть параметры создания объекта, усечения объекта и удаления объекта.
2. Я думаю, что я использую более старую версию. Я попробую это и уведомлю вас
3. Я знаю, что эта функция есть в SQL Developer 4.
4. Большое спасибо за скриншоты. Итак, если я хочу скопировать данные в другую таблицу (скажем, имя исходной таблицы — emp, но имя таблицы dest — emp1), возможно ли, что я нигде не смог найти эту опцию
5. ОК. Еще раз большое спасибо.. действительно очень полезное объяснение и скриншоты