如何在python中用另一个oracle表更新oracle表

bvn4nwqk  于 2022-11-03  发布在  Oracle
关注(0)|答案(1)|浏览(243)

我想使用python将数据从一个oracle数据库迁移到另一个oracle数据库


# first database connection

con1 = cx_Oracle.connect(username, password, host/service)
cursor1 = con1.cursor()    

# second database connection

con2 = cx_Oracle.connect(username, password, host/service)
cursor2 = con1.cursor()                                  
sql = "insert into db2.table select * from db2.table"
xqkwcwgp

xqkwcwgp1#

有两种方法。

1.数据库链接

你想

TRUNCATE db2.tbl;

INSERT INTO db2.tbl  SELECT *  FROM db1.tbl;

您不需要一对游标和一对打开的DB连接来完成这一任务。一个到db2的连接就足够了。您 * 需要 * 的是一个DB link,以便db2查询能够访问db 1表。语法为:

CREATE DATABASE LINK dblink_name
    CONNECT TO remote_user_name IDENTIFIED BY password
    USING 'remote_database_name/connection_string';

因此,如果您将其命名为link_db1,您将使用

INSERT INTO tbl  SELECT *  FROM link_db1.tbl;

当客户机向db2发送命令后,客户机就不存在了。可能有一百万个结果行,它们都直接从db 1服务器流向db2服务器。客户机不接触任何一行。如果客户机的网络带宽很低,也不会影响复制大量行数据的吞吐量。
https://docs.oracle.com/cd/E18283_01/server.112/e17120/ds_concepts002.htm
How to create a DB link between two oracle instances

2.内存中复制

如果需要,您 * 可以 * 创建一对连接,每个数据库一个连接。
从一个连接下载行,并通过另一个连接插入它们。
如果客户机有足够的内存,您可以在一个批处理中执行此操作,或者您可能更喜欢一次执行几千行的批处理。(不要一次执行一行,因为这将是延迟主导的--吞吐量将低得令人失望。)客户机可用的网络带宽将在复制行的速度方面发挥重要作用。
read_sql/to_sql函数提供了 * 一种 * 完成复制的方法。
这是一个不太吸引人的选项。如果可行,最好使用DB链接。

相关问题