深入剖析Oracle数据库处理思路,揭示高效优化技巧 (oracle数据库处理思路)

Oracle数据库是目前非常流行的企业级关系数据库系统,它的高效处理能力得到了全球众多企业用户和开发人员的认可和信赖。然而,Oracle数据库也是相当复杂的系统,需要深入剖析其处理思路,才能揭示高效优化技巧,从而更好地应对业务需求和挑战。

一、Oracle数据库的处理思路

Oracle数据库的处理思路可以概括为:

1. 建立数据模型

2. 设计数据库结构

3. 根据业务需求进行实现

4. 优化查询性能,提高数据访问速度

1. 建立数据模型

在建立数据模型之前,需要明确业务需求,分析业务数据的特点和关系,细致地设计出数据模型。数据模型是数据在计算机系统中表示的方式,是Oracle数据库系统的基础。在建立数据模型的过程中,我们应该注意以下几个方面:

1) 正确区分实体和关系

在建立数据模型时,必须要区分清楚实体和关系的概念。实体是指数据中具有特定属性的对象,如人员、订单、产品等。而关系则是指不同实体之间的联系,它可以是一对一、一对多、多对一或多对多。

2) 确定主键

主键是数据表中必须要设立的一个字段,它的作用是唯一标识数据表中的每一条记录,因此必须要选择一个能够唯一标识每一条记录的字段做为主键。

3) 确定外键

外键是指一个表中的字段引用另一个表的主键,用来建立两个不同表之间的关系。外键在建立时应遵循以下原则:

a. 确保引用制约关系,保证数据的完整性。

b. 尽可能避免多级引用。

c. 慎用级联删除和级联更新。

2. 设计数据库结构

在设计数据库结构时,需要依据数据模型来设计相关表的结构和属性。对于数据表的设计,需要遵循以下规则:

1) 数据表命名应符合命名规范。

2) 表字段应该包括必填字段和非必填字段。

3) 表结构需要符合之一范式、第二范式和第三范式。

4) 字段类型的选择应该根据实际需求进行权衡。

5) 避免错误的设计,例如避免使用用户口令或业务数据作为表名或字段名等。

3. 根据业务需求进行实现

在设计发展之后,必须依据需求完成业务实现,这是一个很长的过程,但这一过程中应该注意以下几个方面:

1) 严格遵循设计方案

根据设计方案进行开发和实现,遵循约定和规范。

2) 合理授权

对数据库的访问权限和管理权限进行合理授权,确保该权限足以满足业务需求,但同时保护数据的安全性。

3) 合理维护

定期对数据库进行备份和恢复,采取技术手段对数据库进行性能调优、资源监控等。

4. 优化查询性能,提高数据访问速度

在满足业务需求的基础上,我们还需要优化查询性能,提高数据访问速度,从而改善用户体验。优化数据访问时,我们应该注意以下几点:

1) 使用索引

索引是优化查询性能的重要手段,可以快速定位需要查询的数据,减小查询开销。但是,过多或者不必要的索引,也会增加系统的开销和负担,因此要注意合理创建索引。

2) 避免使用子查询和全表扫描

子查询和全表扫描是常见的查询性能瓶颈,我们应该避免这些情况的出现。对于复杂查询,可以采用联结查询的方式来实现。

3) 根据业务需求进行分区

对于数据量较大的表,可以根据业务需求进行分区,将数据按照一定规则放置在不同的物理位置上,提高查询速度。

4) 使用视图

视图是一个虚表,可以根据实际需求动态生成,可以用于避免根据复杂的查询操作以及数据关联产生的性能问题。

二、高效优化技巧

1. 参数优化

参数优化是优化Oracle数据库性能的一项非常重要的技巧。参数是Oracle数据库中的一个组成部分,它存储了系统和应用程序的配置信息。通过对参数进行优化,可以使Oracle数据库的性能得到显著提升。

2. SQL语句优化

SQL语句是Oracle数据库处理数据的核心,对SQL语句进行优化,可以提高数据库的性能。SQL语句优化的主要方法包括以下几个方面:

1) 避免模糊查询

模糊查询是比较消耗性能的操作,应该避免在SQL语句中使用 ‘%’、’_’等操作符。

2) 避免使用子查询

子查询是会降低数据库性能的操作,我们应该尽可能避免使用子查询。

3) 避免使用非等值连接

非等值连接是降低数据库性能的主要原因之一。我们应该尽可能使用等值连接。

4) 充分利用索引

合理使用索引可以优化SQL语句的执行效率,提高数据库的性能。

5) 对数据量较大的表使用分区

对于数据量较大的表,可以使用分区表,将表分成几个子表,可以提高查询效率。

3. 硬件优化

硬件优化是提高Oracle数据库性能的另一个重要途径。我们可以通过增加内存、扩大磁盘容量等方式来提高数据库性能。

4. 数据库结构优化

数据库结构优化是提高Oracle数据库性能的另一个关键。通过对数据库结构进行优化,可以减少数据冗余,提高查询效率。

结论

通过对oracle数据库处理思路的深入剖析和高效优化技巧的揭示,我们可以更好地理解和应用Oracle数据库,提高数据库的性能,满足业务需求和挑战,为企业的发展提供更加有力的支持。

相关问题拓展阅读:

  • ORACLE实例和ORACLE数据库详解
  • Oracle数据库基本知识

ORACLE实例和ORACLE数据库详解

导读:oracle数据库是一种大型数据库系统,一般应用于商业,部门,它的功能很强大,能够处理大批量的数据,在网络方面也用的非常多。不过,一般的中小型企业都比较喜欢用mysql, SQL server等数据库系统,它的操作很简单,功能也非常齐全。只是比较oracle数据库而言,在处理大量数据方面有些不如。

一、ORACLE实例大缓

1、ORACLE 实唯春例——包括内存结构与后台进程

System Global Area(SGA) 和 Background Process 称为数据库的实例。

2、ORACLE 数据库——物理操作系统文件的

一系列物理文件的(数据文件,控制文件,联机日志,参数文件等)

3、系统全局共享区System Global Area(SGA)

System Global Area是一块巨大的共享内存区域,他被看做是Oracle数据库的一个大缓冲池,这里的数据可以被ORACLE的各个进程共用。其大小可以通过如下语句查看:

SQL select * from v$sga;

NAME VALUE

Fixed Size 39816

Variable Size

Database Buffers 1.049E+09

Redo Buffers

更详细的信息可以参考V$sgastat、V$buffer_pool

主要包括以下几个部分:

a、 共享池(Shared pool)

共享池是SGA中最关键的内存片段,特别是在性能和可伸缩性上。一个太小的共享池会扼杀性能,使系统停止,滚山模太大的共享池也会有同样的效果,将会消耗大量的CPU来管理这个共享池。不正确的使用共享池只会带来灾难。共享池主要又可以分为以下两个部分:

SQL语句缓冲(Library Cache)

当一个用户提交一个SQL语句,Oracle会将这句SQL进行分析(parse),这个过程类似于编译,会耗费相对较多的时间。在分析完这个SQL,Oracle会把他的分析结果给保存在Sharedpool的LibraryCache中,当数据库第二次执行该SQL时,Oracle自动跳过这个分析过程,从而减少了系统运行的时间。这也是为什么之一次运行的SQL比第二次运行的SQL要慢一点的原因。

下面举例说明parse的时间

SQL select count(*) fromscpass ;

COUNT(*)

243

Elapsed: 00:00:00.08

这是在Share_pool 和Data buffer 都没有数据缓冲区的情况下所用的时间

SQL alter system flush SHARED_POOL;

System altered.

清空Share_pool,保留Data buffer

SQL select count(*) from scpass ;

COUNT(*)

243

Elapsed: 00:00:00.02

SQL select count(*) from scpass ;

COUNT(*)

243

Elapsed: 00:00:00.00

从两句SQL 的时间差上可以看出该SQL 的Parse 时间约为00:00:00.02

