oracle学习笔记 存储结构_表空间

来源:互联网 发布:开淘宝店铺能挣钱吗 编辑:程序博客网 时间:2024/05/16 09:05


oracle学习笔记 存储结构_表空间


我们接着讲oracle存储结构里面的表空间


一)存储


oracle的三类文件
控制文件、数据文件和redolog一定要放在存储上


以前出现一种情况
一个银行用户,它数据库一个集群
切换以后发现切换失败
最后发现它的数据库里面有些数据文件没有放到存储上
所以说那三类文件必须放到存储上


现在对我们讲存储有三种组织形式


第一种形式我们使用文件系统
当然这个在存储上用的几乎很少


第二个组织形式用ASM,现在用的越来越多


第三目前用的最成熟的最多的一种方式是裸设备


在安装oracle的数据库中有一个存储选项的步骤
可以选择要用于数据库的存储机制


有三种选择


1、文件系统
使用文件系统进行数据库存储。
这种方式最简单直接,因为orale安装在操作系统上,操作系统有它的文件系统直接使用就可以了


2、裸设备
oracle从早期版本一直在使用
裸设备也叫裸分区或原始分区
文件系统都是从裸设备格式化而来,裸设备没有任何的格式,使用时用字符的方式传输数据,
在系统或应用软件中显示为RAW设备,英文单词raw意为 未加工过的,原始的,裸露的
不能被Unix通过文件系统来读取,
只由应用程序负责对它进行读写操作,不经过文件系统的缓冲,也不可被文件系统装载
产生时裸设备可以绑定一个分区,也可以绑定一个磁盘


3、自动存储管理(ASM)
这是oracle自己使用存储的方式,可以简化数据库存储管理并优化数据库布局以改进I/O性能。


文件系统以块的方式读写,是块设备,在文件系统有一个缓存缓冲对物理设备读写的数据
裸设备以字符的方式读写,也叫字符设备,不使用系统缓存,就是不经过Unix操作系统这一层
这点区别往往作为裸设备性能高的依据,它确实能提高读写速度
在硬盘I/O速度要求非常高,磁盘I/O已经成为系统瓶颈的情况下,会有一部分性能的提升
在读写速度要求不高的情况下,性能影响很小
但裸设备管理比较麻烦
oracle中一个裸设备只能放置一个数据文件并且数据文件的大小不能超过裸设备的大小
它是不被操作系统直接管理的设备,不能被Unix/Linux通过文件系统来读取
在裸设备上,除了使用oracle自己的工具外不能使用Unix实用程序来进行备份
系统中唯一的办法是使用最基本的Unix命令:DD来进行备份


在创建数据文件时指定裸设备和普通文件没有什么太大的区别,写上裸设备的详细路径就可以了


ASM是oracle自己的存储管理系统
它使用磁盘组形式进行存储的创建和管理
使用它必须指定一组磁盘以创建一个ASM磁盘组或指定一个现有的ASM磁盘组
而组中磁盘可以使用裸盘和ASMlib创建的磁盘


在使用ASM时是有要求的,不管是单实例还是集群
1、必须配置并启动Oracle集群同步服务CSS(Cluster Synchronization Service)
以根用户身份
从命令提示符运行"/u01/app/oracle/product/10.2.0/db_1/bin/localconfilg add"脚本
以配置并启动CSS
2、您需要在计算机上运行ASM实例
启动ASM实例后,才可以使用ASM创建磁盘组用作数据库的存储


可以看出ASM是依集群而生的新管理技术。


ASM全称为Automated Storage Management,即自动存储管理
是Oracle提供的一个卷管理器,用于替代操作操作系统所提供的LVM逻辑卷管理(logical Volume Manager)
它不仅支持单实例配置,也支持RAC这样的多实例配置
ASM在文件级实现了条带化(Striping)和磁盘镜像(Mirroring)以提高I/O的性能和数据可靠性
还可以在同一个磁盘组中对不同的文件配置不同的存储属性,实现不同的存储方式
加上ASM在管理上的其它的一些新特性,如:快速重新同步 和 ASM滚动升级 等
ASM显得非常的灵活和全面,所以越来越受到欢迎


二)程序


我们看到oracle的存储有这么多的方式
不要以为这样就好用了
这只是各种程序普遍存在的一种现象即对各种功能的实现和组合


程序的每种功能都有自己的原理都有自己存在的很多条件
实现一个功能,各个基础缺一不可


程序在操作时会有很多的要求,你可能会觉得这样很深奥
其实它有另一方面的作用,在满足它们运行时的各种限制条件
内容多了,每样都要完成,就需要很多的程序内容来实现


各种功能本身是一段段的程序
程序由计算机语言构成


不管你怎么编写语言也做不到能满足每种各式各样的操作包括合理的操作和不合理的操作
所以就形成了很多的功能只有一条华山路可走
于是每一步都要按限定的路线来完成


再加上环境功能的影响和限制
有时还要对周边的程序按要求进行操作


每种类型的程序还有现实世界的各种原理要求,也要满足


一个好的程序会尽量满足这些限制来实现各种操作要求
但结果都是杯水车薪
实现出来虽达到了目的,也往往只有一种方法,实现的方法也会有着各种各样的条件限制


实际使用时我们都希望程序运行时更易于操作
对一个功能少的小程序更容易实现一些
大程序要实现起来结果往往都是一条很多唯一方法构成的路线
找到另外一条路很难
你想有其它路可走只能用程序再建一条路


易用性和复杂程度是一组矛盾
我们的愿望是程序非常容易使用,但是它还有很多很多的功能
功能多了我们必须要控制
我们人不去控制而让计算机自己选择,结果很多的功能就没有执行的机会
每样功能都要人工控制,程序必然不容易操作


oracle也是如此
我们注意到oracle的每个命令都有很多的参数
每种参数使命令多了一种操作或操作方式
但使用参数,参数本身是有限制的
在加上不可能有很多的参数来完成每一种操作
这样参数反而成了一种限制
可以理解为通向目标的一条路
只有找到了路才能达到目的,当然没有路你也完成不了目的。


程序编出来后程序语句都是顺序运行的
上一个语句往往是下一个语句的前提和条件
程序块构成的功能也有类似的情况
一个功能执行完可以给另一个功能一些数据另一功能才能执行
反过来如果前一个功能需要后一个功能的数据也要等待
再复杂总体也是一个反复来回的一条线性运行步骤
虽然cpu有时间片机制可以使不相关的功能可以单独执行
但同一个程序中可以说没有不互相关联的程序块
这样程序执行过程基本是一个线状的次序
要控制程序的运行
就要满足它需要的一串条件才能达到最终的目的
对操作者来说那就是一条路,你必须要走。


前面的工作未完成,后面的工作是无法进行的。


可以想象出程序有多么的脆弱,中间环节有一个出问题整体就会出错
对程序和数据正确性的保障就非常的重要


想对程序进行修改
因为它的周边相关性和线性运行方式
不是原作者其实很难把握
换个人去修改的话
基本保证不了原程序的完整性,常常容易造成错误
即使达到了目的,无形中也可能已在其它方面造成了破坏


程序最好的办法不是修改
你想不破坏原程序,只能去读原程序的每句代码,这里还有读懂读不懂的问题
程序最好的办法是编写,是自己编写


即使程序实行了模块坏,对每个模块中的程序的了解是一样的效果
读不懂每一个模块就会造成对程序了解的不全面,同样你新编的代码一样会不全面
尽管程序严格的说没有全面的


oracle很多功能的加入,其实是在修改原程序
编码能力再强,多少也会影响它本来的面目
如果原来的程序已经非常的健全
加入新功能就要加入新代码,还要修改原代码
修改了程序的一个点会造成程序一系列的连锁反应


还是别改别人的程序,不如自己编写吧!


三)表空间的好处


表空间对oracle来讲
是实实在在的数据,但它是一个虚的概念


oracle里面有表,有实实在在的dbf文件数据文件,而且有很多数据文件


oracle并没有直接将某个表放到数据文件上,而是在表和数据文件中间有个概念叫表空间


表空间是由一个或多个文件组成
或者说表空间就是多个文件集合起来起的名字


比如一个表空间由三个数据文件组成
这个表空间的空间就是这三个物理文件空间的总和


我们建表的时候
我们是将表建在表空间上
这个时候oracle就会把这个数据,建在这三个文件的一个或两个或三个上


同一个表空间中的多个数据文件是平等的,
逻辑上不能直接操作,由表空间统一使用,使用时有自己的机制
向表空间写入数据如表时,表空间根据实际情况自动使用物理的数据文件
可能写到某一个数据文件,也可能同时写入多个数据文件
用户不必关心写到了哪个数据文件一般也控制不了
只把所有数据文件集合当做表空间的物理位置就可以了


表空间这个概念
最简单的一个好处举例讲


一个数据文件比如说两G
我有一个表8个G
而且这个表还在不停的扩张
表建在表空间上
表空间的空间容量就是数据文件的空间容量
一个数据文件最大就是2g
我可以在这个表空间里面建上十个两G的文件
这个表空间就是20G
20G的空间可以容纳8G的表
但是一个文件不能容纳一个8G的表


表空间就是为了使用的方便
在表和数据文件之间建的一个中间层
我们平时建表空间的时候
就是建表空间然后里面加上一堆数据文件
这就是表空间的概念


四)oracle数据库里面都有哪些表空间


SQL> select * from dba_tablespaces;

TABLESPACE_NAME  BLOCK_SIZE INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE MIN_EXTLEN STATUS    CONTENTS  LOGGING   FOR
---------------- ---------- -------------- ----------- ----------- ----------- ------------ ---------- --------- --------- --------- ---
EXTENT_MAN ALLOCATIO PLU SEGMEN DEF_TAB_ RETENTION   BIG
---------- --------- --- ------ -------- ----------- ---
SYSTEM                 8192          65536                       1  2147483645                   65536 ONLINE    PERMANENT LOGGING   NO
LOCAL      SYSTEM    NO  MANUAL DISABLED NOT APPLY   NO

UNDOTBS1               8192          65536                       1  2147483645                   65536 ONLINE    UNDO      LOGGING   NO
LOCAL      SYSTEM    NO  MANUAL DISABLED NOGUARANTEE NO

SYSAUX                 8192          65536                       1  2147483645                   65536 ONLINE    PERMANENT LOGGING   NO
LOCAL      SYSTEM    NO  AUTO   DISABLED NOT APPLY   NO

TEMP                   8192        1048576     1048576           1                        0    1048576 ONLINE    TEMPORARY NOLOGGING NO
LOCAL      UNIFORM   NO  MANUAL DISABLED NOT APPLY   NO

USERS                  8192          65536                       1  2147483645                   65536 ONLINE    PERMANENT LOGGING   NO
LOCAL      SYSTEM    NO  AUTO   DISABLED NOT APPLY   NO

EXAMPLE                8192          65536                       1  2147483645                   65536 ONLINE    PERMANENT NOLOGGING NO
LOCAL      SYSTEM    YES AUTO   DISABLED NOT APPLY   NO


6 rows selected.


我们看有六个表空间
表空间里面放的是表,表里面有数据


1)SYSTEM


第一个SYSTEM系统表空间


里面放的是oracle的系统自身的信息
oracle自身的信息放到oracle的数据字典里面
数据字典是一些表
这些表放到system里面
也就是说system表空间里面放的是数据字典信息
也就是oralce数据库的系统信息


2)sysaux


这个表空间是system表空间的一个附属表空间


它里面放的也是一些系统信息但是不是那么重要的一些信息
但是system和sysaux这两个表空间必须同时在线,否则数据库启不来


SYSAUX表空间在Oracle Database 10g中新引入的,作为SYSTEM表空间的辅助表空间
主要存放EM相关的内容以及表统计信息,AWR快照,审计信息等


10g中同时也引入了以下的一些新功能或新特性
ASH(Active Session History)、ASSM(Automatic Shared Memory Management)、
AWR(Automatic Workload Repository)、ADDM(Automatic Database Diagnostic Monitor)等
有些和sysaux表空间有关


根据实践经验这个表空间中最占空间的是AWR信息


AWR全称叫Automatic Workload Repository-自动负载信息库
AWR实质上是一个Oracle的内置工具,它采集与性能相关的统计数据,并从那些统计数据中导出性能量度,以跟踪潜在的问题。
AWR使用几个表来存储采集的统计数据,所有的表都存储在SYSAUX特定表空间中的 SYS 模式下,并且以 WRM$_* 和 WRH$_* 的格式命名。


