`
trophy
  • 浏览: 178626 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

oracle 存储结构

阅读更多

 

总体来说oracle的逻辑结构和物理结构是由块、区、段、表空间、数据文件、控制文件、重做日志文件组成,我们来看看他们的基本特性。

 

1.     

块是oracle管理存储空间的最小单元,一个块是由整数倍个操作系统块组成,假如我们是NTFS的硬盘分区格式,操作系统最小块为4K,那么我们的oracle的块就可能是4K8K12K等等,具体大小是由初始化参数DB_BLOCK_SIZE来确定的,不过这个参数是在安装oracle时确定的,一旦安装好oracle后即无法修改。

 

相对于块来说主要的操作参数有pctfree,pctused

a)Pctfree用于指定快中必须保留的最小空闲空间比列,如果你的表经常进行update操作的话,需要将空闲比列调大一点,因为update操作会消耗掉空闲空间,当一个块中的空闲空间因为太小而不够update操作消耗的话,系统就会增加新块,从而形成记录链接现象影响表的I/O功能。

b)pctused用于制定一个百分比,当块中已经使用的存储空间降低到这个百分比之下时,这个块材被重新标记为可用。这个参数是和pctfree配合使用的,pctused越大越有利于insert,pctfree越大越有利于update。当然这两个参数加起来不能超过100

 

1.     

区比块高一级,是由一系列连续的块组成。Oracle在进行存储空间分配、回收和管理时都是以区为基本单位的。注意这里只有连续的块才能被“装备”成一个区。

  区里主要的参数是initial,next,pctincrease

or43.gif

上图:初始大小<->initial,下一个大小<-> next,增量<-> pctincrease

具体含义很明确吧。

如上图,oracle首先将分配一个64K的初始区,满了之后再分配一个64K的后续区,满了就再分配第二个96K(64K+64K*50%)的后续区,再满了就分配144K(96K+96K*50%)的后续区,依次类推吧。

当然你也可以修改这些参数,不过参数修改之后,新的分配方式只有在以后为对象分配新的区时才会生效。

    上图的STORAGE这个关键词就是显式分区语句。通过在create table附加storage语法就能创建分区表。

1.     

段是比区更高一级的逻辑存储结构,段由多个区组成。这些区可以是连续的,也可以是不连续的。当用户在数据库中创建各种具有实际存储结构的对象时oracle就将为这些实际对象(表、索引)创建段,这些对象将全部保存在其段中,一般情况下一个对象只会有一个段。上两节的两张图其实就是段的管理界面。在上面的图中我们可以设置PCTFREE,PCTUSED,INIRANS,INITIAL,NEXT,PCTINCREASE等参数。

可以看出到段这一级就已经和存储空间没多大关系了,段已经是独立的逻辑存储结构了。也就是说,当一个表的分配空间不够的时候,oracle就为这个段再添加一个或多个区以存储数据。以上的工作机理和mysql有点相似,和sql server就不太一样了。

简单的说oracle里的段有4种类型:

l         数据段

l         索引段

l         临时段

l         回退段

a.数据段:存放数据的段,oracle中所有未分区的表都使用一个段来保存数据,而分区的表将为每个分区建立一个独立的数据段。

 

b.索引段:存放索引条目的段,oracle中所有未分区的索引都使用一个段来保存数据,而分区的索引将为每个分区建立一个独立的数据段。

 

c.临时段:放临时数据的段。最好不要在SYSTEM表空间中存放临时段,以避免产生碎片。

 

d.回退段:保存回退条目,oracle将被修改的数据的初始化版本保存在回退条目中,利用这些信息,用户可使用撤销未提交的事务的方式来恢复崩溃的实例,也就是roll back啦。当然关于回退段展开讲的话可能会很深,这里就不多说了。而且回退段的概念在以后的oracle版本中可能会弃用。

 

2.     表空间

表空间是最高一级的逻辑存储结构,oracle就是由若干个表空间组成。段就包含在表空间中。同过表空间,oracle就可以将相关的逻辑结构和对象组合在一起。比如我是我们学校的信息中心的DBA,那我就会将教务处,科研处,系办,后勤处等等分别创建成不同的表空间分别放在不同的硬盘上,这样可以避免I\O冲突和碎片。

 

对于表空间而言,除了普通的表空间外,oracle还有3个特殊的表空间

l         SYSTEM表空间

l         撤销表空间

l         临时表空间

 

a.SYSTEM表空间:

   SYSTEM表空间中存放着数据字典、PL\SQL程序的源代码和解析代码、数据库对象(视图、序列等等)的定义。

   数据字典:是一组保存数据库自身信息的内部系统表和视图(这个概念细讲起来那叫个难啊,我在上课的时候反正不管怎么讲,学生就是听不懂!结果讲啊讲啊我自己都能给绕进去,反正对于初学者来说如果C语言是佛学的话,那麽数据库(纯理论的)就是道教,玄!)。

 

b.撤销表空间:这个东西和事务有关系,也就是我们上面讲的rollback,只不过假如我们使用撤销表空间而不用回退段的话,我们就不需要显式的去控制回退段,我们只需要建立一个撤销表空间或者使用oracle默认的撤销表空间,然后,呵呵,让一切可怕的后果让oracle自己来扛吧。关于rollback这个策略,oraclesql server比较像,而mysql则还是原始的回退段,唉,毕竟是不花钱的玩意。

 

c.临时表空间:放临时数据的,最好为每个数据库用户都指定一个公用的临时表空间,如果不指定这这些临时数据就都会放在SYSTEM表空间中,从而产生大量的碎片。

可以在create table时通过default temporary tablespace  子句来指定临时表空间。

当然你如果已经创建了数据库也可以通过以下语法去添加:

CREATE TABLESPACE demo_mv

DATAFILE 'demo_mv.dbf' SIZE 10M AUTOEXTEND ON//创建表空间

EXTENT MANAGEMENT LOCAL AUTOALLOCATE;

 

CREATE TEMPORARY TABLESPACE temp_mv

TEMPFILE 'temp_mv.dbf' SIZE 5M AUTOEXTEND ON;

 

create table xx.demo_mv

...

default temporary tablespace temp_mv//demo_mv指定temp_mv临时表空间

 

d.表空间的存储管理方式

  oracle表空间存储管理方式其实是针对段设置的,我们除了可以在段级设置这些参数外(上两张图的界面),还可以在表空间级统一设置这些参数。当然这里又涉及到一个新的概念:字典管理方式表空间和本地管理方式表空间。

   字典管理方式:表空间使用数据字典来管理存储空间的分配。Sql server,mysql就是这种方式。

   本地管理方式:区的分配与管理信息都存放在表空间的数据文件中,与数据字典无关。

   总体说来两种方式没有什么谁优谁劣之分。

下面是使用字典管理方式的例子:

CREATE TABLESPACE  demo_mv  //创建demo_mv表空间

STORAGE ( INITIAL 64K NEXT 128K PCTINCREASE 50)//初始区64K,后续区128K,增量50%

EXTENT MANAGEMENT DICTIONARY;//使用字典管理方式

 

下面是使用本地管理方式的例子:

CREATE TABLESPACE  demo_mv  //创建demo_mv表空间

DATAFILE 'demo_mv.dbf' SIZE 10M AUTOEXTEND ON

EXTENT MANAGEMENT LOCAL AUTOALLOCATE;//使用本地管理方式,AUTOALLOCATE数据库自动分配

CREATE TABLESPACE  demo_mv  //创建demo_mv表空间

DATAFILE 'demo_mv.dbf' SIZE 10M AUTOEXTEND ON

EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;//使用本地管理方式,UNIFORM指所有区都一样大128K

 

  上面将的块、区、段、表都是oracle的逻辑存储结构,下面见的数据文件、控制文件、重做日志文件都是oracle的物理存储结构。

 

5.数据文件

    放数据的文件,主要由dbf文件组成。

6.控制文件

控制文件中记录着整个数据库的结构、每个数据文件的状况、系统SCN、检查点计数器等重要信息,在创建数据库时会让用户指定多个位置来存放控制文件,他们之间互为镜像,当其中任何一个发生故障,只需将其从ini文件中注释掉故障数据文件就可重新将数据启动。所以说它很重要。如果所有的文件全部毁坏了,那么就只能使用create controlfile来重新生成控制文件,其主要由CTL文件组成。

7.重做日志文件

  重做日志文件也称事务日志,在重做日志文件中存储着用户对数据库所进行的修改操作。这些文件是用来恢复数据库用的。

  总体说来oracle的物理物理存储结构和Mysql相似,和sql server就相差的有点远了。

 

转自:http://www.cnblogs.com/coffeeliu/archive/2006/07/25/459616.html

 

分享到:
评论

相关推荐

    oracle 逻辑存储结构

    oracle 逻辑存储结构

    帆软报表Oracle存储过程解决storeParameter1参数试用插件

    总结起来,"帆软报表Oracle存储过程解决storeParameter1参数试用插件"主要是针对在调用无参数Oracle存储过程时出现的异常问题提供的一种解决方案。通过安装并配置这个插件,用户可以顺利地在帆软报表中调用不包含...

    oracle存储过程-帮助文档

    Oracle存储过程是数据库管理系统中的一种重要特性,它允许开发者编写一系列SQL语句和PL/SQL块,形成可重复使用的代码单元。这篇博客“oracle存储过程-帮助文档”可能提供了关于如何创建、调用和管理Oracle存储过程...

    oracle存储过程常用技巧

    Oracle存储过程常用技巧 Oracle存储过程是一种强大的数据库对象,它可以帮助开发者简化复杂的业务逻辑,并提高数据库的安全性和性能。在 Oracle 中,存储过程是一种特殊的 PL/SQL 程序,它可以接受输入参数,执行...

    oracle 存储过程批量提交

    在Oracle存储过程中实现批量提交通常涉及到循环结构以及条件判断。以下是一个典型的示例代码段: ```sql DECLARE i INTEGER; BEGIN FOR v_Opr IN ( -- 查询或获取需要更新的数据集 SELECT * FROM your_table )...

    oracle存储结构、触发器、函数学习

    在学习这些概念时,"oracle存储过程.java"、"oracle触发器.java"和"oracle函数定义.java"这三个文件可能包含了相关的Java代码示例,这些示例通常会演示如何在Java应用程序中调用Oracle数据库的存储过程、触发器和...

    ORACLE存储过程最全教程

    Oracle存储过程是数据库管理系统Oracle中的一个关键特性,它允许开发者编写一组预编译的SQL和PL/SQL语句,以实现特定的业务逻辑或数据库操作。这篇教程将深入讲解Oracle存储过程的各个方面,帮助你从基础到高级全面...

    pb中执行oracle存储过程脚本

    标题中的“pb中执行oracle存储过程脚本”指的是在PowerBuilder(简称PB)环境中调用Oracle数据库的存储过程。PowerBuilder是一种可视化的开发工具,常用于构建数据驱动的应用程序。Oracle存储过程则是在Oracle数据库...

    ORACLE存储过程学习源码

    Oracle存储过程是数据库编程的重要组成部分,它允许程序员在数据库中执行复杂的业务逻辑和数据操作。这个"ORACLE存储过程学习源码"集合包含了从基础到高级的30个示例,是学习和掌握Oracle存储过程的理想资源。下面,...

    oracle存储过程学习经典

    综上所述,Oracle存储过程的学习不仅涉及基础语法和结构的理解,还需要掌握其高级特性和最佳实践,包括动态SQL、异常处理、性能优化以及与其他编程语言的集成。通过深入研究这些知识点,可以充分发挥Oracle存储过程...

    oracle存储过程返回多行多列的结构化数组,java调用并解析

    总结来说,本示例展示了如何在Oracle存储过程中定义和使用结构化数组,以及如何在Java中调用这些存储过程并解析返回的多行多列数据。通过这种方式,你可以高效地处理复杂的数据结构,同时利用Java的灵活性来处理这些...

    java调用oracle存储过程返回结果集,Record,cursor参照.pdf

    Java调用Oracle存储过程返回结果集Record、Cursor参照 Java调用Oracle存储过程返回结果集(Record)是指在Java程序中通过调用Oracle存储过程来获取记录集的结果。下面将详细介绍相关知识点。 创建Type 在Oracle中...

    oracle存储过程学习经典(实例)

    Oracle存储过程是数据库管理系统Oracle中的一个重要特性,它允许开发者编写一系列的SQL和PL/SQL语句,形成一个可重用的代码块。这个"Oracle存储过程学习经典(实例)"资源显然是为初学者设计的,旨在帮助他们掌握如何...

    oracle 物理存储结构

    oracle 物理存储结构

    oracle存储过程编写

    Oracle存储过程是数据库管理系统中的一种重要程序设计组件,它允许用户在数据库中执行复杂的操作序列,而不仅仅局限于简单的SQL查询。在Oracle中,存储过程是由一个或多个SQL语句和PL/SQL块组成的,可以被封装起来并...

    oracle存储过程实例

    Oracle存储过程是数据库管理系统中的一种重要特性,它允许...以上内容详细介绍了Oracle存储过程的概念、特点、语法结构以及参数的使用。通过存储过程,开发者能够构建复杂的应用逻辑,提高代码的组织性和数据库的性能。

    oracle 存储过程.txt

    Oracle存储过程是数据库管理系统Oracle中的一个重要特性,它允许开发者编写SQL和PL/SQL代码块,以执行复杂的业务逻辑和数据处理任务。存储过程可以被视作数据库中的可重用函数库,一旦创建,它们可以在多个应用程序...

    oracle存储过程总结.doc

    判断语句是 Oracle 存储过程中的一种控制结构,使用 if 语句可以根据条件执行不同的操作。例如: ```sql create or replace procedure test(x in number) is begin if x &gt; 0 then x := 0 - x; end if; if x = 0 ...

    VFP调用ORACLE存储过程数据库接口程序.pdf

    本文将介绍如何在Windows平台上利用VFP调用Oracle存储过程,以及实现Oracle数据库内容向VFP数据表的自动转换。 首先,我们来了解Oracle数据库。Oracle数据库是一种基于SQL的大型关系型数据库系统,它以支持多用户、...

Global site tag (gtag.js) - Google Analytics