对于保存在共享池中的SQL语句,可以从V$Sqltext、v$Sqlarea中查询到,对于编程者来说,要尽量提高语句的重用率,减少语句的分析时间。一个设计的差的应用程序可以毁掉整个数据库的Sharepool,提高SQL语句的重用率必须先养成良好的变成习惯,尽量使用Bind变量。

数据字典缓冲区(Data Dictionary Cache)

显而易见,数据字典缓冲区是ORACLE特地为数据字典准备的一块缓冲池,供ORACLE内部使用,没有什么可以说的。

上文的内容相对来说还是很基础的,所以对于刚刚入门的初学者来说,学习初期,好好的研究一下本文中介绍的内容,相信对大家的入门学习会很有帮助的。

Oracle数据库基本知识

Oracle数据库基本知识

  Oracle Database,又名OracleRDBMS,或简称Oracle。是甲骨文公司的一款笑液关系数据库管理系统。本文为大家分享的是Oracle数据库的基本知识,希望对大家有所帮助!

  它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的适应高吞吐量的数据库解决方案。

  介绍

  ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前更流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。比如SilverStream就是基于数据库的一种中间件。ORACLE数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。但它的所有知识,只要在一种机型上学习了ORACLE知识,便能在各种类型的机器上使用它。

  Oracle数据库最新版本为OracleDatabase 12c。Oracle数据库12c引入了一个新的多承租方架构,使用该架构可轻松部署和管理数据库云。此外,一些创新特性可更大限度地提高资源使用率和灵活性,如Oracle Multitenant可快速整合多个数据库,而Automatic Data Optimization和Heat Map能以更高的密度压缩数据和对数据分层。这些独一无二的技术进步再加上在可用性、安全性和大数据支持方面的主要增强,使得Oracle数据库12c 成为私有云和公有云部署的理想平台。

  就业前景

  从就业与择业的角度来讲,计算机相关专业的大学生从事oracle方面的技术是职业发展中的更佳选择。

  其一、就业面广:ORACLE帮助拓展技术人员择业的广度,全球前100强企业99家都在使用ORACLE相关技术,中国机构,大中型企事业单位都能有ORACLE技术的工程师岗位,大学生在校期间兴趣广泛,每个人兴趣特长各异,不论你想进入金融行业还是电信行业或者机构,ORACLE都能够在你的职业发展中给你最强有力的支撑,成为你最贴身的金饭碗。

  其二、技术层次深:如果期望进入IT服务或者产品公司,Oracle技术能够帮助提高就业的深度。Oracle技术已经成为全球每个IT公司必选的软件技术之一,熟练掌握Oracle技术能够为从业人员带来技术应用上的优势,同时为IT技术的深入应用起到非常关键的作用。掌握 Oracle技术,是IT从业人员了解全面信息化整体解决方案的基础。

  其三、职业方向多:Oracle数据库管理方向、Oracle开发及系统架构方向、Oracle数据建模数据仓库等方向。

  Oracle数据库漏洞分析:无需用户名和密码进入你的数据库

  一般性的数据库漏洞,都是在成功连接或登录数据库后实现入侵;本文介绍两个在2023年暴露的Oracle漏洞,通过这两种漏洞的结合,可以在不掌握用户名/密码的情况下入侵Oracle,从嫌陪而完成对数据的窃取或者破坏。这两个漏洞就是CVE和CVE。

  引言

  国内外很多重碰者物要的系统都采用Oracle作为数据存储的数据库;在Oracle中存储着企业或大量敏感的信息,在金钱或政治的诱导下,内外部黑客会想法利用管理、网络、主机或数据库的自身漏洞尝试入侵到数据库中,以达到自身的目的。

  本文的作者通过对Oracle俩种漏洞的组合研究,设计了一套在不掌握用户名/密码的方式入侵到Oracle中;这种方法,比传统的需要登录到数据库中的入侵方法,具有更大的安全隐患和破坏性。

  本文希望通过对这两个漏洞和攻击方法的介绍,能够引起相关人员的重视,完善对数据库安全的措施。

  1、概要介绍

  本文提供的方法是基于漏洞CVE和CVE对oracle数据库的攻击测试的方法。

  CVE漏洞是Oracle允许攻击者在不提供用户名/密码的’情况下,向远程“TNS Listener”组件处理的数据投毒的漏洞。攻击者可利用此漏洞将数据库服务器的合法“TNS Listener”组件中的数据转向到攻击者控制的系统,导致控制远程组件的数据库实例,造成组件和合法数据库之间的中间人攻击、会话劫持或拒绝服务攻击。

  CVE漏洞是Oracle Database 10g/11g身份验证协议实现中存在一个设计缺陷,攻击者无需认证即可远程获取数据库用户密码哈希相关数据,从而可以离线暴力破解用户密码,进一步控制数据库系统。

  我们通过如下的步骤和过程可以实现对Oracle的入侵:

  (1)利用CVE进行TNS劫持,在监听下利用远程注册,注册同名数据库实例;

  (2)新登陆的用户,在TNS的负载均衡策略下,有可能流量登录到伪造的监听服务上;

  (3)该监听服务对用户的登陆过程进行监控,并将相关数据流量转发到真实的数据库上;

  (4)利用CVE获得通讯过程中的认证相关信息;

  (5)对认证相关信息进行离线的暴力破解,获得登陆的密码;

  (6)试用破解的用户名/密码登陆Oracle,完成对Oracle中数据的访问;

  2、通过CVE进行TNS劫持

  该漏洞存在于Oracle的所有版本,并且Oracle至今仅是发布了警告性通知,并未提供解决方案。

  要想利用CVE漏洞做TNS劫持,首先需要了解TNS机制。如下图所示oracle 通过在本地解析网络服务名到目标主机IP地址,服务端口号,目标数据库名,把这些信息发送到oracle服务器端监听程序,最后再由监听程序递送DBMS。

  其中关键点在于监听会按照目标数据库名递送到名称正确的数据库。那么如果一个监听下有2个同名数据库。监听将自动按照负载均衡把这次访问发送到负载低的数据库上,进行连接访问。数据库注册到监听的方法就决定了,能否同时注册同名数据库在同一个监听下。注册方式分为本地注册和远程注册,通过修改参数可以调整为远程注册。

  下面是一段可用的TNS劫持的过程:

