在oracle中的不同服务器之间移动数据

nul*_*ull 5 oracle plsql data-migration

我是Oracle的新手,我正在努力将特定数据从一台服务器上的数据库移动到另一台服务器上的数据库.

这两个DB具有相同的模式,但我想拉出其键引用的特定列,并将数据移动到其他服务器中.我想弄清楚对此最好的攻击方案是什么.

一种允许命令行的方法,我可以输入我想要移动的数据的键.是否有可能用PLSQL脚本完成?

谢谢.

Jus*_*ave 8

假设您可以在两个数据库之间创建网络连接,最简单的选择是在它们之间创建数据库链接,即

CREATE DATABASE LINK to_b
  CONNECT TO username_on_b
  IDENTIFIED BY password
  USING 'tns_alias_for_b'
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用该数据库链接查询数据库B中的数据,即

INSERT INTO table_name( list_of_columns )
  SELECT list_of_columns
    FROM table_name@to_b
   WHERE primary_key_value = <<some value>>;
Run Code Online (Sandbox Code Playgroud)

这可以是直接的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;
Run Code Online (Sandbox Code Playgroud)

可以通过SQL*Plus中的EXEC或匿名PL/SQL块调用

SQL> exec move_row_from_b( 23 );

BEGIN
  move_row_from_b( 23 );
END;
Run Code Online (Sandbox Code Playgroud)

或者您可以编写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;
Run Code Online (Sandbox Code Playgroud)