第5章 存储管理
本章主要介绍表空间管理、数据文件、临时表空间、日志文件以及OMF等知识。
5.1 表空间
Oracle数据库把数据物理存储在数据文件中,通过逻辑对象来访问这些数据。表空间在操作系统级映射到一个或多个数据文件,这些数据文件是真正的物理数据库。
表空间有两类,一类是系统表空间SYSTEM和辅助系统表空间SYSAUX,这两个表空间在创建数据库时新建,不能重命名、不能删除,包含了Oracle数据库的所有数据字典信息。另一类是非系统表空间,如用户表空间USERS、临时表空间TEMP、工具表空间TOOLS、索引表空间INDEX及回退表空间UNDO等。
用户在设计数据库时,往往根据应用系统的不同,将数据库划分为若干个不同的表空间。不同的表空间用来存储不同业务逻辑的数据。
5.1.1 创建表空间
在Oracle11g中创建表空间非常容易,可以使用Oracle Enterprise Manager(OEM)来实现。创建表空间的步骤如下。
首先,在浏览器中登录OEM工具,在服务器选项卡上的存储中选择“表空间”,打开表空间界面,如图5-1所示。此界面显示数据库中所有表空间信息。
图5-1 表空间界面
单击“创建”按钮,进入创建表空间界面。在此界面的“一般信息”选项卡中,可以管理区管理、表空间类型和当前表空间的状态;向表空间添加或从中删除数据文件或者编辑数据文件等,如图5-2所示。
图5-2 创建表空间界面
下面介绍创建表空间的几个重要选项。 (1)区管理。
表空间是由段(SEGMETN)组成,表空间的空间管理就是对段的管理,而段空间的分配是以区间为单位进行的。当一个段中的所有区间都写满后,Oracle就会为该段分配新的区间。这里可以选择本地管理和字典管理。默认安装的所有表空间都是本地管理。
(2)类型。
指定创建表空间的类型,可选“永久”、“临时”或“还原”。分别介绍如下。
① “永久”选项,默认值,指定表空间用于存放永久性数据库对象。其中的“设置为默认永久表空间”选项,表示如果在创建用户时没有为该用户指定默认的表空间,将使用此表空间作为该用户的默认表空间。在该用户下创建对象时,如果没有明确指定所属的表空间,则把创建的对象存放在此表空间中。如果没有指定数据库的默认永久表空间,同时在创建用户时也没有指定默认永久表空间是哪一个,则会使用系统表空间作为该用户的默认永久表空间。数据库的永久表空间不能被删除,除非指定了另外一个表空间作为默认永久表空间。此处还可选择是否“加密”。
② “临时”选项,指定表空间仅用于存放临时对象,永久性对象都不能存放在临时表空间中。其中的“设置为默认临时表空间”选项,表示如果在创建用户时没有为该用户指定默认临时表空间,将使用此表空间作为该用户的默认临时表空间。该用户进行的排序等操作都将使用此表空间作为临时存储的地方。如果没有指定数据库的默认临时表空间,同时在创建用户时也没有指定默认临时表空间是哪一个,则会使用系统表空间作为该用户的默认临时表空间。数据库的临时表空间不能被删除,除非指定了另外一个临时表空间作为默认临时表空间。
③“还原”选项,为数据库的闪回(Flashback)特性提供撤销数据。 (3)状态。
可以选择表空间的状态为“读写”、“只读”和“脱机”,“读写”状态时允许用户对表空间进行读写操作,“只读”状态时用户只能对表空间进行读取,不能写入;“脱机”状态不允许用户访问表空间。
(4)数据文件。
指定创建表空间所包含的数据文件。如选中“使用大文件表空间” 选项,则使用大文件(Bigfile)表空间。其好处是减少了数据文件的数量,方便了数据文件的管理。选用大文件表空间,则只能有一个数据文件,大文件表空间仅可用于 Oracle10g 版或更高版本的数据库,且仅在本地管理表空间中才能获得支持。由于大文件表空间最大可达 8 EB,因此可以显著提高 Oracle 数据库的存储容量。
如果不使用大文件(Bigfile)表空间,则是Smallfile,此时可以为表空间创建多个数据文件,这种方式为默认方式。
在表空间“名称”文本框中输入“XXGCX”,在区管理中选中“本地管理”,状态选中“读写”,类型选中“永久”。单击“添加”按钮,显示“添加数据文件”界面。
这里,可以为数据文件输入文件名、文件目录以及文件大小等参数。其中,“重用现有文件”选项表示如果输入的文件已经存在将重用该文件;在“存储”选项组中,如果选中“数据文件满后自动扩展(AUTOEXTEND)” 复选框,则数据文件将会自动增长,同时还需指定最大文件的大小,如果没有选中“数据文件满后自动扩展(AUTOEXTEND)”复选框,则可以指定增量大小。如输入文件名XXGCX.DBF,文件大小为100MB,选中“数据文件满后自动扩展(AUTOEXTEND)”复选框,增量大小为100KB,并选择最大文件大小为“无限制”,如图5-3所示。
图5-3 添加数据文件界面
单击“继续”按钮返回“创建 表空间”界面。此时可以看到新创建的数据文件,还可以选择”继续”按钮添加数据文件。
在“创建 表空间” 界面的“存储”选项卡中,可以选择设置表空间的存储参数。其中,“区分配”部分包括“自动”和“统一”两个选项,如果选择“自动”,则下一次扩展的区大小由Oracle系统自动确定;如果选择“统一”,则可以指定区大小。
“段空间管理”部分包括“自动”和“手动”两种选项,决定了当向表中插入数据时,如何在段的区间里选择一个可用的数据块来存放数据。如果选择“自动”单选按钮,则表空间中的对象将自动管理其空闲空间,也称为自动段空间管理(Automatic Segment Space Management,ASSM),系统通过位图块(Bitmap Block,BMB)的组织结构来实现,这将有效提高空闲空间管理的性能;如果选择“手动”,则表空间中的对象将使用空闲列表(Freelist)的形式来管理其空闲空间。创建大文件(Bigfile)的表空间时,段空间管理必须是“自动”,而不能是“手动”,否则系统会提示出错。Oracle建议使用自动段空间管理(ASSM)方式。
“压缩选项”决定数据库是否启用数据段压缩,可以有效降低磁盘和高速缓存占用率。适用于在 OLTP 和数据仓库环境中。默认为“不压缩”。
设置好的“存储”选项卡如图5-4所示。
图5-4 存储选项卡
此时,创建上述XXGCX表空间对应的SQL语句如下。
CREATE SMALLFILE TABLESPACE \
DATAFILE 'D:\\APP\\ADMINISTRATOR\\ORADATA\\ORCL\\XXGCX.DBF' SIZE 100M
AUTOEXTEND ON NEXT 100K MAXSIZE UNLIMITED LOGGING EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO
单击”确定”按钮,表空间创建成功。此时查看表空间列表,可以看到新建的XXGCX表空间,该表空间大小为100 MB,已经使用1MB,占用率为1%,空闲空间为99.0MB,为在线(ONLINE)状态,类型为PERMANENT(永久),区管理为LOCAL(本地管理),段管理为AUTO(自动),如图5-5所示。
图5-5 查看新建的XXGCX表空间
5.1.2 管理表空间
1.修改表空间
在表空间创建完成后,在OEM中可以选择修改表空间。在图5-5中选择要修改的表空间,如刚刚创建的表空间XXGCX,,然后单击“编辑”按钮即可进行修改,如图5-6所示。
图5-6 编辑XXGCX表空间
在“编辑 表空间”界面中,可以看到只有能够修改的属性才处于编辑状态,一些不能被修改的属性呈灰色。这是因为Oracle系统规定表空间的一些属性只能在创建表空间时设置,一旦表空间创建完成就不能被修改。
此时,可以选择修改表空间的名称和状态。通过“操作”下拉列表框,可以进入不同的修改界面。如“添加数据文件”、“类似创建”、“生成DDL”、“本地管理”、“显示表空间内容”和“脱机”等操作。如选择修改“状态”为“脱机”时,有4种脱机模式可供选择。
(1)正常:在脱机前将执行检查,将要脱机的表空间所对应的数据缓冲区中的“脏”数据写回数据文件,然后才脱机。正常脱机模式不会丢失表空间的数据,表空间下次联机时也无需进行恢复。如果表空间中的所有数据文件都没有错误,表空间可以正常脱机。
(2)临时:在脱机前执行检查,脏数据能写入数据文件就写入,不能写入的就不写入。这种脱机模式会损坏表空间中的数据。如果表空间的数据文件因写入错误脱机,然后将表空间临时脱机,在将表空间联机之前需要介质恢复。通常用于表空间中的数据部分损坏或丢失的情况。
(3)立即:在脱机前不执行检查,脏数据也不写回数据文件。如果数据库运行在非归档(Noarchivelog)模式下,表空间不能立即脱机。立即脱机模式会损坏表空间中的数据,当联机表空间时需要介质恢复。通常用于表空间中的数据全部损坏或丢失的情况。
(4)用于恢复:将恢复集中的数据库表空间脱机,以便进行时间点恢复。
注意:表空间脱机时尽量采用正常(Normal)方式,这样可以避免将表空间联机时进行介质恢复。