表空间和数据文件
Oracle逻辑上将数据存储在表空间中,物理上将数据存储在数据文件中。
表空间
一次只能属于一个数据库
由一个或多个数据文件组成
是否进一步划分为逻辑存储单元
数据文件:
只能属于一个表空间和一个数据库
是模式对象数据的存储库
Oracle数据库的存储结构
表空间的类型
创建表空间
创建表空间的命令如下:
CREATE TABLESPACE
表空间中的空间管理
本地管理表空间:
空闲区段在表空间中管理。
位图用于记录空闲区段。
每个位对应一个或一组块。
位值表示空闲或已使用。
Dictionary-managed表空间:
空闲区段由数据字典管理。
在分配或释放区段时更新相应的表。
Bit and Byte
Dictionary-Managed TS
区段在数据字典中进行管理。
存储在表空间中的每个段可以有不同的存储子句。
需要合并。
CREATE TABLESPACE userdata DATAFILE '/u01/oradata/userdata01.dbf' SIZE 500M EXTENT MANAGEMENT DICTIONARY DEFAULT STORAGE (initial 1M NEXT 1M PCTINCREASE O);
本地管理表空间
减少了数据字典表上的争用,
在空间分配或重新分配时不会产生撤销
不需要合并
CREATETABLESPACE userdata
DATAFILE '/u01/oradata/userdata01.dbf'SIZE500MEXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;
迁移DM SYSTEM TS
将字典管理的SYSTEM表空间迁移到本地管理:
DBMS SPACEADMIN.
TABLESPACE MIGRATETO LOCAL ( 'sYSTEM ' );
移动前的准备
我们对数据库进行完整备份。
确保数据库有一个默认的临时表空间,而不是SYsTEM。
临时表空间是通过CREATE TEMPORARYTABLESPACE命令创建的。3.在字典管理的表空间中消除任何撤消(回滚)段。
在本地管理的表空间中至少应该有一个在线undo段,或者undo表空间应该是在线的。
除了包含undo空间和默认临时表空间的表空间外,所有表空间都应该设置为READ ONLY模式。
以受限模式启动实例。
迁移SYSTEM表空间:
DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_TO_LOCAL('SYSTEM');
Undo Tablespace
用于存储undo段
不能包含任何其他对象
区段是本地管理的
只能使用DATAFILE和EXTENT管理子句
CREATE UNDO TABLESPACE undo1
DATAFILE'/u01/oradata/undo01.dbf' SIZE 40M;
Temporary Tablespaces
用于排序操作
能被多个用户共享吗
不能包含任何永久对象
建议使用本地管理的区段
CREATE TEMPORARY TABLESPACE temp
TEMPFILE'/u01/oradata/temp01.dbf' SIZE 20
MEXTENT MANAGEMENT LOCAL UNIFORM SIZE 4M;
临时表空间
当SYSTEM表空间是本地管理时,在创建数据库时必须至少定义一个默认的临时表空间。本地管理的SYSTEM表空间不能用于默认的临时存储。
如果SYSTEM是字典管理的,并且在创建数据库时没有定义默认的临时表空间,那么SYSTEM仍然用于默认的临时存储。但是,您将在ALERT.LOG中收到一条警告,指出建议使用默认的临时表空间,并且在将来的版本中是必需的。
Default Temporary TS
指定数据库范围的默认临时表空间
避免使用SYSTEM表空间存储临时数据
可以使用以下命令创建:
CREATE DATABASE
ALTER DATABASE
Creating a Default Temp TS
数据库创建后:
ALTER DATABASE
DEFAULT TEMPORARY TABLESPACE default temp2;查找数据库查询DATABASE_PROPERTIES的默认临时表空间。
SELECT * FROM DATABASE-PROPERTIES:
限制
默认临时表空间不能为:
删除,直到新的默认值可用。
脱机
修改为永久表空间
只读表空间
使用以下命令将表空间设置为只读模式:
ALTER TABLESPACE userdata rEAD ONLY
导致检查点
只能用于读操作的数据
对象可以从表空间中删除
使表空间脱机
不能用于数据访问
不能脱机的表空间:
系统表空间
具有活动撤消段的表空间
默认临时表空间
使表空间离线。
ALTER TABLESPACE userdata oFFLINE:
使表空间在线:
ALTER TABLESPACE userdata oNLINE;
更改存储设置
使用ALTER TABLESPACE命令修改存储设置:
ALTER TABLESPACE userdata MInIMUM EXTENT 2M;
ALTER TABLESPACE userdata
DEFAULT STORAGE (INITIAL 2M NEXT 2MMAXEXTENTS 999):
不能更改本地管理的表空间的存储设置。
调整表空间大小
表空间可以通过以下方式调整大小:
更改数据文件的大小:
自动使用AUTOEXTEND
手动使用ALTER DATABASE
使用ALTER TABLESPACE添加数据文件
动态调整数据文件大小
向TS添加数据文件
添加表空间
启用自动扩展
可以使用以下命令自动调整大小:
CREATE DATABASE
CREATE TABLESPACE
ALTER TABLESPACEADD DATAFILE
例子:
CREATE TABLESPACE user data
DATAFILE
'/u01/oradata/userdata01.dbf' SIZE 200MAUTOEXTEND ON NEXT 10M MAXSIZE 500M:
查询DBA_DATA_FILES视图,确定是否启用了AUTOEXTEND。
手动调整日期文件大小
手动增加或减少数据文件大小更改数据库。
调整数据文件大小可以在不添加更多数据文件的情况下增加空间。
手动调整数据文件大小会回收数据库中未使用的空间。
例子:
向TS添加数据文件
通过添加额外的数据文件来增加分配给表空间的空间
ADD DATAFILE子句用于添加数据文件
例子:
移动DF的方法
修改表空间
表空间必须离线。
目标数据文件必须存在。
ALTER TABLESPACE userdata RENAME
DATAFILE '/u01/oradata/userdata01.dbf
TO'/u02/oradata/userdata01.dbf'
修改数据库
必须挂载数据库。
目标数据文件必须存在。
ALTER DATABASE RENAME
FILE'/u01/oradata/system01.dbf
TO'/u03/oradata/system01.dbf';
删除表空间
在以下情况下不能删除表空间:
是SYSTEM表空间
有活动片段
包括CONTENTS删除片段。
包括内容和数据文件删除数据文件。
CASCADE CONSTRAINTS删除所有引用
DROP TABLESPACE userdata
INCLUDING CONTENTS AND DATAFILES:
定义DB_CREATE_FILE_DEST参数的方法如下:
初始化参数文件
使用ALTER SYSTEM命令动态设置
ALTER SYSTEM SET
db_create_file_dest =/u01/oradata/dba01';
创建表空间时:
数据文件自动创建并位于DB_CREATE_FILE_DEST
默认大小为100mbAUTOEXTEND设置为UNLIMITED
存储和关系支柱
段的类型
存储条款优先级
1. 如果更改了存储参数,则新选项仅应用于尚未分配的区段。
2. 某些参数不能在表空间级别指定。这些参数只能在段级别指定。
3.如果为表空间指定了最小区段大小,则该大小适用于将来为表空间中的段分配的所有区段。
Extent Alloc & Dealloc
区段是表空间内的段使用的一块空间。
An extent is allocated when the segment is
创建 扩展 改变
An extent is deallocated when the segment is:
丢弃 改变 截断
已使用和空闲区段
数据库块
最小I/O单位
由一个或多个操作系统块组成
在表空间创建时设置
DB_BLOCK_SIZE是默认的块大小
多块大小支持
可以使用标准块大小和最多四个非标准块大小创建数据库。
块大小可以是任意的2次幂值介于 2 KB 和 32 KB 之间。
标准块大小
在数据库创建时使用DB_BLOCK_SIZE参数设置;除非重新创建数据库,否则无法更改
用于系统和临时表空间
DB_CACHE SIZE指定标准块大小的默认缓存大小:
Minimum size = one granule (4 MB or 16 MB)
Default value = 48 MB
非标准块大小
使用以下动态参数配置额外的缓存:
DB_2K_CACHE_SIZE for 2 KB blocks
DB_4K_CACHE_SIZE for 4 KB blocks
DB_8K_CACHE_SIZE for 8 KB blocks
DB_16K_CACHE_SIZE for 16 KB blocks
DB_32K_CACHE_SIZE for 32 KB blocks
如果nK是标准块大小,则不允许使用DB nK CACHE SIZE。
每个缓存的最小大小是一个颗粒。
创建非标准块大小TS
多个块大小规则
一个分区对象的所有分区必须驻留在相同块大小的表空间中。
所有临时表空间,包括作为默认临时表空间使用的永久表空间,必须具有标准块大小。
索引组织的表溢出和脱行LOB段可以存储在块大小不同于基表的表空间中。
数据库块内容
块空间使用参数
数据块管理
有两种方法可用于管理数据块:
自动段空间管理
手册的管理
自动段空间管理
它是一种管理数据库段内空闲空间的方法。
跟踪段内空闲空间和已使用空间使用位图来完成,而不是使用空闲列表。
此方法提供:
易于管理
更好的空间利用
提高并发INSERT操作的性能
位图段包含一个位图,它描述了段中每个块相对于其可用空间的状态。
该映射包含在一组单独的块中,称为位图块(BMBs)。
当插入新行时,服务器在映射中搜索具有足够空间的块。
当块中可用的空间量发生变化时,它的新状态反映在位图中。
配置ASSM
对于本地管理的表空间,只能在表空间级别启用自动段空间管理。
CREATE TABLESPACE data02
DATAFILE'/u0l/oradata/data02.dbf' SIZE 5M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 64K
SEGMENT SPACE MANAGEMENT AUTO:
手动数据块管理
允许您使用如下参数手动配置数据块:
PCTFREE
PCTUSED
FREELIST在以前的Oracle版本中唯一可用的方法
HWM(High-Water Mark)
块空间使用情况
获取存储信息
可以通过以下视图查询存储的相关信息:
DBA_EXTENTS
DBA_SEGMENTS
DBA_TABLESPACES
DBA_DATA_FILES
DBA_FREE_SPACE