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

nam*_*ked 11 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错误.查询有什么问题吗?

Cod*_*odo 17

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

鉴于小岛屿发展中国家PRODSANDBOX,可以将表从SQLPLUS命令行实用程序然后复制:

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

请注意,此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);
Run Code Online (Sandbox Code Playgroud)

要确定SID和/或服务名称,最好查看数据库服务器本身上的TNSNAMES.ORA文件.如果您能够登录数据库,则可以使用以下查询来确定SID和服务名称(但不要问我哪个是哪个):

select name from v$database;

select * from global_name;

select instance_number, instance_name, host_name from v$instance;
Run Code Online (Sandbox Code Playgroud)