-
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