Oracle存储结构
- 格式:docx
- 大小:22.30 KB
- 文档页数:11
oracle 文件层级概念
Oracle的文件层级概念主要涉及物理存储结构和逻辑存储结构两个层面。
1.物理存储结构:
o数据文件:存放数据库中的数据。
o控制文件:记录数据库的物理结构信息。
o临时文件:存放临时数据。
o撤销段:用于执行某些事务时的数据还原,保证事务的原子性和一致性。
o参数文件:包含Oracle数据库实例的配置信息。
2.逻辑存储结构:
o表:存储数据的主要构建单元。
o索引:提高检索效率的数据结构。
o视图:虚拟表,是对表或其他视图的查询结果进行的封装。
o序列:用于生成唯一数字,通常用于主键或唯一索引的值上。
Oracle的存储结构由底层的文件组成,这些文件以特定的方式组织和存储,以支持数据库的高效管理和数据的正确存储、检索和使用。
一、基本的Oracle存储结构:表空间与数据文件Oracle数据库中具有两种类型的存储:物理存储和逻辑存储。
上面的Oracle存储结构模型中,可以看出下列要素:∙每个数据库(Database)都必须由一个或多个表空间(Tablespace)组成。
每个表空间都必须属于并且只属于一个数据库。
∙每个表空间都必须由一个或多个数据文件(Datafile)组成。
每个数据文件都必须属于并且只属于一个表空间。
∙每个数据文件都必须由一个或多个操作系统块(Operation System Block)组成。
每个操作系统块都必须属于并且只属于一个数据文件。
∙每个表空间都可以包含一个或多个段(Segment)。
每个段都必须存在并且只能存在于一个表空间内。
∙每个段都必须由一个或多个区间(Extent)组成。
每个区间都必须属于并且只属于一个段。
∙每个区间都必须由一个或多个Oracle数据块(Oracle Block)组成。
每个Oracle 数据块都必须属于并且只属于一个区间。
∙每个区间都必须被定位并且只能定位在一个数据文件内。
数据文件中的空间可以被分配为一个或多个区间。
∙每个Oracle数据块都必须由一个或多个操作系统块组成。
每个操作系统块都可以是并且只能是一个Oracle数据块的部分。
1、物理存储结构物理结构是操作系统操作Oracle数据库时能够看见的结构。
1.1、Oracle数据文件数据文件由下列3部分组成:头部、区间(已分配的空间)以及空闲空间(未分配的空间)。
oracle16数据文件的头部(Header)将其标识为数据库的一部分,并且存储了该数据文件的细节,细节包括数据文件所属的表空间以及最后执行的检查点。
这样,Oracle就能够在启动时检查所有相关文件是否同步。
数据文件的剩余部分由区间和空闲空间组成,通过创建、删除和更改Oracle的段(Segment)逻辑存储组件就可以对这些剩余部分进行管理。
每个Oracle数据文件都只属于一个表空间。
oracle数据库体系架构详解在学习oracle中,体系结构是重中之重,⼀开始从宏观上掌握它的物理组成、⽂件组成和各种⽂件组成。
掌握的越深⼊越好。
在实际⼯作遇到疑难问题,其实都可以归结到体系结构中来解释。
体系结构是对⼀个系统的框架描述。
是设计⼀个系统的宏观⼯作。
这好⽐建⼀栋⼤楼。
你⾸先应该以图纸的⽅式把整个⼤楼的体系架构描述出来。
然后⼀点点的往⾥⾯填充东西。
下⾯我们先以⼀个图解的⽅式对oracle体系结构有⼀个基本了解根据⽰图,便于我们记忆,⽰图分三部分组成,左侧User Process、Server Process、PGA可以看做成Clinet端,上⾯的实例(Instance)和下⾯的数据库(Database)及参数⽂件(parameter file)、密码⽂件(password file)和归档⽇志⽂件(archived logfiles)组成Oracle Server,所以整个⽰图可以理解成⼀个C/S架构。
Oracle Server由两个实体组成:实例(instance)与数据库(database)。
这两个实体是独⽴的,不过连接在⼀起。
在数据库创建过程中,实例⾸先被创建,然后才创建数据库。
在典型的单实例环境中,实例与数据库的关系是⼀对⼀的,⼀个实例连接⼀个数据库,实例与数据库也可以是多对⼀的关系,即不同计算机上的多个实例打开共享磁盘系统上的⼀个公⽤数据库。
这种多对⼀关系被称为实际应⽤群集(Real Application Clusters,RAC)RAC极⼤提⾼了数据库的性能、容错与可伸缩性(可能耗费更多的存储空间)并且是oracle⽹格(grid)概念的必备部分。
下⾯我们来详细看⼀下oracle数据库的体系架构Oracle体系架构主要有两⼤部分组成:数据库实例(Instance)和数据库⽂件(database)数据库实例指数据库服务器的内存及相关处理程序,它是Oracle的⼼脏。
与Oracle性能关系最⼤的是SGA(System Global Area,即系统全局区活共享内存区),SGA包含三个部分:1、数据缓冲区,可避免重复读取常⽤的数据;2、⽇志缓冲区,提升了数据增删改的速度,减少磁盘的读写⽽加快速度;3、共享池,使相同的SQL语句不再编译,提升了SQL的执⾏速度。
Oracle体系结构研究摘要:阐述了Oracle数据库的基本架构和Oracle数据库理论中的主要概念。
Oracle体系结构由存储结构、内存结构和进程结构组成,其中,存储结构由物理存储结构及逻辑存储结构组成;内存结构由SGA和PGA组成;进程结构由用户进程和Oracle进程组成。
关键词:ORACLE体系结构;存储结构;内存结构;进程结构1 Oracle的存储结构Oracle的存储结构分为物理存储结构和逻辑存储结构。
1.1 物理存储结构主要由数据文件、控制文件、联机日志文件及数据库实例构成。
Oracle数据库中有许多初始化参数,这些参数用于对整个数据库进行设置或调整,如设置数据库名、数据库块大小、控制文件的名称和位置、数据库实例数等信息。
Oracle 把这些参数存放在一个文件中,这个文件就叫初始化参数文件。
启动数据库时,Oracle会读取参数文件中的值,并根据这些值对数据库实例(instance)进行设置。
具体说是Oracle先从初始化参数文件中获得控制文件的名称及位置,打开控制文件,然后再从控制文件中读取数据文件和联机日志文件的名称和位置,打开它们,因为表、索引等对象的数据就存放在数据文件中,从而就打开了数据库。
1.1.1 控制文件Oracle启动数据库时会访问控制文件,控制文件是在创建数据库的时候创建的,它是一个很小的二进制文件,记录了数据库的名称、创建数据库的时间、数据文件的名称和位置、联机日志文件的名称和位置及表空间等信息。
所以说一个数据库的控制文件是相当重要的,一旦被损坏,数据库将不能正常启动和运行。
所以DBA应该镜像控制文件,把每个镜像的控制文件分布到不同的物理磁盘上,发生灾难时既使其中一个控制文件被损坏,也不会使整个数据库限于瘫痪。
1.1.2 数据文件当用户在Oracle中创建数据库的时候,就创建了一个或多个数据文件,表和索引等对象的数据就物理地存放在数据文件中。
一个表的数据可能会存储在多个数据文件中,但一个数据文件只能属于一个数据库。
Oracle 逻辑存储结构逻辑存储结构是Oracle 数据库存储结构的核心内容,对Oracle 数据库的所有操作都会涉及到其逻辑存储结构。
数据库的逻辑结构是从逻辑的角度分析数据库的构成,即创建数据库后形成的逻辑概念之间的关系。
在逻辑上,Oracle 将保存的数据划分为一个个小单元来进行存储和维护,高一级的存储单元由一个或多个低一级的存储单元组成。
Oracle 的逻辑存储单元从小到大依次为:数据块(DA TA BLOCKS )、盘区(EXTENT )、段(SEGMENTS )和表空间(TABLE SPACES ),图2-2显示了各逻辑单位之间的关系。
数据库...表空间表空间段段盘区数据块盘区数据块段段数据库...表空间表空间段段盘区数据块盘区数据块段段图2-2 数据库的逻辑存储组成由图2-2可知,Oracle 数据库由多个表空间组成,而表空间又由许多段组成,段由多个盘区组成,盘区又由多个数据块组成。
1 数据块数据块是Oracle 用来管理存储空间的最小单元,也是执行数据库输入输出操作时的最小单位。
相对应地,操作系统执行输入输出操作的最小单位为一个操作系统块的大小。
在操作系统中,执行I/O 操作是以操作系统块为单位,而在Oracle 中,执行的I/O 操作以Oracle 数据块为单位。
Oracle 块的大小是操作系统块大小的整数倍。
以Windows NT 操作系统为例,NTFS 格式的磁盘分区一般为4KB 大小,因此Oracle 块的大小为8KB 等。
数据块的标准大小由初始化参数DB_BLOCK_SIZE 确定,具有标准大小的块被称为标准块。
Oracle 支持在同一个数据库中使用多种大小的块,与标准块大小不同的块称为非标准块。
可以通过查询V$PARAMETER 数据字典,可以获得参数DB_BLACK_SIZE 的值,该参数值同时也是数据块的尺寸大小。
例如:SQL> select name,value2 from v$parameter where name ='db_block_size';NAME V ALUE--------------------------- --------------------------db_block_size 8192在数据块中可以存储各种类型的数据,如表数据、索引数据、簇数据等。
oracle数据库物理储存结构和原理
Oracle数据库的物理储存结构是由数据文件、控制文件和重做日志文件三部分组成的。
其中,数据文件是存储实际数据的文件,控制文件是用于记录数据库的结构信息和管理数据文件的文件,重做日志文件则是用于记录数据库中数据的变动情况,以便进行恢复操作。
Oracle数据库的数据文件是由一系列数据块组成的,每个数据块的大小可以配置为2KB、4KB、8KB、16KB等不同大小。
同时,Oracle 数据库在存储数据时采用了多种技术,包括行式存储和列式存储等,以提高数据的存储效率和检索效率。
在Oracle数据库中,数据文件的存储方式也非常灵活,可以采用裸设备方式、文件系统方式、ASM(Automatic Storage Management)方式等多种方式进行存储。
不同的存储方式具有各自的优缺点,可以根据实际需求进行选择。
除了数据文件之外,Oracle数据库的控制文件也非常重要。
控制文件不仅记录了数据库的结构信息,还记录了数据文件的位置、大小等信息,以便进行管理和维护。
同时,Oracle数据库还采用了多个控制文件的方式进行备份和恢复操作,以提高数据库的安全性和可靠性。
最后,Oracle数据库的重做日志文件也是非常重要的一部分。
重做日志文件记录了数据库中数据的变动情况,包括事务的开始、提交、回滚等操作,以便在系统故障或其他异常情况下进行恢复操作。
重做日志文件采用了循环缓冲区的方式进行存储和管理,同时还支持
多种模式的归档方式,以满足不同的业务需求。
Oracle数据库是一种关系型数据库管理系统,它采用了客户/服务器模式,可以在各种不同的评台上运行。
其运行机制和基本原理是数据库领域的重要内容,我们将通过以下几个方面来详细介绍。
1. Oracle数据库的体系结构Oracle数据库的体系结构包括实例和数据库。
实例是由一个或多个进程组成,负责处理客户端的请求和管理数据库的物理结构;数据库是由数据文件组成,用来存储数据和控制文件。
实例和数据库之间通过监听器进行通信,客户端通过监听器访问数据库。
2. Oracle数据库的运行原理Oracle数据库的运行原理包括数据库的启动和关闭过程。
数据库的启动过程包括加载实例和数据库文件、分配内存、打开数据库并监听客户端请求;数据库的关闭过程包括关闭实例和数据库文件、释放内存、关闭数据库并停止监听器。
3. Oracle数据库的存储结构Oracle数据库的存储结构包括内存结构和磁盘结构。
内存结构包括数据库SGA和PGA,SGA用来存储数据库的共享数据和控制信息,PGA用来存储客户端的私有数据;磁盘结构包括数据文件、控制文件和日志文件,数据文件用来存储数据库的数据,控制文件用来记录数据库的元数据,日志文件用来记录数据库的事务日志。
4. Oracle数据库的并发控制Oracle数据库的并发控制包括锁和多版本并发控制。
锁是用来控制对共享资源的并发访问,包括共享锁、排他锁和意向锁;多版本并发控制是一种乐观并发控制方式,每个事务都有自己的版本,可以并发访问相同的数据,不会相互影响。
5. Oracle数据库的恢复机制Oracle数据库的恢复机制包括日志文件和闪回技术。
日志文件用来记录数据库的操作,包括重做日志和撤销日志,可以用来恢复数据库的状态;闪回技术可以回滚数据库到历史状态,包括闪回查询和闪回表。
通过以上内容的介绍,我们对于Oracle数据库的运行机制和基本原理有了一定的了解。
Oracle数据库作为一种成熟的关系型数据库管理系统,其运行机制和基本原理对于数据库管理员和开发人员来说是非常重要的,可以帮助他们更好地理解、管理和优化数据库。
Oracle 存储结构分析
一逻辑结构的层次与种类
1,表(table):
2,分区表(table partition):一个有很大数据量的表;我们可以把表分区,每个分区可以放在不同的段上。
以实现对表的优化
3,簇(cluster):将多个表集合在一起,这些表拥有相同的列;这些相同列放在同一个物理的段里面。
4,索引(index):
5,index-organized table(对应sqlserver的群集索引): 这些表中的数据以索引的大小按升序或者降序排列
6,index partition(索引的分区): 关于索引的数据分别存于不同的物理段里面
7,undo segment: 有序循环的方式存储(存放old value;读一致性;rollback ;recovery)
8,temporary: 临时段用来排序
9,LOB segment: 存放大的数据,oracle里面将这些数据并不放在表内部,而
是有专门一个段来存储
10,nested table(嵌套表):一个表中的某个字段的值是另外一个整表!
11,bootstrap segment:初始化我们的实例用的。
这个段不需要维护和管理!
二oracle存储参数的设定及继承问题
【记忆】默认为 Oracle default ===》 Tablespace (创建表空间时定义的参数) ====》 Segment(优先级最高)
【理解】初始参数 oracle block 的5倍;意思是说你创建一个表,即使里面没存数据,它已经占用了8k×5=40kB的空间(这里假设oracle block size 为8kB)
三创建表时可以单独为表指定存储参数
SQL> conn hr/123456@kk
已连接。
SQL> create table hello(id int)
2 tablespace bkeep
3 storage(initial 100k
4 next 100k);
【点子】我们来创建一个表空间test11,不带任何存储参数,然后打开oem看看它的存储参数(这些参数就是从oracle default哪里继承过来的!)
四extent的分配和重新分配
-当创建段时就分配空间
-当扩展段时给它分配空间
-强制分配空间给段(段可以跨数据文件,但不可以跨表空间;但是强制的段是不能跨数据文件获取空间的)
创建表时,最初始的空间一定会分配给它!
五【实验】强制分配分区
1,我们想给hr.hello表在system01.dbf上划分1M的空间,
结果:ORA-03284: 数据文件d:/oracle/oradata/kk/system01.dbf不是表空间BKEEP的成员
2,现在我们给bkeep表空间增加一个数据文件bkeep03.dbf
3,再来给hr.hello表在bkeep03.dbf上强制划分1M空间
4,这里我们不指定数据文件,那么会不会是在建表的时候指定的那个数据文件上继续扩展呢?
【思考】强制分配空间的时候会指定一个数据文件,当给该表分配的空间使用完以后,它将会怎么办?继续从该数据文件上面获取空间?还是从由local manage随机分配空间给它?
答案:
【重点】drop table xxx 和 truncate table xxx 都会释放存储空间
回收 hr.hello表没有用掉的空间
【记忆】data file分区的使用情况记录在文件的头(file hearder)里面;主要有两种信息:Used extent和Free extent
六database block 的大小
I/O读写的最小单位:读整个块到内存去;同理,内存的使用也以块大小为单位
块的大小是在创建表空间时指定的
DB_BLOCK_SIZE这个参数指定了缺省的块大小
七【实践检验真理】非标准块的使用方法:验证db_16k_cache_size值的影响
oracle现在支持多种块大小的表空间,但是要使用这个功能,必须指定支持对应块大小的内存缓存区!
step1:查看内存区为16k块分配的cache大小;结果:0
step2:创建表空间bkeep2 并指定其blocksize 为16KB;结果:报错
step3:为16k的block在内存中设置缓存;结果:没有足够内存来增加高速缓存的大小
step4:收缩其它缓存来给16k block 来用;结果:标准块缓存12 4, 腾出了8m
step5:现在创建块大小为16kB的表空间bkeep2 ;结果:成功!
step6:现在又想db_16k_cache_size=0;结果:bkeep2表空间在用,所以不能设为0
step7:把bkeep2表空间连同内容和数据文件全部删除,再来设
db_16k_cache_size=0 ;结果:ok!
【思考】块大小为8k;设对应的cache有如下特点。
db_cache_size=9m 结果:12M
db_cache_size=5m 结果:8M
八块的研究
header: 有多少行!使用空间的方式是 "自上往下"
free space: 保留用于更新的空闲空间
Data: 数据的填充方式是 "自下往上 "
块一级控制对空间的使用
总共有四个参数:PCTFREE、PCTUSED、INITRANS、MAXTRANS
PCTFREE
PCTUSED
【优化有关】用上面两个参数来控制块中预留的空间大小。
为什么要预留空间呢? 为了将来更新时防止数据变大而导致行移植!
为什么要避免行移植呢?行移植的意思就是一行记录被放到两个块里面,之间做了指针链接;将来查询这个数据的时候会读取两个块中的全部内容(block是最小读写单位),这样的话I/O负担就翻了一倍!
【说明】PCTFREE=20 是20% 控制insert,为了给将来update用!!呵呵,偏心吧!
九查看表的存储参数,在OEM里面
"事务处理数量" ---- ‘初始值’对应‘INITRANS’‘最大值’对应‘MAXTRNS’意思是:初始值允许一个事务对这个块的操作,最大的事务数量是255
十data block 的管理
自动段空间管理
手工管理段空间
自动段管理 --推荐使用
1,借助位图来跟踪当前段的free和use空间
2,对并发数据的插入有更好的性能!
【疑问】如果表空间中包含LOBs对象,那么就不能使用自动段管理(难道我们的系统。
???天哪!)
【常识】只能在创建表空间的时候指定段管理;以后在这个表空间中创建的对象都将继承它的段管理特性
【点子】在kong3表空间中创建表test11
OEM中查看表test11的存储特性
“空闲列表”为灰色的,说明它是自动管理的
十一【重点】如何通过字典视图查看空间管理信息??
每个对象所占有的分区都记录在DBA_EXTENTS里面
表空间还有多少自由空间? DBA_FREE_SPACE
表空间从物理上有“数据文件”组成;从逻辑上由“段”组成
物理线路:DBA_TABLESPACES--→DBA_DATA_FILES--→ DBA_FREE_SPACE +
DBA_EXTENTS
逻辑线路:DBA_TABLESPACES--→DBA_SEGMENTS---→ DBA_FREE_SPACE +
DBA_EXTENTS
【重点】这五个视图监控了系统存储这块的非常有用的信息;必须高度重视,经常使用!
DBA_TABLESPACES
DBA_SEGMENTS
DBA_DATA_FILES
DBA_FREE_SPACE
DBA_EXTENTS
【技巧】如何判断表空间是local管理还是数据字典管理
SELECT * FROM DBA_TABLESPACE
可以看到“表空间名称”“block_size”“初始分区”“next 分区”如果“next 分区”为空,说明是local管理
【技巧】计算price表所占空间
每个对象所占用的分区都记录在DBA_EXTENTS视图里面
根据这个,我们可以计算authors表所占的空间
计算price表所占空间
【记忆】表空间的作用:
分离段,方便管理
控制用户空间的分配(普通表,分区表,cluster,LOBs 等等)。