果冻想
认真玩技术的地方

Oracle学习笔记——存储结构

你怎么把表空间干满了?

首先声明,对于Oracle来说,我只是一个菜鸟,一个不能菜再菜的菜鸟了,所以Oracle中很多的名词、知识点对于我来说都是一个新的东西。虽然我是一个菜鸟,但是这也不能阻挡我去认真的学习Oracle。

那天早上来到公司,听到我师傅和移动的人在通电话,对话内容大致如下:

师傅:xx,你好;
移动负责人:yy,昨晚我收到告警,说有个表空间满了,你们昨晚是不是有什么操作?
师傅:哦,昨晚跑了个存储过程,出现了点问题,但是后来处理了,现在没问题了。
移动负责人:哦,那行,以后这种操作的小心点,不要影响到白天的生产。
。。。。。。

表空间满了?表空间是个啥?我不知道。

这张表放在哪个表空间?

那天上班的时候,师傅让我去看一下有张表存放在哪个表空间,我当时立马楞了,心里想着:啥是表空间了,表为啥还要放到表空间。我承认我大学的知识都还给老师了。还好当时没有立刻说自己不知道,要不又会被师傅骂一个狗血淋头。于是下班回来好好的学习了一下表空间的相关概念,于是结合上面的问题,就有了这篇文章了。

Oracle的存储结构

说到表空间,就需要先了解一下Oracle的存储结构。对于Oracle来说,它的存储结构分为以下两种:

  • 物理结构
  • 逻辑结构

物理结构就是实质的对应物理存储文件,就是在存储介质上实实在在存在的文件;而逻辑结构就是一个对象或者组织结构,只是逻辑上存在的东西。下面就对这两种结构进行详细的总结。

物理结构

物理存储结构是实际的数据存储单元,对应于操作系统文件,是摸得着、看的见的东西,比逻辑存储结构更易理解。Oracle数据库就是由驻留在服务器磁盘上的这些操作系统文件组成的。这些文件有数据文件、控制文件,重做日志文件、归档日志文件、参数文件、警报文件、跟踪文件和备份文件等组成。如下图所示:
Oracle物理结构
下面就对这些文件进行简单说明,做一个简单的了解,到了工作中用到时,再深入研究。

  • 数据文件
    数据文件是真正存放数据库数据的。一个数据文件就是一个操作系统文件。数据库的对象(表和索引)物理上是被存放在数据文件中的。当我们要查询一个表的数据的时候,如果该表的数据没有在内存中,那么Oracle就要读取该表所在的数据文件,然后把数据存放的内存中;

  • 控制文件
    在《Oracle学习笔记——数据库启动原理》这篇文章中,说到数据库启动的第二步加载数据库的时候,需要打开控制文件,就是这里所说的控制文件。

    一个数据库至少要有一个控制文件,控制文件中存放数据库的“物理结构信息”,正是因为它存放的是数据库的物理结构信息,这些物理结构信息就包括:

    • 数据库的名字
    • 数据文件和重做日志文件的名字及位置
    • 创建数据库时的时间戳

    为了更好的保护数据库,我们可以镜像控制文件。每个控制文件中的内容就是相同的。镜像了控制文件,即使其中的一个控制文件出现了问题,也不会影响到数据库的损坏和数据的丢失。

    控制文件的重要性不言而喻,就是说在没有备份、镜像的情况下,你的控制文件损坏了,很抱歉,你的数据库很可能就over了;

  • 重做日志文件
    重做日志文件又叫联机日志文件,记录了对数据库修改的信息,包括用户对数据修改和数据库管理员对数据库结构的修改。它主要用于在发生故障的时候和数据库备份文件配合恢复数据库,一般发生故障有2个情况:一个是介质损坏另外一个是用户误操作。每个数据库至少有两个日志文件组,每组至少包含1个或者多个日志成员,这里要多个日志成员的原因是防止日志文件组内某个日志文件损坏后及时提供备份,所以同一组的日志成员一般内容信息相同,但是存放位置不同;

  • 归档日志文件
    归档即为存档的意思,归档日志文件是处于非活动(INACTIVE)的状态的重做日志文件的存档备份。它对Oracle数据库的备份和恢复起至关重要的作用。它是重做日志文件的一个副本,与被复制的成员完成一样,即重做记录相同,日志序列号相同;

  • 参数文件
    这个就不用我多说了,请参见这篇《Oracle学习笔记——初始化参数》;

  • 警报文件
    顾名思义就是警报日志文件,它按照时间的先后来记录所发生的重大活动和错误。警报文件的名字的格式是alert_SID.log。它的位置是由初始化参数background_dump_desc指定的;使用以下命令查看警报文件的位置:

    show parameter background_dump_dest;
    
  • 跟踪文件
    就是跟踪日志文件,每个服务器进程和后台进程都写跟踪文件。例如当后台进程发生了错误的时候,Oracle就会把错误的信息写到跟踪文件中。DBA就可以根据跟踪文件的信息来查看进程中所发生的错误。跟踪文件被写到了两个目录中;和服务器进程有关的信息被写到了由初始化参数user_dump_desc指定的目录中,和后台进程有关信息被写到了由初始化参数background_dump_desc指定的目录中。伴随着时间跟踪文件就会被写满,DBA可以手动来删除跟踪文件,也可以限制跟踪文件的大小。初始化参数MAX_DUMP_FILE_SIZE就可以限制跟踪文件的大小。

  • 备份文件
    就是在数据库发生介质损坏的时候用来还原数据库、恢复(recover)数据的。

逻辑结构

逻辑结构完全从物理结构中抽象出来的。在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日 于呼和浩特。

未经允许不得转载:果冻想 » Oracle学习笔记——存储结构
网站维护离不开您的支持,您可以赞助本站,谢谢支持
×

感谢您的支持,我们会一直保持!

扫码支持
请土豪扫码随意打赏

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

赞助本站
关注微信公众号
关注微信公众号和果冻一起分享你的疑惑与心得。
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

玩技术,我们是认真的

联系我们关于果冻