基于DB-LINK技术搭建ORACLE离线数据库

发表时间:2021/7/1   来源:《科学与技术》2021年3月第7期   作者:汤梅
[导读] 该文利用Oracle数据库技术,将在线数据库的数据实时同步到离线数据库,解决在线数据库不能保存长期数据的问题。
        汤  梅
        马钢股份有限公司,安徽 马鞍山 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
投稿 打印文章 转寄朋友 留言编辑 收藏文章
  期刊推荐
1/1
转寄给朋友
朋友的昵称:
朋友的邮件地址:
您的昵称:
您的邮件地址:
邮件主题:
推荐理由:

写信给编辑
标题:
内容:
您的昵称:
您的邮件地址: