Перемещение данных между разными серверами в Oracle - PullRequest
5 голосов
/ 05 июля 2011

Я новичок в Oracle и работаю над переносом определенных данных из БД на одном сервере в БД на другом сервере.

Две БД имеют одинаковую схему, но я хочу вытащитьконкретные столбцы, на которые ссылаются их ключи и перемещают данные на другой сервер.Я пытаюсь выяснить, каким будет лучший план атаки на это.

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

Спасибо.

1 Ответ

8 голосов
/ 05 июля 2011

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

CREATE DATABASE LINK to_b
  CONNECT TO username_on_b
  IDENTIFIED BY password
  USING 'tns_alias_for_b'

Затем вы можете использовать эту ссылку на базу данных для запроса данных из базы данных.B, то есть

INSERT INTO table_name( list_of_columns )
  SELECT list_of_columns
    FROM table_name@to_b
   WHERE primary_key_value = <<some value>>;

Это может быть либо прямой оператор SQL, либо часть процедуры PL / SQL, либо часть сценария SQL * Plus.Процедура PL / SQL

CREATE OR REPLACE PROCEDURE move_row_from_b( 
  p_key_value IN table_name.primary_key%type 
)
AS
BEGIN
  INSERT INTO table_name( list_of_columns )
    SELECT list_of_columns
      FROM table_name@to_b
     WHERE primary_key_value = p_key_value;
END move_row_from_b;

, которая может быть вызвана либо через EXEC из SQL * Plus, либо через анонимный блок PL / SQL

SQL> exec move_row_from_b( 23 );

BEGIN
  move_row_from_b( 23 );
END;

Или вы можете написать SQL * Plusсценарий

variable key_value number;
accept key_value prompt 'Enter key: '
INSERT INTO table_name( list_of_columns )
  SELECT list_of_columns
    FROM table_name@to_b
   WHERE primary_key_value = :key_value;
...