oracle数据库对象的逻辑、物理、内存结构
一、先谈谈数据库和实例: 实例是个动态概念,它由一系列进程和内存区域组成;而数据库是个静态概念,主要指的是构成数据库的一系列文件。一般情况下实例与数据库是一对一的,但是在多实例数据库环境下,一个数据库可以对应多个实例。 二、数据库的逻辑和物理结构 数据库(实例)——X表空间——X段——X扩展(区)——X数据块--(OS Block) 数据文件有以下类型: 1.数据文件(Data File) 数据文件用来存储数据库中的全部数据,例如数据库表中的数据和索引数据.通常以为*.dbf格式,例如:userCIMS.dbf 。 2.日志文件(Redo Log File) 日志文件用于记录数据库所做的全部变更(如增加、删除、修改)、以便在系统发生故障时,用它对数据库进行恢复。名字通常为Log*.dbf格式,如:Log1CIMS.dbf,Log2CIMS.dbf 。 3.控制文件(Control File) 每个Oracle数据库都有相应的控制文件,它们是较小的二进制文件,用于记录数据库的物理结构,如:数据库名、数据库的数据文件和日志文件的名字和位置等信息。用于打开、存取数据库。名字通常为Ctrl*ctl 格式,如Ctrl1CIMS.ctl。 4.配置文件 配置文件记录Oracle数据库运行时的一些重要参数,如:数据块的大小,内存结构的配置等。名字通常为init*.ora 格式,如:tnsname.ora 。 段(segment)是一种在数据库中消耗物理存储空间的任何实体,在12c中段的类型由:表(table),索引(Index), 回滚(Rollback),分区等12种组成,下面的sql可查看所有段的类型。 SQL> select distinct segment_type from dba_segments; SEGMENT_TYPE ------------------------------------------------------ LOBINDEX INDEX PARTITION TABLE SUBPARTITION ROLLBACK TABLE PARTITION NESTED TABLE LOB PARTITION LOBSEGMENT INDEX TABLE TYPE2 UNDO SEGMENT_TYPE ------------------------------------------------------ CLUSTER 已选择12行。 表和段的关系:表是段的一种(一个表可对应一个或多个段),但段不一定是表。表是逻辑对象;段是物理存储对象 通过下面的sql语句可以查看某个表空间的段、区、块的分布情况。 SQL> set pagesize 100; SQL> col SEGMENT_NAME format a20 SQL> select SEGMENT_NAME,extent_id,block_id,blocks,bytes from dba_extents where tablespace_name='USERS'; SEGMENT_NAME EXTENT_ID BLOCK_ID BLOCKS BYTES -------------------- ---------- ---------- ---------- ---------- OJDS$PERM_INDEX 0 168 8 65536 OJDS$NODE_INDEX 0 136 8 65536 SYS_C005161 0 152 8 65536 OJDS$PERMISSIONS$ 0 160 8 65536 OJDS$INODE$ 0 128 8 65536 OJDS$BINDINGS$ 0 144 8 65536 PK_EMP 0 200 8 65536 PK_DEPT 0 184 8 65536 SALGRADE 0 216 8 65536 BONUS 0 208 8 65536 EMP 0 192 8 65536 DEPT 0 176 8 65536 已选择12行。 DBA_TABLESPACES记录的是表空间的逻辑信息,而DBA_DATA_FILES视图则记录的是物理数据文件的信息,这些信息包括数据文件的名称、大小、所属表空间等信息: SQL> select file_id,relative_fno,file_name,tablespace_name,round(bytes/1024/1024,2) MB from dba_data_files; 可以通过DBA_SEGMENTS查询数据库中段的信息,这些信息包括对象名称、类型、所属表空间、空间使用等信息。DBA_EXTENTS视图记录了Segment中区的分配情况,可以通过以下两个查询获得某个用户每个区的分配情况: SQL> select distinct OWNER from dba_extents ; OWNER -------------------------------------------------------------------------------- APEX_040200 MDSYS MYMOTIF OUTLN CTXSYS SYSTEM AUDSYS DVSYS SCOTT GSMADMIN_INTERNAL ORDSYS DBSNMP OJVMSYS ORDDATA XDB SYS LBACSYS WMSYS 已选择18行。 SQL> col SEGMENT_NAME format a20 SQL> select segment_name,file_id,blocks from dba_extents where OWNER='SCOTT'; SEGMENT_NAME FILE_ID EXTENT_ID BLOCK_ID BLOCKS -------------------- ---------- ---------- ---------- ---------- SALGRADE 6 0 216 8 PK_EMP 6 0 200 8 PK_DEPT 6 0 184 8 EMP 6 0 192 8 DEPT 6 0 176 8 BONUS 6 0 208 8 已选择6行。 数据库逻辑上最小的单元就是data block,block 可以设置为2K,4K,8K.... 利用dba_tablespaces可以用来查看所有表空间的基本信息;而dba_data_files可以用来查看相关数据文件的信息(需要管理员权限)。 例: 1、查看当前数据库所有表空间: SQL> select TABLESPACE_NAME from dba_tablespaces; TABLESPACE_NAME --------------- SYSTEM SYSAUX UNDOTBS1 TEMP USERS MYMOTIF_TS 已选择6行。 2、查询当前数据库中的所有表空间和对应的操作系统数据文件: SQL> col FILE_NAME format a40 SQL> select file_name,tablespace_name from dba_data_files; FILE_NAME TABLESPACE_NAME ---------------------------------------- --------------- /u01/app/oracle/oradata/xe/system01.dbf SYSTEM /u01/app/oracle/oradata/xe/sysaux01.dbf SYSAUX /u01/app/oracle/oradata/mymotif_ts.dbf MYMOTIF_TS /u01/app/oracle/oradata/xe/users01.dbf USERS /u01/app/oracle/oradata/xe/undotbs01.dbf UNDOTBS1 3、当前用户(scott)下的数据段: SQL> desc user_segments 名称 是否为空? 类型 ----------------------------------------- -------- ---------------------------- SEGMENT_NAME VARCHAR2(128) PARTITION_NAME VARCHAR2(128) SEGMENT_TYPE VARCHAR2(18) SEGMENT_SUBTYPE VARCHAR2(10) TABLESPACE_NAME VARCHAR2(30) BYTES NUMBER BLOCKS NUMBER EXTENTS NUMBER INITIAL_EXTENT NUMBER NEXT_EXTENT NUMBER MIN_EXTENTS NUMBER MAX_EXTENTS NUMBER MAX_SIZE NUMBER RETENTION VARCHAR2(7) MINRETENTION NUMBER PCT_INCREASE NUMBER FREELISTS NUMBER FREELIST_GROUPS NUMBER BUFFER_POOL VARCHAR2(7) FLASH_CACHE VARCHAR2(7) CELL_FLASH_CACHE VARCHAR2(7) INMEMORY VARCHAR2(8) INMEMORY_PRIORITY VARCHAR2(8) INMEMORY_DISTRIBUTE VARCHAR2(15) INMEMORY_DUPLICATE VARCHAR2(13) INMEMORY_COMPRESSION VARCHAR2(17) SQL> column TABLESPACE_NAME format a20 SQL> column SEGMENT_NAME format a20 SQL> select SEGMENT_NAME,TABLESPACE_NAME from user_segments; SEGMENT_NAME TABLESPACE_NAME -------------------- -------------------- COURSE MYMOTIF_TS SC MYMOTIF_TS STUDENT MYMOTIF_TS SYS_C0010000 MYMOTIF_TS SYS_C0010005 MYMOTIF_TS SYS_C0010008 MYMOTIF_TS 已选择6行。 (12c在sysdba下有3000多条记录) SQL> select SEGMENT_NAME,EXTENT_ID from user_extents; SEGMENT_NAME EXTENT_ID -------------------- ---------- STUDENT 0 COURSE 0 SC 0 SYS_C0010000 0 SYS_C0010005 0 SYS_C0010008 0 已选择6行。 (12c在sysdba下有4920条记录) 基本上每个对象对应一个段(Segment),只有分区对应多个段,这里的对象包括表、视图、序列、同意词、索引、触发器、存储.过程等等,段可以跨越多个数据文件。 三、Oracle Server系统进程与内存结构 当在计算机服务器上启动Oracle数据库后,称服务器上启动了一个Oracle实例(Instance)。ORACLE 实例(Instance)是存取和控制数据库的软件机制,它包含系统全局区(SGA)和ORACLE进程两部分。SGA是系统为实例分配的一组共享内存缓冲区,用于存放数据库实例和控制信息,以实现对数据库中数据的治理和操作。 系统进程的后台进程主要包括: SMON系统监控进程:(system monitor)负责完成自动实例恢复和回收分类(sort)表空间。 PMON进程监控进程:(PRocess monitor)实现用户进程故障恢复、清理内存区和释放该进程所需资源等。 DBWR数据库写进程:数据库缓冲区的治理进程。 在它的治理下,数据库缓冲区中总保持有一定数量的自由缓冲块,以确保用户进程总能找到供其使用的自由缓冲块。 LGWR日志文件写进程:是日志缓冲区的治理进程,负责把日志缓冲区中的日志项写入磁盘中的日志文件上。每个实例只有一个LGWR进程。 ARCH归档进程:(archiver process)把已经填满的在线日志文件拷贝到一个指定的存储设备上。仅当日志文件组开关(switch)出现时,才进行ARCH操作。ARCH不是必须的,而只有当自动归档可使用或者当手工归档请求时才发出。 RECO恢复进程:是在具有分布式选项时使用的一个进程,主要用于解决引用分布式事务时所出现的故障。它只能在答应分布式事务的系统中出现。 LCKn封锁进程:用于并行服务器系统,主要完成实例之间的封锁。 内存结构(SGA) SGA是Oracle为一个实例分配的一组共享内存缓冲区,它包含该实例的数据和控制信息。SGA在实例启动时被自动分配,当实例关闭时被收回。数据库的所有数据操作都要通过SGA来进行。 2、日志缓冲区Redo Log Buffer:存放数据操作的更改信息。 -------------------------------------------------------------------------- 后台进程详解oracle中的进程共分为三类:用户进程、服务进程、后台进程。其中后台进程伴随实例的启动而启动,他们主要是维护数据库的稳定,相当于一个企业中的管理者及内部服务人员。他们并不会直接给用户提供服务。
2:log write(LGWR)--日志文件写入 1)、用户发出commit命令。(在oracle中称为快速提交机制(fast commit)):把redo log buffer中的记录写入日志文件,写入一条提交的记录 3:checkpoint(CKPT)-检查点事件 4:process monitor(PMON)--进程监控 5:system monitor:(SMON)--系统监控 触发条件:定期被唤醒或者被其他事务主动唤醒。 6:archive:(ARCn)--归档操作 7:manageability monitor:MMON--AWR主要的进程 8:manageability monitor light:MMNL:轻量级的MMON 9:memory manager:MMAN:自动内容管理 10:job queue coordinator:CJQ0--数据库定时任务 11:recover writer:RVWR 12:change tarcking writer:CTWR 以上是oracle中比较常见的后台进程,不是所有的进程。其中DBWn,ARCn可以设置数据库启动时的数量。这些进程在系统中可以不止一个。 ?? ?? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |