首页 > 解决方案 > Oracle SQLPLUS:监控数据复制进度

问题描述

我编写了一个 python 程序,可以帮助将数据从一个 Oracle DB 复制到另一个。它使用线程在多个线程上同时复制数据。

def run_sqlplus(sqlplus_script):

p = subprocess.Popen(['sqlplus', conn],stdin=subprocess.PIPE,
    stdout=subprocess.PIPE,stderr=subprocess.PIPE)
(stdout,stderr) = p.communicate(sqlplus_script.encode('utf-8'))
stdout_lines = stdout.decode('utf-8').split("\n")

return stdout_lines

该列表指定要执行的查询

LST=[“从 WHERE BUSINESS_DATE='30-Sep-2020' AND RUN_ID=1 AND PROCESSING_LOCATION='PAC';”中选择 COUNT(1);“从 B WHERE BUSINESS_DATE='30-Sep- 中选择 COUNT(1)” 2020' AND RUN_ID=1 AND PROCESSING_LOCATION='PAC';", "COPY FROM schema/pass@DB APPEND TABLE1 using select * FROM TABLE1 WHERE BUSINESS_DATE='30-Sep-2020' ;" ]

我已将列表(LST)映射到以下线程池执行程序:

以 concurrent.futures.ThreadPoolExecutor(max_threads) 作为执行者:

results=[executor.submit(execute_queries,i) for i in LST]

for f in concurrent.futures.as_completed(results):
    print(f.result())

在运行代码时,复制命令的运行时间似乎比预期的要长。有什么方法可以监控 python 中线程的进度或 Oracle DB 中的 SID/SERIAL#。

标签: python-3.xoracle10gsqlplus

解决方案


推荐阅读