1. 首页 > Oracle教程 > 正文

Oracle教程FG196-数据子集

本教程详细介绍Oracle数据库的数据子集技术,包括数据子集的概念、实现方法、配置步骤和最佳实践。风哥教程参考Oracle官方文档Security部分,旨在帮助数据库管理员创建包含部分数据的测试环境,提高开发和测试效率。

内容大纲

Part01-基础概念与理论知识

1.1 数据子集概述

数据子集是指从生产数据库中提取部分数据,创建一个较小的测试或开发环境。数据子集的主要目的是:

  • 减少测试环境的存储空间需求
  • 提高测试和开发的效率
  • 降低数据传输和备份的时间
  • 保护敏感数据
  • 便于在开发环境中重现生产问题

1.2 Oracle数据子集技术

Oracle数据库提供了多种数据子集技术,包括:

  • 数据泵导出导入(Data Pump Export/Import)
  • Oracle Data Subset Pack
  • SQL脚本和存储过程
  • 外部工具和第三方解决方案

Part02-生产环境规划与建议

2.1 数据子集策略制定

制定数据子集策略时,需要考虑以下因素:

  • 数据子集的大小和范围
  • 数据的相关性和完整性
  • 敏感数据的处理
  • 性能和存储需求
  • 数据子集的更新频率

2.2 数据子集方法选择

常见的数据子集方法包括:

  • 按行选择:基于条件筛选数据
  • 按表选择:选择特定的表
  • 按比例选择:随机选择一定比例的数据
  • 分层选择:保持数据的层次结构
  • 时间范围选择:选择特定时间范围内的数据

Part03-生产环境项目实施方案

3.1 使用数据泵进行数据子集

使用数据泵导出特定条件的数据:

# 创建数据泵导出参数文件
$ cat expdp_subset.par

DIRECTORY=DATA_PUMP_DIR
DUMPFILE=fgedu_subset.dmp
LOGFILE=expdp_subset.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)"

# 执行数据泵导出
$ expdp system/password@fgedudb parfile=expdp_subset.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_subset.par
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_subset.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_subset.dmp logfile=impdp_subset.log

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_subset.dmp logfile=impdp_subset.log
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . imported “FGEDU”.”CUSTOMERS” 100.0 KB 1000 rows
. . imported “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
Job “SYSTEM”.”SYS_IMPORT_FULL_01″ successfully completed at Wed Mar 31 10:15:00 2026 elapsed 0 00:05:00

3.2 使用Oracle Data Subset Pack

Oracle Data Subset Pack提供了更高级的数据子集功能:

# 启动Oracle Data Subset Pack
$ cd /oracle/oracle_subset_pack
$ ./subset_manager.sh

Oracle Data Subset Pack Manager v19.3.0

1. Create Subset Definition
2. Execute Subset
3. Manage Subset Definitions
4. Exit

Enter your choice: 1

# 创建子集定义
$ ./subset_manager.sh -create -name “FGEDU Test Subset” -source fgedudb -target testdb -schemas FGEDU

Subset definition created successfully.
ID: 1
Name: FGEDU Test Subset
Source: fgedudb
Target: testdb
Schemas: FGEDU

# 配置表筛选条件
$ ./subset_manager.sh -configure -id 1 -table FGEDU.CUSTOMERS -condition “ROWNUM <= 1000" $ ./subset_manager.sh -configure -id 1 -table FGEDU.ORDERS -condition "CUSTOMER_ID IN (SELECT ID FROM FGEDU.CUSTOMERS WHERE ROWNUM <= 1000)"

Table FGEDU.CUSTOMERS configured successfully.
Table FGEDU.ORDERS configured successfully.

# 执行数据子集
$ ./subset_manager.sh -execute -id 1

Subset execution started.
Processing table FGEDU.CUSTOMERS…
Extracted 1000 rows from FGEDU.CUSTOMERS
Processing table FGEDU.ORDERS…
Extracted 500 rows from FGEDU.ORDERS
Subset execution completed successfully.

Part04-生产案例与实战讲解

4.1 基于时间范围的数据子集

创建基于时间范围的数据子集:

# 创建数据泵参数文件
$ cat expdp_time_subset.par

DIRECTORY=DATA_PUMP_DIR
DUMPFILE=fgedu_time_subset.dmp
LOGFILE=expdp_time_subset.log
SCHEMAS=FGEDU
TABLES=FGEDU.ORDERS
QUERY=FGEDU.ORDERS:”WHERE ORDER_DATE >= TO_DATE(‘2026-01-01’, ‘YYYY-MM-DD’) AND ORDER_DATE < TO_DATE('2026-02-01', 'YYYY-MM-DD')"

# 执行导出
$ expdp system/password@fgedudb parfile=expdp_time_subset.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_time_subset.par
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . 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_time_subset.dmp
Job “SYSTEM”.”SYS_EXPORT_SCHEMA_01″ successfully completed at Wed Mar 31 10:05:00 2026 elapsed 0 00:05:00

4.2 分层数据子集案例

创建保持层次结构的数据子集:

# 创建数据泵参数文件
$ cat expdp_hierarchy.par

DIRECTORY=DATA_PUMP_DIR
DUMPFILE=fgedu_hierarchy.dmp
LOGFILE=expdp_hierarchy.log
SCHEMAS=FGEDU
TABLES=FGEDU.CUSTOMERS,FGEDU.ORDERS,FGEDU.ORDER_ITEMS
QUERY=FGEDU.CUSTOMERS:”WHERE CUSTOMER_TYPE = ‘VIP’ AND ROWNUM <= 100" QUERY=FGEDU.ORDERS:"WHERE CUSTOMER_ID IN (SELECT ID FROM FGEDU.CUSTOMERS WHERE CUSTOMER_TYPE = 'VIP' AND ROWNUM <= 100)" QUERY=FGEDU.ORDER_ITEMS:"WHERE ORDER_ID IN (SELECT ID FROM FGEDU.ORDERS WHERE CUSTOMER_ID IN (SELECT ID FROM FGEDU.CUSTOMERS WHERE CUSTOMER_TYPE = 'VIP' AND ROWNUM <= 100))"

# 执行导出
$ expdp system/password@fgedudb parfile=expdp_hierarchy.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_hierarchy.par
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . exported “FGEDU”.”CUSTOMERS” 10.0 KB 100 rows
. . exported “FGEDU”.”ORDERS” 15.0 KB 150 rows
. . exported “FGEDU”.”ORDER_ITEMS” 20.0 KB 300 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_hierarchy.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:数据子集更新频率

解决方案:根据开发和测试需求,制定合理的数据子集更新计划,确保测试环境的及时性。

更多视频教程www.fgedu.net.cn

学习交流加群风哥微信: itpux-com

学习交流加群风哥QQ113257174

风哥提示:数据子集是提高开发和测试效率的重要手段,需要根据实际需求选择合适的方法。

更多学习教程公众号风哥教程itpux_com

from oracle:www.itpux.com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息