2012-01-20 7 views
9

Я написал следующий запрос, используя документацию по адресу: Oracle Documentation, чтобы скопировать некоторые данные из базы данных/таблицы на моем рабочем сервере в базу данных/таблицу на сервере Sandbox.Как скопировать данные из одной базы данных/таблицы в другую базу данных/таблицу

COPY FROM username1/[email protected]<production_IP> to username2/[email protected]<sandbox_IP> INSERT TABLE_C (*) USING (SELECT * FROM TABLE_C WHERE COL_A = 4884);

Однако, я постоянно работаю в Connection failed ошибки. Что-то не так с запросом?

+0

Существует ли таблица назначения уже существует? – tallybear

+0

Поддерживает ли 'production_IP' IP-адрес? Если да, этого недостаточно. Вам нужно настроить имена TNS и использовать SID или имя службы или использовать простое имя для подключения (в том числе SID или имя службы). – Codo

+0

@tallybear: Да –

ответ

16

В типичной среде Oracle у вас есть имена TNS. Это сервис для поиска параметров подключения для экземпляров Oracle с учетом имени SID или службы. В простейшей форме имена TNS представляют собой файл с именем tnsnames.ora, расположенный по переменной окружения TNS_ADMIN (что указывает на каталог, в котором находится файл).

Учитывая SIDs PROD и SANDBOX, то вы можете скопировать таблицы из Sqlplus утилиты командной строки:

COPY FROM username1/[email protected] to username2/[email protected] 
    INSERT TABLE_C (*) USING (SELECT * FROM TABLE_C WHERE COL_A = 4884); 

Пожалуйста, обратите внимание, что эта команда COPY поддерживает только ограниченный набор типов данных Oracle: голец, дата, длинный, varchar2, число.

Если у вас нет назначенных имен TNS, вам необходимо знать имя хоста или IP-адрес, номер порта и имя службы. Синтаксис становится:

COPY FROM username1/[email protected]//192.168.3.17:1521/PROD_SERVICE to username2/[email protected]//192.168.4.17:1521/SANDBOX_SERVICE 
    INSERT TABLE_C (*) USING (SELECT * FROM TABLE_C WHERE COL_A = 4884); 

Для определения SID и/или имя службы, то лучше всего взглянуть в файл TNSNAMES.ORA на самом сервере базы данных. Если вы можете войти в базу данных, вы можете использовать следующие запросы для определения SID и служб имени (но не спрашивайте меня, кто есть):

select name from v$database; 

select * from global_name; 

select instance_number, instance_name, host_name from v$instance; 
Смежные вопросы