如何将数据从一个数据库/表复制到另一个数据库/表

时间:2012-01-20 15:56:58

标签: oracle oracle11g

我使用以下文档编写了以下查询:Oracle Documentation将生产服务器上的数据库/表中的一些数据复制到Sandbox服务器上的数据库/表。

COPY FROM username1/passwd1@<production_IP> to username2/passwd2@<sandbox_IP> INSERT TABLE_C (*) USING (SELECT * FROM TABLE_C WHERE COL_A = 4884);

但是,我经常遇到Connection failed错误。查询有什么问题吗?

3 个答案:

答案 0 :(得分:17)

在典型的Oracle环境中,您已设置TNS名称。这是一种在给定SID或服务名称的情况下查找Oracle实例的连接参数的服务。在最简单的形式中,TNS名称是一个名为tnsnames.ora的文件,位于环境变量TNS_ADMIN(指向文件所在的目录)的位置。

根据SID PRODSANDBOX,您可以从SQLPLUS命令行实用程序中复制表:

COPY FROM username1/passwd1@PROD to username2/passwd2@SANDBOX
    INSERT TABLE_C (*) USING (SELECT * FROM TABLE_C WHERE COL_A = 4884);

请注意,此COPY命令仅支持一组有限的Oracle数据类型:char,date,long,varchar2,number。

如果您没有设置TNS名称,则需要知道主机名或IP地址,端口号和服务名称。然后语法变为:

COPY FROM username1/passwd1@//192.168.3.17:1521/PROD_SERVICE to username2/passwd2@//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;

答案 1 :(得分:1)

gpl_project/gpl_project@gpldatar复制到gpl_project/gpl_project@gplrdp。使用BGROUPMASTER替换select * from BGROUPMASTER

答案 2 :(得分:0)

以下是我使用的解决方案。我创建了远程数据库的链接,然后使用INSERT命令填充数据。

CREATE DATABASE LINK database_link_name 
CONNECT TO my_user_name IDENTIFIED BY my_password
USING 'tns_name';

INSERT INTO my_table SELECT * FROM my_remote_table@database_link_name;

如果要在工作后摆脱数据库链接。使用以下内容:

DROP DATABASE LINK database_link_name;

请参阅此链接以获取有用的信息: https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:9532217300346683472