本教程详细介绍Oracle数据库的测试数据管理技术,包括测试数据的生成、管理、维护和最佳实践。风哥教程参考Oracle官方文档Security部分,旨在帮助数据库管理员和开发人员创建和管理高质量的测试数据,提高测试效率和质量。
内容大纲
Part01-基础概念与理论知识
1.1 测试数据管理概述
测试数据管理是指为软件开发和测试过程提供高质量、符合业务场景的测试数据的过程。测试数据管理的主要目标是:
- 提供真实、代表性的测试数据
- 确保测试数据的一致性和完整性
- 保护敏感数据
- 提高测试效率和质量
- 支持自动化测试
1.2 测试数据类型
常见的测试数据类型包括:
- 基础测试数据:用于基本功能测试
- 边界测试数据:用于测试边界条件
- 异常测试数据:用于测试异常处理
- 性能测试数据:用于性能测试
- 安全测试数据:用于安全测试
- 回归测试数据:用于回归测试
Part02-生产环境规划与建议
2.1 测试数据管理策略制定
制定测试数据管理策略时,需要考虑以下因素:
- 测试数据的来源和获取方式
- 测试数据的生成方法
- 测试数据的存储和管理
- 测试数据的更新和维护
- 测试数据的安全性和隐私保护
- 测试数据的版本控制
2.2 测试数据生成方法
常见的测试数据生成方法包括:
- 从生产数据复制并脱敏
- 使用随机数据生成工具
- 使用模板数据
- 使用合成数据生成器
- 手动创建测试数据
Part03-生产环境项目实施方案
3.1 使用Oracle数据泵生成测试数据
使用数据泵导出生产数据并进行脱敏:
$ cat expdp_test_data.par
DIRECTORY=DATA_PUMP_DIR
DUMPFILE=fgedu_test_data.dmp
LOGFILE=expdp_test_data.log
SCHEMAS=FGEDU
TABLES=FGEDU.CUSTOMERS,FGEDU.ORDERS
QUERY=FGEDU.CUSTOMERS:”WHERE ROWNUM <= 500" QUERY=FGEDU.ORDERS:"WHERE CUSTOMER_ID IN (SELECT ID FROM FGEDU.CUSTOMERS WHERE ROWNUM <= 500)"
# 执行数据泵导出
$ expdp system/password@fgedudb parfile=expdp_test_data.par
Export: Release 19.0.0.0.0 – Production on Wed Mar 31 10:00:00 2026
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Starting “SYSTEM”.”SYS_EXPORT_SCHEMA_01″: system/********@fgedudb parfile=expdp_test_data.par
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . exported “FGEDU”.”CUSTOMERS” 50.0 KB 500 rows
. . exported “FGEDU”.”ORDERS” 25.0 KB 250 rows
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Master table “SYSTEM”.”SYS_EXPORT_SCHEMA_01″ successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_SCHEMA_01 is:
/oracle/admin/fgedudb/dpdump/fgedu_test_data.dmp
Job “SYSTEM”.”SYS_EXPORT_SCHEMA_01″ successfully completed at Wed Mar 31 10:05:00 2026 elapsed 0 00:05:00
# 导入到测试环境并应用脱敏
$ impdp system/password@testdb directory=DATA_PUMP_DIR dumpfile=fgedu_test_data.dmp logfile=impdp_test_data.log transform=mask:y
Import: Release 19.0.0.0.0 – Production on Wed Mar 31 10:10:00 2026
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Master table “SYSTEM”.”SYS_IMPORT_FULL_01″ successfully loaded/unloaded
Starting “SYSTEM”.”SYS_IMPORT_FULL_01″: system/********@testdb directory=DATA_PUMP_DIR dumpfile=fgedu_test_data.dmp logfile=impdp_test_data.log transform=mask:y
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . imported “FGEDU”.”CUSTOMERS” 50.0 KB 500 rows
. . imported “FGEDU”.”ORDERS” 25.0 KB 250 rows
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Job “SYSTEM”.”SYS_IMPORT_FULL_01″ successfully completed at Wed Mar 31 10:15:00 2026 elapsed 0 00:05:00
3.2 使用PL/SQL生成测试数据
使用PL/SQL脚本生成测试数据:
SQL> CREATE TABLE FGEDU.TEST_CUSTOMERS (
2 ID NUMBER PRIMARY KEY,
3 NAME VARCHAR2(100),
4 EMAIL VARCHAR2(100),
5 PHONE VARCHAR2(20),
6 REG_DATE DATE
7 );
Table created.
SQL> — 创建序列
SQL> CREATE SEQUENCE FGEDU.TEST_CUSTOMERS_SEQ START WITH 1 INCREMENT BY 1;
Sequence created.
SQL> — 创建生成测试数据的存储过程
SQL> CREATE OR REPLACE PROCEDURE FGEDU.GENERATE_TEST_DATA (p_count NUMBER) IS
2 BEGIN
3 FOR i IN 1..p_count LOOP
4 INSERT INTO FGEDU.TEST_CUSTOMERS (
5 ID,
6 NAME,
7 EMAIL,
8 PHONE,
9 REG_DATE
10 ) VALUES (
11 FGEDU.TEST_CUSTOMERS_SEQ.NEXTVAL,
12 ‘测试用户’ || i,
13 ‘test’ || i || ‘@fgedu.net.cn’,
14 ‘138’ || LPAD(i, 8, ‘0’),
15 SYSDATE – MOD(i, 365)
16 );17 END LOOP;18 COMMIT;19 END;20 /
Procedure created.
SQL> — 生成1000条测试数据
SQL> EXEC FGEDU.GENERATE_TEST_DATA(1000);
PL/SQL procedure successfully completed.
SQL> — 验证测试数据
SQL> SELECT COUNT(*) FROM FGEDU.TEST_CUSTOMERS;
COUNT(*)
———-
1000
SQL> — 查看测试数据示例
SQL> SELECT * FROM FGEDU.TEST_CUSTOMERS WHERE ROWNUM <= 5;
ID NAME EMAIL PHONE REG_DATE
———- ———- ——————– ———— ———
1 测试用户1 fgtest1@fgedu.net.cn 13800000001 2026-03-31
2 测试用户2 fgtest2@fgedu.net.cn 13800000002 2026-03-30
3 测试用户3 fgtest3@fgedu.net.cn 13800000003 2026-03-29
4 测试用户4 test4@fgedu.net.cn 13800000004 2026-03-28
5 测试用户5 test5@fgedu.net.cn 13800000005 2026-03-27
Part04-生产案例与实战讲解
4.1 性能测试数据生成
生成大量测试数据用于性能测试:
SQL> CREATE TABLE FGEDU.PERFORMANCE_TEST (
2 ID NUMBER PRIMARY KEY,
3 COL1 VARCHAR2(100),
4 COL2 NUMBER,
5 COL3 DATE,
6 COL4 VARCHAR2(200),
7 COL5 CLOB
8 );
Table created.
SQL> — 创建序列
SQL> CREATE SEQUENCE FGEDU.PERFORMANCE_TEST_SEQ START WITH 1 INCREMENT BY 1;
Sequence created.
SQL> — 启用并行DML
SQL> ALTER SESSION ENABLE PARALLEL DML;
Session altered.
SQL> — 生成100万条测试数据
SQL> INSERT /*+ PARALLEL(8) */ INTO FGEDU.PERFORMANCE_TEST (
2 ID,
3 COL1,
4 COL2,
5 COL3,
6 COL4,
7 COL5
8 )
9 SELECT
10 FGEDU.PERFORMANCE_TEST_SEQ.NEXTVAL,
11 ‘Test data ‘ || LEVEL,
12 LEVEL,
13 SYSDATE – MOD(LEVEL, 365),
14 ‘This is a test string for column 4. ‘ || LEVEL,
15 ‘This is a test CLOB value for performance testing. ‘ || LEVEL
16 FROM DUAL
17 CONNECT BY LEVEL <= 1000000;
1000000 rows created.
SQL> COMMIT;
Commit complete.
SQL> — 收集统计信息
SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS(‘FGEDU’, ‘PERFORMANCE_TEST’);
PL/SQL procedure successfully completed.
4.2 测试数据管理自动化
创建测试数据管理脚本:
$ cat test_data_manager.sh
#!/bin/bash
# test_data_manager.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# 配置参数
SOURCE_DB=”fgedudb”
TARGET_DB=”testdb”
SCHEMA=”FGEDU”
DATA_PUMP_DIR=”DATA_PUMP_DIR”
# 导出测试数据
export_test_data() {
echo “导出测试数据…”
expdp system/password@$SOURCE_DB \
DIRECTORY=$DATA_PUMP_DIR \
DUMPFILE=${SCHEMA}_test_data.dmp \
LOGFILE=expdp_test_data.log \
SCHEMAS=$SCHEMA \
TABLES=${SCHEMA}.CUSTOMERS,${SCHEMA}.ORDERS \
QUERY=${SCHEMA}.CUSTOMERS:”WHERE ROWNUM <= 1000" \
QUERY=${SCHEMA}.ORDERS:"WHERE CUSTOMER_ID IN (SELECT ID FROM ${SCHEMA}.CUSTOMERS WHERE ROWNUM <= 1000)"
}
# 导入测试数据
import_test_data() {
echo "导入测试数据..."
impdp system/password@$TARGET_DB \
DIRECTORY=$DATA_PUMP_DIR \
DUMPFILE=${SCHEMA}_test_data.dmp \
LOGFILE=impdp_test_data.log \
transform=mask:y
}
# 生成随机测试数据
generate_random_data() {
echo "生成随机测试数据..."
sqlplus system/password@$TARGET_DB << EOF
BEGIN
FOR i IN 1..500 LOOP
INSERT INTO ${SCHEMA}.TEST_DATA (
ID,
NAME,
VALUE,
CREATED_DATE
) VALUES (
${SCHEMA}.TEST_DATA_SEQ.NEXTVAL,
'Random Data ' || i,
DBMS_RANDOM.VALUE(1, 1000),
SYSDATE
);END LOOP;COMMIT;END;/EOF
}
# 清理测试数据
cleanup_test_data() {
echo "清理测试数据..."
sqlplus system/password@$TARGET_DB << EOF
TRUNCATE TABLE ${SCHEMA}.TEST_DATA;TRUNCATE TABLE ${SCHEMA}.CUSTOMERS;TRUNCATE TABLE ${SCHEMA}.ORDERS;EOF
}
# 主菜单
while true; do
echo ""
echo "测试数据管理工具"
echo "1. 导出测试数据"
echo "2. 导入测试数据"
echo "3. 生成随机测试数据"
echo "4. 清理测试数据"
echo "5. 退出"
echo ""
read -p "请选择操作: " choice
case $choice in
1)
export_test_data
;;2)
import_test_data
;;3)
generate_random_data
;;4)
cleanup_test_data
;;5)
echo "退出工具"
exit 0
;;*)
echo "无效选择,请重新输入"
;;esac
done
# 赋予执行权限
$ chmod +x test_data_manager.sh
# 运行测试数据管理工具
$ ./test_data_manager.sh
测试数据管理工具
1. 导出测试数据
2. 导入测试数据
3. 生成随机测试数据
4. 清理测试数据
5. 退出
请选择操作: 1
导出测试数据…
Export: Release 19.0.0.0.0 – Production on Wed Mar 31 10:00:00 2026
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Starting “SYSTEM”.”SYS_EXPORT_SCHEMA_01″: system/********@fgedudb DIRECTORY=DATA_PUMP_DIR DUMPFILE=FGEDU_test_data.dmp LOGFILE=expdp_test_data.log SCHEMAS=FGEDU TABLES=FGEDU.CUSTOMERS,FGEDU.ORDERS QUERY=FGEDU.CUSTOMERS:”WHERE ROWNUM <= 1000" QUERY=FGEDU.ORDERS:"WHERE CUSTOMER_ID IN (SELECT ID FROM FGEDU.CUSTOMERS WHERE ROWNUM <= 1000)"
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . exported "FGEDU"."CUSTOMERS" 100.0 KB 1000 rows
. . exported "FGEDU"."ORDERS" 50.0 KB 500 rows
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Master table "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_SCHEMA_01 is:
/oracle/admin/fgedudb/dpdump/FGEDU_test_data.dmp
Job "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully completed at Wed Mar 31 10:05:00 2026 elapsed 0 00:05:00
Part05-风哥经验总结与分享
5.1 测试数据管理最佳实践
- 建立测试数据管理的标准流程
- 使用自动化工具生成和管理测试数据
- 确保测试数据的质量和代表性
- 保护敏感数据,使用数据脱敏技术
- 定期更新测试数据,确保与生产环境同步
- 使用版本控制管理测试数据
- 为不同类型的测试创建专门的测试数据集
- 监控测试数据的使用情况,优化存储和性能
5.2 常见测试数据管理问题与解决方案
问题1:测试数据不足或不代表性
解决方案:使用多种方法生成测试数据,确保覆盖各种业务场景和边界条件。
问题2:测试数据管理效率低下
解决方案:自动化测试数据生成和管理过程,减少手动操作。
问题3:敏感数据泄露
解决方案:使用数据脱敏技术,确保测试数据中的敏感信息得到保护。
问题4:测试数据与生产环境不同步
解决方案:定期从生产环境更新测试数据,确保测试环境能够反映生产环境的最新状态。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
