数据库逻辑结构大全(精)

Oracle 数据库逻辑结构

2.1.1Oracle 系统体系结构

话说与其他数据库产品不同,Oracle 有其自己独特的系统体系结构。Oracl e 系统体系结构是整个Oracle 服务器系统的框架,是管理和应用Oracle 数据服务器的基础和核心。

Oracle 系统体系结构由三部分组成:逻辑结构、物理结构和实例。其中,实例是维系物理结构和逻辑结构的核心,如图2-1和图2-2所示。图2-1表明了数据库三级模式及其物理文件之间的关系。

图2-1 数据库模式及其物理文件关系示意图

图2-2 Oracle系统体系结构与功能

不论是Oracle 的应用开发还是数据库管理都是以实例作为切入点的。只不过Oracle 的应用程序开发主要是以数据库的逻辑对象为主(如表、索引和视图等), 而数据库管理则是针对数据库的全部内容。Oracle 数据库由构成物理结构的各种文件组成,如数据文件、控制文件和重做日志文件等;实例是Oracle 在内存中分配的一段区域SGA 和服务器后台进程的集合。Oracle 数据库服务器就是数据库和实例的组合。

2.1.2Oracle 逻辑结构

Oracle 的逻辑结构是一种层次结构。主要由:表空间、段、区和数据块等概念组成。逻辑结构是面向用户的,用户使用Oracle 开发应用程序使用的就是逻辑结构。数据库存储层次结构及其构成关系, 结构对象也从数据块到表空间形成了不同层次的粒度关系,如图2-3和图2-4所示。

图2-3 Oracle 10g数据库层次结构图 图2-4 段、区和数据块之间的关系

1. 数据块

Oracle 数据块(Data Block)是一组连续的操作系统块。分配数据库块大小是在Oracle 数据库创建时设置的,数据块是Oracle 读写的基本单位。数据块的大小一般是操作系统块大小的整数倍,这样可以避免不必要的系统I/O操作。从Oracle9i 开始,在同一数据库中不同表空间的数据块大小可以不同。数据块是O racle 最基本的存储单位,而表空间、段、区间则是逻辑组织的构成成员。在数据库缓冲区中的每一个块都是一个数据块,一个数据块不能跨越多个文件。

数据块的结构主要包括:

·标题:包括一般的块信息,如块地址,段类型等。

·表目录:包括有关表在该数据块中的行信息。

·Oracle体系结构第2章 行目录:包括有关在该数据块中行地址等信息。 ·行数据:包括表或索引数据。一行可跨越多个数据块。

·空闲空间:分配空闲空间是用于插入新的行和需要额外空间的行更新。通过空间管理参数pctfree 可控制空闲空间的使用。空闲空间的管理既可以是自动的也可以是手动的。

在数据操作中,有两种语句可以增加数据库块的空闲空间:一个是Delete 删除语句,另一个是Update 更新现有行。释放的空闲空间可用于insert 语句,如果insert 语句是与产生空闲空间的语句在同一个事务之中,并在其后执行,则insert 语句可直接使用生成的空闲空间。如果insert 语句是在一个与产生空闲空间的语句相分离的事务中,则insert 语句可在其他事务提交后,并在其需要空间时,使用之前产生的空闲空间。

数据块中释放的空间可能是连续的,也可能不连续。Oracle 只有在出现下列情况时,才会合并数据块的空闲空间:当insert 或update 语句要使用一个数据块,该数据块的空闲空间足以存储新的一行,而且空闲空间均是碎片,数据块中连续空间无法插入一行的时候。除此而外,Oracle 在系统性能下降时也需要压缩数据块的空间。

能够对空闲空间产生影响的参数有两个:pctfree 和pctused 。对于手工管理的表空间,在特定段中的所有数据块,可使用两个空间管理参数pctfree 和p ctused 来控制insert 和update 对空闲空间的使用。当创建或修改表时可指定这两个参数。创建或修改一个拥有自己的索引段的索引时可指定pctfree 参数。

pctfree 参数为块中行的更新预留了空闲空间的最小百分比,默认值为10。例如,假定在Create table语句中指定了pctfree 为20,则说明在该表的数据段内每个数据块的20%被作为可利用的空闲空间,用于更新已在数据块内存在的数据行。其余80%是用于插入新的数据行,直到达到80%为止。显然,pctfree 值越小,则为现存行更新所预留的空间越少。因此,如果pctfree 设置得太高,则在全表扫描期间增加I/O,浪费磁盘空间;如果pctfree 设置得太低,则会导致行迁移。

pctused 参数设置了数据块是否是空闲的界限。当数据块的使用空间低于pc tused 的值时,此数据块标志为空闲,该空闲空间仅用于插入新的行。如果数据块已经达到了由pctfree 所确定的上边界时,Oracle 就认为此数据块已经无法

再插入新的行。例如,假定在Create table语句中指定pctused 为40,则当小于或等于39时,该数据块才是可用的。所以,可将数据块填得更满,这样可节省空间,但却增加了处理开销,因为数据块的空闲空间总是要被更新的行占据,所以对数据块需要频繁地进行重新组织。比较低的pctused 增加了数据库的空闲空间,但减少了更新操作的处理开销。所以,如果pctused 设置过高,则会降低磁盘的利用率导致行迁移;若pctused 设置过低,则浪费磁盘空间,增加全表扫描时的I/O输出。pctused 是与pctfree 相对的参数。

那么,如何选择pctfree 和pctused 的值呢?有个公式可供参考。显然,pc tfree 和pctused 的之和不能超过100。若两者之和低于100,则空间的利用与系统的I/O之间的最佳平衡点是:pctfree 与pctused 之和等于100%减去一行的大小占块空间大小的百分比。例如,如果块大小为2048字节,则它需要100个字节的开销,而行大小是390字节(为可用块的20%)。为了充分利用空间,pc tfree 与pctused 之和最好为80%。

那么,怎样确定数据块大小呢?有两个因素需要考虑:

一是数据库环境类型。例如,是DSS 环境还是OLTP 环境?在数据仓库环境(OLAP 或DSS )下,用户需要进行许多运行时间很长的查询,所以应当使用大的数据块。在OLTP 系统中,用户处理大量的小型事务,采用较小数据块能够获得更好的效果。

二是SGA 的大小。数据库缓冲区的大小由数据块大小和初始化文件的db_block_buffers 参数决定。最好设为操作系统I/O的整数倍。

2.区

区(Extent )也称为数据区,是一组连续的数据块。当一个表、回滚段或临时段创建或需要附加空间时,系统总是为之分配一个新的数据区。一个数据区不能跨越多个文件,因为它包含连续的数据块。使用区的目的是用来保存特定数据类型的数据,也是表中数据增长的基本单位。在Oracle 数据库中,分配空间就是以数据区为单位的。一个Oracle 对象包含至少一个数据区。设置一个表或索引的存储参数包含设置它的数据区大小。

3.段

段(Segment )是由多个数据区构成的,它是为特定的数据库对象(如表段、索引段、回滚段、临时段)分配的一系列数据区。段内包含的数据区可以不连续,并且可以跨越多个文件。使用段的目的是用来保存特定对象。

一个Oracle 数据库有4种类型的段:

·数据段:数据段也称为表段,它包含数据并且与表和簇相关。当创建一个表时,系统自动创建一个以该表的名字命名的数据段。

·索引段:包含了用于提高系统性能的索引。一旦建立索引,系统自动创建一个以该索引的名字命名的索引段。

·回滚段:包含了回滚信息,并在数据库恢复期间使用,以便为数据库提供读入一致性和回滚未提交的事务,即用来回滚事务的数据空间。当一个事务开始处理时,系统为之分配回滚段,回滚段可以动态创建和撤销。系统有个默认的回滚段,其管理方式既可以是自动的,也可以是手工的。

·临时段:它是Oracle 在运行过程中自行创建的段。当一个SQL 语句需要临时工作区时,由Oracle 建立临时段。一旦语句执行完毕,临时段的区间便退回给系统。

4.表空间

Oracle 数据库(tablespace )是由若干个表空间构成的。任何数据库对象在存储时都必须存储在某个表空间中。表空间对应于若干个磁盘文件,即表空间是由一个或多个磁盘文件构成的。表空间相当于操作系统中的文件夹,也是数据库逻辑结构与物理文件之间的一个映射。每个数据库至少有一个表空间,表空间的大小等于所有从属于它的数据文件大小的总和。

在Oracle 10g中有以下几种比较特殊的表空间:

(1)系统表空间

系统表空间(system tablespace)是每个Oracle 数据库都必须具备的。其功能是在系统表空间中存放诸如表空间名称、表空间所含数据文件等数据库管理所需的信息。系统表空间的名称是不可更改的。系统表空间必须在任何时候都可以用,也是数据库运行的必要条件。因此,系统表空间是不能脱机的。

系统表空间包括数据字典、存储过程、触发器和系统回滚段。为避免系统表空间产生存储碎片以及争用系统资源的问题,应创建一个独立的表空间用来单独存储用户数据。

(2)SYSAUX 表空间

SYSAUX 表空间是随着数据库的创建而创建的,它充当SYSTEM 的辅助表空间,主要存储除数据字典以外的其他对象。SYSAUX 也是许多Oracle 数据库的默认表空间,它减少了由数据库和DBA 管理的表空间数量,降低了SYSTEM 表空间的负荷。

(3)临时表空间

相对于其他表空间而言,临时表空间(temp tablespace)主要用于存储Or acle 数据库运行期间所产生的临时数据。数据库可以建立多个临时表空间。当数据库关闭后,临时表空间中所有数据将全部被清除。除临时表空间外,其他表空间都属于永久性表空间。

(4)撤销表空间

用于保存Oracle 数据库撤销信息,即保存用户回滚段的表空间称之为回滚表空间(或简称为RBS 撤销表空间(undo tablespace))。在Oracle8i 中是r ollback tablespace,从Oracle9i 开始改为undo tablespace。在Oracle 10g中初始创建的只有6个表空间sysaux 、system 、temp 、undotbs1、example 和u sers 。其中temp 是临时表空间,undotbs1是undo 撤销表空间。图2-5是表空间与数据库及数据文件之间的对应关系。

图2-5 表空间与数据库及数据文件之间的对应关系

2.1.3管理表空间

在管理表空间时应遵循以下原则:

1)使用多重表空间。采用多重表空间可使数据库操作更灵活。主要体现在以下方面:

·将用户数据与数据字典数据相分离,并将不同表空间的数据文件分别存储在不同磁盘上可以降低I/O竞争。

·将一个应用的数据与其他应用相分离,可以避免表空间脱机时多个应用受到影响。

·可根据需要将单个表空间脱机,从而获得较好的可用性。

·通过为不同类型的数据库预留表空间,以达到优化表空间的目的,如更新较高的或只读,或临时段存储等。

·备份单个表空间。

2)为用户指定表空间限额。要创建、管理与使用表空间,必须首先以sys 用户并以as sysdba身份登录数据库。与Oracle9i 不同,在Oracle 10g中,启动SQL*Plus时的帐户和口令不需加引号。命令格式是:

sqlplus sys/as sysdba

在Oracle 10g中,创建和管理表空间所使用的数据字典和权限及语句可归纳如下。

1.与表空间有关的数据字典

