在 Ubuntu 上使用 Oracle 数据库进行数据分析的完整路径
一 环境准备与连接方式
- 安装 Oracle 客户端:在 Ubuntu 上安装与数据库版本匹配的 Oracle Instant Client(12c/19c/21c),解压后将目录加入 LD_LIBRARY_PATH,并配置 PATH。完成后在终端执行 sqlplus 验证可用性。
- Python 环境:建议使用 Python 3.7+,安装依赖:
pip install cx_Oracle pandas matplotlib seaborn numpy。
- 连接数据库:优先使用 DSN 字符串(host:port/service) 方式连接 Oracle,例如:
conn = cx_Oracle.connect(user=‘scott’, password=‘tiger’, dsn=‘192.168.1.100:1521/ORCL’)。
- 无公网或需命名解析时,可在 network/admin/tnsnames.ora 中配置别名,或用 Easy Connect 字符串。
- 版本兼容提示:连接 Oracle 9i 等老版本时,可能需要 Instant Client 11.2 等旧版驱动,新版驱动(如 21.x)可能不兼容。
二 在数据库中完成高效分析 SQL
- 窗口函数与分组汇总:使用 SUM/AVG/COUNT 等分析函数 做运行总计、分组排名、前后行对比等,例如按 ID 分区求最大值:
SELECT ID, Val, MAX(Val) OVER (PARTITION BY ID) AS maxVal FROM t;
可用 COUNT(DISTINCT Val) OVER (PARTITION BY ID) 统计分组内不同值个数。
- 多维汇总:使用 ROLLUP/CUBE/GROUPING SETS 一次生成多维度小计与总计,适合做交叉分析报表。
- 集合与对比:用 UNION/INTERSECT/MINUS 做集合运算;结合 COUNT(*) OVER() 可快速校验两结果集是否一致(MINUS 结果为空即一致)。
三 在 Ubuntu 终端用 SQL*Plus 做快速探查与导出
- 连接与基本查询:
sqlplus 用户名/密码@服务名 或 sqlplus / as sysdba(本机特权登录)。
- 探查元数据:
SELECT table_name FROM user_tables; 查看当前用户表。
- 导出查询结果:
SPOOL /tmp/result.csv
SELECT /csv/ * FROM your_table WHERE 条件;
SPOOL OFF;
适合快速把结果导出为 CSV 供后续分析。
四 用 Python 联动 Oracle 做数据科学与可视化
- 连接与读取:
import cx_Oracle, pandas as pd
conn = cx_Oracle.connect(user=‘scott’, password=‘tiger’, dsn=‘192.168.1.100:1521/ORCL’)
df = pd.read_sql(‘SELECT * FROM SALES_DATA WHERE SALE_DATE >= DATE ‘‘2024-01-01’’’, conn)
- 探查与可视化:
df.info(), df.describe(), df.isnull().mean()
import seaborn as sns; sns.histplot(df[‘SALE_AMOUNT’], kde=True)
优势是直接在数据库内计算、只取需要的数据到本地,分析流程高效且可复用。
五 性能与运维侧分析 AWR 与日志
- AWR 报告:在 sqlplus 中生成快照并导出 AWR/ASH 报告,定位 SQL 执行时间、等待事件、负载 等性能瓶颈:
@?/rdbms/admin/awrrpt.sql(按向导选择开始/结束快照,生成 HTML/文本报告)。
- 日志与诊断:
- 实时查看告警日志:tail -f /u01/app/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log
- 关键字检索:grep “ORA-” /path/to/logs/* | sort | uniq -c
- 使用 ADR(Automatic Diagnostic Repository) 集中管理与分析诊断信息;企业环境可配合 OEM 做可视化监控与报告。