总体来说oracle的逻辑结构和物理结构是由块、区、段、表空间、数据文件、控制文件、重做日志文件组成,我们来看看他们的基本特性。
1. 块
块是oracle管理存储空间的最小单元,一个块是由整数倍个操作系统块组成,假如我们是NTFS的硬盘分区格式,操作系统最小块为4K,那么我们的oracle的块就可能是4K、8K、12K等等,具体大小是由初始化参数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。
上图:初始大小<->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这个策略,oracle和sql 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 ITL(事务槽)
2013-07-10 10:14 2424ITL描述: ITL(Interested Transac ... -
【转】Oracle TM锁 TX锁
2013-05-12 23:42 1445转自RuleV5:http://blog.csdn.net/ ... -
【转】Oracle: sqlnet.ora、listener.ora、tnsnames.ora的配置
2013-05-07 22:29 902转自 http://blog.csdn.net/wenlel ... -
v$parameter, v$parameter2, v$system_parameter, v$system_parameter2, v$spparamete
2013-05-07 15:05 1322转自:http://blog.csdn.net/huang_ ... -
SQL 连接(左连接,右连接,全连接,内连接,交叉连接,自连接) (转)
2013-02-02 23:10 1033最近公司在招人,同事问了几个自认为数据库可以的应聘者关于库连 ... -
Oracle 回收站 (转)
2013-02-01 17:19 816我们都比较熟悉windows中的回收站,文件删除后放到回收 ... -
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
2011-03-13 14:02 747近日在配置Oracle 10G的 ... -
ORA-28000: the account is locked
2011-03-12 19:36 1805迁移项目,一切弄完后启动服务器,Hibernate报错:OR ... -
ORA-01578: ORACLE 数据块损坏 一种解决方案 (转)
2011-03-11 15:32 31472os: winxp db: 10g r2 错误提 ... -
oracle的备份与恢复 (转)
2011-03-11 14:28 1191oracle中的不使用rman的备 ... -
pctused, pctfree, pctincrease , 行迁移 & 行链接 (转)
2011-03-09 19:48 1457关于pctincrease与空间 ... -
表空间管理 用户管理 日志文件管理
2011-03-08 14:09 8001、表空间管理和用户管理 --创建数据表 ... -
oracle initrans maxtrans
2011-03-07 10:35 4015initrans用于对数据块的行级并行操作的控制。首先介绍事 ... -
oracle analyze table(转)
2011-03-04 16:19 1540首先创建四个临时表t1 ... -
oracle 高水位线(转)
2011-03-04 14:30 2544高水位线实验: -- 创建test3表 SQL> cre ... -
Oracle SQL 优化 (转)
2011-03-03 15:16 705Oracle SQL的优化规则: 尽量少用IN操作符,基本上所 ... -
EXECUTE IMMEDIATE用法小解(转)
2011-03-03 14:33 666EXECUTE IMMEDIATE 代替了以前Oracle8i ... -
Oracle distinct的用法(转)
2011-03-03 09:37 833distinct这个关键字来过滤掉多余的重复记录只 ... -
oracle float(b)(转)
2011-03-02 14:48 1174今天有人问我,他把字段类型设计成float(2)后,插入数 ... -
oracle10g PGA 管理(转)
2011-02-24 09:59 1612一、概述 SGA,PGA,UGA都是Oracle管理的 ...
相关推荐
oracle 逻辑存储结构
总结起来,"帆软报表Oracle存储过程解决storeParameter1参数试用插件"主要是针对在调用无参数Oracle存储过程时出现的异常问题提供的一种解决方案。通过安装并配置这个插件,用户可以顺利地在帆软报表中调用不包含...
Oracle存储过程是数据库管理系统中的一种重要特性,它允许开发者编写一系列SQL语句和PL/SQL块,形成可重复使用的代码单元。这篇博客“oracle存储过程-帮助文档”可能提供了关于如何创建、调用和管理Oracle存储过程...
Oracle存储过程常用技巧 Oracle存储过程是一种强大的数据库对象,它可以帮助开发者简化复杂的业务逻辑,并提高数据库的安全性和性能。在 Oracle 中,存储过程是一种特殊的 PL/SQL 程序,它可以接受输入参数,执行...
在Oracle存储过程中实现批量提交通常涉及到循环结构以及条件判断。以下是一个典型的示例代码段: ```sql DECLARE i INTEGER; BEGIN FOR v_Opr IN ( -- 查询或获取需要更新的数据集 SELECT * FROM your_table )...
在学习这些概念时,"oracle存储过程.java"、"oracle触发器.java"和"oracle函数定义.java"这三个文件可能包含了相关的Java代码示例,这些示例通常会演示如何在Java应用程序中调用Oracle数据库的存储过程、触发器和...
Oracle存储过程是数据库管理系统Oracle中的一个关键特性,它允许开发者编写一组预编译的SQL和PL/SQL语句,以实现特定的业务逻辑或数据库操作。这篇教程将深入讲解Oracle存储过程的各个方面,帮助你从基础到高级全面...
标题中的“pb中执行oracle存储过程脚本”指的是在PowerBuilder(简称PB)环境中调用Oracle数据库的存储过程。PowerBuilder是一种可视化的开发工具,常用于构建数据驱动的应用程序。Oracle存储过程则是在Oracle数据库...
Oracle存储过程是数据库编程的重要组成部分,它允许程序员在数据库中执行复杂的业务逻辑和数据操作。这个"ORACLE存储过程学习源码"集合包含了从基础到高级的30个示例,是学习和掌握Oracle存储过程的理想资源。下面,...
综上所述,Oracle存储过程的学习不仅涉及基础语法和结构的理解,还需要掌握其高级特性和最佳实践,包括动态SQL、异常处理、性能优化以及与其他编程语言的集成。通过深入研究这些知识点,可以充分发挥Oracle存储过程...
总结来说,本示例展示了如何在Oracle存储过程中定义和使用结构化数组,以及如何在Java中调用这些存储过程并解析返回的多行多列数据。通过这种方式,你可以高效地处理复杂的数据结构,同时利用Java的灵活性来处理这些...
Java调用Oracle存储过程返回结果集Record、Cursor参照 Java调用Oracle存储过程返回结果集(Record)是指在Java程序中通过调用Oracle存储过程来获取记录集的结果。下面将详细介绍相关知识点。 创建Type 在Oracle中...
Oracle存储过程是数据库管理系统Oracle中的一个重要特性,它允许开发者编写一系列的SQL和PL/SQL语句,形成一个可重用的代码块。这个"Oracle存储过程学习经典(实例)"资源显然是为初学者设计的,旨在帮助他们掌握如何...
oracle 物理存储结构
Oracle存储过程是数据库管理系统中的一种重要程序设计组件,它允许用户在数据库中执行复杂的操作序列,而不仅仅局限于简单的SQL查询。在Oracle中,存储过程是由一个或多个SQL语句和PL/SQL块组成的,可以被封装起来并...
Oracle存储过程是数据库管理系统中的一种重要特性,它允许...以上内容详细介绍了Oracle存储过程的概念、特点、语法结构以及参数的使用。通过存储过程,开发者能够构建复杂的应用逻辑,提高代码的组织性和数据库的性能。
Oracle存储过程是数据库管理系统Oracle中的一个重要特性,它允许开发者编写SQL和PL/SQL代码块,以执行复杂的业务逻辑和数据处理任务。存储过程可以被视作数据库中的可重用函数库,一旦创建,它们可以在多个应用程序...
判断语句是 Oracle 存储过程中的一种控制结构,使用 if 语句可以根据条件执行不同的操作。例如: ```sql create or replace procedure test(x in number) is begin if x > 0 then x := 0 - x; end if; if x = 0 ...
本文将介绍如何在Windows平台上利用VFP调用Oracle存储过程,以及实现Oracle数据库内容向VFP数据表的自动转换。 首先,我们来了解Oracle数据库。Oracle数据库是一种基于SQL的大型关系型数据库系统,它以支持多用户、...