查询和使用与表空间有关的元数据均可从下列数据字典中获得。主要包括:dba_tablespaces、dba_users、dba_ts_quotas、user_tablespaces、user_ts_quotas 、user_extents、user_segments、user_free_space、dba_data_files、dba_extents、dba_free_space、dba_segments、dba_temp_files、dba_undo_extents 、dba_rollback_segs、dba_data_files、v_$backup_datafile、v_$database_block_corruption、v_$datafile、v_$datafile_copy、v_$datafile_header 、v_$rollstat、v_$segment_statistics、v_$undostat等。以v_$开头的数据字典均保存为动态信息。

2.与使用表空间有关的系统权限

与表空间有关的主要系统权限有:create tablespace、alter tablespace、drop tablespace、manage tablespace和unlimited tablespace等。

其中,unlimited tablespace是允许用户无限制地访问所有表空间。出于安全考虑,在授予该权限给用户时应慎重。如果用户不需要该系统权限,最好撤销该权限,否则用户会利用该权限蓄意创建大量对象或复制数据,从而塞满表空间导致数据库服务器崩溃。

3.创建永久性的表空间

命令格式:

SQL>create[undo]tablespace tablespace

[datafile filespec[autoextend_clause][,filespec[autoextend_clause]]...]

[{minimum extent integer[ k|m]|blocksize integer[k]|{logging|nologging}

|default storage_clause|{online|offline}

|{permanent|temporary}|extent_management_clause|segment_management_clause

}

[ minimum extent integer[k|m]|blocksize integer[k]

|{logging|nologging}|default storage_clause|{online|offline}

|{permanent|temporary}|extent_management_clause|segment_management_clause

]...

];

【例2-1】创建一个名为dalianren 的表空间

SQL>create tablespace dalianren nologging

datafile′D:\oracle\product\10.2.0\oradata\dalianren\dalianren01.ora′size 50m blocksize 8192

extent management local uniform size 256k

segment space management auto;

4.使一个表空间脱机

命令格式:

SQL>alter tablespaceoffline;

【例2-2】将表空间dalianren 脱机

SQL>alter tablespace dalianren offline;

注意 system表空间不能脱机。

5.使一个表空间联机

命令格式:

SQL>alter tablespaceonline;

【例2-3】将表空间dalianren 联机

SQL>alter tablespace dalianren online;

6.使表空间只读

命令格式:

SQL>alter tablespaceread only;

【例2-4】将表空间dalianren 更改为只读

SQL>alter tablespace dalianren read only;

7.使表空间可读可写

命令格式:

SQL>alter tablespaceread write;

【例2-5】将表空间dalianren 更改为可读写

SQL>alter tablespace dalianren read write;

8.创建临时表空间

命令格式:

SQL>create temporary tablespace

tempfile′′

sizem autoextend

extent management local uniform size;

【例2-6】创建临时表空间temp

SQL>create temporary tablespace temp

tempfile ′D:\ oracle\product\10.2.0\oradata dalian\temp01.ora′

size 500m autoextend off

extent management local uniform size 512k;

注意虽然语句alter tablespace中带有temporary 关键字,但不能使用带有temporary 关键字的alter tablespace语句将一个本地管理的永久表空间转变为本地管理的临时表空间。必须使用create temporary tablespace语句直接创建本地管理的临时表空间。

9.添加临时表空间的数据文件

命令格式:

SQL>alter tablespaceadd tempfile ′

ile_name>′sizem;

【例2-7】为临时表空间temp_ren添加数据文件

SQL>alter tablespace temp_ren add tempfile ′D:\oracle\product\10.2.0\oradata\dalian\temp_ren.dbf′size 100m;

10.调整临时表空间的数据文件

命令格式:

SQL>alter database tempfile ′′resizem;

【例2-8】调整临时表空间的数据文件大小

SQL>alter database tempfile ′D:\oracle\product\10.2.0\oradata\

test \temp_ren.ora′ resize 20m;

11.将表空间的数据文件或临时文件脱机

命令格式:

SQL>alter database datafile′′ offline; 或

SQL>alter database tempfile ′′ offline;

【例2-9】将表空间的数据文件或临时文件脱机

SQL>alter database datafile ′D:\oracle\product\10.2.0\oradata\dalian\temp_ren.ora′ offline;

SQL>alter database tempfile ′D:\oracle\product\10.2.0\oradata\dalian\temp_ren.ora′offline;

12. 将临时表空间联机

命令格式:

SQL>Alter database tempfile ′′online;

【例2-10】将临时表空间联机

SQL>Alter database tempfile ′D:\oracle\product\10.2.0\oradata\dalian\temp_ren.ora′ online;

13. 删除表空间,但不删除其文件

命令格式:

SQL>drop tablespace;

【例2-11】删除表空间dalianren ,但不删除其文件

SQL>drop tablespace dalianren;

14. 删除包含目录内容的表空间

命令格式:

SQL>drop tablespaceincluding contents;

【例2-12】删除表空间dalianren 及其包含的内容

SQL>drop tablespace dalianren including contents;

15.删除包含目录内容和数据文件在内的表空间

命令格式:

SQL>drop tablespaceincluding contents and datafiles;

【例2-13】删除表空间dalianren 及其包含的内容以及数据文件

SQL>drop tablespace dalianren including contents and datafiles;

16.当含有参照性约束时,删除包含目录内容和数据文件在内的表空间

命令格式:

SQL>drop tablespaceincluding contents and datafiles cascade constraints;

【例2-14】将表空间dalianren 及其包含的内容、数据文件以及相关约束一同删除

SQL>drop tablespace dalianren including contents and datafiles cascade constraints;

17.表空间更名

Oracle9i 中不能直接将表空间更名。在Oracle 10g可直接更名永久表空间和临时表空间。但是,system 和sysaux 表空间不能更名。

命令格式:

SQL>alter tablespacerename to;

【例2-15】将表空间users 更改为newusers

SQL>alter tablespace users rename to newusers;

在Oracle 10g中,如果一个撤销表空间通过使用pfile 的实例被更名,则警告日志文件中将写入一个信息,提醒用户更改undo_tablespace的参数值。

注意当使用drop tablespace误删除了表空间之后,通过查看alert 文件可以确定误操作的时间。该文件位于Oracle_Home\admin\\bdump目录下,名为alert_.log,如:D:\oracle\product\10.2.0\admin\test\bdump目录下的alert_test.log文件。

18.多重临时表空间

在Oracle 10g中增加了一个表空间组的概念,通过使用表空间组用户可以使用一个以上的表空间存储临时段。表空间组是在第一个表空间被指定给该组时,由系统自动隐式创建的。例如:

通过添加现有的表空间创建表空间组。

SQL>alter tablespace temp tablespace group temp_ts_group;

添加一个新的表空间给该已经创建的表空间组。

SQL>create temporary tablespace temp2

tempfile ′D:\oracle\product\10.2.0\oradata\test\temp201.db

f ′ size 20m tablespace group temp_ts_group;

被指定给组的表空间可在视图中查询得到。

SQL>select*from dba_tablespace_groups;

group_nametablespace_name

------------------------------------------------------------ temp_ts_grouptemp

temp_ts_grouptemp2

2 rows selected.

SQL>

一旦创建了表空间组,就可以将其指定给用户或作为默认的临时表空间,就像一个表空间一样。

·将表空间组指定给用户,作为临时表空间。

SQL>alter user scott temporary tablespace temp_ts_group;

·将表空间组作为默认的临时表空间。

SQL>alter database default temporary tablespace temp_ts_group;

·表空间也可以从表空间组中移出。

SQL>alter tablespace temp2 tablespace group;

·查询表空间组。

SQL>select*from dba_tablespace_groups;

group_nametablespace_name

------------------------------------------------------------ temp_ts_grouptemp

1 row selected.

SQL>

理论上,一个表空间组包含多少表空间是没有最大限制的,但必须至少包含一个表空间。当最后一个表空间被删除后,该表空间组也被隐式地删除。若该表空间组仍然被指定做临时表空间,则不可以删除该组中的最后一个表空间成员。同时,表空间组不能与表空间同名。

2.1.4表空间的相关查询

列出表空间、表空间的文件、分配的空间、空闲空间以及下一个空闲分区,如下所示。

set linesize 132

set pagesize 60

col tablespace_name format a12

col file_name format a38

col tablespace_kb heading ′TABLESPACE|TOTAL KB′

col kbytes_free heading ′TOTAL FREE|KBYTES′

select ddf.tablespace_name tablespace_name,ddf.file_name file_name ,ddf.bytes/1024 tablespace_kb,

sum(fs.bytes)/1024 kbytes_free,max(fs.bytes)/1024 next_free from sys.dba_free_space fs,sys.dba_data_files ddf

where ddf.tablespace_name=fs.tablespace_name

group by ddf.tablespace_name,ddf.file_name,ddf.bytes/1024 order by ddf.tablespace_name,ddf.file_name;

列出数据文件,表空间名以及大小,如下所示。

col file_name format a50

col tablespace_name format a10

select file_name,tablespace_name,round(bytes/1024000) MB from dba_data_files

order by file_name;

列出表空间、大小、空闲空间以及空闲空间的百分比,如下所示。

select ddf.tablespace_name,sum(ddf.bytes) total_space,sum(dfs.bytes) free_space,

round(((nvl(sum(dfs.bytes),0)/sum(ddf.bytes))*100),2) pct_free from dba_free_space dfs,dba_data_files ddf

where ddf.tablespace_name=dfs.tablespace_name (+)

group by ddf.tablespace_name

order by ddf.tablespace_name;

计算表空间每个数据文件实际的最小空间以及对应的文件名,其大小与磁盘操作系统中显示的不同,如下所示。该语句运行需要较长时间。

Select substr(df.file_name,1,70) filename,max(de.block_id* (de.bytes/de.blocks)+de.bytes)/1024 min_size

from dba_extents de,dba_data_files df

where de.file_id=df.file_id

group by df.file_name;

Oracle 数据库逻辑结构

2.1.1Oracle 系统体系结构

话说与其他数据库产品不同,Oracle 有其自己独特的系统体系结构。Oracl e 系统体系结构是整个Oracle 服务器系统的框架,是管理和应用Oracle 数据服务器的基础和核心。

Oracle 系统体系结构由三部分组成:逻辑结构、物理结构和实例。其中,实例是维系物理结构和逻辑结构的核心,如图2-1和图2-2所示。图2-1表明了数据库三级模式及其物理文件之间的关系。

图2-1 数据库模式及其物理文件关系示意图

图2-2 Oracle系统体系结构与功能

不论是Oracle 的应用开发还是数据库管理都是以实例作为切入点的。只不过Oracle 的应用程序开发主要是以数据库的逻辑对象为主(如表、索引和视图等), 而数据库管理则是针对数据库的全部内容。Oracle 数据库由构成物理结构的各种文件组成,如数据文件、控制文件和重做日志文件等;实例是Oracle 在内存中分配的一段区域SGA 和服务器后台进程的集合。Oracle 数据库服务器就是数据库和实例的组合。

2.1.2Oracle 逻辑结构

Oracle 的逻辑结构是一种层次结构。主要由:表空间、段、区和数据块等概念组成。逻辑结构是面向用户的,用户使用Oracle 开发应用程序使用的就是逻辑结构。数据库存储层次结构及其构成关系, 结构对象也从数据块到表空间形成了不同层次的粒度关系,如图2-3和图2-4所示。

图2-3 Oracle 10g数据库层次结构图 图2-4 段、区和数据块之间的关系

1. 数据块

Oracle 数据块(Data Block)是一组连续的操作系统块。分配数据库块大小是在Oracle 数据库创建时设置的,数据块是Oracle 读写的基本单位。数据块的大小一般是操作系统块大小的整数倍,这样可以避免不必要的系统I/O操作。从Oracle9i 开始,在同一数据库中不同表空间的数据块大小可以不同。数据块是O racle 最基本的存储单位,而表空间、段、区间则是逻辑组织的构成成员。在数据库缓冲区中的每一个块都是一个数据块,一个数据块不能跨越多个文件。

数据块的结构主要包括:

·标题:包括一般的块信息,如块地址,段类型等。

·表目录:包括有关表在该数据块中的行信息。

·Oracle体系结构第2章 行目录:包括有关在该数据块中行地址等信息。 ·行数据:包括表或索引数据。一行可跨越多个数据块。

·空闲空间:分配空闲空间是用于插入新的行和需要额外空间的行更新。通过空间管理参数pctfree 可控制空闲空间的使用。空闲空间的管理既可以是自动的也可以是手动的。

在数据操作中,有两种语句可以增加数据库块的空闲空间:一个是Delete 删除语句,另一个是Update 更新现有行。释放的空闲空间可用于insert 语句,如果insert 语句是与产生空闲空间的语句在同一个事务之中,并在其后执行,则insert 语句可直接使用生成的空闲空间。如果insert 语句是在一个与产生空闲空间的语句相分离的事务中,则insert 语句可在其他事务提交后,并在其需要空间时,使用之前产生的空闲空间。

数据块中释放的空间可能是连续的,也可能不连续。Oracle 只有在出现下列情况时,才会合并数据块的空闲空间:当insert 或update 语句要使用一个数据块,该数据块的空闲空间足以存储新的一行,而且空闲空间均是碎片,数据块中连续空间无法插入一行的时候。除此而外,Oracle 在系统性能下降时也需要压缩数据块的空间。

能够对空闲空间产生影响的参数有两个:pctfree 和pctused 。对于手工管理的表空间,在特定段中的所有数据块,可使用两个空间管理参数pctfree 和p ctused 来控制insert 和update 对空闲空间的使用。当创建或修改表时可指定这两个参数。创建或修改一个拥有自己的索引段的索引时可指定pctfree 参数。

pctfree 参数为块中行的更新预留了空闲空间的最小百分比,默认值为10。例如,假定在Create table语句中指定了pctfree 为20,则说明在该表的数据段内每个数据块的20%被作为可利用的空闲空间,用于更新已在数据块内存在的数据行。其余80%是用于插入新的数据行,直到达到80%为止。显然,pctfree 值越小,则为现存行更新所预留的空间越少。因此,如果pctfree 设置得太高,则在全表扫描期间增加I/O,浪费磁盘空间;如果pctfree 设置得太低,则会导致行迁移。

pctused 参数设置了数据块是否是空闲的界限。当数据块的使用空间低于pc tused 的值时,此数据块标志为空闲,该空闲空间仅用于插入新的行。如果数据块已经达到了由pctfree 所确定的上边界时,Oracle 就认为此数据块已经无法

再插入新的行。例如,假定在Create table语句中指定pctused 为40,则当小于或等于39时,该数据块才是可用的。所以,可将数据块填得更满,这样可节省空间,但却增加了处理开销,因为数据块的空闲空间总是要被更新的行占据,所以对数据块需要频繁地进行重新组织。比较低的pctused 增加了数据库的空闲空间,但减少了更新操作的处理开销。所以,如果pctused 设置过高,则会降低磁盘的利用率导致行迁移;若pctused 设置过低,则浪费磁盘空间,增加全表扫描时的I/O输出。pctused 是与pctfree 相对的参数。

那么,如何选择pctfree 和pctused 的值呢?有个公式可供参考。显然,pc tfree 和pctused 的之和不能超过100。若两者之和低于100,则空间的利用与系统的I/O之间的最佳平衡点是:pctfree 与pctused 之和等于100%减去一行的大小占块空间大小的百分比。例如,如果块大小为2048字节,则它需要100个字节的开销,而行大小是390字节(为可用块的20%)。为了充分利用空间,pc tfree 与pctused 之和最好为80%。

那么,怎样确定数据块大小呢?有两个因素需要考虑:

一是数据库环境类型。例如,是DSS 环境还是OLTP 环境?在数据仓库环境(OLAP 或DSS )下,用户需要进行许多运行时间很长的查询,所以应当使用大的数据块。在OLTP 系统中,用户处理大量的小型事务,采用较小数据块能够获得更好的效果。

二是SGA 的大小。数据库缓冲区的大小由数据块大小和初始化文件的db_block_buffers 参数决定。最好设为操作系统I/O的整数倍。

2.区

区(Extent )也称为数据区,是一组连续的数据块。当一个表、回滚段或临时段创建或需要附加空间时,系统总是为之分配一个新的数据区。一个数据区不能跨越多个文件,因为它包含连续的数据块。使用区的目的是用来保存特定数据类型的数据,也是表中数据增长的基本单位。在Oracle 数据库中,分配空间就是以数据区为单位的。一个Oracle 对象包含至少一个数据区。设置一个表或索引的存储参数包含设置它的数据区大小。

3.段

段(Segment )是由多个数据区构成的,它是为特定的数据库对象(如表段、索引段、回滚段、临时段)分配的一系列数据区。段内包含的数据区可以不连续,并且可以跨越多个文件。使用段的目的是用来保存特定对象。

一个Oracle 数据库有4种类型的段:

·数据段:数据段也称为表段,它包含数据并且与表和簇相关。当创建一个表时,系统自动创建一个以该表的名字命名的数据段。

·索引段:包含了用于提高系统性能的索引。一旦建立索引,系统自动创建一个以该索引的名字命名的索引段。

·回滚段:包含了回滚信息,并在数据库恢复期间使用,以便为数据库提供读入一致性和回滚未提交的事务,即用来回滚事务的数据空间。当一个事务开始处理时,系统为之分配回滚段,回滚段可以动态创建和撤销。系统有个默认的回滚段,其管理方式既可以是自动的,也可以是手工的。

·临时段:它是Oracle 在运行过程中自行创建的段。当一个SQL 语句需要临时工作区时,由Oracle 建立临时段。一旦语句执行完毕,临时段的区间便退回给系统。

4.表空间

Oracle 数据库(tablespace )是由若干个表空间构成的。任何数据库对象在存储时都必须存储在某个表空间中。表空间对应于若干个磁盘文件,即表空间是由一个或多个磁盘文件构成的。表空间相当于操作系统中的文件夹,也是数据库逻辑结构与物理文件之间的一个映射。每个数据库至少有一个表空间,表空间的大小等于所有从属于它的数据文件大小的总和。

在Oracle 10g中有以下几种比较特殊的表空间:

(1)系统表空间

系统表空间(system tablespace)是每个Oracle 数据库都必须具备的。其功能是在系统表空间中存放诸如表空间名称、表空间所含数据文件等数据库管理所需的信息。系统表空间的名称是不可更改的。系统表空间必须在任何时候都可以用,也是数据库运行的必要条件。因此,系统表空间是不能脱机的。

系统表空间包括数据字典、存储过程、触发器和系统回滚段。为避免系统表空间产生存储碎片以及争用系统资源的问题,应创建一个独立的表空间用来单独存储用户数据。

(2)SYSAUX 表空间

SYSAUX 表空间是随着数据库的创建而创建的,它充当SYSTEM 的辅助表空间,主要存储除数据字典以外的其他对象。SYSAUX 也是许多Oracle 数据库的默认表空间,它减少了由数据库和DBA 管理的表空间数量,降低了SYSTEM 表空间的负荷。

(3)临时表空间

相对于其他表空间而言,临时表空间(temp tablespace)主要用于存储Or acle 数据库运行期间所产生的临时数据。数据库可以建立多个临时表空间。当数据库关闭后,临时表空间中所有数据将全部被清除。除临时表空间外,其他表空间都属于永久性表空间。

(4)撤销表空间

用于保存Oracle 数据库撤销信息,即保存用户回滚段的表空间称之为回滚表空间(或简称为RBS 撤销表空间(undo tablespace))。在Oracle8i 中是r ollback tablespace,从Oracle9i 开始改为undo tablespace。在Oracle 10g中初始创建的只有6个表空间sysaux 、system 、temp 、undotbs1、example 和u sers 。其中temp 是临时表空间,undotbs1是undo 撤销表空间。图2-5是表空间与数据库及数据文件之间的对应关系。

图2-5 表空间与数据库及数据文件之间的对应关系

2.1.3管理表空间

在管理表空间时应遵循以下原则:

1)使用多重表空间。采用多重表空间可使数据库操作更灵活。主要体现在以下方面:

·将用户数据与数据字典数据相分离,并将不同表空间的数据文件分别存储在不同磁盘上可以降低I/O竞争。

·将一个应用的数据与其他应用相分离,可以避免表空间脱机时多个应用受到影响。

·可根据需要将单个表空间脱机,从而获得较好的可用性。

·通过为不同类型的数据库预留表空间,以达到优化表空间的目的,如更新较高的或只读,或临时段存储等。

·备份单个表空间。

2)为用户指定表空间限额。要创建、管理与使用表空间,必须首先以sys 用户并以as sysdba身份登录数据库。与Oracle9i 不同,在Oracle 10g中,启动SQL*Plus时的帐户和口令不需加引号。命令格式是:

sqlplus sys/as sysdba

在Oracle 10g中,创建和管理表空间所使用的数据字典和权限及语句可归纳如下。

1.与表空间有关的数据字典

查询和使用与表空间有关的元数据均可从下列数据字典中获得。主要包括:dba_tablespaces、dba_users、dba_ts_quotas、user_tablespaces、user_ts_quotas 、user_extents、user_segments、user_free_space、dba_data_files、dba_extents、dba_free_space、dba_segments、dba_temp_files、dba_undo_extents 、dba_rollback_segs、dba_data_files、v_$backup_datafile、v_$database_block_corruption、v_$datafile、v_$datafile_copy、v_$datafile_header 、v_$rollstat、v_$segment_statistics、v_$undostat等。以v_$开头的数据字典均保存为动态信息。

2.与使用表空间有关的系统权限

与表空间有关的主要系统权限有:create tablespace、alter tablespace、drop tablespace、manage tablespace和unlimited tablespace等。

其中,unlimited tablespace是允许用户无限制地访问所有表空间。出于安全考虑,在授予该权限给用户时应慎重。如果用户不需要该系统权限,最好撤销该权限,否则用户会利用该权限蓄意创建大量对象或复制数据,从而塞满表空间导致数据库服务器崩溃。

3.创建永久性的表空间

命令格式:

SQL>create[undo]tablespace tablespace

[datafile filespec[autoextend_clause][,filespec[autoextend_clause]]...]

[{minimum extent integer[ k|m]|blocksize integer[k]|{logging|nologging}

|default storage_clause|{online|offline}

|{permanent|temporary}|extent_management_clause|segment_management_clause

}

[ minimum extent integer[k|m]|blocksize integer[k]

|{logging|nologging}|default storage_clause|{online|offline}

|{permanent|temporary}|extent_management_clause|segment_management_clause

]...

];

【例2-1】创建一个名为dalianren 的表空间

SQL>create tablespace dalianren nologging

datafile′D:\oracle\product\10.2.0\oradata\dalianren\dalianren01.ora′size 50m blocksize 8192

extent management local uniform size 256k

segment space management auto;

4.使一个表空间脱机

命令格式:

SQL>alter tablespaceoffline;

【例2-2】将表空间dalianren 脱机

SQL>alter tablespace dalianren offline;

注意 system表空间不能脱机。

5.使一个表空间联机

命令格式:

SQL>alter tablespaceonline;

【例2-3】将表空间dalianren 联机

SQL>alter tablespace dalianren online;

6.使表空间只读

命令格式:

SQL>alter tablespaceread only;

【例2-4】将表空间dalianren 更改为只读

SQL>alter tablespace dalianren read only;

7.使表空间可读可写

命令格式:

SQL>alter tablespaceread write;

【例2-5】将表空间dalianren 更改为可读写

SQL>alter tablespace dalianren read write;

8.创建临时表空间

命令格式:

SQL>create temporary tablespace

tempfile′′

sizem autoextend

extent management local uniform size;

【例2-6】创建临时表空间temp

SQL>create temporary tablespace temp

tempfile ′D:\ oracle\product\10.2.0\oradata dalian\temp01.ora′

size 500m autoextend off

extent management local uniform size 512k;

注意虽然语句alter tablespace中带有temporary 关键字,但不能使用带有temporary 关键字的alter tablespace语句将一个本地管理的永久表空间转变为本地管理的临时表空间。必须使用create temporary tablespace语句直接创建本地管理的临时表空间。

9.添加临时表空间的数据文件

命令格式:

SQL>alter tablespaceadd tempfile ′

ile_name>′sizem;

【例2-7】为临时表空间temp_ren添加数据文件

SQL>alter tablespace temp_ren add tempfile ′D:\oracle\product\10.2.0\oradata\dalian\temp_ren.dbf′size 100m;

10.调整临时表空间的数据文件

命令格式:

SQL>alter database tempfile ′′resizem;

【例2-8】调整临时表空间的数据文件大小

SQL>alter database tempfile ′D:\oracle\product\10.2.0\oradata\

test \temp_ren.ora′ resize 20m;

11.将表空间的数据文件或临时文件脱机

命令格式:

SQL>alter database datafile′′ offline; 或

SQL>alter database tempfile ′′ offline;

【例2-9】将表空间的数据文件或临时文件脱机

SQL>alter database datafile ′D:\oracle\product\10.2.0\oradata\dalian\temp_ren.ora′ offline;

SQL>alter database tempfile ′D:\oracle\product\10.2.0\oradata\dalian\temp_ren.ora′offline;

12. 将临时表空间联机

命令格式:

SQL>Alter database tempfile ′′online;

【例2-10】将临时表空间联机

SQL>Alter database tempfile ′D:\oracle\product\10.2.0\oradata\dalian\temp_ren.ora′ online;

13. 删除表空间,但不删除其文件

命令格式:

SQL>drop tablespace;

【例2-11】删除表空间dalianren ,但不删除其文件

SQL>drop tablespace dalianren;

14. 删除包含目录内容的表空间

命令格式:

SQL>drop tablespaceincluding contents;

【例2-12】删除表空间dalianren 及其包含的内容

SQL>drop tablespace dalianren including contents;

15.删除包含目录内容和数据文件在内的表空间

命令格式:

SQL>drop tablespaceincluding contents and datafiles;

【例2-13】删除表空间dalianren 及其包含的内容以及数据文件

SQL>drop tablespace dalianren including contents and datafiles;

16.当含有参照性约束时,删除包含目录内容和数据文件在内的表空间

命令格式:

SQL>drop tablespaceincluding contents and datafiles cascade constraints;

【例2-14】将表空间dalianren 及其包含的内容、数据文件以及相关约束一同删除

SQL>drop tablespace dalianren including contents and datafiles cascade constraints;

17.表空间更名

Oracle9i 中不能直接将表空间更名。在Oracle 10g可直接更名永久表空间和临时表空间。但是,system 和sysaux 表空间不能更名。

命令格式:

SQL>alter tablespacerename to;

【例2-15】将表空间users 更改为newusers

SQL>alter tablespace users rename to newusers;

在Oracle 10g中,如果一个撤销表空间通过使用pfile 的实例被更名,则警告日志文件中将写入一个信息,提醒用户更改undo_tablespace的参数值。

注意当使用drop tablespace误删除了表空间之后,通过查看alert 文件可以确定误操作的时间。该文件位于Oracle_Home\admin\\bdump目录下,名为alert_.log,如:D:\oracle\product\10.2.0\admin\test\bdump目录下的alert_test.log文件。

18.多重临时表空间

在Oracle 10g中增加了一个表空间组的概念,通过使用表空间组用户可以使用一个以上的表空间存储临时段。表空间组是在第一个表空间被指定给该组时,由系统自动隐式创建的。例如:

通过添加现有的表空间创建表空间组。

SQL>alter tablespace temp tablespace group temp_ts_group;

添加一个新的表空间给该已经创建的表空间组。

SQL>create temporary tablespace temp2

tempfile ′D:\oracle\product\10.2.0\oradata\test\temp201.db

f ′ size 20m tablespace group temp_ts_group;

被指定给组的表空间可在视图中查询得到。

SQL>select*from dba_tablespace_groups;

group_nametablespace_name

------------------------------------------------------------ temp_ts_grouptemp

temp_ts_grouptemp2

2 rows selected.

SQL>

一旦创建了表空间组,就可以将其指定给用户或作为默认的临时表空间,就像一个表空间一样。

·将表空间组指定给用户,作为临时表空间。

SQL>alter user scott temporary tablespace temp_ts_group;

·将表空间组作为默认的临时表空间。

SQL>alter database default temporary tablespace temp_ts_group;

·表空间也可以从表空间组中移出。

SQL>alter tablespace temp2 tablespace group;

·查询表空间组。

SQL>select*from dba_tablespace_groups;

group_nametablespace_name

------------------------------------------------------------ temp_ts_grouptemp

1 row selected.

SQL>

理论上,一个表空间组包含多少表空间是没有最大限制的,但必须至少包含一个表空间。当最后一个表空间被删除后,该表空间组也被隐式地删除。若该表空间组仍然被指定做临时表空间,则不可以删除该组中的最后一个表空间成员。同时,表空间组不能与表空间同名。

2.1.4表空间的相关查询

列出表空间、表空间的文件、分配的空间、空闲空间以及下一个空闲分区,如下所示。

set linesize 132

set pagesize 60

col tablespace_name format a12

col file_name format a38

col tablespace_kb heading ′TABLESPACE|TOTAL KB′

col kbytes_free heading ′TOTAL FREE|KBYTES′

select ddf.tablespace_name tablespace_name,ddf.file_name file_name ,ddf.bytes/1024 tablespace_kb,

sum(fs.bytes)/1024 kbytes_free,max(fs.bytes)/1024 next_free from sys.dba_free_space fs,sys.dba_data_files ddf

where ddf.tablespace_name=fs.tablespace_name

group by ddf.tablespace_name,ddf.file_name,ddf.bytes/1024 order by ddf.tablespace_name,ddf.file_name;

列出数据文件,表空间名以及大小,如下所示。

col file_name format a50

col tablespace_name format a10

select file_name,tablespace_name,round(bytes/1024000) MB from dba_data_files

order by file_name;

列出表空间、大小、空闲空间以及空闲空间的百分比,如下所示。

select ddf.tablespace_name,sum(ddf.bytes) total_space,sum(dfs.bytes) free_space,

round(((nvl(sum(dfs.bytes),0)/sum(ddf.bytes))*100),2) pct_free from dba_free_space dfs,dba_data_files ddf

where ddf.tablespace_name=dfs.tablespace_name (+)

group by ddf.tablespace_name

order by ddf.tablespace_name;

计算表空间每个数据文件实际的最小空间以及对应的文件名,其大小与磁盘操作系统中显示的不同,如下所示。该语句运行需要较长时间。

Select substr(df.file_name,1,70) filename,max(de.block_id* (de.bytes/de.blocks)+de.bytes)/1024 min_size

from dba_extents de,dba_data_files df

where de.file_id=df.file_id

group by df.file_name;


相关内容

  • HR学习资料实用知识大全
  • HR学习资料 1. 纲要 ......................................................................................................................................... ...

  • 毕业论文评语范文大全
  • 毕业论文评语范文大全 1.选题符合行政管理专业培养目标要求,也体现出较强的时代特色性与实践应 用性,全文结构基本合理,思路比较清晰,语言比较通顺,层次分明,观点表达 基本准确,论据与论点基本上保持一致,参考的文献资料与论题和论文内容结合 紧密,能综合运用行政管理专业原理知识并结合社会实际来分析文中的 ...

  • excel表格计算公式大全
  • 1 AND "与"运算,返回逻辑值,仅当有参数的结果均为逻辑"真(TRUE )"时返回逻辑"真(TRUE )",反之返回逻辑"假(FALSE )". 条件判断 AVERAGE 求出所有参数的算术平均值. 数据计算 COL ...

  • 毕业论文指导教师评语大全
  • 毕业论文指导教师评语 1. 论文结构完整,各部分基本符合英语论文的写作规范.论文的选题很好,有创意.为了写好这篇论文,作者作了一定研究,特别是斯坦贝克的原著.从作者对原著的引用情况不难看出,作者对原著的内容是相当熟悉的.语言也非常犀利,论文条理清晰.说理充分,观点具有独创性,有一定的参考价值,不失为 ...

  • 简论通信工程现状与特点及发展前景展望
  • [摘 要]电子通信工程的领域包括:计算机通信网络及其安全技术,移动通信与个人通信,卫星通信.宽带通信与宽带通信网,多媒体通信,语音处理及人机交互,图像处理与图像通信,信号处理及其应用技术,集成电路设计与制造,电子设计自动化(EDA)技术及其应用,通信与测量系统的电路技术,微波技术及其应用,微波传输. ...

  • 大数据知识体系大全
  • 大数据知识体系 很多人都看过不同类型的书,也接触过很多有关大数据方面的文章,但都是很零散不成系统,对自己也没有起到多大的作用,所以作者第一时间,带大家从整体体系思路上,了解大数据产品设计架构和技术策略. 大数据产品,从系统性和体系思路上来做,主要分为五步: o 针对前端不同渠道进行数据埋点,然后根据 ...

  • 江苏省计算机二级资料整理大全
  • 江苏省计算机二级资料整理大全(主页菌花了好多金币在百度文库下的) 第一部分 计算机基础知识部分 一.计算机基础 1 信息技术的基本概念和发展 2 计算机硬件基础知识 3 数字媒体基本知识 4 计算机软件基础知识 5 计算机网络基础知识 6 计算机与数据库基础知识 7 PC机操作使用的基本技能 要求: ...

  • {电脑软件知识大全}
  • 1.1电脑装机 1.1.1电脑的硬件装备 计算机的种类很多,根据其用途可以分为专用计算机和普通计算机. 专用计算机针对某类问题能显示出最有效.最快速和最经济的特性,但它的适应性比较差,不适于其他方面的应用.导弹和火箭上使用的计算机很大部分就是专用计算机. 普通计算机适应性很强,应用面很广,按其规模. ...

  • 计算机常用英语单词大全
  • Active-matrix 主动距陈 Adapter cards适配卡 Advanced application高级应用 Analytical graph分析图表 Analyze 分析 Animations 动画 Application software 应用软件 Arithmetic operat ...