AWR以固定的时间间隔为其所有重要的统计信息和负载信息执行一次采样
AWR报告则根据AWR收集的信息库生成,是Oracle数据库性能和运行状态的最全面的展示,对于数据库整体性能分析十分关键


oracle实例运行中若是一个普通的会话,是指它没有大量地耗费资源,则对于性能调整来说无足轻重。
但若该会话在活动时大量占用了资源(比如:CPU,内存,I/O等),该会话信息的丢失,将无法评测当时的系统瓶颈究竟是什么。
令DBA高兴的是,oracle10g中使用ASH保留下了这些信息


ASH采用的策略是:保存处于等待状态的活动session的信息,每秒从动态视图v$session_wait中采样一次,
并将采样信息保存在内存中,就是保存在内存中的动态视图v$active_session_history中
ASH记录活动会话等待的事件,不活动的会话不会采样,采样工作由新引入的后台进程MMNL(Manageability Monitor Lite)来完成


但分配给ASH的内存空间是有限的,当所分配空间占满后,旧的记录就会被覆盖掉;而且数据库重启后,所有的这些ASH信息都会消失
对于长期检测oracle的性能是不可能的
在Oracle10g中,提供了永久保留ASH信息的方法,就是使用AWR
由于全部保存ASH中的信息是非常耗费时间和空间的,AWR采用的策略是:
每小时对v$active_session_history进行采样一次,并将信息保存到磁盘中,并且保留7天,7天后旧的记录才会被覆盖
这些采样信息被保存在AWR的视图wrh$_active_session_history中。
而这个采样频率(1小时)和保留时间(7天)是可以根据实际情况进行调整的,这就给DBA们提供了更加有效的系统监测工具。
将统计信息写入磁盘的操作由后台进程可管理型监视器MMON(Manageability Monitor)完成


ASH信息是AWR采样的一部分,ASH是AWR的真子集。
AWR记录的信息不仅是ASH,还可以收集到数据库运行的各方面统计信息和等待信息,用以诊断分析。


当SYSAUX表空间空间不够时,由于AWR是其最耗费空间的部分
可以调整AWR的采样频率和保留时间减少AWR的体积
也可以手工清理AWR相关的表来增大SYSAUX的可用空间


3)undo


undo表空间这里是UNDOTBS1
它是系统表空间
它里面放的信息
是我要改变一个数据块,oracle就把这个数据块改变前的这个数据放到undo里面


4)temp


temp表空间是临时表空间
里面放的临时数据


特别是oracle在排序的时候
如果PGA空间不够的情况下,它会主动用到temp表空间


对oralce来讲
系统级别的基本上有四个表空间
system、sysaux、undo和temp


5)example 和 users


users和example在一般的生产环境里面这两个表空间是没有的
有users但是我们也不用它
有example我们也不用它
我们单独的建一个表空间


example里面放的是
我们的一些案例,我们叫样例数据库、样式数据库、example数据库
主要是为了我们学习的方便


实际生产中我们装oracle的时候根本不装这个example
就没有example这个数据库这个表空间
这是example表空间,这个一般不用它


users表空间是默认oracle建立的一个可以用来存放用户数据的一个表空间


如果一般的对oralce不是很讲究的话,一般我们都将数据放到users里面
system、undo、sysaux、temp都是系统表空间它不放用户数据


默认建的表空间只有users表空间放用户数据
但是实际的生产中
我们往往会建很多表空间
而不去使用users表空间
当然有些人不怎么讲究的时候直接使用users
在性能上可能会有一些不好的地方


五)表空间的内容状况


这些表空间从select * from dba_tablespaces;语句的查询结果看


CONTENTS列是表空间的内容状态


值PERMANENT表示是永久表空间
system sysaux以及普通的用户表空间都属于PERMANENT
也就是里面的数据不会丢失


undo表空间内容状态为UNDO
里面放的是undo数据
我要改一个数据块要改一个数据行
oracle会自动把这个数据行改变前的值放到undo里面去


临时表空间可以损坏
里面数据丢失了也没关系,但是数据库必须有
否则数据库在运行过程中,当用到temp的时候它会报错
temp丢了的话我们可以重建


这是oracle的几个表空间


六)表空间和物理文件的关系


SQL> select * from dba_data_files;

FILE_NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------
   FILE_ID TABLESPACE_NAME                     BYTES     BLOCKS STATUS    RELATIVE_FNO AUT   MAXBYTES  MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS ONLINE_
---------- ------------------------------ ---------- ---------- --------- ------------ --- ---------- ---------- ------------ ---------- ----------- -------
/u01/app/oracle/oradata/jiagulun/users01.dbf
         4 USERS                             5242880        640 AVAILABLE            4 YES 3.4360E+10    4194302          160    5177344         632 ONLINE

/u01/app/oracle/oradata/jiagulun/sysaux01.dbf
         3 SYSAUX                          272629760      33280 AVAILABLE            3 YES 3.4360E+10    4194302         1280  272564224       33272 ONLINE

/u01/app/oracle/oradata/jiagulun/undotbs01.dbf
         2 UNDOTBS1                         36700160       4480 AVAILABLE            2 YES 3.4360E+10    4194302          640   36634624        4472 ONLINE

/u01/app/oracle/oradata/jiagulun/system01.dbf
         1 SYSTEM                          503316480      61440 AVAILABLE            1 YES 3.4360E+10    4194302         1280  503250944       61432 SYSTEM

/u01/app/oracle/oradata/jiagulun/example01.dbf
         5 EXAMPLE                         104857600      12800 AVAILABLE            5 YES 3.4360E+10    4194302           80  104792064       12792 ONLINE


如:/u01/app/oracle/oradata/jiagulun/users01.dbf是数据文件


TABLESPACE_NAME列表示数据文件所在表空间的名字
我们可以看到一个表空间对应一个数据文件
FILE_ID列是文件编号
我们可以一个表空间里面放多个文件


七)多表空间架构


从select * from dba_tablespaces;
查询结果看oracle有六个表空间
oracle的特点是多表空间的一个架构


oracle是一个数据库里面包含多个表空间
别的数据库,像sybase、sqlserver它们的特点是多库结构
它是由master、model、tempdb等多个数据库组成一个大数据库


在oracle里面只有一个数据库,但是它有多个表空间
oracle是通过划分不同的表空间
不同的表空间里面放不同的数据进而来方便我们的管理


数据库是总体
一个数据库包含很多表空间


一个表空间中包括一个或多个数据文件
一个数据文件仅属于一个表空间


八)段区块


一个表是一个段


其实oracle里面有很多种段
表段、表分区段、索引段、索引分区段、临时段、撤销段、二进制大对象段等


我们最经常给大家用的是一个表就是一个段
如果这个表分区了
那么每个分区是一个段
一个表分了五个区就有五个段

索引也是独立的一个段

临时段在临时表空间里面

在undo表空间里面叫undo段又叫撤销段

二进制大对象段叫lob(Large Object)段


目前就认为
oracle的段就是一个表,一个表就是一个段
段的名字和表的名字是一样的


我们create建了一个表以后,oracle会给这个段分配空间
oracle分配空间的时候是以区为单位给段分配空间的
区是物理上连续的一个和多个块组成的一个区
数据块是oracle块当然还有磁盘块


段存在于表空间中
段由区的集合构成
区是数据块的集合
数据块将映射到磁盘块中


大家知道一个表是一个段
段建完以后段要实实在在的存储数据
要存储数据就要空间
要空间的话
oracle就需要给它分配空间
oracle给段分配空间是以区为单位的不是以块
oracle每次给段分配一个区
区就是物理上连续的一个或多个块
一个oracle块由一个或多个磁盘块组成


九)逻辑和物理数据库结构


1)数据库中对象的关系


逻辑结构中
数据库对应多个表空间,一个表空间对应多个段,一个段对应多个区,一个区对应多个Oracle数据块
还有一个数据库对应多个方案


物理结构中
一个数据文件对应多个OS块


逻辑和物理对应关系
一个逻辑表空间对应多个数据文件
一个Oracle数据块对应多个OS块
物理数据文件由逻辑区构成


一个数据库由一个或多个表空间组成
一个表空间由一个或多个数据文件组成
一个表空间里面可以有一个或多个段
就是一个表空间里面可以有一个或多个表
一个段由一个或多个区组成
一个区由多个oralce块组成
一个oracle块又有多个操作系统块
当然数据文件由多个块组成
一个数据文件有多个操作系统块
这个操作系统块就是文件系统块


一个表空间只能属于一个数据库
这样是多对一的关系
一个表空间只能属于一个数据库
一个段只能属于一个表空间
一个区只能属于一个段
一个oracle数据块只能属于一个区
这是一对多的关系


2)方案


oracle里面方案翻译成scheme
一个scheme其实就是一个用户
所以一个数据库里面由一个或多个用户组成


一个数据库比如有四个scheme就是四个用户
可以使用select * from dba_users;去查一下
语句中*通配结果太多一行太长
所写文件不好列出,这里只选有用的几列列出


SQL> select username,user_id,account_status,default_tablespace,temporary_tablespace,profile,initial_rsrc_consumer_group from dba_users;

USERNAME             USER_ID ACCOUNT_STATUS     DEFAULT_TABLESPACE TEMPORARY_TABLESPACE PROFILE              INITIAL_RSRC_CONSUMER_GROUP
-------------------- ------- ------------------ ------------------ -------------------- -------------------- ------------------------------
MGMT_VIEW                 53 OPEN               SYSTEM             TEMP                 DEFAULT              DEFAULT_CONSUMER_GROUP
SYS                        0 OPEN               SYSTEM             TEMP                 DEFAULT              SYS_GROUP
SYSTEM                     5 OPEN               SYSTEM             TEMP                 DEFAULT              SYS_GROUP
DBSNMP                    24 OPEN               SYSAUX             TEMP                 MONITORING_PROFILE   DEFAULT_CONSUMER_GROUP
SYSMAN                    51 OPEN               SYSAUX             TEMP                 DEFAULT              DEFAULT_CONSUMER_GROUP
OUTLN                     11 EXPIRED & LOCKED   SYSTEM             TEMP                 DEFAULT              DEFAULT_CONSUMER_GROUP
MDSYS                     46 EXPIRED & LOCKED   SYSAUX             TEMP                 DEFAULT              DEFAULT_CONSUMER_GROUP
ORDSYS                    43 EXPIRED & LOCKED   SYSAUX             TEMP                 DEFAULT              DEFAULT_CONSUMER_GROUP
EXFSYS                    34 EXPIRED & LOCKED   SYSAUX             TEMP                 DEFAULT              DEFAULT_CONSUMER_GROUP
DMSYS                     35 EXPIRED & LOCKED   SYSAUX             TEMP                 DEFAULT              DEFAULT_CONSUMER_GROUP
WMSYS                     25 EXPIRED & LOCKED   SYSAUX             TEMP                 DEFAULT              DEFAULT_CONSUMER_GROUP
CTXSYS                    36 EXPIRED & LOCKED   SYSAUX             TEMP                 DEFAULT              DEFAULT_CONSUMER_GROUP
ANONYMOUS                 39 EXPIRED & LOCKED   SYSAUX             TEMP                 DEFAULT              DEFAULT_CONSUMER_GROUP
XDB                       38 EXPIRED & LOCKED   SYSAUX             TEMP                 DEFAULT              DEFAULT_CONSUMER_GROUP
ORDPLUGINS                44 EXPIRED & LOCKED   SYSAUX             TEMP                 DEFAULT              DEFAULT_CONSUMER_GROUP
SI_INFORMTN_SCHEMA        45 EXPIRED & LOCKED   SYSAUX             TEMP                 DEFAULT              DEFAULT_CONSUMER_GROUP
OLAPSYS                   47 EXPIRED & LOCKED   SYSAUX             TEMP                 DEFAULT              DEFAULT_CONSUMER_GROUP
SCOTT                     54 EXPIRED & LOCKED   USERS              TEMP                 DEFAULT              DEFAULT_CONSUMER_GROUP
TSMSYS                    21 EXPIRED & LOCKED   USERS              TEMP                 DEFAULT              DEFAULT_CONSUMER_GROUP
BI                        60 EXPIRED & LOCKED   USERS              TEMP                 DEFAULT              DEFAULT_CONSUMER_GROUP
PM                        59 EXPIRED & LOCKED   USERS              TEMP                 DEFAULT              DEFAULT_CONSUMER_GROUP
MDDATA                    50 EXPIRED & LOCKED   USERS              TEMP                 DEFAULT              DEFAULT_CONSUMER_GROUP
IX                        57 EXPIRED & LOCKED   USERS              TEMP                 DEFAULT              DEFAULT_CONSUMER_GROUP
SH                        58 EXPIRED & LOCKED   USERS              TEMP                 DEFAULT              DEFAULT_CONSUMER_GROUP
DIP                       19 EXPIRED & LOCKED   USERS              TEMP                 DEFAULT              DEFAULT_CONSUMER_GROUP
OE                        56 EXPIRED & LOCKED   USERS              TEMP                 DEFAULT              DEFAULT_CONSUMER_GROUP
HR                        55 EXPIRED & LOCKED   USERS              TEMP                 DEFAULT              DEFAULT_CONSUMER_GROUP

