Oracle存储管理详解
Oracle存储管理详解
从逻辑上讲,数据存储在段(通常是表)中;从物理上讲,数据存储在数据文件(datafile)中。表空间(tablespace)实体是二者的象,一个表空间可能包含多个段,并由多个数据文件组成。段和数据文件没有直接关系。数据文件可以作为文件系统中的文件存在,从10 g版本开始,也可以作为自动存储管理(Automatic Storage Management,ASM)设备上的文件存在。
www.zzzyk.com
一、Oracle数据存储模型
将逻辑存储与物理存储分开是关系数据库范例的必要部分。关系数据库范例表明:编程人员只处理逻辑结构,而让数据库去管理到物理结构的映射。这意味着,可以重新组织物理存储,也可以将整个数据库移动到完全不同的硬件和操作系统上,而应用程序意识不到任何更改。
如下图展示Oracle存储模型,逻辑结构在左,物理结构在右。
www.zzzyk.com
1、Oracle数据库逻辑结构
(1)DATABASE:一个数据库可划分为多个称为表空间的逻辑存储单元。
(2)TABLESPACE:只能属一个数据库,包括一个或多个文件。
(3)SEGMENT:存在于表空间中,包含一个或多个区。
包括:表段、表分区段、索引段、索引分区段、临时段、撤销段、BLOB、CLOB
高水位
PCTFREE和PCTUSED
行迁移和行链接
INITRANS和MAXTRANS
(4)EXTENT:由相邻的数据块的组成,这意味着每个区只能存在于一个数据文件中。
(5)BLOCK:是数据库中最小的I/O单元,db_block_size
2、Oracle数据库物理结构
(1)、OS文件
A、仅属于一个表空间
B、是构成表空间的基础文件
(2)、OS块
A、tune2fs -l /dev/sda1
B、扇区:512字节 操作系统一次IO的大小
3、表空间、表、区、块及文件号的关系由视图dba_extents展显出来
gyj@OCM> create tablespace tp1 datafile'/u01/app/oracle/oradata/ocm/tp1.dbf' size 100M,'/u01/app/oracle/oradata/ocm/tp2.dbf' size 100M EXTENT MANAGEMENT LOCAL UNIFORMSIZE 1M;
gyj@OCM> alter user gyj defaulttablespace tp1;
gyj@OCM> conn gyj/gyj
gyj@OCM> create table t10 (id int,namevarchar2(100));
gyj@OCM> begin
2 for i in 1 .. 200000 loop
3 insert into t10values(i,'gyj'||i);
4 commit;
5 end loop;
6 end;
7 /
gyj@OCM> col tablespace_name for a10
gyj@OCM> col segment_name for a10
gyj@OCM> selecttablespace_name,segment_name,extent_id,file_id,block_id,bytes,blocks fromdba_extents where segment_name='T10' order by extent_id;
TABLESPACE SEGMENT_NA EXTENT_ID FILE_ID BLOCK_ID BYTES BLOCKS
---------- ---------- ---------- -------------------- ---------- ----------
TP1 T10 0 6 128 1048576 128
TP1 T10 1 7 128 1048576 128
TP1 T10 2 6 256 1048576 128
TP1 T10 3 7 256 1048576 128
TP1 T10 4 6 384 1048576 128
二、表空间类型
1、普通表空间:系统表空间与非系统表空间
2、临时表空间
3、回滚表空间
三、创建空间
CREATE TABLESPACE TP25 DATAFILE'/u01/app/oracle/oradata/ocp/tp2501.dbf' SIZE 50M,
'/u01/app/oracle/oradata/ocp/tp2502.dbf' size50M
AUTOEXTEND ON next 10M MAXSIZE 2G,
'/u01/app/oracle/oradata/ocp/tp2503.dbf' size50M
--EXTENT MANAGEMENT DICTIONARY
AUTOEXTEND ON next 10M MAXSIZE 2G
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 2M
SEGMENT SPACE MANAGEMENT AUTO;
CREATE TABLESPACE TP21 DATAFILE'/u01/app/oracle/oradata/ocp/tp2501.dbf' SIZE 50M
EXTENT MANAGEMENT DICTIONARY;
create tablespace tp22 datafile'/u01/app/oracle/oradata/ocp/tp22_1.dbf' size10M,'/u01/app/oracle/oradata/ocp/tp22_2.dbf' size 10M EXTENT MANAGEMENT LOCAL;
四、删除表空间
1.删除没有对象的表空间
drop tablespace tp1;
2、删除有对象的表空间,但不删除物理文件
drop tablespace tp1 including contents;
3、删除有对象的表空间和删除物理文件
drop tablespace tp20 including contents and datafiles cascadeconstraints;
五、管理表空间中的空间
1、区管理方式(8i的默认空间管理是DMT,9I的默认空间管理是LMT)
(1)数据字典管理
SYS.UET$ ――具有描述已用的区的行
SYS.FET$ ――具有描述可用区的行
(2)本地管理
a.统一
b.自动
alter system dump datafile 5 block 2;
alter system dump datafile 5 block 3;
(3)本地管理表空间的优势
a.不需要执行递归空间管理操作
b.不记录数据字典表中的的空闲空间,可以减少争用
c.可自动跟踪相邻的空闲空间无需合并空闲空间
d.系统自动确定本地管理区的大小
e.对区位图进行更改不会生成还原信息,国为这些更改并不更新数据字典中的表(表空间限额信息等特殊情况除外)
(4)可以使用下面的PL/SQL程序,将任何字典管理的表空间转换成为本地管理:
Executedbms_space_admin.tablespace_migrage_to_local(‘tablespacename’);
2、段管理方式
(1)SSM:自动管理方式(BMB段:BitmapManagedSegments),使用位图管理段中的数据块空闲空间,大并发量。
(2)MSSM:手工管理方式(FreeList),使用空闲列表来管理段中的数据块空闲空间,串行操作容易引起段头的争用。
--dump段头信息
(3)OMF(OracleManaged Files)管理
①设置参数
DB_CREATE_FILE_DEST
DB_CREATE_ONLINE_LOG_DEST_n
DB_RECOVERY_FILE_DEST
②创建表空间
ALTERSYSTEM SET DB_CREATE_FILE_DEST = '/u01/oradata';
CREATETABLESPACE tbs_1;
六、临时表空间
1、数据库默认的临时表空间
sys@OCM> select * fromdatabase_properties where property_name='DEFAULT_TEMP_TABLESPACE';
sys@OCM> alter databasedefault temporary tablespace temp1;
2、创建临时表空间或临时表空间组
(1)创建临时表空间
CREATE TEMPORARY TABLESPACE temp1 TEMPFILE'/u01/app/oracle/oradata/ocp/temp1.dbf' SIZE 10m;
(2)创建临时表空间组
CREATE TEMPORARY TABLESPACE temp1 TEMPFILE'/u01/app/oracle/oradata/ocp/temp1.dbf' SIZE 10M TABLESPACE GROUP group1;
CREATE TEMPORARY TABLESPACE temp2 TEMPFILE'/u01/app/oracle/oradata/ocp/temp2.dbf' SIZE 10M TABLESPACE GROUP group1;
3、收缩临时表空间和临时文件
(1)方法一收缩临时表空间
gyj@OCM> alter tablespace TEMP shrink space keep 10M;
Tablespace altered.
(2)方法三收缩临时表空间的某个文件
sys@OCM>alter tablespace temp shrink tempfile'/u01/app/oracle/oradata/ocm/temp01.dbf' keep 10M;
Tablespace altered.
(3)方法三重新定义临时文件的大小
gyj@OCM> alter database tempfile'/u01/app/oracle/oradata/ocm/temp01.dbf' resize 100M;
Database altered.
3、删除临时表空间
(1)查临时表空间
sys@OCM> selecttablespace_name,file_name,bytes/1024/1024 file_size,autoextensible fromdba_temp_files;
TABLESPACE_NAME FILE_NAME FILE_SIZE AUT
-------------------------------------------------------------------------------- ---------- ---
TEMP /u01/app/oracle/oradata/ocm/temp01.dbf 10.9921875 YES
(2)彻底删除临时表空间
sys@OCM> drop tablespace temp includingcontents and datafiles cascade constraints;
(3)删除临时表空间某个文件
从逻辑上讲,数据存储在段(通常是表)中;从物理上讲,数据存储在数据文件(datafile)中。表空间(tablespace)实体是二者的象,一个表空间可能包含多个段,并由多个数据文件组成。段和数据文件没有直接关系。数据文件可以作为文件系统中的文件存在,从10 g版本开始,也可以作为自动存储管理(Automatic Storage Management,ASM)设备上的文件存在。
www.zzzyk.com
一、Oracle数据存储模型
将逻辑存储与物理存储分开是关系数据库范例的必要部分。关系数据库范例表明:编程人员只处理逻辑结构,而让数据库去管理到物理结构的映射。这意味着,可以重新组织物理存储,也可以将整个数据库移动到完全不同的硬件和操作系统上,而应用程序意识不到任何更改。
如下图展示Oracle存储模型,逻辑结构在左,物理结构在右。
www.zzzyk.com
1、Oracle数据库逻辑结构
(1)DATABASE:一个数据库可划分为多个称为表空间的逻辑存储单元。
(2)TABLESPACE:只能属一个数据库,包括一个或多个文件。
(3)SEGMENT:存在于表空间中,包含一个或多个区。
包括:表段、表分区段、索引段、索引分区段、临时段、撤销段、BLOB、CLOB
高水位
PCTFREE和PCTUSED
行迁移和行链接
INITRANS和MAXTRANS
(4)EXTENT:由相邻的数据块的组成,这意味着每个区只能存在于一个数据文件中。
(5)BLOCK:是数据库中最小的I/O单元,db_block_size
2、Oracle数据库物理结构
(1)、OS文件
A、仅属于一个表空间
B、是构成表空间的基础文件
(2)、OS块
A、tune2fs -l /dev/sda1
B、扇区:512字节 操作系统一次IO的大小
3、表空间、表、区、块及文件号的关系由视图dba_extents展显出来
gyj@OCM> create tablespace tp1 datafile'/u01/app/oracle/oradata/ocm/tp1.dbf' size 100M,'/u01/app/oracle/oradata/ocm/tp2.dbf' size 100M EXTENT MANAGEMENT LOCAL UNIFORMSIZE 1M;
gyj@OCM> alter user gyj defaulttablespace tp1;
gyj@OCM> conn gyj/gyj
gyj@OCM> create table t10 (id int,namevarchar2(100));
gyj@OCM> begin
2 for i in 1 .. 200000 loop
3 insert into t10values(i,'gyj'||i);
4 commit;
5 end loop;
6 end;
7 /
gyj@OCM> col tablespace_name for a10
gyj@OCM> col segment_name for a10
gyj@OCM> selecttablespace_name,segment_name,extent_id,file_id,block_id,bytes,blocks fromdba_extents where segment_name='T10' order by extent_id;
TABLESPACE SEGMENT_NA EXTENT_ID FILE_ID BLOCK_ID BYTES BLOCKS
---------- ---------- ---------- -------------------- ---------- ----------
TP1 T10 0 6 128 1048576 128
TP1 T10 1 7 128 1048576 128
TP1 T10 2 6 256 1048576 128
TP1 T10 3 7 256 1048576 128
TP1 T10 4 6 384 1048576 128
二、表空间类型
1、普通表空间:系统表空间与非系统表空间
2、临时表空间
3、回滚表空间
三、创建空间
CREATE TABLESPACE TP25 DATAFILE'/u01/app/oracle/oradata/ocp/tp2501.dbf' SIZE 50M,
'/u01/app/oracle/oradata/ocp/tp2502.dbf' size50M
AUTOEXTEND ON next 10M MAXSIZE 2G,
'/u01/app/oracle/oradata/ocp/tp2503.dbf' size50M
--EXTENT MANAGEMENT DICTIONARY
AUTOEXTEND ON next 10M MAXSIZE 2G
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 2M
SEGMENT SPACE MANAGEMENT AUTO;
CREATE TABLESPACE TP21 DATAFILE'/u01/app/oracle/oradata/ocp/tp2501.dbf' SIZE 50M
EXTENT MANAGEMENT DICTIONARY;
create tablespace tp22 datafile'/u01/app/oracle/oradata/ocp/tp22_1.dbf' size10M,'/u01/app/oracle/oradata/ocp/tp22_2.dbf' size 10M EXTENT MANAGEMENT LOCAL;
四、删除表空间
1.删除没有对象的表空间
drop tablespace tp1;
2、删除有对象的表空间,但不删除物理文件
drop tablespace tp1 including contents;
3、删除有对象的表空间和删除物理文件
drop tablespace tp20 including contents and datafiles cascadeconstraints;
五、管理表空间中的空间
1、区管理方式(8i的默认空间管理是DMT,9I的默认空间管理是LMT)
(1)数据字典管理
SYS.UET$ ――具有描述已用的区的行
SYS.FET$ ――具有描述可用区的行
(2)本地管理
a.统一
b.自动
alter system dump datafile 5 block 2;
alter system dump datafile 5 block 3;
(3)本地管理表空间的优势
a.不需要执行递归空间管理操作
b.不记录数据字典表中的的空闲空间,可以减少争用
c.可自动跟踪相邻的空闲空间无需合并空闲空间
d.系统自动确定本地管理区的大小
e.对区位图进行更改不会生成还原信息,国为这些更改并不更新数据字典中的表(表空间限额信息等特殊情况除外)
(4)可以使用下面的PL/SQL程序,将任何字典管理的表空间转换成为本地管理:
Executedbms_space_admin.tablespace_migrage_to_local(‘tablespacename’);
2、段管理方式
(1)SSM:自动管理方式(BMB段:BitmapManagedSegments),使用位图管理段中的数据块空闲空间,大并发量。
(2)MSSM:手工管理方式(FreeList),使用空闲列表来管理段中的数据块空闲空间,串行操作容易引起段头的争用。
--dump段头信息
(3)OMF(OracleManaged Files)管理
①设置参数
DB_CREATE_FILE_DEST
DB_CREATE_ONLINE_LOG_DEST_n
DB_RECOVERY_FILE_DEST
②创建表空间
ALTERSYSTEM SET DB_CREATE_FILE_DEST = '/u01/oradata';
CREATETABLESPACE tbs_1;
六、临时表空间
1、数据库默认的临时表空间
sys@OCM> select * fromdatabase_properties where property_name='DEFAULT_TEMP_TABLESPACE';
sys@OCM> alter databasedefault temporary tablespace temp1;
2、创建临时表空间或临时表空间组
(1)创建临时表空间
CREATE TEMPORARY TABLESPACE temp1 TEMPFILE'/u01/app/oracle/oradata/ocp/temp1.dbf' SIZE 10m;
(2)创建临时表空间组
CREATE TEMPORARY TABLESPACE temp1 TEMPFILE'/u01/app/oracle/oradata/ocp/temp1.dbf' SIZE 10M TABLESPACE GROUP group1;
CREATE TEMPORARY TABLESPACE temp2 TEMPFILE'/u01/app/oracle/oradata/ocp/temp2.dbf' SIZE 10M TABLESPACE GROUP group1;
3、收缩临时表空间和临时文件
(1)方法一收缩临时表空间
gyj@OCM> alter tablespace TEMP shrink space keep 10M;
Tablespace altered.
(2)方法三收缩临时表空间的某个文件
sys@OCM>alter tablespace temp shrink tempfile'/u01/app/oracle/oradata/ocm/temp01.dbf' keep 10M;
Tablespace altered.
(3)方法三重新定义临时文件的大小
gyj@OCM> alter database tempfile'/u01/app/oracle/oradata/ocm/temp01.dbf' resize 100M;
Database altered.
3、删除临时表空间
(1)查临时表空间
sys@OCM> selecttablespace_name,file_name,bytes/1024/1024 file_size,autoextensible fromdba_temp_files;
TABLESPACE_NAME FILE_NAME FILE_SIZE AUT
-------------------------------------------------------------------------------- ---------- ---
TEMP /u01/app/oracle/oradata/ocm/temp01.dbf 10.9921875 YES
(2)彻底删除临时表空间
sys@OCM> drop tablespace temp includingcontents and datafiles cascade constraints;
(3)删除临时表空间某个文件
- 更多Oracle疑问解答:
- 运行exp备份oracle数据库提示oracle-12154错误
- 有没有,生产Oracle Rman 备份脚本的工具啊!
- 初学orcle,希望有大大帮忙解说一下详细步骤,从登录oracle到创建表的过程
- oracle语句问题:一张user表,三个字段,id,name,time,插入记录比如:张三2007,李四2008,张三2011
- 如何写一个ORACLE触发器同步两个表中的数据?
- oracle 如何查看一个服务器上有多少个数据库.
- oracle 创建包的时候错误 求解
- oracle 重复列的问题
- oracle 中如何查处2星期前的数据
- 请教oracle数据库安装中的问题
- 请问谁能提供给我标准的oracle ERP的数据库表结构并详细说明各表主要的作用?
- 安装oracle遇到的问题 invalid entry CRC (expected 0x3e12e795 but got 0x9db0e9fd)
- 我的是ORACLE 10G,在RMAN中如何按指定的时间恢复数据文件啊?
- oracle为什么没有自动增长列
- oracle快捷键都有哪些啊?