.在劫持机上创建一个和目标数据库实例同名的数据库实例。

.在劫持机上修改 tnsnames.ora 文件

  添加

  listener_name=

  (DESCRIPTION=

  (ADDRESS=(PROTOCOL=tcp)(HOST=目标机器IP)(PORT=目标机器端口)))

.在劫持机上用SQL*Plus 顺序执行下面步骤。

.$ sqlplus / as sysdba

. SQL> ALTER SYSTEM SETREMOTE_LISTENER=’LISTENER_NAME’;

. SQL> ALTER SYSTEM REGISTER;

.多个客户端,向数据库发起登录。会劫持到一部分客户端的登录信息。

  最终达到效果如下图所示:

  按照猜想同一个监听下有2个同名实例。客户端访问监听,监听按照客户端中的数据库名信息分配数据库,由于监听下有2个同名数据库,客户端链接很可能会被分配到劫持者的数据库实例下,再通过配置劫持者的本地监听把客户端请求指回原数据库。结构图如下:

  测试客户端链接196次。目标数据库实例获得113次,劫持数据库实例获得83次基本满足负载均衡的假设。(注上面实例是local server 下面实例是 remote server)

  通过以上方式我们可以截获约一半左右客户端发送到服务器的合法链接。其中获得了服务器IP、端口号、数据库位置、实例名、登录用户名等一系列明文信息和4组密文信息(AUTH_SESSKEY,AUTH_SESSKEY_CLIENT,AUTH_PASSWORD,AUTH_VFR_DATA)。

  3、通过CVE进行密码破解

  CVE受影响的数据库版本有11.2.0.3,11.2.0.2,11.1.0.7,有使用了SHA-1加密算法的10.2.0.5和10.2.0.4,还有使用了SHA-1的10.2.0.3(运行在z/OS下)版本。

  虽然这个漏洞在11.2.0.3中已经解决,但是仅仅数据库客户端和服务器都升级到11.2.0.3并且sqlnet.ora文件中增加SQLNET.ALLOWED_LOGON_VERSION=12才有效。

  正如CVE所描述Oracle为了防止第三方通过网络获取登录信息包。而对密码进行了加密处理。本部分只以oracle11.1密码如何破解为例进行说明。

  在发起连接之后(oracle牵手完成),客户端和服务器经过协商确定要使用的验证协议。要完成这个任务,客户端首先向数据库发送一个包。包中包含客户端主要信息和所请求的加密方式。数据库确认加密方式有效后,发送一个确认服务包如下图所示:

  在通过安全网络服务完成任何所要求的协议之后,数据库用户被O3logon(oracle验证方式) 进行验证,这个协议执行一个序列来向数据库证明客户端拥有密码。为了避免网络第三方截获到密码。首先客户端发送用户名到数据库来表明用户身份。数据库端根据加密协议,其中96位的作为数据库端密钥,20位的作为偏移量,它对每个连接都是不同的。一个典型的数据库端发给客户端的密钥如下:

  AUTH_SESSKEY…..COCDD89FIGODKWASDF……………………

  客户端根据加密算法向服务器端发送96位的客户端密钥和64位的密码密钥。服务器端计算客户端传入的密码密钥。如果计算后密码密文和数据库中存储的16位密码密文一致则验证通过。

  根据这个过程可知上面TNS劫持包中取得的加密信息:AUTH_SESSKEY,AUTH_SESSKEY_CLIENT,AUTH_PASSWORD,AUTH_VFR_DATA这四个值是解密的关键。我们把他们按照SHA1,MD5,AES192进行一系列处理。最终通过数据字典碰撞得到密码明文。

  下面这段网上公布的一段示例代码,这段代码与笔者的思路不完全相同,但也能大概地说明这个漏洞的攻击过程:

  import hashlib

  from Crypto.Cipher import AES

  def decrypt(session,salt,password):

  pass_hash= hashlib.sha1(password+salt)

  key =pass_hash.digest() + ‘\x00\x00\x00\x00’

  decryptor= AES.new(key,AES.MODE_CBC)

  plain =decryptor.decrypt(session)

  returnplain

  session_hex =’EA2023CB8B46EC68BDC161F8CA170363C1E6F57F3EBC6435F541A8239B6DBA16EAABAE78767′

  salt_hex = ‘A7193E546377EC56639E’

  passwords =

  for password in passwords:

  session_id= decrypt(session_hex.decode(‘hex’),salt_hex.decode(‘hex’),password)

  print’Decrypted session_id for password “%s” is %s’ %(password,session_id.encode(‘hex’))

  ifsession_id == ‘\x08\x08\x08\x08\x08\x08\x08\x08’:

  print’PASSWORD IS “%s”‘ % password

  break

  4、建议的预防措施

  根据以上两段分析,我们可以有如下的预防措施:

  (1)在条件许可的情况下,对Oracle进行补丁升级,对Oracle打cpuoct补丁;注意对于cpuoct补丁要求服务器端和应用服务器端同时升级,否则应用系统将无法访问Oracle;

  (2)若无法对Oracle升级,要购买或安装具备虚拟补丁功能的数据库安全产品,防止对CVE和CVE的利用;

  (3)建立足够强健的口令,不要使用8位以下密码,或者字典库中的口令。

oracle数据库处理思路的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于oracle数据库处理思路,深入剖析Oracle数据库处理思路,揭示高效优化技巧,ORACLE实例和ORACLE数据库详解,Oracle数据库基本知识的信息别忘了在本站进行查找喔。

香港服务器首选后浪云,2H2G首月10元开通。
后浪云(www.IDC.Net)提供简单好用,价格厚道的香港/美国云服务器独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。

THE END