我使用以下文档编写了以下查询: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
错误。查询有什么问题吗?
答案 0 :(得分:17)
在典型的Oracle环境中,您已设置TNS名称。这是一种在给定SID或服务名称的情况下查找Oracle实例的连接参数的服务。在最简单的形式中,TNS名称是一个名为tnsnames.ora
的文件,位于环境变量TNS_ADMIN
(指向文件所在的目录)的位置。
根据SID PROD
和SANDBOX
,您可以从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