汤 梅
马钢股份有限公司,安徽 马鞍山 243000
摘 要 该文利用Oracle数据库技术,将在线数据库的数据实时同步到离线数据库,解决在线数据库不能保存长期数据的问题。并通过数据库优化,提升离线数据库的查询速度。
关键词:Db-link Oracle表分区 离线数据库
0 引言
在工业生产中,计算机过程控制系统(L2)能够完成实时数据采集与处理,并将数据存储在数据库中,用于数据分析。Oracle数据库是甲骨文公司的一款关系数据库管理系统,在数据库领域一直处于领先地位的产品,在计算机过程控制系统中广泛应用。
某钢厂过程控制系统数据库采用Oracle数据库保存产品生产过程数据,对质量、能耗、绩效分析等有重要作用。目前,数据库保存数据为近三个月的数据。随着企业对产品质量追溯和能耗分析,以及工业大数据的需求提升,实际生产中,3个月的数据无法满足需求。另一方面,现有数据库系统数据查询的响应时间过长,特别是在大量数据的查询上耗时过长,与实际需求不符。
针对上述问题,本文旨在搭建离线数据库,一方面保证长期数据的存储,另一方面通过优化,在数据量增加的情况下,不影响查询效率。
1 使用的主要技术
1.1 ORACLE表分区
ORACLE分区是一种处理超大型表、索引等的技术。通过将大表和索引分成可以管理的小块,从而避免了对每个表作为一个大的、单独的对象进行管理,为大量数据提供了可伸缩的性能。分区通过将操作分配给更小的存储单元,减少了需要进行管理操作的时间,并通过增强的并行处理提高了性能,通过屏蔽故障数据的分区,还增加了可用性。
Oracle表分区分为四种:范围分区,散列分区,列表分区和复合分区。
1.1DB-LINK技术
database link定义一个数据库到另一个数据库的路径的对象,允许你查询远程表及执行远程程序。通过db-link,可以像访问本地数据库一样访问远程数据库表中的数据。
1.2Oracle数据库索引
oracle索引是一种供服务器在表中快速查找一个行的数据库结构。合理使用索引能够大大提高数据库的运行效率。
1.3I/O负载均衡
从两个方面考虑:将非Oracle文件与Oracle文件分开放在不同的磁盘上,避免引起对磁盘资源的潜在争用;将数据库的段分别放在不同的表空间,并将高频率的I/O数据文件放在不同的磁盘或者控制器上面。
1.4数据库存储过程
数据库存储过程大大增强了SQL语言的功能和灵活性,用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算,完成对远程数据库数据的访问和本地存储。
1.5Oracle 定时任务
利用oracle定时任务(JOB),周期性地执行存储过程,实现离线数据库对在线数据的自动同步。
2 软件环境
数据库服务软件版本:oracle 11g x64 企业版
数据库客户端软件版本:oracle 10g vista x86
管理工具:toad 9.2 x86
操作系统:windows 2008 x64
3 实现过程
3.1 创建数据库
安装数据库服务软件,创建数据库,配置监听和本地net服务名。
通过服务软件(11G 64位 oracle)的Net Configure assist工具配置监听服务,客户端不需配置。
服务软件和客户端软件均需配置net服务。服务软件配置供DBlink使用,客户端配置供toad使用(因toad为32位软件,不能使用oracle 11g的64位驱动)。
服务和客户端均要配置本机net服务和远程net服务。
如果11g 64位未配置远程net服务, DB-link连接时将报“无法解析服务名”错误。
3.2 配置数据库
在不同分区,为重做日志文件增加组文件,为控制文件增加备份,提高容错。
1)增加重组日志组文件
执行下列sql语句。
alter database add logfile member '{target}\REDO01.LOG' to group 1;
alter database add logfile member '{target}\REDO02.LOG' to group 2;
alter database add logfile member
'{target}\REDO03.LOG' to group 3;
2)增加控制文件
首先执行如下sql语句:
Alter system set
control_files='{target}\CONTROL01.CTL','{target}\CONTROL02.CTL','{target}\CONT
ROL03.ctl' scope=spfile;
关闭数据库后,拷贝控制文件到目标位置,再启动数据库。
3.3 创建DBlink
以管理员sys登录本机数据库。注意,本地数据名和远程数据库不能重名。
执行如下脚本创建到远程数据库的连接:
create public database link "{SID}"
connect to {SCHEMA}
identified by "{PASSWORD}"
using '{SERVICE_NAME}';
本机对远程数据库A的操作以 “ 用户.表@A ” 的形式访问。
如要对远程数据库的A用户下的表tableB进行查询,执行如下语句:
Select * from a.tableB@A;
如果报错无法解析连接,请确认是否配置远程连接。
3.4 表分区的创建和拆分
本文采用范围分区,创建范围分区的关键字是"RANGE",创建该分区后,其中的数据可以根据分区键值指定的范围进行分布,当数据在范围内均匀分布时,性能最好。可选择表中数字字段或者时间字段进行分区。
如根据时间创建分区表:
create table {user}.{tableA}
partition by range({record})(
partition {PARTITION_NAME} values less than(to_date('2017/01/01 00:00:00','yyyy/mm/dd hh24:mi:ss')) tablespace {TABLESPACE_NAME},
partition {PARTITION_MAX} values less than(maxvalue) tablespace {TABLESPACE_NAME}) AS SELECT * FROM {table}@{remote_sid};
当需要拆分表空间时,执行如下脚本:
Alter table {user}.{tableA} split partition {PARTITION_MAX} at (to_date('2018/01/01 00:00:00','yyyy/mm/dd hh24:mi:ss')) into (partition {PARTITION_NAME} tablespace {TABLESPACE_NAME},partition {PARTITION_MAX} );
注意:以上表空间要先创建。
3.5 存储过程存储数据
创建存储过程,必要时可创建临时表,或为表添加标识字段,便于区别已同步数据和新数据。
3.6 创建JOBS
根据在线数据库各表的更新速度,配置相应的定时任务,调用存储过程,完成数据同步。
4 结束语
本文利用DB-LINK技术,结合oracle存储过程、定时任务,实现了离线数据库的搭建,可用于数据的长期保存。利用oracle表分区、I/O均衡、索引等,提升了数据表查询的速度。
参考文献
[1] 何明.ORACLE DBA基础培训教程-从实践中学习ORACLE DBA[M].北京:清华大学出版社,2006.
姓名:汤梅(1972年12月),女,大学本科,工程师,单位:宝武马钢股份有限公司 邮箱:mgxstangmei@magang.com.cn