Oracle数据库的逻辑结构
oracle数据库具有跨平台的特性,可以不断地修改和移植到另外的操作系统上。这样oracle就不会直接操作系统底层的数据文件,而是提供一个中间层,这个中间层就是oracle的逻辑结构,它与操作系统的平台无关,而中间层到数据文件的映射通过DBMS来完成。
数据库的跨平台特性
数据文件管理的逻辑结构图
- tablespace(表空间):在逻辑上,一个数据库由表空间组成,一个表空间只能属于一个数据库,一个表空间包括一个或多个操作系统文件,这些操作系统文件称为数据文件。表空间包含一个或多个段。
- segment(段):段是表空间的一个逻辑储存空间,一个表空间包含一个或多个段,一个段不能跨表空间(即一个段只能在一个表空间中),但段可以跨越数据文件,即一个段可以分布在同一个表空间的几个数据文件上,一个段由多个区块组成。
- extent(区):区是段中分配的逻辑储存空间,一个区由连续的oracle数据块组成,一个区只能存在于一个数据文件中,但创建一个段时,该段至少包含一个区段,但段增长时,将分配更多的区给该段。
- oracle block(数据库块)oracle管理存储空间中数据文件的最小单位,它是oracle数据库系统输入输出的最小单位,一个数据库块由一个或多个操作系统块组成,oracle提供了标准的数据库块尺寸,改尺寸由DB_BLOCK_SIZE参数设置,一般为4KB或者8KB
查看各个表空间所使用的的数据块大小
下面的操作说明了这些数据库块的大小是8192B(8KB)。
SQL> select tablespace_name,block_size,contents from dba_tablespaces;
TABLESPACE_NAME BLOCK_SIZE CONTENTS
------------------------------------------------------------------------------------------ ---------- ---------------------------
SYSTEM 8192 PERMANENT
SYSAUX 8192 PERMANENT
UNDOTBS1 8192 UNDO
TEMP 8192 TEMPORARY
USERS 8192 PERMANENT
EXAMPLE 8192 PERMANENT
已选择6行。
数据库文件的物理结构的各组成部分如下:
- 数据文件:数据文件是oracle格式的操作系统文件,即.dbf文件等。数据文件的大小决定了表空间的大小,当表空间不足时,需要增加新的数据文件或者重新设置当前数据文件大小,以满足表空间增长的需求。
- 操作系统块:操作系统数据块依赖于不同的操作系统平台,它是操作系统操作数据文件的最小单位,一个或多个操作系统块组成了一个数据库块。
表空间的分类以及创建表空间
一个数据库中表空间的数量没有严格的限制,大小为20GB的表空间和大小为20MB的表空间可以并存,用户根据业务需求赋予表空间的功能不同(系统表空间除外)。
有几个表空间是oracle数据库必备的表空间,它们是system空间,临时表空间,还原表空间,和默认表空间。oracle11G中还有Sysaux表空间(作为systen空间的扩充)。
oracle数据库将表空间分为两类:系统表空间和非系统表空间。
创建表空间的语法:
CREATE TABLESPACE table_spacename
[DATAFILE clause]
[MINIMUM EXTENT integer[k|m]]
[BLOCKSIZE integer[k]]
[LOGGING | NOLOGGING]
[DEFAULT storage_clause]
[ONLINE | OFFLINE]
[PERMANENT | TEMPORARY]
DATAFILE:组成该表空间的数据文件的名字,该子句应该给出完整的目录和文件名,目录必须存在。
MINIMUM EXTENT:定义该表空间中最小的区大小,这样该表空间中的区大小为该最小值的整数倍。
BLOCKSIZE:指出该表空间使用的非标准块尺寸大小,单位为K,设置该参数时,必须先修改参数文件中的两个参数:DB_CACHE_SIZE和DB_nK_CACHE_SIZE,这两个参数的值必须和BLOCKSIZE的值相同。使用默认值时DB_nK_CACHE_SIZE参数值为0。
LOGGING | NOLOGGING:该参数说明是否把该表空间中数据的变化记录在重做日志中。
DEFAULT:该子句定义表空间的一些参数,如初始化区段的尺寸,最小区段尺寸、最大区段数量等。
ONLINE | OFFLINE : 该参数支出该表空间创建后是否联机,默认为联机状态。
PERMANENT | TEMPORARY : 该参数标明了表空间是永久还是非永久。用户使用ORDER BY 子句查询数据时的排序结果,临时表空间不需要将变化记录到重做日志,默认为永久表空间。
创建表空间user_data
SQL> create tablespace user_data
2 datafile '/u01/app/oracle/oradata/tiqs/userdata.dbf' size 100M;
表空间已创建。
查看表空间是否创建
SQL> select tablespace_name,logging,status from dba_tablespaces;
TABLESPACE_NAME LOGGING STATUS
------------------------------------------------------------------------------------------ --------------------------- ---------------------------
SYSTEM LOGGING ONLINE
SYSAUX LOGGING ONLINE
UNDOTBS1 LOGGING ONLINE
TEMP NOLOGGING ONLINE
USERS LOGGING ONLINE
EXAMPLE NOLOGGING ONLINE
USER_DATA LOGGING ONLINE
已选择7行。
查看表空间对应的数据文件
SQL> select file_name,tablespace_name from dba_data_files where tablespace_name='USER_DATA';
FILE_NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TABLESPACE_NAME
------------------------------------------------------------------------------------------
/u01/app/oracle/oradata/tiqs/userdata.dbf
USER_DATA
表空间磁盘管理的两种方案
-
数据字典管理的表空间磁盘管理
表空间的管理就是对该表空间区段的管理。
用户插入数据或表中的其他对象增加时,就需要分配更多的区段给新增的数据使用。
数据字典的管理方式就是将每个数据字典管理的表空间的使用情况记录在数据字典的表中,当分配或者撤销表空间区段的分配时,则隐含地使用SQL语句对表操作以记录当前表空间区段的使用情况,并且当还原段中记录了变换前的区段使用情况,就像操作普通表时oracle的行为一样,显然这种方式增加了数据字典的频繁操作,对于大型数据库系统,系统效率会大大降低。
-
本地表空间磁盘管理
本地管理的表空间是为了解决数据字典管理表空间效率不高的问题。
oracle设计让每一个表空间自己管理表空间区段的分配,记录区段的使用情况。
创建表空间
-
创建本地管理的表空间,查看、验证
SQL> create tablespace user_data
2 datafile '/u01/app/oracle/oradata/tiqs/userdata.dbf' size 100M
3 extent management local
4 uniform size 1M;
表空间已创建。
SQL> select tablespace_name,block_size,extent_management,status from dba_tablespaces where tablespace_name='USER_DATA';
TABLESPACE_NAME BLOCK_SIZE EXTENT_MANAGEMENT STATUS
------------------------------------------------------------------------------------------ ---------- ------------------------------ ---------------------------
USER_DATA 8192 LOCAL ONLINE
表空间管理
SQL> alter tablespace USER_DATA offline;
表空间已更改。
SQL> alter tablespace USER_DATA online
2 ;
表空间已更改。
SQL> alter tablespace USER_DATA read only;
表空间已更改。
SQL> alter tablespace USER_DATA read write;
表空间已更改。
表空间和数据文件管理
-
创建数据文件自动拓展表空间
SQL> create tablespace USER_DATA2
2 datafile '/u01/app/oracle/oradata/tiqs/userdata2.dbf' size 100M
3 autoextend on;
表空间已创建。
SQL> select file_name,autoextensible from dba_data_files where tablespace_name='USER_DATA2';
FILE_NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
AUTOEXTEN
---------
/u01/app/oracle/oradata/tiqs/userdata2.dbf
YES
SQL> select file_name,autoextensible from dba_data_files where tablespace_name='USER_DATA';
FILE_NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
AUTOEXTEN
---------
/u01/app/oracle/oradata/tiqs/userdata.dbf
NO
-
使用ALTER DATABASE修改表空间中的数据文件为自动拓展
修改表空间中数据文件自动拓展,每次自动拓展1mb。
SQL> alter database datafile '/u01/app/oracle/oradata/tiqs/userdata.dbf' autoextend on next 1m;
数据库已更改。
-
使用ALTER DATABASE新增表空间中的数据文件
SQL> alter tablespace USER_DATA add datafile '/u01/app/oracle/oradata/tiqs/userdata3.dbf' size 100M;
表空间已更改。
SQL> alter tablespace USER_DATA add datafile '/u01/app/oracle/oradata/tiqs/userdata4.dbf' size 100M autoextend on next 1m;
表空间已更改。
SQL> select file_name,autoextensible from dba_data_files where tablespace_name='USER_DATA';
FILE_NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
AUTOEXTEN
---------
/u01/app/oracle/oradata/tiqs/userdata.dbf
YES
/u01/app/oracle/oradata/tiqs/userdata3.dbf
NO
/u01/app/oracle/oradata/tiqs/userdata4.dbf
YES
删除表空间
DROP TABLESPACE tablespace_name
[INCLUDING [CONTENTS] [ADN DATAFILES] [CASCADE CONSTRAINTS]]
- INCLUDING CONTENTS 删除表空间中的所有区段(extents)
- AND DATAFILES 删除表空间中的数据文件
- CASCADE CONSTRAINTS 删除和该表空间中的表相关性的完整性约束。
SQL> DROP TABLESPACE USER_DATA INCLUDING CONTENTS AND DATAFILES;
表空间已删除。
迁移数据文件
迁移数据文件需要
- 关闭数据库
- 移动数据文件
- 启动数据库到mount
- 更改表空间datafile配置
alter database
raname file ‘filename_beore.dbf’
to ‘filename_after.dbf’