27 rows selected.


可以看出oracle中当前有二十七个用户,因为有27行
在oracle安装完了以后有27个用户


每个用户下面都有一堆表,都有一堆段
不可能出现一个段它不属于任何一个用户


这个数据库里面
把这个用户拿出来
这个用户底下的所有段都跟着拿出来
也就是说这个数据库里面有27个用户
我就认为这个数据库里面所有的段分属于这27个用户
如果我把27个用户全删了,所有的段都没了


也就是oracle通过用户将所有的段组织起来


使用语句select * from dba_segments;可以查看当前数据库中所有段的情况
这个表的列和数据都很多,结果非常的多不都列出了


SQL> select owner,segment_name,segment_type,tablespace_name,header_file,header_block,bytes,blocks,extents from dba_segments;

OWNER      SEGMENT_NAME                   SEGMENT_TYPE       TABLESPACE_NAME  HEADER_FILE HEADER_BLOCK      BYTES     BLOCKS    EXTENTS
---------- ------------------------------ ------------------ ---------------- ----------- ------------ ---------- ---------- ----------
SYS        I_USER1                        INDEX              SYSTEM                     1          281      65536          8          1
SYS        CON$                           TABLE              SYSTEM                     1          169     196608         24          3
SYS        UNDO$                          TABLE              SYSTEM                     1          105      65536          8          1
SYS        C_COBJ#                        CLUSTER            SYSTEM                     1          177     720896         88         11
SYS        I_OBJ#                         INDEX              SYSTEM                     1           49     196608         24          3
.
.
.
SYS        _SYSSMU4$                      TYPE2 UNDO         UNDOTBS1                   2           57     393216         48          6
SYS        _SYSSMU3$                      TYPE2 UNDO         UNDOTBS1                   2           41     262144         32          4
SYS        _SYSSMU2$                      TYPE2 UNDO         UNDOTBS1                   2           25    2228224        272          4
SYS        _SYSSMU1$                      TYPE2 UNDO         UNDOTBS1                   2            9     262144         32          4

4605 rows selected.


如结果中第一行
SEGMENT_NAME列,段名为I_USER1段
此段的用户OWNER列,用户名为SYS
就是I_USER1属于SYS,这个段属于这个用户


3)结构总结


一个数据库有多个表空间
一个表空间只能属于一个数据库


一个数据库里有多个用户
同时一个用户只能属于一个数据库


一个表空间里面包括一个或多个段
一个段只能属于一个表空间


一个段由一个区或多个区组成
一个区只能属于一个段


一个区由多个oracle块组成
一个块只能属于一个区


一个表空间由一个或多个数据文件组成
一个数据文件有一个或多个文件系统数据块组成
一个oracle块由一个或多个文件系统块组成


oracle数据块默认8K
当然oracle块可以是8K可以4K可以2k也可以16K32K


文件操作系统块情况
可以使用命令dumpe2fs /dev/sda1查看
此命令为linux命令要以root身份运行



这节课就讲了oracle的表空间的一些概念
具体段区块里面详细的知识放到下节课去讲


   2017年3月11日
                                                                                                   文字:韵筝

0 0