首先声明,对于Oracle来说,我只是一个菜鸟,一个不能菜再菜的菜鸟了,所以Oracle中很多的名词、知识点对于我来说都是一个新的东西。虽然我是一个菜鸟,但是这也不能阻挡我去认真的学习Oracle。
那天早上来到公司,听到我师傅和移动的人在通电话,对话内容大致如下:
师傅:xx,你好;
移动负责人:yy,昨晚我收到告警,说有个表空间满了,你们昨晚是不是有什么操作?
师傅:哦,昨晚跑了个存储过程,出现了点问题,但是后来处理了,现在没问题了。
移动负责人:哦,那行,以后这种操作的小心点,不要影响到白天的生产。
。。。。。。
表空间满了?表空间是个啥?我不知道。
那天上班的时候,师傅让我去看一下有张表存放在哪个表空间,我当时立马楞了,心里想着:啥是表空间了,表为啥还要放到表空间。我承认我大学的知识都还给老师了。还好当时没有立刻说自己不知道,要不又会被师傅骂一个狗血淋头。于是下班回来好好的学习了一下表空间的相关概念,于是结合上面的问题,就有了这篇文章了。
说到表空间,就需要先了解一下Oracle的存储结构。对于Oracle来说,它的存储结构分为以下两种:
物理结构就是实质的对应物理存储文件,就是在存储介质上实实在在存在的文件;而逻辑结构就是一个对象或者组织结构,只是逻辑上存在的东西。下面就对这两种结构进行详细的总结。
物理存储结构是实际的数据存储单元,对应于操作系统文件,是摸得着、看的见的东西,比逻辑存储结构更易理解。Oracle数据库就是由驻留在服务器磁盘上的这些操作系统文件组成的。这些文件有数据文件、控制文件,重做日志文件、归档日志文件、参数文件、警报文件、跟踪文件和备份文件等组成。如下图所示:
下面就对这些文件进行简单说明,做一个简单的了解,到了工作中用到时,再深入研究。
为了更好的保护数据库,我们可以镜像控制文件。每个控制文件中的内容就是相同的。镜像了控制文件,即使其中的一个控制文件出现了问题,也不会影响到数据库的损坏和数据的丢失。
控制文件的重要性不言而喻,就是说在没有备份、镜像的情况下,你的控制文件损坏了,很抱歉,你的数据库很可能就over了;
show parameter background_dump_dest;
逻辑结构完全从物理结构中抽象出来的。在Oracle中,逻辑结构的组织结构如下图所示:
Oracle存储的逻辑结构由数据块、区、段和表空间组成。数据库由多个表空间组成;表空间由一个或多个段组成;段有一个或多个连续的区组成;区由一个或多个块组成。块是Oracle中最小的存储单位。
好了,概念性的东西就总结这么多,再回到文章开头说的那两个问题上。一个数据库被分为一个个的逻辑单元,这些逻辑单元叫“表空间”。表空间用于存放数据库对象(表、索引等)。一个数据库逻辑上由一个或者多个表空间组成。表空间由一个或者多个数据文件(物理结构)组成。表空间用于存放数据库对象,而这些对象实际上存放在数据文件中,数据文件是数据的物理载体。表空间的尺寸是组成这个表空间的所有数据文件的尺寸之和。
每个数据库都拥有一个系统表空间和一个辅助表空间。在创建数据库的时候,Oracle会自动创建这两个表空间。我们也可以手动创建表空间,如下语句:
CREATE TABLESPACE testTBSP
DATAFILE 'D:\DBFILE\dbfile1.dbf'
SIZE 50M
AUTOEXTEND ON
NEXT 20M
MAXSIZE UNLIMITED
LOGGING
EXTENT MANAGEMENT LOCAL;
使用CREATE TABLESPACE
关键字创建一个名为testTBSP
的表空间,使用DATAFILE
关键字指定数据文件,数据文件的大小为50M,并设置成了以20M为单位自动扩展,并无上限。
如果我们把表空间对应的数据文件的最大值设置为指定大小,不如20480M,这样就会出现文章开头所说的把表空间干满的问题。
一直都是在说表空间,那表呢?从逻辑结构上来讲,表空间是表的容器,表是放在表空间里的;但是从物理结构上来讲,表实际上是存放在数据文件中的,数据文件是表的物理载体。我们可以在创建表的时候,指定该表存放的表空间。例如:
CREATE TABLE tb_student(name varchar2(20)) TABLESPACE testTBSP;
记住,每个表一定存在于一个表空间中。如果我们想查看表对应的表空间,可以使用如下语句:
SELECT table_name, tablespace_name
FROM DBA_TABLES
WHERE table_name='tb_student';
2015年5月25日 于呼和浩特。