oracle存储结构描述及小实验
一、oracle存储分文逻辑存储和物理存储。
1、逻辑上讲数据是存放在段(表)上的,物理上讲数据是存放在数据文件上的。表空间是二者的抽象化表示,一个表空间可以包含多个数据文件,也可以包含多个段,段与数据文件之
间是多对多的关系。且,段誉数据文件没有直接关系。
2、逻辑存储包括:表空间、段、区间、块
3、物理结构包括: 数据文件、操作系统块
表空间与数据文件的关系是一对多,表空间与段的关系也是一对多。
段:一个段可以存放在多个数据文件中,一个数据文件也可以包含多个段。表空间是联系二者的重要逻辑结构,典型的段是表也存在其他类型的段,比如索引段和撤销段。
区间:区间的基本单位是Oracle快,是由连续的块组成,方便于空间的管理可以根据一个段的维度或数据文件的维度确定。
oracle块:是数据库的基本I/O单元对于表空间而言oracle快是固定不变的,(一般而言,数据库中所有表空间的块大小相同)11g默认的oracle大小是8k,行可能只有几百个字节,
但是在数开局库缓存区中,某行数据的某列值发生变化DBWn进程也会将整个块写入数据文件中覆盖以前版本。块的大小是由DB_BLOCK_SIZE决定的。如果发现块设计的不合理,只能
重建数据库,并将数据传入其中。块由数据库中的编号唯一标识,永远的oracle块要小于操作系统块。
数据字典DBA_SEGMENTS 描述数据库中的每个段。
4、查询显示一个简单数据库中的段类型:
SQL> select segment_type,count(1) from dba_segments group by segment_type
2 order by segment_type;
二、创建表空间
1 create smallfile tablespace song
2 datafile '/u01/app/oracle/oradata/song/song01.dbf'
3 size 500m autoextend onnext 1m maxsize unlimited
4 logging
5 extent management local uniform size 1m
6 segment space management auto
7 default nocompress;
第一行表示是smallfile,表示这个表空间可以有由个数据文件组成,顶替项是bigfile无法添加第二个数据文件。
第二行数据文件名及位置。
第三行创建的数据文件的大小是50m可自动扩大1m每次,最大为100m。默认方式不会启用可扩展。
第四行表空间中针对所有操作将生成重做内容,这是默认做法可以为极少操作(如生成索引)禁用重做的生成。
第五行表空间将使用位图来分配区间,这是默认方式。
第六行表空间将使用位图来跟踪块的情况,这是默认方式。
第七行表空间中的段不压缩,这是默认方式。
在我看来4、5、6、7行除非必要可不做标记。
8i以前都是字典管理,之后出现了本地管理,建议使用本地管理因为旧机制效率低只是为了实现向后兼容性。
三、更改表空间
alter tablespace 表空间原名 rename to 表空间新名;
查询数据文件状态并更改。
select name datafile,ustatus from v$datafile where name like '%dong%';
使表空间脱机
alter tablespace 表空间名 offline [normal|imediate|temporary]
建议用normal。在数据文件损坏时且无法完成检查点时用immediate.
使表空间联机
alter tablespace 表空间名 online
将表空间设为只读/读写
alter tablespace 表空间名 [read only|read write]
例子SQL> create smallfile tablespace dong
2 datafile '/u01/app/oracle/oradata/dong01.dbf' size 50m autoextend on
3 next 1m maxsize unlimited logging
4 extent management local uniform size 1m
5 segment space management auto;
Tablespace created.
SQL> select name datafile,status from v$datafile where name like '%dong%';
DATAFILE
--------------------------------------------------------------------------------
STATUS
-------
/u01/app/oracle/oradata/dong01.dbf
ONLINE
SQL>
SQL>
SQL> alter tablespace dong offline;
Tablespace altered.
SQL> select name datafile,status from v$datafile where name like '%dong%';
DATAFILE
--------------------------------------------------------------------------------
STATUS
-------
/u01/app/oracle/oradata/dong01.dbf
OFFLINE
SQL> alter database rename file '/u01/app/oracle/oradata/dong01.dbf' to
2 '/u01/app/oracle/oradata/orcl/dong01.dbf';
Database altered.
SQL> select name datafile,status from v$datafile where name like '%dong%';
DATAFILE
--------------------------------------------------------------------------------
STATUS
-------
/u01/app/oracle/oradata/orcl/dong01.dbf
OFFLINE
SQL> alter tablespace dong online
2 ;
Tablespace altered.
四、重调表空间大小:可以向其添加数据文件也可以调整现有数据文件的大小。
1、调整数据文件大小:
alter database datafile 数据文件名(可以使全路径的) resize n(M|G|T)
变小数据文件时文件中需要有足够大的空间。
2、增加数据文件
alter tablespace 表空间名 add datafile ‘/u01/app/oracle/oradata/orcl' size 10m;(非自动扩展)
alter tablespace 表空间名 add datafile ‘/u01/app/oracle/oradata/orcl' autoextend on next 1m maxsize 10m;(自动扩展)
3、删除表空间
drop tablespace 表空间名[including contents[and datafile]];
无 including contents选项表空间中包含任何对象 没法删除表空间 有此选项 一些环境下也会删除失败,比如要删除的表空间包含的表与另一个表空间包含的表存在外键关系而且此表是父表则将删除失败。
无 and datafile需用操作系统命令删除数据文件。
五、管理表空间中的空间
三个级别:一、将空间分配给表空间,通过设置数据文件大小。二、将表空间中的空间分配给段,通过分配区间来完成。三、江段中的空间分配给区间,通过维护每个跟踪块中的空闲空间量来完成。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30134870/viewspace-1432515/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/30134870/viewspace-1432515/