`

1、Oracle 数据库结构

阅读更多
一、基本术语
1.区分数据库实例(instance)和数据库(database)
数据库实例:
ORACLE实例 = 进程 + 进程所使用的内存(SGA),表示数据库当时的状态!
System Global Area(SGA) 和 Background Process 称为数据库的实例。当数据库关闭,实例就不存在了!
数据库:
固定的,包含数据文件,控制文件,日志文件,参数文件和归档日志文件等
2.数据库服务器(database Server)
包含数据库软件部分(SqlPlus,OEM,EXP/IMP等),数据库和实例组成!
1.表空间和数据文件
表空间:用于存储数据库表,索引和回滚段等对象的磁盘逻辑空间
表空间类型:
SYSTEM 表空间
用于存储Oracle内部表和数据字典的数据,如表名,列名,用户名等。
SYSAUX表空间
这个是在11G中新增加的,主要存储Oracle系统内部常用的样例用户对象。这个表空间由 oracle系统内部自动维护
Undo Tablespace
撤销表空间(Undo Tablespace) 用于存储撤销信息的表空间,当对数据库表进行修改(insert,update,delete等操作),oracle系统自动的使用这个撤销表空间来临时的存放修改钱的数据(Before Image)。当修改操作完成并提交(commit)后,oracle系统可根据需要保留修改前得数据时间长短来释放撤销表空间的部分空间。
User 表空间
这个是用户自己建立的表空间,可在这个表空间上建立各种对象,如表,索引等。
2.数据文件
数据文件(Data File)用于保存用户对应数据和Oracle系统数据的文件。每个表空间可以包含一个或多个数据文件。
系统数据:
管理用户数据和Oracle系统本身的数据,如用户建立的表的名称,列的名称已经字段类型等属于用户数据,这些都自动的存放在系统表空间的 XXX.dbf 文件中
用户数据:
用户系统的数据,可使用SQL语句查询当前数据库的表空间和数据文件。
SQL> col file_name for a40; 
SQL> set linesize 140;
SQL> select file_name ,tablespace_name,(bytes/1024)as M from dba_data_files;
FILE_NAME                                TABLESPACE_NAME     M
D:\ORACLE\ORADATA\C_DB\SYSTEM01.DBF      SYSTEM              409600
D:\ORACLE\ORADATA\C_DB\UNDOTBS01.DBF     UNDOTBS1            204800

临时表空间和临时文件:
Temporary Tablespace 当在操作中需要进行排序等操作时,oracle系统就将排序的数据临时的存放在该空间中,当排序完成后释放排序所用到的空间。
SQL> col file_name for a35;
SQL> set linesize 120;
SQL> select tablespace_name,file_name from dba_temp_files;
TABLESPACE_NAME                FILE_NAME
TEMP                           D:\ORACLE\ORADATA\C_DB\TEMP01.DBF

3.Oracle 存储结构
oracle 创建表看空间时至少要创建一个以上的数据文件,Oracle创建数据文件时实际上将磁盘的操作系统块重格式化成Oracle数据块,并且每个数据库都有唯一的标识。一般Oracle数据库是操作系统块得倍数。如操作系统的系统大小为2048KB,而Oracle数据块得大小为8192KB(DB_BLOCK_SIZE=8192),这表示oracle数据块由4个操作系统块构成!
一般在设计数据库结构时,需要将表,索引或簇(cluster)存储到一个已存在的表空间中,而表,索引或簇都是占用空间的对象。
Oracle把占空间的对象统一称为:段(Segment),
而段由多个区间(Extent)组成的,
区间又由多个连续的(块得编号地址临近的)Oracle数据库组成!
所以在Oracle系统中,数据库是一个基本的处理单位!

4.控制文件
控制文件一般在oracle安装时自动创建,控制文件存放路径由服务器参数文件SPFILEsid.ora的coltrol_files参数值来确定。                                                               
当oracle实例在正常启动时,系统先访问的是初始化参数文件SPFILE,然后Oracle为系统全局区(SGA)分配内存,这时oracle实例处于安装状态,控制文件处于打开状态,然后Oracle自动读出控制文件中的所有数据文件中的所有数据文件和日志文件信息,并打开所有数据文件和所有日志文件信息以便所有的用户都可以访问。
为了安全,Oracle一般创建2-3个控制文件。如果某个控制文件损坏了,Oracle自动使用另外的一个控制文件,当所有的都损坏时,系统将停止工作。
查询控制文件信息:
SQL> desc v$controlfile;
名称          是否为空?                    类型
STATUS                                  VARCHAR2(7)
NAME                                    VARCHAR2(513)
SQL> select  name , status from v$controlfile;
NAME                                    STATUS
D:\ORACLE\ORADATA\C_DB\CONTROL01.CTL
D:\ORACLE\ORADATA\C_DB\CONTROL02.CTL
D:\ORACLE\ORADATA\C_DB\CONTROL03.CTL

5.日志文件:
Oracle 日志文件分为重做日志文件(Redo Log File)和归档日志文件。
重做日志文件:
又称为联机重做日志文件(Online Redo Log File),用来记录在数据库中发生过交易(Transaction)的所有信息,以及由Oracle内部行为而引起的数据库变化的信息。在数据库恢复时可以从该日志文件中读出原来的交易的数据!对表或者整个表空间设定NOLOGGING属性时,基于表或者表空间中所有的表的DML操作都不能生成日志,因此也就减少了日志信息的产生!
从V$logfile中查询日志信息
SQL> col member for a50;
SQL> select group#,status,member from v$logfile;
    GROUP# STATUS  MEMBER
         3 STALE   D:\ORACLE\ORADATA\C_DB\REDO03.LOG
         2 STALE   D:\ORACLE\ORADATA\C_DB\REDO02.LOG
         1         D:\ORACLE\ORADATA\C_DB\REDO01.LOG

Oracle在运行时产生日志信息,首先被记录在SGA的日志缓冲区中,当发生COMMIT命令时。LGWR进程将所有能用的日志文件都使用一遍后,将再次到第一个日志文件中重新写入。Oracle会在警告日志文件(alter_sid.log)记录相应的信息
归档日志:
归档模式-->在各个日志文件(成员)都记录满员而即将被覆盖钱,由归档进程(ARCH)吧即将被覆盖的日志文件中的日志信息读出并写到归档日志当中,以便恢复操作时查找。
非归档模式-->在系统运行期间将所产生的日志信息不断的记录到各个日志文件中,当所有重做日志组被记录满后,又重新的从第一个日志组开始记录。
默认的oracle不采用归档模式。
<!-- 查看数据库是否使用归档模式:-->
SQL> select dbid,name,log_mode from v$database;
      DBID NAME      LOG_MODE
---------- --------- ------------
1917702319 C_DB      NOARCHIVELOG


6.其他文件
服务器参数文件: SPFILE,密码文件,跟踪文件,告警日志

二、数据库体系结构
从图中可以看出:参数文件(Parameter File),口令文件(Password File),归档日志文件(Archive Log File)是一般文件;
数据文件(Data File),控制文件(Control File),联机重做文件(Redo Log File)是必须文件。这3中文件时通过DBWR,LGWR等进程操作的,也就是说使用Oracle的时候只能用SQL语句来操作!
系统全局区(SGA System Global Area)
由数据缓冲区,日志缓冲区,共享池构成
1.数据高速缓冲区
这里存放的用户最近使用的数据,如果要的数据不在这里,那么就在磁盘中读取!
三种类型
脏区(Dirty Buffer) 已经改变并需要写回到数据文件的数据库。
自由区(Free Buffer) 不包含任何数据,并可以再写入的区。Oracle可以将数据放在这里。
保留区(Pinend Buffer) 包含正在处理或明确保留的区。
Oracle 将缓冲池分为3个区。
Keep Buffer Pool :在内存中保留的数据块,在内存中不会被挤掉。
RECYCLE 缓冲池:循环使用的缓冲池,表示不再需要清除的内存块
DEFAULT 缓冲池:包含已经分配的块。
2.重做日志缓冲区
写入日志文件之前的日志信息保留在这里,当检查点(CKPT,一个Oracle后台进程)或日志到达一定块数时,由LGWR写入重做日志文件。
3.共享池(Shared Pool)
共享池是SGA的保留区,用来存储SQL,PL/SQL 存储过程,数据字典,包,安全属性等信息。
库高速缓冲区(Library Cache)。
字典高速缓冲区(Data Dictionary Cache):用于存储Oracle系统管理自身的所有信息,包括登录的信息,用户对象和权限等。
4.大池(Large Pool)
5.后台进程
oracle的后台进程有很多,DBWR,CKPT。。。
查询进程:
SQL> select name,description from v$bgprocess;

三、数据字典
前缀                              范围
USER                   用户视图(用户模式相关的)
ALL                    扩展用户视图(用户可以访问的)
DBA                    数据库管理员的视图(针对所有用户模式的)
注意:
USER前缀的视图通常不包含OWNER列。这一列隐含在对这个USER视图提交查询的用户上。
某些DBA视图包含对管理员有用的一些额外列信息
1.USER前缀的视图
典型数据库用户关心的视图就是前缀为USER的视图。这些视图:
指向用户自己的私有数据库环境,包含用户创建的模式对象信息、用户创建的权限等等。
只显示用户相关行
和其他视图的列类似,除了不包含隐含的OWNER列之外
返回ALL视图的一部分信息
可以有简单的PUBLIC同义词来方便使用
查询返回了你的模式中包含的所有对象:
SQL>SELECT object_name,object_type FROM USER_OBJECTS;

2.ALL前缀视图
ALL前缀视图指向用户的数据库整个透视图。这个视图除了返回用户拥有的模式对象信息之外,还返回通过公开的或者隐含的分配给这个用户的权限和角色而能够访问的模式对象信息。
查询返回你有权限访问的所有对象信息:
SELECT owner,object_name,object_type FROM ALL_OBJECTS;

3.DBA前缀视图
DBA前缀视图显示整个数据库的全景视图。这些视图不能创建同义词,因为DBA前缀视图只能被数据库管理员访问。因此,为查询DBA前缀视图,管理员必须在视图名字前加上它的所有者SYS。
SELECT owner,object_name,object_type FROM SYS.DBA_OBJECTS;

Oracle推荐你通过阻止用户在数据字典上拥有系统访问权限来保护数据字典。如果你启动了数据字典保护(07_DICTIONARY_ACCESSIBILITY为false),然后访问SYS模式对象(数据字典)被限制为拥有SYS模式的用户。这些用户是SYS和以SYSDBA方式连接的用户。(似乎不是这样子,system也可以访问,拥有DBA权限就可以,因为DBA权限包含了SELECT ANY DICTIONARY权限)
4.DUAL表
DUAL表是数据字典中的一个小表,Oracle和用户写的程序可以引用它来确保一个已知结果。这个表包含一列叫DUMMY,包含一行值为X。
SQL> desc dual;
 名称             是否为空                     类型
 DUMMY                                  VARCHAR2(1)
SQL> select * from dual;
D
-
X

这里记录的是我的读书笔记,如果有错误的请指出。。。
  • 大小: 152.1 KB
  • 大小: 43.1 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics