范文一:数据库逻辑结构
DATABASE-->TABLESPACES-->SEGMENTS-->EXENTS-->BLOCKS
Oracle 的逻辑存储结构单元从小到大依次分为数据块、区、段和表空间四种
数据块:由磁盘上特定数量的字节组成, 是数据库中最小的逻辑存储单元, 也是最小的 I/O单元
区:有两个或更多个连续的数据块组成,是数据库中最小的存储分配单元。
段:是由若干个区形成的,是相同类型数据的存储分配区域
表空间:一个或多个数据文件的集合, 通常由若干个相关联的段组成, 是最大的逻辑存 储单元,所有的表空间构成一个数据库。
表空间
一个表空间对应一个或多个数据文件,一个数据文件只能从属于一个表空间。
表空间是存储模式对象的容器, 一个数据库对象只能存储在一个表空间中 (分区表和分 区索引除外) ,但可以存储在该表空间所对应的一个或多个数据文件中。
表空间管理的意义 :
使用多个表空间,可以使得在执行数据库操作时非常方便灵活,比如:
可以控制整个数据库占用空间的大小、
可以控制用户所占用的存储空间的大小
用户数据与数据字典数据分开,减少 I/O冲突
一个表空间脱机时,其他表空间保持联机
TABLESPACE(表空间)分类
PERMANENT 永久表空间
UNDO 撤销表空间
TEMPORARY 临时表空间
永久性表空间是指该表空间用于存放永久性数据库对象如 SYSTEM 系统表空间和 USERS 用户表空间。
临时性表空间是指该表空间仅用于存放临时对象, 任何永久性对象都不能驻留于临时表 空间中。在建立用户时,如果不指定表空间,默认的临时表空间是 TEMP 。在数据库实例运 行过程中, 执行排序、 管理索引和访问视图等操作时会产生大量的临时数据, 这些临时数据 将保存在临时表空间中。
撤销表空间存储撤销段 (回退段 ) ,由例程自动处理撤销表空间中的撤销段。这样可以减 轻 DBA 的工作负担。撤销段主要用于显式或隐式的回退一个事务;从逻辑错误中恢复等方 面
创建表空间
创建表空间可以使用 OEM 或利用 CREATE TABLESPACE命令方式
需要注意的是,一般情况下,建立表空间是特权用户或是 dba 来执行的,如果用其它用 户来创建表空间,则用户必须要具有 create tablespace的系统权限。
OEM 例:创建永久性表空间 “ Stu_space” , 区管理方式为 “本地管理” , 状态为 “读写” 。 其对应数据文件 “ stu01.dbf” 大小为 10MB , 数据文件允许自动增长, 增长增量大小为 10MB , 最大限制为 100MB ,其他参数采用默认值。
在建立数据库后,为便于管理表,最好建立自己的表空间
createtablespace data01 datafile 'd:\test\dada01.dbf' size 20m uniform size 128k;
说明:执行完上述命令后,会建立名称为 data01 的表空间,并为该表空间建立名称为 data01.dbf 的数据文件,区的大小为 128k
使用数据表空间
create table mypart(deptno number(4), dname varchar2(14), loc varchar2(13)) tablespace data01;
表空间的管理方式:
重点是段的管理方式和区的管理方式是在建立表空间时确定的。
段管理方式有 AUTO 和 MANUAL 两种, 区管理方式有本地管理和字典管理 (已淘汰) 两 种。
SQL> select tablespace_name,contents ,extent_management,segment_space_management from dba_tablespaces;
建一个使用缺省值的表空间
SQL> create tablespace a datafile '/u01/oradata/timran11g/a01.dbf' size 10m;
段、区和块
段是表空间中指定类型的逻辑结构, 由一个或多个区间组成。 一个单独的表可以是一个 段。 按照段中存储数据的特征, 可以将段分为 4种类型:数据段、 索引段、 回退段和临时段。 区间是由一系列物理上连续的数据块组成的存储结构。 在创建表时, Oracle 将为表创建 一个数据段, 并为数据段分配一个初始区间。 当向表中添加数据时, 初始区中的块将逐渐被 写满,写满后, Oracle 将为数据段再分配一个新的区间。
块是 Oracle 用来管理存储空间的最基本单元,也是最小的逻辑存储单元,数据块的大小由 初始化参数 DB_BLOCK_SIZE确定。 数据库进行读写操作时都是以块为单位进行的, 在数据块 中可以存储各种类型的数据,如表数据、索引数据和簇数据等。
数据库启动与关闭
启动分为三个阶段
1) nomount 阶段:读取 init parameter
根据数据库初始化参数文件,为数据库创建实例,启动一系列后台进程和服务进程,并 创建 SGA 区等内存结构。在此阶段不检查数据库物理文件是否存在。
2) mount 阶段:读取控制文件
打开控制文件,从中获取数据库名称、数据文件和重做日志文件的位置、名称等数据库 物理结构信息,为打开数据库做好准备。数据库仍然处于关闭状态,用户无法使用数据 库。
3) open 阶段:1、检查所有的 datafile 、 redo log、 group 、 password file。
2、检查数据库的一致性(controlfile 、 datafile 、 redo file的检查点是否一致) 实例关闭 :
关闭数据库的步骤
1) 关闭数据库。 Oracle 将重做日志缓冲区内容写入重做日志文件中,并将数据高速缓存中 的脏缓存块写入数据文件中,然后关闭所有数据文件和重做日志文件。
2) 卸载数据库。数据库关闭后,实例卸载数据库,并在控制文件中更改相关项目,然后关 闭控制文件。但实例仍然存在。
3) 关闭实例。卸载数据库后,终止所有的后台进程和服务器进程,分配给实例的内存 SGA 和 PGA 空间被回收。
使用命令关闭数据库 :
shutdown normal :拒绝新的连接,等待当前事务结束,等待当前会话结束,生成检查 点
shutdown transactional :拒绝新的连接,等待当前事务结束,生成检查点
shutdown immediate:拒绝新的连接,未提交的事务回滚,生成检查点
shutdown abort(startup force) :事务不回滚,不生成检查点,下次启动需要做 instance recovery
范文二:数据库的逻辑结构
数据库逻辑存储结构
数据库的物理存储结构对应一系列的物理文件, 这部分主要描述的是数据存储的实际位置, 不过数据如果存储, 是以什么结构存储到数据文件中, 则取决于数据库的逻辑存储结构.
Oracle 数据库在执行操作时, 并不是以数据文件为单位, 而是从逻辑上定义出一组结构, 操作的数据可以一步步细分不同的存储单元,oracle 操作数据的过程, 实际上就是对这些不同级别的存储单元进行维护和管理的过程.
逻辑存储概述
--块(block) 块是逻辑存储结构中最小存储单位, 所有数据的存储都是以块为单位进行. 初始化参数文件中BLOCK_SIZE来指定一个块的大小, 也就是说oracle 的块大小在数据库创建时指定, 一经指定就无法修改, 除非重建数据库.
--区(extent) 区是oracle 数据库的最小分配单位, 由一组连续的块组成, 这些块在物理上可能并不连续(也就是OS 块), 但是必需都存在于一个物理文件, 单个区在分配时不能跨文件分配(这个文件应该是数据文件). 在创建对象时, 最少会为该对象分配一个区, 这个区叫做初始区(initial extent) 在随着对象的不断扩展, 超出初始区后,oracle 就会再为其分配扩展区(incremental extent)扩展区不一定要与初始区连续存放, 甚至大小也可以与初始区不同, 不过扩展区也必需是由连续的块组成.
段(segment)从逻辑的角度看, 段由一个或多个区组成, 它是一个真正逻辑结构.
可以将段看作是对象的全部或某个部分
例如:一个普通的堆组织表(不含分区,LOB 类型及索引等) 那么该表就对应一个段, 不管这个表中被存放多少记录, 它都仍然只对应一个段, 不过如果该表创建了索引, 那么索引数据会存放专门的索引段, 如果该表有LOB 类型,LOB 数据也会被存入单独的数据段.
--表空间(tablespace)从逻辑上定义, 是由一个或多个段组成, 从物理上定义是由一个或多个数据文件组成. 表空间是oracle 数据库中空间分配的最大逻辑单位, 在往上就是数据库级别.
平时进行的创建对象的操作, 都是在表空间一级进行.
**提示:如创建存储对象时只能指定存储到哪个表空间, 而不能指定存储到更细粒度的逻辑结构, 如段, 区, 块. 也不能指定存储到某个数据文件中.
*注意*:在创建存储对象时, 只需要指定存储所在的表空间(如果未指定, 则存储到用户当前的默认表空间中), 其他一切由oracle 自动处理 图: 每层结构都是一对多的关系
逻辑结构对应关系图
--块block
整倍数, 可以设置的值有2KB,4KB,8KB,16KB 和32KB oracle 对数据文件中存储的空间进行管理就是以数据块(oracle块) 为最小单位,oracle 中的块在设计时是操作系统块的
--在9i 前oracle 只有一种数据块大小, 9i后开始,oracle 提供多种块大小的支持, 按照类别来分, 为标准块与非标准块, 标准块是在创建数据库时由初始化参数 DB_BLOCK_SIZE指定, 该参数一经指定之后无法修改, 除非重建数据库; 同事DBA 在创建表空间时又可以为表空间指定与标准块不同的块大小, 这就所谓的非标准块
块结构
块结构图三思 471 16-5
块结构说明
数据块头:包含块的一些属性信息, 如块的物理位置, 块所属的段的类型(如数据段, 索引段, 回滚段等)
表目录:块中存储的数据为表数据, 表目录中保存关于这个表的相关信息
行目录:块中存储的数据为表数据, 表目录中保存数据行的相关信息
提示:一个块中可能包含多条表记录, 也可能只保存某条记录的一部分, 这要视记录的长度及该块的空间分配情况而定.
范文三:数据库逻辑结构图
数据库逻辑结构图
一、 实体的关系模型
1)
2)
3)
4)
5)
6)、财务(标志,消费项目,消费时间,消费金额,剩余金额,总收入)
其中有下划线的是主键。
二、关系模型合并
1)
2)
3)
4)
5)
6)、财务(标志,消费项目,消费时间,消费金额,剩余金额,总收入)
三、关系模型的函数依赖关系
1)、用户名——>密码
2)、(帐号,密码)——>姓名,(帐号,密码)——>年龄,(帐号,密码)——>出生日期,(帐号,密码)——>电话号码
3)、时间——>地点,时间——>事件
4)、姓名——>城市,姓名——>备注,姓名——>工作地点,姓名——>联系方式;
5)、日期——>地点,日期——>人物,日期——>事情
6)、标志——>消费时间,消费时间——>消费项目,消费时间——>消费金额,标志——>总收入,标志——>剩余金额。 其中6不是第一范式其他都是第一范式,且6为第二范式.
四、优化
1)
2)
3)
4)
5)
6)、财务(标志,消费时间,剩余金额,总收入)
消费(消费时间,消费项目,消费金额)
范文四:ORACLE数据库中的逻辑结构
ORACLE 的逻辑结构是由一个或多个表空间组成, 一个数据库划分为一个或多个逻辑单位, 该逻辑单位称为表空间(tablespace ) 。一个表空间可将相关的逻辑结构组合在一起。
一个表空间由一组分类段组成。
一个段由一组范围组成。
一个范围由一批数据库块组成。
一个数据库块对应一个或多个物理块。
每一个 ORACLE 数据库包含有一个名为 SYSTEM 的表空间, 在数据库建立时自动建立。 在 该表空间中包含有整个数据库的系统信息数据,最小的数据库可只需要 SYSTEM 表空间。 表空间利用增加数据文件可扩大表空间, 表空间的大小为组成该表空间的数据文件的大小的 和。 ORACLE 数据库中一表空间是由一个或多个物理数据文件组成,一个数据文件只可与 一个表空间相联系。当为一表空间建立一数据文件时, ORACLE 建立该文件,分配指定的 磁盘空间容量。在数据文件初始建立后,所分配的磁盘不包含有任何数据。
一个模式(schema )为模式对象(schema object)的一个集合,每一个数据库用户对应一个 模式。模式对象为直接引用数据库数据的逻辑结构,模式对象包含如表、视图、索引、同义 词等结构。 模式对象是逻辑数据存储结构, 每一种模式对象在磁盘上没有一个相应文件存储 其信息。 一个模式对象逻辑地存储在数据库的一个表空间中, 每一个对象的数据物理地包含 在表空间的一个或多个数据文件中。 例如:表、 索引等模式对象,在指定表空间的数据文件 上为该对象分配多少空间。图 1-5说明模式对象、表空间和数据文件之间的关系。
模式与表空间之间的关系为:一个表空间可包含不同模式的对象, 而一个模式中的对象可包 含在不同的表空间中。
1. 数据库块
数据库块 (database block) 是 ORACLE 逻辑分配空间的最底层, 又称逻辑块、 页或 ORACLE 块。
数据库块是数据库使用和分配空间的最小单元, 也可以说是使用的最小 I/O单元, 一个数据 块与磁盘上指定的物理空间大小相一致, 一个数据库块对应一个或多个物理块, 块的大小由 参数 db_block_size确定。
PCTFREE 和 PCTUSED 是开发人员用来控制数据块中可用插入和更新数据的空闲空间大小 的参数。
PCTFREE :设置数据块中保持空闲的百分比。
PCTUSED :当数据块空闲空间达到 PCTFREE 时,此块不允许插入数据,只能修改或删 除块中的行,更新时可能使数据块空闲空间变大,已用数据空间变小,当已用空间低于 PCTUSED 时,则可以重新插入数据。
PCTFREE 及 PCTUSED 的选择:
经常做查询(select )的表,应使 PCTFREE 小些,尽量减少存储空间浪费。
经常做插入(insert )的表,应使 PCTUSED 大一些。
经常做更新(update )的表,应使 PCTFREE 大一些,给更新留出更大的空间,减少行移 动。
说明:
这两个参数只能在创建、修改表和聚簇(数据段)时指定。另外,在创建、修改索引(索引 段)时只能指定 PCTFREE 参数。
经常做插入的表设置举例:
create table COMMINFOR
( SERIALNUMBER V ARCHAR2(20) not null, ENTERHISTIME DA TE not null, ACCEPTBEGINTIME DATE null , ACCEPTDURATION NUMBER(10) null , ACCEPTERNO V ARCHAR2(4) null , CALLINGPHONENO V ARCHAR2(20) null , ACCEPTID NUMBER(10) null ,
范文五:数据库逻辑结构大全(精)
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/ 在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 tablespace 【例2-2】将表空间dalianren 脱机 SQL>alter tablespace dalianren offline; 注意 system表空间不能脱机。 5.使一个表空间联机 命令格式: SQL>alter tablespace 【例2-3】将表空间dalianren 联机 SQL>alter tablespace dalianren online; 6.使表空间只读 命令格式: SQL>alter tablespace 【例2-4】将表空间dalianren 更改为只读 SQL>alter tablespace dalianren read only; 7.使表空间可读可写 命令格式: SQL>alter tablespace 【例2-5】将表空间dalianren 更改为可读写 SQL>alter tablespace dalianren read write; 8.创建临时表空间 命令格式: SQL>create temporary tablespace tempfile′ size 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 tablespace ile_name>′size 【例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 ′ 【例2-8】调整临时表空间的数据文件大小 SQL>alter database tempfile ′D:\oracle\product\10.2.0\oradata\ test \temp_ren.ora′ resize 20m; 11.将表空间的数据文件或临时文件脱机 命令格式: SQL>alter database datafile′ SQL>alter database tempfile ′ 【例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 ′ 【例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 tablespace 【例2-12】删除表空间dalianren 及其包含的内容 SQL>drop tablespace dalianren including contents; 15.删除包含目录内容和数据文件在内的表空间 命令格式: SQL>drop tablespace 【例2-13】删除表空间dalianren 及其包含的内容以及数据文件 SQL>drop tablespace dalianren including contents and datafiles; 16.当含有参照性约束时,删除包含目录内容和数据文件在内的表空间 命令格式: SQL>drop tablespace 【例2-14】将表空间dalianren 及其包含的内容、数据文件以及相关约束一同删除 SQL>drop tablespace dalianren including contents and datafiles cascade constraints; 17.表空间更名 Oracle9i 中不能直接将表空间更名。在Oracle 10g可直接更名永久表空间和临时表空间。但是,system 和sysaux 表空间不能更名。 命令格式: SQL>alter tablespace 【例2-15】将表空间users 更改为newusers SQL>alter tablespace users rename to newusers; 在Oracle 10g中,如果一个撤销表空间通过使用pfile 的实例被更名,则警告日志文件中将写入一个信息,提醒用户更改undo_tablespace的参数值。 注意当使用drop tablespace误删除了表空间之后,通过查看alert 文件可以确定误操作的时间。该文件位于Oracle_Home\admin\ 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;