【问题标题】:How to copy data from one database/table to another database/table如何将数据从一个数据库/表复制到另一个数据库/表
【发布时间】:2012-01-20 15:56:58
【问题描述】:

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

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 错误。查询有什么问题吗?

【问题讨论】:

  • 目标表是否已经存在?
  • production_IP 是否代表 IP 地址?如果是,那还不够。您需要设置 TNS 名称并使用 SID 或服务名称或使用简单连接名称(其中也包括 SID 或服务名称)。
  • @Codo:是的。生产 IP 代表生产服务器的实际 IP 地址。您能否告诉我在包含服务名称后查询如何更改。我在文档中找不到语法
  • 问题“离题”如何?请在此处定义“离题”。

标签: oracle oracle11g


【解决方案1】:

以下是我使用的解决方案。我创建了一个远程数据库链接,然后使用 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

【讨论】:

    【解决方案2】:

    在典型的 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;
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-22
        • 1970-01-01
        • 1970-01-01
        • 2011-04-25
        • 1970-01-01
        相关资源
        最近更新 更多