生产环境调优需要海量真实分布的测试数据。Quest DataFactory (v5.5) 可快速为 Oracle/DB2/Sybase/ODBC 生成百万级测试数据,30 天免费试用,官网注册需企业邮箱。
QUEST (Grant CONNECT, RESOURCE)。DF_* 表。ORA-02291 完整性约束违规(外键数据先于主表)。ALL_CONS_COLUMNS 定位约束名 (如 SYS_C009814),ALTER TABLE DF_ORDERS DISABLE CONSTRAINT SYS_C009814 逐个禁用外键约束后重跑成功。EXEC DBMS_STATS.GATHER_SCHEMA_STATS('QUEST');
SELECT TABLE_NAME, NUM_ROWS FROM USER_TABLES WHERE DROPPED='NO';
-- 结果示例
DF_TITLES 100
DF_MOVIE_CUSTOMER 1100
DF_MOVIE_EMPLOYEE 900
DF_ORDERS 101
DF_ORDERDETAILS 200
... 共 15 表
| 问题 | 发现方式 | 最佳实践 |
|---|---|---|
| 外键列无索引 | 对比 USER_IND_COLUMNS 与 USER_CONS_COLUMNS (TYPE='R') | 外键列必须建索引,避免全表锁与连接性能劣化 |
| 约束名系统生成 (SYS_Cxxxxx) | USER_CONSTRAINTS 仅 2/51 约束显式命名 | 所有 PK/FK/UK 显式命名,便于维护与错误定位 |
| 表缺主键 | 15 表仅 11 个唯一索引 | 除日志/临时表外,每表应有 PK;无 PK 必有明确设计理由 |
SELECT A.CONSTRAINT_NAME, B.CONSTRAINT_TYPE,
A.TABLE_NAME, A.COLUMN_NAME
FROM USER_CONS_COLUMNS A, ALL_CONSTRAINTS B
WHERE A.CONSTRAINT_NAME = B.CONSTRAINT_NAME
AND B.CONSTRAINT_TYPE = 'R'
AND NOT EXISTS (
SELECT 1 FROM USER_IND_COLUMNS I
WHERE I.TABLE_NAME = A.TABLE_NAME
AND I.COLUMN_NAME = A.COLUMN_NAME
AND I.COLUMN_POSITION = 1
);
测试数据生成工具的核心价值在于保证引用完整性与符合数据建模规范。若生成数据违背外键关联或缺乏索引/命名规范,后续调优实验将失去参考意义。建议在 CI/CD 流水线中集成模型质量自查脚本,强制执行「外键必索引、约束必命名、表必有主键」三大基线。