Oracle 数据库基础教程2007
第 7章 逻辑存储结构
Oracle 数据库基础教程2007
本章内容
Oracle的逻辑存储结构
表空间
数据块
区
段
Oracle 数据库基础教程2007
本章要求
掌握 Oracle9i数据库逻辑结构组成
掌握表空间的作用及其管理
掌握扩展区的结构及其管理
掌握段的作用及其管理
Oracle 数据库基础教程2007
7.1逻辑存储结构概述
逻辑结构单元类型
数据块,BLOCK
区,EXTENT
段,SEGMENT
表空间,TABLESPACE
数据库的存储层次
数据库逻辑存储结构之间的关系
Oracle 数据库基础教程2007
Database
Logical Physical
Tablespace Data file
OS blockOracleblock
Segment
Extent
Oracle 数据库基础教程2007
表空间数据段
………
区间数据块 (段片)
Oracle 数据库基础教程2007
7.2表空间
表空间概述
表空间的管理
Oracle 数据库基础教程2007
7.2.1表空间概述
表空间概念
是 Oracle数据库的一个主要逻辑组织结构,Oracle数据库在逻辑上可以划分为一系列的逻辑空间,每一个逻辑空间就可以称为一个表空间。
一个数据库由有一个或多个表空间构成,不同表空间用于存放不同应用的数据,表空间大小决定了数据库的大小。一个表空间对应一个或多个数据文件,数据文件大小决定了表空间的大小。一个数据文件只能从属于一个表空间。
表空间是存储模式对象的容器,一个数据库对象只能存储在一个表空间中(分区表和分区索引除外),但可以存储在该表空间所对应的一个或多个数据文件中。若表空间只有一个数据文件,则该表空间中所有对象都保存在该文件中;若表空间对应多个数据文件,则表空间中的对象可以分布于不同的数据文件中。
Oracle 数据库基础教程2007
数据库、表空间、数据文件、数据库对象之间的关系数据库表空间 1
数据文件 1
数据库对象 1
数据文件 2
数据库对象 3
数据库对象 2
表空间 2
数据文件 3
数据库对象 4
数据文件 4
数据库对象 5
数据库对象 6
Oracle 数据库基础教程2007
表空间的分类
SYSTEM 表空间
每个 Oracle数据库必须具有一个默认系统表空间,即
SYSTEM表空间,该表空间是在创建数据库时自动创建的。
SYSTEM表空间主要用于存储下列信息
数据库的数据字典。
PL/SQL程序的源代码和解释代码,包括存储过程、函数、包、
触发器等。
数据库对象的定义,如表、视图、序列、同义词等。
开发者不应把模式对象(如表等)存放在 SYSTEM表空间,以免影响数据库的稳定性与执行效率。
Oracle 数据库基础教程2007
非 SYSTEM 表空间
撤消表空间
专门进行回退信息的自动管理
临时表空间:
保存 SQL语句在执行过程中所产生的临时数据(
主要是在排序时产生的临时数据)
用户表空间
保存用户数据
Oracle 数据库基础教程2007
表空间的管理方式
字典管理方式
在字典管理方式下,表空间使用数据字典来管理存储空间的分配,当进行区的分配与回收时,Oracle将对数据字典中的相关基础表进行更新,同时会产生回退信息和重做信息
本地管理方式
在本地管理方式中,区的分配与管理信息都存储在表空间的数据文件中,而与数据字典无关。表空间在每个数据文件中维护一个“位图”结构,用于记录表空间中的所有区的分配情况,
因此区在分配与回收时,Oracle将对数据文件中的位图进行更新,不会产生回退信息或重做信息。
在 Oracle9i数据库中创建表空间时,表空间的默认管理方式为本地管理方式。
Oracle 数据库基础教程2007
表空间的管理方式的比较
由于在区分配与回收过程中不需要对数据字典进行访问,提高了表空间存储管理操作的速度和并发性。
能够避免表空间存储管理操作中的递归现象,提高了存储空间管理操作性能。
由于本地管理的临时表空间在使用过程中不会产生任何重做信息和撤销信息,因此既使查询操作中包含排序,对数据库来说也完全是只读操作,这样能够在保留可查询性同时,将整个数据库设置为只读状态。这种数据库可以作为备用数据库使用。
简化了表空间的存储管理,由 Oracle自动完成存储管理操作。
降低了用户对数据字典的依赖性。
不存在磁盘碎片问题,因为必要的信息都存储在数据文件的位图中,而不是保存在数据字典中
Oracle 数据库基础教程2007
表空间管理策略
在 Oracle9i数据库中,系统表空间主要用于存储数据字典等
Oracle自身对象和数据,并建议将所有的用户对象和数据保存在其他表空间中,因此需要为数据库创建非系统表空间。
使用多个表空间
将数据字典与用户数据分离
将回滚数据与用户数据分离
将表空间的数据文件分散保存到不同的硬盘上
能够将表空间设置为脱机状态或联机状态
将表空间设置为只读状态
能够为某种特殊用途专门设置一个表空间
能够更加灵活的为用户设置表空间配额
Oracle 数据库基础教程2007
7.2.2表空间的管理(本地管理方式)
表空间的创建
表空间的修改
表空间的备份
表空间的删除
表空间信息查询
Oracle 数据库基础教程2007
创建表空间
在创建本地管理方式下的表空间时,首先应该确定表空间的名称、类型、对应的数据文件的名称和位置以及区的分配方式、段的管理方式。
表空间名称不能超过 30个字符,必须以字母开头,
可以包含字母、数字以及一些特殊字符(如 #,_、
$)等;表空间的类型包括普通表空间、临时表空间和撤销表空间;表空间中区的分配方式包括自动扩展( AUTOALLOCATE)和定制
( UNIFORM)两种;段的管理包括自动管理
( AUTO)和手动管理( MANUAL)两种。
Oracle 数据库基础教程2007
创建永久表空间
创建表空间使用 CREATE TABLESPACE语句来实现,该语句包含以下几个子句:
DATAFILE:设定表空间对应的一个或多个数据文件。
EXTENT MANAGEMENT:指定表空间的管理方式,
取值为 LOCAL(默认)或 DICTIONARY。
AUTOALLOCATE(默认)或 UNIFORM:设定区的分配方式。
SEGMENT SPACE MANAGEMENT:设定段的管理方式,其取值为 MANUAL(默认)或 AUTO。
Oracle 数据库基础教程2007
创建表空间示例
为 ORCL数据库创建一个永久性的表空间,区自动扩展,段采用手动管理方式
CREATE TABLESPACE ORCLTBS1 DATAFILE
'D:\ORACLE\ORADATA\ORCL\ORCLTBS1_1.DBF'
SIZE 50M;
为 ORCL数据库创建一个永久性的表空间,区定制分配,段采用手动管理方式
CREATE TABLESPACE ORCLTBS2 DATAFILE
'D:\ORACLE\ORADATA\ORCL\ORCLTBS2_1.DBF
SIZE 50M EXTENT MANAGEMENT LOCAL
UNIFORM SIZE 512K
Oracle 数据库基础教程2007
为 ORCL数据库创建一个永久性的表空间,区自动扩展,段采用自动管理方式 。
CREATE TABLESPACE ORCLTBS3 DATAFILE
'D:\ORACLE\ORADATA\ORCL\ORCLTBS3_1.DBF'
SIZE 50M
SEGMENT SPACE MANAGEMENT AUTO;
为 ORCL数据库创建一个永久性的表空间,区定制分配,段采用自动管理方式。
CREATE TABLESPACE ORCLTBS4 DATAFILE
'D:\ORACLE\ORADATA\ORCL\ORCLTBS4_1.DBF'
SIZE 50M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE
512K SEGMENT SPACE MANAGEMENT AUTO;
Oracle 数据库基础教程2007
创建临时表空间
使用 CREATE TEMPORARY TABLESPACE 语句创建临时表空间,用 TEMPFILE子句设置临时数据文件。
需要注意的是临时表空间中区的分配方式只能是
UNIFORM,而不能是 AUTOALLOCATE,因为这样才能保证不会在临时段中产生过多的存储碎片。
为 ORCL数据库创建一个临时表空间。
CREATE TEMPORARY TABLESPACE ORCLTEMP1
TEMPFILE
'D:\ORACLE\ORADATA\ORCL\ORCLTEMP1_1.DBF'
SIZE 20M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE
16M;
Oracle 数据库基础教程2007
创建撤销表空间
可以使用 CREATE UNDO TABLESPACE语句创建撤销表空间,但是在该语句中只能指定 DATAFILE和 EXTENT
MANAGEMENT LOCAL两个子句,而不能指定其他子句。
为 ORCL数据库创建一个撤销表空间。
CREATE UNDO TABLESPACE ORCLUNDO1
DATAFILE
'D:\ORACLE\ORADATA\ORCL\ORCLUNDO1_1.DBF'
SIZE 20M;
如果要在数据库使用该撤销表空间,需要设置参数
UNDO_MANAGEMENT=AUTO和参数
UNDO_TABLESPACE= ORCLUNDO1。
Oracle 数据库基础教程2007
修改表空间
扩展表空间
为表空间添加数据文件
可以通过 ALTER TABLESPACE… ADD DATAFILE语句为永久表空间添加数据文件,通过 ALTER TABLESPACE… ADD
TEMPFILE语句为临时表空间添加数据文件。
为 ORCL数据库的 ORCLTBS1表空间添加一个大小为 10M的新的数据文件。
ALTER TABLESPACE ORCLTBS1 ADD DATAFILE
'D:\ORACLE\ORADATA\ORCL\ORCLTBS1_2.DBF' SIZE 10M;
为 ORCL数据库的 ORCLTEMP1表空间添加一个大小为 10M的临时数据文件。
ALTER TABLESPACE ORCLTEMP1 ADD TEMPFILE
'D:\ORACLE\ORADATA\ORCL\ORCLTEMP1_2.DBF ' SIZE 10M;
Oracle 数据库基础教程2007
改变数据文件的大小
可以通过改变表空间已有数据文件的大小,达到扩展表空间的目的。
将 ORCL数据库的 ORCLTBS1表空间的数据文件
ORCLTBS1_2.DBF大小增加到 20M。
ALTER DATABASE DATAFILE
'D:\ORACLE\ORADATA\ORCL\ORCLTBS1_2.DBF'
RESIZE 20M;
Oracle 数据库基础教程2007
改变数据文件的扩展方式
如果在创建表空间或为表空间增加数据文件时没有指定
AUTOEXTEND ON选项,则该文件的大小是固定的。如果为数据文件指定了 AUTOEXTEND ON选项,当数据文件被填满时,数据文件会自动扩展,即表空间被扩展了。
将 ORCL数据库的 ORCLTBS1表空间的数据文件
ORCLTBS1_2.DBF设置为自动扩展,每次扩展 5M空间,
文件最大为 100M。
ALTER DATABASE
DATAFILE'C:\ORACLE\ORADATA\ORCL\ORCLTB
S1_2.DBF'AUTOEXTEND ON NEXT 5M MAXSIZE
100M;
Oracle 数据库基础教程2007
修改表空间可用性
语法
ALTER TABLESPACE tablespace_name
ONLINE|OFFLINE
离线状态的表空间是不能进行数据访问的
一些表空间必须是在线状态,
SYSTEM表空间
存放在线回退信息的撤销表空间
临时表空间
Oracle 数据库基础教程2007
修改表空间读写性
语法
ALTER TABLESPACE tbs_name READ ONLY|READ WRITE
表空间只有满足下列要求才可以转换为只读状态:
表空间处于联机状态;
表空间中不能包含任何活动的回退段;
如果表空间正在进行联机数据库备份,则不能将它设置为只读状态。
因为联机备份结束时,Oracle更新表空间数据文件的头部信息。
表空间的备份
Oracle 数据库基础教程2007
表空间的备份
语法
ALTER TABLESPACE tablespace_name
BEGIN|END BACKUP
在数据库进行热备份(联机备份)时,需要分别对表空间进行备份。对表空间进行备份基本步骤为:
使用 ALTER TABLESPACE… BEGIN BACKUP语句将表空间设置为备份模式。
在操作系统中备份表空间所对应的数据文件。
使用 ALTER TABLESPACE… END BACKUP语句结束表空间的备份模式。
Oracle 数据库基础教程2007
表空间删除
语法
DROP TABLESPACE tablespace_name
如果表空间非空,应带有子句:
INCLUDING CONTENTS
若要删除操作系统下的数据文件,应带有子句,AND
DATAFILES
示例
DROP TABLESPACE userdata
INCLUDING CONTENTS AND DATAFILES;
Oracle 数据库基础教程2007
查询表空间信息
表空间信息,
DBA_TABLESPACES
V$TABLESPACE
数据文件信息,
DBA_DATA_FILES
V$DATAFILE
临时文件信息,
DBA_TEMP_FILES
V$TEMPFILE
Oracle 数据库基础教程2007
查询表空间的名称,区管理方式,存储分配方式,类型等基本信息
SELECT
TABLESPACE_NAME,EXTENT_MANAGEMENT,ALL
OCATON_TYPE,CONTENTS FROM
DBA_TABLESPACES;
查询表空间的数据文件信息
SELECT
FILE_NAME,BLOCKS,TABLESPACE_NAME FROM
DBA_DATA_FILES;
查询数据文件的基本信息
SELECT NAME,FILE#,RFILE#,STATUS,BYTES
FROM V$DATAFILE;
Oracle 数据库基础教程2007
询数据文件的自动增长方式
SELECT
TABLESPACE_NAME,FILE_NAME,AUTOE
XTENSIBLE FROM DBA_DATA_FILES;
查询临时数据文件的信息
SELECT
TABLESPACE_NAME,FILE_NAME,AUTOE
XTENSIBLE FROM DBA_TEMP_FILES;
Oracle 数据库基础教程2007
利用 OEM管理表空间
创建表空间
改变表空间
合并表空间中的存储碎片
为表空间添加数据文件
更改已有数据文件
Oracle 数据库基础教程2007
Oracle 数据库基础教程2007
7.3数据块 ( BLOCK)
数据块概述
数据块结构
数据块的管理
Oracle 数据库基础教程2007
数据块概述
最小的 I/O单元
包括一个或者多个 OS BLOCK
在数据库创建时设置,不可更改
DB_BLOCK_SIZE 参数是缺省值
Oracle9i 中分为标准块和非标准块
Oracle 数据库基础教程2007
数据库块结构
Header
Free space
Data
包含块头部、表目录行目录等
Oracle 数据库基础教程2007
Header:包括块头部,表目录,行目录,事务条目等块头部:块类型及地址信息,物理地址,段类型表目录:数据块所存储的表的相关信息行目录:保存表中数据 (记录 )的相关信息
Free space:尚未使用的存储空间
Data:已经使用的空间,保存数据库对象的数据
空闲空间和行空间共同构成存储区数据库块结构
Oracle 数据库基础教程2007
数据块的存储空间管理
避免发生行链接和行迁移
当向表格中插入数据时,如果行的长度大于块的大小,
行的信息无法存放在一个块中,需要使用多个块存放行信息,称为行链接。
当表格数据被更新时,如果更新后的数据长度大于块长度,Oracle将整行的数据从原数据块迁移到新的数据块中,只在原数据块中留下一个指针指向新数据块,称为行迁移。
块管理分为自动和手动两种(表空间的管理方式)
Oracle 数据库基础教程2007
手动管理块存储参数
PCTFREE
PCTFREE参数指定块中必须保留的最小空闲空间比例。当数据块的自由空间百分率低于 PCTFREE时,此数据块被标志为 USED,此时在数据块中只可以进行更新操作,而不可以进行插入操作。该参数默认为 10。
PCTUSED
PCTUSED参数指定可以向块中插入数据时块已使用的最大空间比列。
当数据块使用空间低于 PCTUSED时,此块标志为 FREE,可以对数据块中数据进行插入操作;反之,如果使用空间高于 PCTUSED,则不可以进行插入操作。该参数默认为 10。
INITRANS
可以同时对此数据块进行 DML操作的事务的个数。
MAXTRANS
可以同时对此数据块进行 DML操作的最多事务的个数。
Oracle 数据库基础教程2007
BLOCK 空间使用举例
80%
80%
40%
Inserts
1 2
3 4
Inserts
PCTFREE=20 PCTUSED=40
Insert
(on freelist)
Inserts
(off freelist)
Oracle 数据库基础教程2007
7.4 区( EXTENT)
区的概念
由一组连续的数据块构成,是存储分配的最小单位。
区的管理
区的分配
在本地管理方式的表空间中,系统可以根据需要,自动进行区的分配。可以通过使用 UNIFORM选项指定所有段的初始区和后续区具有统一大小,也可以使用
AUTOALLOCATE选项指定由 Oracle自动决定后续区大小。用户不能通过其他参数来干预区的分配。
Oracle 数据库基础教程2007
AUTOALLOCATE(默认设置)
EXTENT MANAGEMENT LOCAL AUTOALLOCAT
由 Oracle负责对区的分配进行自动管理,表空间中最小的区为 64kB
UNIFORM
EXTENT MANAGEMENT LOCAL UNIFORM SIZE n
表空间中所有的区必须具有统一的大小若没有指定 SIZE
参数的值,则为默认值 1MB
Oracle 数据库基础教程2007
7.5段
段概述
回退段
Oracle 数据库基础教程2007
7.5.1段概述
段的概述
段是由一个或多个扩展区组成的逻辑存储单元。
数据库模式对象在逻辑上是以段来占据表空间的大小。
段代表特定数据类型的数据存储结构。
段的类型:
数据段
数据段用来存储表或簇的数据,可以细分为表数据段、索引表数据段、分区表数据段及簇数据段四种。
Oracle 数据库基础教程2007
索引段
用来存放索引信息,主要包括存储 ROWID和索引键。
索引段与其相应的表段经常会被同时访问,为了减少硬盘访问的冲突,
索引段与表段可以放到处于不同物理位置的表空间中。 。
临时段
当用户进行排序查询时,如果在指定的内存无法完成排序,Oracle将自动从用户默认的临时表空间中指派临时段进行排序。会话结束,数据将从临时段中自动删除。
回退段
用于存放数据修改之前的值(包括数据修改之前的位置和值),利用回滚段恢复被回滚事务对数据库所做的修改,或者为事务提供读一致性保证。
一个事务只能使用一个回滚段存放它的回滚信息,但一个回滚段可以存放多个事务的回滚信息。
Oracle 数据库基础教程2007
Table
Cluster
Table
partition
Index-organized
table
Oracle 数据库基础教程2007
Index
partition
Undo
segment
Temporary
segment
Index
Oracle 数据库基础教程2007
7.5.2回退段
回退段的作用
回退段的种类
回退段的管理
Oracle 数据库基础教程2007
Update transaction
Old image
New
image
Undo segment
Table
Oracle 数据库基础教程2007
回滚段的作用
Transaction rollback
(事务回滚)
Transaction
recovery
(事务恢复)
Undo segment Read consistency
(读一致性)
Oracle 数据库基础教程2007
回退段的类型
系统回退段
创建数据库时 Oracle系统自动在 SYSTEM表空间中创建一个
,SYSTEM” 系统回退段。该回退段只用于系统事务的回退处理,
保存系统表空间中对象的前影像。
非系统回退段
用户可以创建非 SYSTEM回退段,用于用户事务的回退处理,保存非系统表空间中对象的前影像。非系统回退段又分为私有回退段和公有回退段,其中私有回退段只能被一个实例使用,其数目和名称由 ROLLBACK_SEGMENTS参数决定;公有回退段可以被多个实例共享使用,其数目由 TRANSACTIONS和
TRANSACTION_PER_ROLLBACK_SEGMENT决定。
Oracle 数据库基础教程2007
回滚段管理
手工撤销管理
UNDO_MANAGEMENT=MANUAL
自动撤销管理
UNDO_MANAGEMENT=AUTO
实例创建一个撤销表空间。建议在 Oracle9i中使用自动撤销管理方式
Oracle 数据库基础教程2007
为事务指定回退段
当执行一个 DML或 DDL语句时,Oracle将自动为事务指定一个可用的回退段。 DBA可以显式的为某个事务指定所用的回退段。
SET TRANSACTION USE ROLLBACK
SEGMENT USERRB01
删除回退段
如果某个回退段中碎片太多或要将回退段移到其他表空间,就需要先删除该回退段,然后重建回退段。如果要删除一个回退段,必须先将该回退段切换到联机状态,然后使用 DROP ROLLBACK SEGMENT语句来删除回退段。
Oracle 数据库基础教程2007
回退段的查询
数据字典
DBA_ROLLBACK_SEGS
DBA_SEGMENTS
动态性能试图
V$ROLLNAME
V$ROLLSTAT
V$UNDOSTAT
V$SESSION
V$TRANSACTION
Oracle 数据库基础教程2007
小结
数据库的逻辑结构
表空间和数据数据文件
创建、修改表空间
数据块和扩展区的管理
段的分类和管理
第 7章 逻辑存储结构
Oracle 数据库基础教程2007
本章内容
Oracle的逻辑存储结构
表空间
数据块
区
段
Oracle 数据库基础教程2007
本章要求
掌握 Oracle9i数据库逻辑结构组成
掌握表空间的作用及其管理
掌握扩展区的结构及其管理
掌握段的作用及其管理
Oracle 数据库基础教程2007
7.1逻辑存储结构概述
逻辑结构单元类型
数据块,BLOCK
区,EXTENT
段,SEGMENT
表空间,TABLESPACE
数据库的存储层次
数据库逻辑存储结构之间的关系
Oracle 数据库基础教程2007
Database
Logical Physical
Tablespace Data file
OS blockOracleblock
Segment
Extent
Oracle 数据库基础教程2007
表空间数据段
………
区间数据块 (段片)
Oracle 数据库基础教程2007
7.2表空间
表空间概述
表空间的管理
Oracle 数据库基础教程2007
7.2.1表空间概述
表空间概念
是 Oracle数据库的一个主要逻辑组织结构,Oracle数据库在逻辑上可以划分为一系列的逻辑空间,每一个逻辑空间就可以称为一个表空间。
一个数据库由有一个或多个表空间构成,不同表空间用于存放不同应用的数据,表空间大小决定了数据库的大小。一个表空间对应一个或多个数据文件,数据文件大小决定了表空间的大小。一个数据文件只能从属于一个表空间。
表空间是存储模式对象的容器,一个数据库对象只能存储在一个表空间中(分区表和分区索引除外),但可以存储在该表空间所对应的一个或多个数据文件中。若表空间只有一个数据文件,则该表空间中所有对象都保存在该文件中;若表空间对应多个数据文件,则表空间中的对象可以分布于不同的数据文件中。
Oracle 数据库基础教程2007
数据库、表空间、数据文件、数据库对象之间的关系数据库表空间 1
数据文件 1
数据库对象 1
数据文件 2
数据库对象 3
数据库对象 2
表空间 2
数据文件 3
数据库对象 4
数据文件 4
数据库对象 5
数据库对象 6
Oracle 数据库基础教程2007
表空间的分类
SYSTEM 表空间
每个 Oracle数据库必须具有一个默认系统表空间,即
SYSTEM表空间,该表空间是在创建数据库时自动创建的。
SYSTEM表空间主要用于存储下列信息
数据库的数据字典。
PL/SQL程序的源代码和解释代码,包括存储过程、函数、包、
触发器等。
数据库对象的定义,如表、视图、序列、同义词等。
开发者不应把模式对象(如表等)存放在 SYSTEM表空间,以免影响数据库的稳定性与执行效率。
Oracle 数据库基础教程2007
非 SYSTEM 表空间
撤消表空间
专门进行回退信息的自动管理
临时表空间:
保存 SQL语句在执行过程中所产生的临时数据(
主要是在排序时产生的临时数据)
用户表空间
保存用户数据
Oracle 数据库基础教程2007
表空间的管理方式
字典管理方式
在字典管理方式下,表空间使用数据字典来管理存储空间的分配,当进行区的分配与回收时,Oracle将对数据字典中的相关基础表进行更新,同时会产生回退信息和重做信息
本地管理方式
在本地管理方式中,区的分配与管理信息都存储在表空间的数据文件中,而与数据字典无关。表空间在每个数据文件中维护一个“位图”结构,用于记录表空间中的所有区的分配情况,
因此区在分配与回收时,Oracle将对数据文件中的位图进行更新,不会产生回退信息或重做信息。
在 Oracle9i数据库中创建表空间时,表空间的默认管理方式为本地管理方式。
Oracle 数据库基础教程2007
表空间的管理方式的比较
由于在区分配与回收过程中不需要对数据字典进行访问,提高了表空间存储管理操作的速度和并发性。
能够避免表空间存储管理操作中的递归现象,提高了存储空间管理操作性能。
由于本地管理的临时表空间在使用过程中不会产生任何重做信息和撤销信息,因此既使查询操作中包含排序,对数据库来说也完全是只读操作,这样能够在保留可查询性同时,将整个数据库设置为只读状态。这种数据库可以作为备用数据库使用。
简化了表空间的存储管理,由 Oracle自动完成存储管理操作。
降低了用户对数据字典的依赖性。
不存在磁盘碎片问题,因为必要的信息都存储在数据文件的位图中,而不是保存在数据字典中
Oracle 数据库基础教程2007
表空间管理策略
在 Oracle9i数据库中,系统表空间主要用于存储数据字典等
Oracle自身对象和数据,并建议将所有的用户对象和数据保存在其他表空间中,因此需要为数据库创建非系统表空间。
使用多个表空间
将数据字典与用户数据分离
将回滚数据与用户数据分离
将表空间的数据文件分散保存到不同的硬盘上
能够将表空间设置为脱机状态或联机状态
将表空间设置为只读状态
能够为某种特殊用途专门设置一个表空间
能够更加灵活的为用户设置表空间配额
Oracle 数据库基础教程2007
7.2.2表空间的管理(本地管理方式)
表空间的创建
表空间的修改
表空间的备份
表空间的删除
表空间信息查询
Oracle 数据库基础教程2007
创建表空间
在创建本地管理方式下的表空间时,首先应该确定表空间的名称、类型、对应的数据文件的名称和位置以及区的分配方式、段的管理方式。
表空间名称不能超过 30个字符,必须以字母开头,
可以包含字母、数字以及一些特殊字符(如 #,_、
$)等;表空间的类型包括普通表空间、临时表空间和撤销表空间;表空间中区的分配方式包括自动扩展( AUTOALLOCATE)和定制
( UNIFORM)两种;段的管理包括自动管理
( AUTO)和手动管理( MANUAL)两种。
Oracle 数据库基础教程2007
创建永久表空间
创建表空间使用 CREATE TABLESPACE语句来实现,该语句包含以下几个子句:
DATAFILE:设定表空间对应的一个或多个数据文件。
EXTENT MANAGEMENT:指定表空间的管理方式,
取值为 LOCAL(默认)或 DICTIONARY。
AUTOALLOCATE(默认)或 UNIFORM:设定区的分配方式。
SEGMENT SPACE MANAGEMENT:设定段的管理方式,其取值为 MANUAL(默认)或 AUTO。
Oracle 数据库基础教程2007
创建表空间示例
为 ORCL数据库创建一个永久性的表空间,区自动扩展,段采用手动管理方式
CREATE TABLESPACE ORCLTBS1 DATAFILE
'D:\ORACLE\ORADATA\ORCL\ORCLTBS1_1.DBF'
SIZE 50M;
为 ORCL数据库创建一个永久性的表空间,区定制分配,段采用手动管理方式
CREATE TABLESPACE ORCLTBS2 DATAFILE
'D:\ORACLE\ORADATA\ORCL\ORCLTBS2_1.DBF
SIZE 50M EXTENT MANAGEMENT LOCAL
UNIFORM SIZE 512K
Oracle 数据库基础教程2007
为 ORCL数据库创建一个永久性的表空间,区自动扩展,段采用自动管理方式 。
CREATE TABLESPACE ORCLTBS3 DATAFILE
'D:\ORACLE\ORADATA\ORCL\ORCLTBS3_1.DBF'
SIZE 50M
SEGMENT SPACE MANAGEMENT AUTO;
为 ORCL数据库创建一个永久性的表空间,区定制分配,段采用自动管理方式。
CREATE TABLESPACE ORCLTBS4 DATAFILE
'D:\ORACLE\ORADATA\ORCL\ORCLTBS4_1.DBF'
SIZE 50M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE
512K SEGMENT SPACE MANAGEMENT AUTO;
Oracle 数据库基础教程2007
创建临时表空间
使用 CREATE TEMPORARY TABLESPACE 语句创建临时表空间,用 TEMPFILE子句设置临时数据文件。
需要注意的是临时表空间中区的分配方式只能是
UNIFORM,而不能是 AUTOALLOCATE,因为这样才能保证不会在临时段中产生过多的存储碎片。
为 ORCL数据库创建一个临时表空间。
CREATE TEMPORARY TABLESPACE ORCLTEMP1
TEMPFILE
'D:\ORACLE\ORADATA\ORCL\ORCLTEMP1_1.DBF'
SIZE 20M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE
16M;
Oracle 数据库基础教程2007
创建撤销表空间
可以使用 CREATE UNDO TABLESPACE语句创建撤销表空间,但是在该语句中只能指定 DATAFILE和 EXTENT
MANAGEMENT LOCAL两个子句,而不能指定其他子句。
为 ORCL数据库创建一个撤销表空间。
CREATE UNDO TABLESPACE ORCLUNDO1
DATAFILE
'D:\ORACLE\ORADATA\ORCL\ORCLUNDO1_1.DBF'
SIZE 20M;
如果要在数据库使用该撤销表空间,需要设置参数
UNDO_MANAGEMENT=AUTO和参数
UNDO_TABLESPACE= ORCLUNDO1。
Oracle 数据库基础教程2007
修改表空间
扩展表空间
为表空间添加数据文件
可以通过 ALTER TABLESPACE… ADD DATAFILE语句为永久表空间添加数据文件,通过 ALTER TABLESPACE… ADD
TEMPFILE语句为临时表空间添加数据文件。
为 ORCL数据库的 ORCLTBS1表空间添加一个大小为 10M的新的数据文件。
ALTER TABLESPACE ORCLTBS1 ADD DATAFILE
'D:\ORACLE\ORADATA\ORCL\ORCLTBS1_2.DBF' SIZE 10M;
为 ORCL数据库的 ORCLTEMP1表空间添加一个大小为 10M的临时数据文件。
ALTER TABLESPACE ORCLTEMP1 ADD TEMPFILE
'D:\ORACLE\ORADATA\ORCL\ORCLTEMP1_2.DBF ' SIZE 10M;
Oracle 数据库基础教程2007
改变数据文件的大小
可以通过改变表空间已有数据文件的大小,达到扩展表空间的目的。
将 ORCL数据库的 ORCLTBS1表空间的数据文件
ORCLTBS1_2.DBF大小增加到 20M。
ALTER DATABASE DATAFILE
'D:\ORACLE\ORADATA\ORCL\ORCLTBS1_2.DBF'
RESIZE 20M;
Oracle 数据库基础教程2007
改变数据文件的扩展方式
如果在创建表空间或为表空间增加数据文件时没有指定
AUTOEXTEND ON选项,则该文件的大小是固定的。如果为数据文件指定了 AUTOEXTEND ON选项,当数据文件被填满时,数据文件会自动扩展,即表空间被扩展了。
将 ORCL数据库的 ORCLTBS1表空间的数据文件
ORCLTBS1_2.DBF设置为自动扩展,每次扩展 5M空间,
文件最大为 100M。
ALTER DATABASE
DATAFILE'C:\ORACLE\ORADATA\ORCL\ORCLTB
S1_2.DBF'AUTOEXTEND ON NEXT 5M MAXSIZE
100M;
Oracle 数据库基础教程2007
修改表空间可用性
语法
ALTER TABLESPACE tablespace_name
ONLINE|OFFLINE
离线状态的表空间是不能进行数据访问的
一些表空间必须是在线状态,
SYSTEM表空间
存放在线回退信息的撤销表空间
临时表空间
Oracle 数据库基础教程2007
修改表空间读写性
语法
ALTER TABLESPACE tbs_name READ ONLY|READ WRITE
表空间只有满足下列要求才可以转换为只读状态:
表空间处于联机状态;
表空间中不能包含任何活动的回退段;
如果表空间正在进行联机数据库备份,则不能将它设置为只读状态。
因为联机备份结束时,Oracle更新表空间数据文件的头部信息。
表空间的备份
Oracle 数据库基础教程2007
表空间的备份
语法
ALTER TABLESPACE tablespace_name
BEGIN|END BACKUP
在数据库进行热备份(联机备份)时,需要分别对表空间进行备份。对表空间进行备份基本步骤为:
使用 ALTER TABLESPACE… BEGIN BACKUP语句将表空间设置为备份模式。
在操作系统中备份表空间所对应的数据文件。
使用 ALTER TABLESPACE… END BACKUP语句结束表空间的备份模式。
Oracle 数据库基础教程2007
表空间删除
语法
DROP TABLESPACE tablespace_name
如果表空间非空,应带有子句:
INCLUDING CONTENTS
若要删除操作系统下的数据文件,应带有子句,AND
DATAFILES
示例
DROP TABLESPACE userdata
INCLUDING CONTENTS AND DATAFILES;
Oracle 数据库基础教程2007
查询表空间信息
表空间信息,
DBA_TABLESPACES
V$TABLESPACE
数据文件信息,
DBA_DATA_FILES
V$DATAFILE
临时文件信息,
DBA_TEMP_FILES
V$TEMPFILE
Oracle 数据库基础教程2007
查询表空间的名称,区管理方式,存储分配方式,类型等基本信息
SELECT
TABLESPACE_NAME,EXTENT_MANAGEMENT,ALL
OCATON_TYPE,CONTENTS FROM
DBA_TABLESPACES;
查询表空间的数据文件信息
SELECT
FILE_NAME,BLOCKS,TABLESPACE_NAME FROM
DBA_DATA_FILES;
查询数据文件的基本信息
SELECT NAME,FILE#,RFILE#,STATUS,BYTES
FROM V$DATAFILE;
Oracle 数据库基础教程2007
询数据文件的自动增长方式
SELECT
TABLESPACE_NAME,FILE_NAME,AUTOE
XTENSIBLE FROM DBA_DATA_FILES;
查询临时数据文件的信息
SELECT
TABLESPACE_NAME,FILE_NAME,AUTOE
XTENSIBLE FROM DBA_TEMP_FILES;
Oracle 数据库基础教程2007
利用 OEM管理表空间
创建表空间
改变表空间
合并表空间中的存储碎片
为表空间添加数据文件
更改已有数据文件
Oracle 数据库基础教程2007
Oracle 数据库基础教程2007
7.3数据块 ( BLOCK)
数据块概述
数据块结构
数据块的管理
Oracle 数据库基础教程2007
数据块概述
最小的 I/O单元
包括一个或者多个 OS BLOCK
在数据库创建时设置,不可更改
DB_BLOCK_SIZE 参数是缺省值
Oracle9i 中分为标准块和非标准块
Oracle 数据库基础教程2007
数据库块结构
Header
Free space
Data
包含块头部、表目录行目录等
Oracle 数据库基础教程2007
Header:包括块头部,表目录,行目录,事务条目等块头部:块类型及地址信息,物理地址,段类型表目录:数据块所存储的表的相关信息行目录:保存表中数据 (记录 )的相关信息
Free space:尚未使用的存储空间
Data:已经使用的空间,保存数据库对象的数据
空闲空间和行空间共同构成存储区数据库块结构
Oracle 数据库基础教程2007
数据块的存储空间管理
避免发生行链接和行迁移
当向表格中插入数据时,如果行的长度大于块的大小,
行的信息无法存放在一个块中,需要使用多个块存放行信息,称为行链接。
当表格数据被更新时,如果更新后的数据长度大于块长度,Oracle将整行的数据从原数据块迁移到新的数据块中,只在原数据块中留下一个指针指向新数据块,称为行迁移。
块管理分为自动和手动两种(表空间的管理方式)
Oracle 数据库基础教程2007
手动管理块存储参数
PCTFREE
PCTFREE参数指定块中必须保留的最小空闲空间比例。当数据块的自由空间百分率低于 PCTFREE时,此数据块被标志为 USED,此时在数据块中只可以进行更新操作,而不可以进行插入操作。该参数默认为 10。
PCTUSED
PCTUSED参数指定可以向块中插入数据时块已使用的最大空间比列。
当数据块使用空间低于 PCTUSED时,此块标志为 FREE,可以对数据块中数据进行插入操作;反之,如果使用空间高于 PCTUSED,则不可以进行插入操作。该参数默认为 10。
INITRANS
可以同时对此数据块进行 DML操作的事务的个数。
MAXTRANS
可以同时对此数据块进行 DML操作的最多事务的个数。
Oracle 数据库基础教程2007
BLOCK 空间使用举例
80%
80%
40%
Inserts
1 2
3 4
Inserts
PCTFREE=20 PCTUSED=40
Insert
(on freelist)
Inserts
(off freelist)
Oracle 数据库基础教程2007
7.4 区( EXTENT)
区的概念
由一组连续的数据块构成,是存储分配的最小单位。
区的管理
区的分配
在本地管理方式的表空间中,系统可以根据需要,自动进行区的分配。可以通过使用 UNIFORM选项指定所有段的初始区和后续区具有统一大小,也可以使用
AUTOALLOCATE选项指定由 Oracle自动决定后续区大小。用户不能通过其他参数来干预区的分配。
Oracle 数据库基础教程2007
AUTOALLOCATE(默认设置)
EXTENT MANAGEMENT LOCAL AUTOALLOCAT
由 Oracle负责对区的分配进行自动管理,表空间中最小的区为 64kB
UNIFORM
EXTENT MANAGEMENT LOCAL UNIFORM SIZE n
表空间中所有的区必须具有统一的大小若没有指定 SIZE
参数的值,则为默认值 1MB
Oracle 数据库基础教程2007
7.5段
段概述
回退段
Oracle 数据库基础教程2007
7.5.1段概述
段的概述
段是由一个或多个扩展区组成的逻辑存储单元。
数据库模式对象在逻辑上是以段来占据表空间的大小。
段代表特定数据类型的数据存储结构。
段的类型:
数据段
数据段用来存储表或簇的数据,可以细分为表数据段、索引表数据段、分区表数据段及簇数据段四种。
Oracle 数据库基础教程2007
索引段
用来存放索引信息,主要包括存储 ROWID和索引键。
索引段与其相应的表段经常会被同时访问,为了减少硬盘访问的冲突,
索引段与表段可以放到处于不同物理位置的表空间中。 。
临时段
当用户进行排序查询时,如果在指定的内存无法完成排序,Oracle将自动从用户默认的临时表空间中指派临时段进行排序。会话结束,数据将从临时段中自动删除。
回退段
用于存放数据修改之前的值(包括数据修改之前的位置和值),利用回滚段恢复被回滚事务对数据库所做的修改,或者为事务提供读一致性保证。
一个事务只能使用一个回滚段存放它的回滚信息,但一个回滚段可以存放多个事务的回滚信息。
Oracle 数据库基础教程2007
Table
Cluster
Table
partition
Index-organized
table
Oracle 数据库基础教程2007
Index
partition
Undo
segment
Temporary
segment
Index
Oracle 数据库基础教程2007
7.5.2回退段
回退段的作用
回退段的种类
回退段的管理
Oracle 数据库基础教程2007
Update transaction
Old image
New
image
Undo segment
Table
Oracle 数据库基础教程2007
回滚段的作用
Transaction rollback
(事务回滚)
Transaction
recovery
(事务恢复)
Undo segment Read consistency
(读一致性)
Oracle 数据库基础教程2007
回退段的类型
系统回退段
创建数据库时 Oracle系统自动在 SYSTEM表空间中创建一个
,SYSTEM” 系统回退段。该回退段只用于系统事务的回退处理,
保存系统表空间中对象的前影像。
非系统回退段
用户可以创建非 SYSTEM回退段,用于用户事务的回退处理,保存非系统表空间中对象的前影像。非系统回退段又分为私有回退段和公有回退段,其中私有回退段只能被一个实例使用,其数目和名称由 ROLLBACK_SEGMENTS参数决定;公有回退段可以被多个实例共享使用,其数目由 TRANSACTIONS和
TRANSACTION_PER_ROLLBACK_SEGMENT决定。
Oracle 数据库基础教程2007
回滚段管理
手工撤销管理
UNDO_MANAGEMENT=MANUAL
自动撤销管理
UNDO_MANAGEMENT=AUTO
实例创建一个撤销表空间。建议在 Oracle9i中使用自动撤销管理方式
Oracle 数据库基础教程2007
为事务指定回退段
当执行一个 DML或 DDL语句时,Oracle将自动为事务指定一个可用的回退段。 DBA可以显式的为某个事务指定所用的回退段。
SET TRANSACTION USE ROLLBACK
SEGMENT USERRB01
删除回退段
如果某个回退段中碎片太多或要将回退段移到其他表空间,就需要先删除该回退段,然后重建回退段。如果要删除一个回退段,必须先将该回退段切换到联机状态,然后使用 DROP ROLLBACK SEGMENT语句来删除回退段。
Oracle 数据库基础教程2007
回退段的查询
数据字典
DBA_ROLLBACK_SEGS
DBA_SEGMENTS
动态性能试图
V$ROLLNAME
V$ROLLSTAT
V$UNDOSTAT
V$SESSION
V$TRANSACTION
Oracle 数据库基础教程2007
小结
数据库的逻辑结构
表空间和数据数据文件
创建、修改表空间
数据块和扩展区的管理
段的分类和管理