本发明专利技术公开了一种基于ORACLE数据库的海量数据脱敏方法,包括如下步骤:S1:根据数据库中需要脱敏的表的数据量,对每个表进行数据分片;S2:根据表的数据量分配定义线程管道组数和线程数量;S3:执行表的所有线程管道的线程从数据库的原表中抽取数据分片脱敏后加载到目标表中,完成数据脱敏。本发明专利技术通过表数据分片,分片均匀,提高数据抽取性能,实现高速数据抽取;通过直通路径加载,并采用禁用日志提高加载性能,实现单表下的高速数据加载;设置线程总调度器,实现线程动态分配提高加载性能,实现多表下的高速数据加载;全程脱敏都在内存中操作,保证数据不落地,确保数据不泄漏。
Desensitization of massive data based on Oracle Database
【技术实现步骤摘要】
基于ORACLE数据库的海量数据脱敏方法
本专利技术涉及一种数据脱敏方法,尤其涉及一种基于ORACLE数据库的海量数据脱敏方法。
技术介绍
ORACLE数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。数据脱敏,指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。这样就可以在开发、测试和其它非生产环境以及外包环境中安全地使用脱敏后的真实数据集。ORACLE数据库作为关系数据库时,大量的敏感信息需要进行脱敏处理。现有的脱敏方法有以下两种:方案1:使用简单的JDBC方式脱敏。方案2:数据库维护人员通过执行ORACLE数据泵脚本将生产库A数据同步到测试库B,然后再对敏感字段执行update语法更新敏感数据。现有的脱敏方法存在以下问题:现有方案1会导致下面的问题:JDBC能抽取和加载数据,但当单表的数据量达到亿级时,会造成抽取和加载的性能都非常慢,甚至可能出现查询超时现象,无法完成脱敏任务的缺点。现有方案2会导致下面的问题:因为数据泵要导出文件,要两倍于源始数据的空间,如果数据量过大会导致源数据库服务器硬盘空间不足;文件导出将导致在脱敏过程中敏感数据外泄,用update语法更新导致脱敏后,数据会失去数据特征且无法保证业务关联性,或造成脱敏后数据变得单一;操作难度大,人工操作容易遗漏。
技术实现思路
本专利技术要解决的技术问题是提供一种基于ORACLE数据库的海量数据脱敏方法,解决上述问题。本专利技术为解决上述技术问题而采用的技术方案是提供一种基于ORACLE数据库的海量数据脱敏方法,包括如下步骤:S1:根据数据库中需要脱敏的表的数据量,对每个表进行数据分片;S2:根据表的数据量分配定义线程管道组数和线程数量;S3:执行表的所有线程管道的线程从数据库的原表中抽取数据分片脱敏后加载到目标表中,完成数据脱敏。进一步的,所述表的数据分片为均匀分片,具体包括:每个表单独使用ORACLE的sample()函数均匀取出表的N个物理存储地址ROWID,物理存储地址的数量根据ORACLE的表大小动态修改,直到抽取到合适的ROWID数量,然后将ROWID排序后两两为一区间划分成多个分片,分片完成后,表的所有分片SQL都放入该表的分片队列;如果表为普通表,则对表进行一次分片,如果是分区表,则对表的每个分区都进行一次分片。进一步的,所述表数据进行分区切片后,对分片进行重新排序,把不同的分区映射到不同磁盘进行I/O平衡,使多个线程能轮询获取到不同分区的分片,多个线程同时操作不同的磁盘。进一步的,所述步骤S2具体包括:S21:根据表的数据量将表分为四类:分类一:数据量为0MB-10MB;分类二:数据量为10MB-1GB;分类三:数据量1GB-10GB;分类四,数据量大于10GB;S22:根据表的数据量的分类给每个表分配合适的线程管道组数:分类一分配1组线程管道;分类二分配4组线程管道;分类三分配16组线程管道;分类四分配32组线程管道;S23:分配的线程数量为线程管道的组数的3倍,所述线程分为抽取线程、脱敏线程和加载线程,每一组线程管道由对应设置的抽取线程、脱敏线程和加载线程组成,对应设置的抽取线程、脱敏线程和加载线程通过队列进行数据传递,组成一条串行的线程管道,所述抽取线程和脱敏线程通过管道队列一进行数据传递,所述脱敏线程和加载线程通过管道队列二进行数据传递。进一步的,所述步骤S3中执行线程管道的线程具体包括:S311:线程管道的抽取线程去分片队列里轮询取出分片SQL来连接ORACLE数据库读取数据,将数据发送到管道队列一;S312:线程管道的脱敏线程从管道队列一拉取数据,进行数据脱敏,将脱敏后数据传递到管道队列二;S313:线程管道的加载线程从管道队列二拉取数据,再加载到目标数据表。进一步的,所述步骤S313中数据加载是通过直通路径加载到目标数据表,插入的数据通过ORACLE程序全局区直接把数据格式化成ORACLE块,然后由普通的ORACLE服务器进程把数据块写入目标数据表,把数据直接插入到段的高水位以上;数据加载到目标数据表的过程中禁用日志,生成最少量的REDO和UNDO,减少目标数据库的I/O。进一步的,进行单表的脱敏时,所述步骤S3中直接执行该表分配定义的每个线程管道的线程进行数据的抽取、脱敏和加载。进一步的,进行多表脱敏时,所述步骤S3中通过线程总调度器来调度线程来执行所有表的线程管道的线程进行数据的抽取、脱敏和加载,具体包括如下步骤:S321:在线程总调度器中配置总线程管道数和总表数;S322:线程总调度器将需要脱敏的所有表,按照数据量从大到小进行排序;S323:将每个表分配定义的线程数量和线程管道组数交由线程总调度器保存,统一分配执行顺序;S324:线程总调度器按照表的排序依次执行每个表的第一组线程管道的线程,然后按照表的排序依次执行每个表的第二组线程管道的线程,直到总线程管道数分配完毕;S325:线程总调度器监听线程管道,如果有线程管道的线程执行完毕,继续按照步骤S324的顺序执行线程管道的线程进行数据的抽取、脱敏和加载,当线程总调度器监听到有表的所有线程管道的线程都执行完毕,那么线程总调度器给该表打上完成标记,直到所有表都打上完成标记,则完成所有表数据的脱敏。进一步的,所述线程总调度器里存放有总管道数和总表数的配置值,所述总管道数和总表数的配置值通过主机CPU核心数和JVM内存大小计算得到或者根据任务指定。进一步的,进行多表脱敏时,不同的表映射到不同表空间磁盘以平衡I/O,使多个线程能轮询获取到不同表的不同分区的分片,多个线程同时操作不同的磁盘。本专利技术对比现有技术有如下的有益效果:本专利技术提供的基于ORACLE数据库的海量数据脱敏方法,通过表数据分片,分片均匀,提高数据抽取性能,实现高速数据抽取;通过直通路径加载,并采用禁用日志提高加载性能,实现单表下的高速数据加载;设置线程总调度器,实现线程动态分配提高加载性能,实现多表下的高速数据加载;全程脱敏都在内存中操作,保证数据不落地,确保数据不泄漏。附图说明图1为本专利技术实施例中基于ORACLE数据库的海量数据脱敏方法进行多表脱敏的示意图;图2为本专利技术实施例中基于ORACLE数据库的海量数据脱敏方法进行单表脱敏的示意图。具体实施方式下面结合附图和实施例对本专利技术作进一步的描述。图1为本专利技术实施例中基于ORACLE数据库的海量数据脱敏方法进行多表脱敏的示意图;图2为本专利技术实施例中基于ORACLE数据库的海量数据脱敏方法进行单表脱敏的示意图。请参见图1和图2,本专利技术实施例的基于ORACLE数据库的海量数据脱敏方法,包括如下步骤:第一步:根据数据库中需要脱敏的表的数据量,对每个表进行数据分片;对每个表单独使用ORACLE的sam本文档来自技高网...
【技术保护点】
1.一种基于ORACLE数据库的海量数据脱敏方法,其特征在于,包括如下步骤:/nS1:根据数据库中需要脱敏的表的数据量,对每个表进行数据分片;/nS2:根据表的数据量分配定义线程管道组数和线程数量;/nS3:执行表的所有线程管道的线程从数据库的原表中抽取数据分片脱敏后加载到目标表中,完成数据脱敏。/n
【技术特征摘要】
1.一种基于ORACLE数据库的海量数据脱敏方法,其特征在于,包括如下步骤:
S1:根据数据库中需要脱敏的表的数据量,对每个表进行数据分片;
S2:根据表的数据量分配定义线程管道组数和线程数量;
S3:执行表的所有线程管道的线程从数据库的原表中抽取数据分片脱敏后加载到目标表中,完成数据脱敏。
2.如权利要求1所述的基于ORACLE数据库的海量数据脱敏方法,其特征在于,所述表的数据分片为均匀分片,具体包括:每个表单独使用ORACLE的sample()函数均匀取出表的N个物理存储地址ROWID,物理存储地址的数量根据ORACLE的表大小动态修改,直到抽取到合适的ROWID数量,然后将ROWID排序后两两为一区间划分成多个分片,分片完成后,表的所有分片SQL都放入该表的分片队列;如果表为普通表,则对表进行一次分片,如果是分区表,则对表的每个分区都进行一次分片。
3.如权利要求2所述的基于ORACLE数据库的海量数据脱敏方法,其特征在于,所述表数据进行分区切片后,对分片进行重新排序,把不同的分区映射到不同磁盘进行I/O平衡,使多个线程能轮询获取到不同分区的分片,多个线程同时操作不同的磁盘。
4.如权利要求1所述的基于ORACLE数据库的海量数据脱敏方法,其特征在于,所述步骤S2具体包括:
S21:根据表的数据量将表分为四类:分类一:数据量为0MB-10MB;分类二:数据量为10MB-1GB;分类三:数据量1GB-10GB;分类四,数据量大于10GB;
S22:根据表的数据量的分类给每个表分配合适的线程管道组数:分类一分配1组线程管道;分类二分配4组线程管道;分类三分配16组线程管道;分类四分配32组线程管道;
S23:分配的线程数量为线程管道的组数的3倍,所述线程分为抽取线程、脱敏线程和加载线程,每一组线程管道由对应设置的抽取线程、脱敏线程和加载线程组成,对应设置的抽取线程、脱敏线程和加载线程通过队列进行数据传递,组成一条串行的线程管道,所述抽取线程和脱敏线程通过管道队列一进行数据传递,所述脱敏线程和加载线程通过管道队列二进行数据传递。
5.如权利要求4所述的基于ORACLE数据库的海量数据脱敏方法,其特征在于,所述步骤S3中执行线程管道的线程具体包括:
S311:线程管道的抽取线程去分片队列里轮询取出分片SQL来连接ORACLE数据库读取数据,将数据发送到管道队列一;
S312:线程管道...
【专利技术属性】
技术研发人员:程永新,宋辉,郭振宇,
申请(专利权)人:上海轻维软件有限公司,
类型:发明
国别省市:上海;31
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。