• Data Governance Dev's avatar
    feat(backend): Oracle 端到端打通(thick + health + 11g 兼容 + schema 名修正) · fd098416
    Data Governance Dev authored
    Oracle 11g (11.2.0.4) 数据库连接抽数据字典端到端跑通,解决 4 个独立问题:
    
    1. connect_timeout → tcp_connect_timeout
       oracledb 1.4.2+ 移除了 connect_timeout kwarg(之前误以为兼容),
       改成 tcp_connect_timeout;报错日志加 inspect 自动定位兼容 kwarg。
    
    2. thick 模式加载 + DPI-1047 深度诊断
       - _ensure_oracle_client() 解析 oci.dll 的 PE 导入表,自动列出
         实际依赖的运行时 DLL(如 MSVCR120.dll → VC++ 2013 Redist)
       - DPY-3010(thin 不支持老 Oracle)日志加针对性安装指引
       - 11.2.0.4 必须 thick 模式(thin 不支持 11.2)
    
    3. 健康检查 SQL 分方言
       新建 check_connection.oracle.sql 写 SELECT 1 FROM dual;
       Oracle 严格执行 SQL 标准,不像 MySQL/达梦 兼容裸 SELECT 1。
       sql_loader 按 <name>.<dialect>.sql 优先 + .sql 回退 自动分流。
    
    4. ALL_TABLES 11g 列兼容性
       修 list_tables.oracle.sql:
       - data_length 用 t.BLOCKS * 8192 估算(11g 没 BYTES 列,12c+ 才有)
       - create_time / update_time 取 NULL(11g 没 CREATED/LAST_DDL_TIME,12c+ 才有)
       - 注释贴了 11.2.0.4 ALL_TABLES 完整可用列清单(用户 DESC 确认)
    
    5. schema 名传递修正
       data_dict.py 之前对所有数据库都传 cfg.database 给 list_tables/list_columns,
       但 Oracle 体系里 ALL_TABLES.OWNER 是用户名(=cfg.user),不是 service_name。
       加 cfg.db_type == 'oracle' 分支:schema_name = cfg.user
    
    6. /api/db-defaults 加 oracle_client_dir
       路径从 web/configs/db_defaults.yaml 预填,前端可隐藏输入框。
    
    验证日志:
      [DB] Oracle Instant Client 已加载(thick 模式)lib_dir=...
      [DB] 连接已建立(耗时 ~100ms)
      [DB] 测试连接成功
      [Cache] 写入数据字典: (表 N 张, 字段 M 个)
    
    踩坑详见 docs/WORKLOG.md(2026-08-13 Oracle 端到端打通条目)。
    fd098416
data_dict.py 4.99 KB