Oracle体系结构介绍.ppt
- 文档编号:2457523
- 上传时间:2023-05-03
- 格式:PPT
- 页数:47
- 大小:981.50KB
Oracle体系结构介绍.ppt
《Oracle体系结构介绍.ppt》由会员分享,可在线阅读,更多相关《Oracle体系结构介绍.ppt(47页珍藏版)》请在冰点文库上搜索。
Oracle体系结构介绍,Oracle服务器:
包括Oracle数据库和Oracle实例.Oracle数据库:
数据库由物理文件组成.是一些文件的集合.文件有:
数据文件,控制文件,重做日志文件,初始化参数文件,口令文件,归档日志文件.Oracle实例:
后台进程和内存结构(SGA).,数据文件:
用来存储数据的。
例如:
表,索引等等。
从数据文件中读取出来的数据会首先存放在内存中的SGA,作为缓冲数据。
应用对数据的修改也是先保持在SGA中。
由DBWR在某一时刻将其写入到数据文件中。
查看数据库中的数据文件:
SQLselect*fromdba_data_files;SQLselect*fromv$datafile;第一个SQL语句查询到的是文件的静态信息,第二个SQL语句查询到的动态信息重做日志文件重做日志文件记录了对数据库的所有修改的信息查看日志文件的具体信息,可以通过以下的SQL语句来查看:
SQLselect*fromv$log这个动态视图的查询结果中包含了几个比较重要的信息,例如:
GROUP#:
日志文件组号SEQUENCE#:
日志序列号STATUS:
该组状态(CURRENT表示当前正在使用的,NACTIVE表示非活动组,ACTIVE表示归档未完成)FIRST_CHANGE#:
系统改变号SCN(也称为检查点号),控制文件:
控制文件是一个二进制文件,用来描述数据库的物理结构,一个数据库只需要一个控制文件,控制文件的内容包括:
数据库名及数据库惟一标识数据文件及日志文件的标识系统恢复的必要信息,即SCN我们可以在Oracle的init.ora文件中看到这样一个参数:
controller_files=(file1,file2.filen),这说明数据库有多个控制文件,这些控制文件彼此之间都是镜像的关系。
只要其中一个文件是完好的数据库就可以启动。
通过如下的SQL语句来查看控制文件的信息:
SQLselect*fromv$controller_file初始化参数文件:
数据库实例启动时使用.数据控制文件的位置,数据库名称,归档日志文件,其他内存和函数的参数设置。
Oracle的后台进程比较重要的包括以下几个:
SMONPMONDBWRLGWRARCHCKPT,SMON(SystemMonitor)系统监控进程,在实例启动时执行实例恢复,并负责清理不再使用的临时段。
SMON进程要完成所有“系统级”任务。
PMON感兴趣的是单个的进程,而SMON与之不同,它以系统级为出发点,这是一种数据库“垃圾收集器”。
SMON所做的工作包括:
清理临时空间合并空闲空间针对原来不可用的文件恢复活动的事务执行RAC中失败节点的实例恢复清理OBJ$收缩回滚段“离线”回滚段,PMON(进程监控程序)后台进程清除失败用户的进程,释放用户当时正在使用的资源。
PMON负责释放锁并使其可以被其他用户使用。
同SMON一样,PMON周期性地唤醒检测它是否需要被使用。
PMON负责在出现异常中止的连接之后完成清理释放资源,回滚未提交的事务工作PMON还负责监视其他的Oracle后台进程,并在必要时重启这些后台进程。
PMON还会为实例做另外一件事,这就是向OracleTNS监听器注册这个实例。
DBWR(数据库写入程序)后台进程负责管理数据块缓存区及字典缓存区的内容。
它以批方式把修改块从SGA写到数据文件中.块写入器进程会把块写出到所有磁盘,即分散到各个磁盘上;也就是说,DBWR会做大量的分散写。
执行一个更新时,你会修改多处存储的索引块,还可能修改随机地分布到磁盘上的数据块.,LGWR(日志写入程序)后台进程负责把联机重做日志缓冲区的内容写入联机重做日志文件LGWR是数据库正常操作时唯一向联机重做日志文件写入内容并从重做日志缓冲区直接读取内容的进程。
与DBWR对数据文件执行的完全随机访问相反,联机重做日志文件以序列形式写入.LGWR则是向重做日志完成大量的顺序写.,LGWR后台进程以循环方式向联机重做日志文件写入;当填满第一个日志文件后,就开始向第二个日志文件写入;第二个日志文件填满后,再向第三个日志文件写入。
一旦最后一个重做日志文件填满,LGWR就开始重写第一个重做日志文件的内容.当Oracle以ARCHIVELOG(归档日志)模式运行时,数据库在开始重写重做日志文件之前先对其进行备份。
在线重做日志(LGWR)用于在出现电源故障(实例中止)时“修正”数据文件,而归档重做日志则不同,它是在出现硬盘故障时用于“修正”数据文件,CKPT(检查点进程)用来减少执行实例恢复所需的时间。
检查点使DBWR把上一个检查点以后的全部已修改数据块写入数据文件,并更新数据文件头部和控制文件以记录该检查点。
当一个联机重做日志文件被填满时,检查点进程会自动出现。
可以用数据库实例的init.ora文件中的LOG_CHECKPOINT_INTERVAL参数来设置一个频繁出现的检查点。
注意:
检查点进程并不像它的名字所暗示的那样,真的建立检查点建立检查点是主要是DBWR的任务。
CKPT只是更新数据文件的文件首部,以辅助真正建立检查点的进程(DBWR)。
一.SGA(SystemGlobalArea):
系统全局区.系统全局区的数据被多个用户共享。
当数据库实例启动时,系统全局区内存被自动分配。
SGA按作用的不同,可分为:
数据缓冲区、日志缓冲区、共享池。
数据缓冲区用于存储从磁盘数据文件中读入的数据,供所有用户共享。
修改、插入的数据存储在数据缓冲区中,修改完成或DBWR进程执行时,数据被写入数据文件。
对于缓冲区中已经被修改但尚未写入文件的数据,我们称之为“脏数据”。
Oracle采用LRU(最近最少用)算法来管理数据缓冲区中的数据.在9i之前,数据缓冲区的大小是由DB_BLOCK_BUFFER确定,之后的版本中,是由参数DB_CACHE_SIZE及DB_nK_CACHE_SIZE确定。
日志缓冲区用于缓冲事务日志,在适当的时候再由LGWR进程写入日志文件。
日志缓冲区的大小由参数LOG_BUGGER设定.共享池是对sql,pl/sql程序进行语法分析,编译,执行的内存区域。
包括:
库缓冲区(librarycache),数据字典缓冲区(datadictinarycache),用户全局区(userglobalarea)三个部分。
共享池的大小由参数shared_pool_size设定。
二.程序全局区程序全局区(PGA)是包含单个用户或服务器数据的控制信息的内存区域。
是在用户进程连接到oracle数据库并创建一个会话时,由oracle自动分配的。
PGA是非共享区,主要用于在编程时存储变量与数组。
会话结束时,PGA释放。
三.排序区排序区用于sql的orderby。
oracle优先使用排序区进行排序,如果内存不够,oracle自动使用临时表空间进行排序。
数据库逻辑结构,数据库逻辑结构:
表空间(tablespace):
system.,temp,users,表空间是Oracle数据库最大的逻辑结构,一个Oracle数据库在逻辑上由多个表空间组成,Oracle中有一个称为SYSTEM的表空间,这个表空间是在创建或安装数据库时自动创建的。
主要用于存储系统的数据字典,过程,函数,触发器等;查询表空间:
SQLselect*fromdba_data_files;要查询表空间的空闲信息可以通过SQLselect*fromdba_free_space;表空间的状态:
在线(online)和离线(offline)一旦将表空间设置成离线的状态,则所有对该表空间内对象的修改将无法同步到数据文件中.,设置表空间为离线:
SQLaltertablespacetbs_1offline;(其中tb_1是自己创建的表空间的名称)限制某个用户能够使用的表空间的大小,则可以通过命令:
SQLalterusermaoquota1montbs_1;表空间可以分为:
system,temp,users,temp临时表空间用于为用户排序的ORDERBY语句使用,创建表空间:
CREATETABLESPACESAMPLELOGGINGDATAFILED:
ORACLEORADATAORA92LUNTAN.dbfSIZE5MEXTENTMANAGEMENTLOCALSEGMENTSPACEMANAGEMENTAUTO;ORACLE可以创建的表空间有三种类型:
(1)用户表空间:
最重要,也是用于存放用户数据表空间可以直接写成:
CREATETABLESPACESAMPLETEMPORARY和UNDO表空间是ORACLE管理的特殊的表空间.只用于存放系统相关数据.
(2)TEMPORARY:
临时表空间,用于临时数据的存放;创建临时表空间的语法如下:
CREATETEMPORARYTABLESPACESAMPLE.(3)UNDO:
还原表空间.用于存入重做日志文件.创建还原表空间的语法如下:
CREATEUNDOTABLESPACESAMPLE.,SEGMENTSPACEMANAGEMENT磁盘扩展管理方法:
SEGMENTSPACEMANAGEMENT:
使用该选项时区大小由系统自动确定。
由于Oracle可确定各区的最佳大小,所以区大小是可变的。
UNIFORMSEGMENTSPACEMANAGEMENT:
指定区大小,也可使用默认值(1MB)。
段空间的管理方式:
AUTO:
只能使用在本地管理的表空间中.使用LOCAL管理表空间时,数据块中的空闲空间增加或减少后,其新状态都会在位图中反映出来。
位图使Oracle管理空闲空间的行为更加自动化,并为管理空闲空间提供了更好的性,但对含有LOB字段的表不能自动管理.MANUAL:
目前已不用,主要是为向后兼容.,LOGGING有NOLOGGING和LOGGING两个选项,NOLOGGING:
创建表空间时,不创建重做日志.LOGGING和NOLOGGING正好相反,就是在创建表空间时生成重做日志.DATAFILE用于指定数据文件的具体位置和大小.如:
DATAFILED:
ORACLEORADATAORA92LUNTAN.dbfSIZE5M说明文件的存放位置是D:
ORACLEORADATAORA92LUNTAN.dbf,文件的大小为5M.如果有多个文件,可以用逗号隔开:
DATAFILED:
ORACLEORADATAORA92LUNTAN.dbfSIZE5M,D:
ORACLEORADATAORA92dd.dbfSIZE5M,EXTENTMANAGEMENTLOCAL存储区管理方法在Oracle8i以前,可以有两种选择,一种是在字典中管理(DICTIONARY),另一种是本地管理(LOCAL),从9I开始,只能是本地管理方式.因为LOCAL管理方式有很多优点.在字典中管理(DICTIONARY):
将数据文件中的每一个存储单元做为一条记录,所以在做DM操作时,就会产生大量的对这个管理表的Delete和Update操作.做大量数据管理时,将会产生很多的DM操作,严得的影响性能,同时,长时间对表数据的操作,会产生很多的磁盘碎片,这就是为什么要做磁盘整理的原因.本地管理(LOCAL):
用二进制的方式管理磁盘,有很高的效率,同进能最大限度的使用磁盘.同时能够自动跟踪记录临近空闲空间的情况,避免进行空闲区的合并操作。
删除表空间:
SQLDROPTABLESPACESAMPLE;,段(segment):
Oracle中的段可以分成4种类型:
数据段、索引段、回滚段、临时段。
数据段用来存储用户的数据,每个表都有一个对应的回滚段.索引段用来存储系统、用户的索引信息.回滚段用来存储用户数据修改前的值,回退段与事务是一对多的关系,一个事务只能使用一个回退段,而一个回退段可存放一个或多个事务的回退数据。
临时段用于orderby语句的排序以及一些汇总。
查询用户的数据段信息:
SQLselect*fromuser_extents;查询索引段信息:
SQLselect*fromall_indexs/user_indexs;,区(extent)区存储于段中,它由连续的数据块组成。
区的大小可以不相同.可以通过字典dba_tablespaces查询表空间中区的信息。
可以通过字典user_tables查询段中区的信息。
可以通过字典user_extents查询区的分配状况。
SQLselect*fromdba_tablespaces;通过这个查询我们可以看到各个表空间的:
BLOCK_SIZE:
数据块的大小INITIAL_EXTENT:
初始化时分配的区的大小,其值为BLOCK_SIZE的整数倍NEXT_EXTENT:
当初始化时分配的区不够时,下一次扩展的区的大小MIN_EXTENTS:
区大小的下限MAX_EXTENTS:
区大小的上限通过以下SQL语句分别查询表空间、段、区中区的分配信息SQLselect*fromdba_tablespaces;SQLselecttable_name,tablespace_name,min_extents,max_extentsfromuser_tables;SQLselect*fromuser_extents;,数据块(block)数据块是数据中中最小的数据组织单位与管理单位,是数据文件磁盘存储空间单位,也是数据库I/O的最小单位,数据块大小由DB_BLOCK_SIZE参数决定,不同的oracle版本DB_BLOCK_SIZE的默认值是不同的。
Oracle8i的块大小,是在创建数据库时指定的,以后不能改.Oracle8i之后可以再支持别的非标准的大小的Block_SIZE(2K,4K,8K,16K).但是SYSTEMTABLESPACE和TEMPTABLESPACE只能采用系统创建时的DB_BLOCK_SIZE.查看TABLESPACE的DB_BLOCK_SIZE:
SQLselect*fromdba_tablespaces;创建表空间时指定块大小:
SQLcreatetablespacetbs_1datafiletb_1.dbfsize10mblocksize8k;,创建表时指定所在的TABLESPACE:
SQLcreatetablestu(stuidnumber(4)notnull,namevarchar2(50)notnull)tablespaceTBS_1storage(initial64Kminextents1maxextentsunlimited);,Oracle数据库中Schema,Oracle数据库中Schema和User的关系是一一对应的,也就是说一个Schema只对应一个User,一个User对应一个Schema。
可以解释为:
某一个用户下的所有的table,index,viewObject的一个集合就称之为一个Schema.,创建用户,分配权限,1.创建用户:
createuserlisiidentifiedby123defaulttablespaceuserstemporarytablespacetemp;2.用户授权:
grantconnect,resource,dbatolisi;,oracle中,权限分为两类:
对象权限:
对象权限是针对某个特定的模式对象执行各种操作的权利系统权限:
系统权限是在数据库级别执行某种操作,或者针对某一类的模式或非模式对象执行某种操作的权利系统权限还可以分为两类1.针对数据库中某一类型的数据库对象selectanytable,dropanyindex,.2.针对某种数据库级别的操作altersystem,.,如果在授予用户系统权限时使用了withadminoption子句,被授予的用户还可以将这项系统权限再授予其它用户对象权限一共有九类:
selectupdatedeleteinsertexecutereadindexreferencesalter如果在授予用户对象权限时使用了withgrantoption子句,被授予的用户还可以将这项对象权限再授予其它用户,-确定角色的权限select*fromrole_tab_privs;数据字典视图包含了授予角色的对象权限select*fromrole_role_privs;包含了授予另一角色的角色select*fromrole_sys_privs;包含了授予角色的系统权限-确定用户帐户所授予的权限select*fromDBA_tab_privs;直接授予用户帐户的对象权限select*fromDBA_role_privs;授予用户帐户的角色select*fromDBA_sys_privs;授予用户帐户的系统权限查看当前用户权限:
SQLselect*fromsession_privs;,与权限,角色相关的视图大概有下面这些:
DBA_SYS_PRIVS:
查询某个用户所拥有的系统权限USER_SYS_PRIVS:
当前用户所拥有的系统权限SESSION_PRIVS:
当前用户所拥有的全部权限ROLE_SYS_PRIVS:
某个角色所拥有的系统权限注意:
要以SYS用户登陆查询这个视图,否则返回空.ROLE_ROLE_PRIVS:
当前角色被赋予的角色SESSION_ROLES:
当前用户被激活的角色USER_ROLE_PRIVS:
当前用户被授予的角色另外还有针对表的访问权限的视图:
TABLE_PRIVILEGESALL_TAB_PRIVSROLE_TAB_PRIVS:
某个角色被赋予的相关表的权限,Examples1.查询当前用户所拥有的权限Select*fromsession_privs;2.查询某个用户被赋予的系统权限.可以有多种方式Select*fromuser_sys_privs;或者:
select*fromDBA_SYS_PRIVSwheregrantee=XXX(需要当前用户拥有DBA角色),查询当前用户被授予的角色:
1.Select*fromSESSION_ROLESorderbyROLE说明:
这个查询会返回当前用户所被授予的全部角色,其中包括嵌套授权的角色.例如将DBA角色授予了一个用户,DBA角色已经被授予的角色(例如exp_full_database和imp_full_database)也会被查询出来2.Select*fromUSER_ROLE_PRIVS,查询某一角色被赋予的系统权限SelectPrivilegefromROLE_SYS_PRIVSwhereROLE=&Role输入role=CONNECT查询当前角色被授予的角色SelectGRANTED_ROLEfromROLE_ROLE_PRIVSwhereROLE=&ROLE输入role=DBA,Oracle数据库的方案对象主要是指:
表、索引、视图、序列、同义词、过程、函数、包、触发器。
创建对象的用户拥有该对象的所有对象权限,不需要授予。
所以,对象权限的设置实际上是为对象的所有者给其他用户提供操作该对象的某种权力的一种方法。
Oracle数据库中总共有9种不同的对象权限。
不同类型的对象有不同的对象权限。
有些对象(如集群、索引、触发器、数据库连接)没有对应的对象权限,即他们是通过系统权限来控制的,例如,如要修改集群,用户必须要具有ALTERANYCLUSTER系统权限。
对象权限说明1.Alter(更改):
表上的ALTER权限保证在相关的表上执行ALTERTABLE或LOCKTABLE语句。
可以重命名表、添加列、删除列、更改数据类型和列的长度,以及把表转换成一个分区(partitioned)表。
序列上的ALTER权限可以保证能够在相关序列上执行ALTERSEQUENCE语句,可以重设授权序列对象的最小值、增量和缓冲区大小2.Delete删除:
允许在授权对象上执行DELETE语句,以便从表或者视图中删除行。
SELECT权限必须随同DELETE权限授予,否则被授权的人将不能够选择行,因此也就无法删除行。
DELETE权限还允许被授权者锁定相应的表,3.Execute运行:
包上的EXECUTE权限允许被授权者执行或者使用在相应的包规定中声明的任何程序或者程序对象(如一个记录类型,即recordtype或者指针即cursor)。
操作符(operator)或者类型(type)上的EXECUTE权限允许在SQL或者PL/SQL中使用该操作符。
数据库对象上的EXECUTE权限允许被授权者使用相关的数据库对象并且调用其方法4.Index索引:
当一个方案(schema)拥有一个表而另一个方案拥有其索引的时候,会出现混乱。
在授予这种权限时要小心,5.Insert(插入):
允许被授权者在相关的表或视图中创建行。
如果该INSERT权限建立在相关表或者视图的特定列上,则只能在具有INSERT权限的列上插入数据。
INSERT权限还隐含地给被授权者以锁定该表的能力6.Read读:
只能在目录上授予。
允许被授权者读取指定目录中的BFILE。
Read权限与SELECT权限有区别,后者允许用户读取一个表或者视图,7.Reference引用:
只能在表上授予用户,而不能授予角色。
允许被授权者创建引用该表的参照完整性约束。
被授权者可以锁定该表8.Select选择:
允许被授权者读取表或者视图的内容。
序列上的SELECT权限允许被授权者获取当前值(CURRVAL)或者通过选择NEXTVAL增大该值。
SELECT权限只能授予整个表,不能授予表中的列。
因此,如果希望用户只能查询表中的部分列,就需要在该表上创建视图,然后将该视图的SELECT权限授予用户。
9.Update更新:
许被授权者更改表或者视图中的数据值。
SELECT权限必须随同UPDATE权限一起授予,这样就使被授权者隐含具有了锁定表的能力.,Oracle预定义角色:
1.CONNECT2.RESOURCE3.DBA4.EXP_FULL_DATABASE5.IMP_FULL_DATABASE6.DELETE_CATALOG_ROLE7.EXECUTE_CATALOG_ROLE8.SELECT_CATALOG_ROLE说明:
1-3是为了同ORACLE老版本中的概念相兼容而提供的,不能只依赖于这些ROLE4-5是为了使用Import和Export实用程序的方便而提供的6-8是为了数据字典视图和包的卸载而提供的,1.CONNECT角色:
-是授予最终用户的典型权利,最基本的ALTERSESSION-修改会话CREATECLUSTER-建立聚簇CREATEDATABASELINK-建立数据库链接CREATESEQUENCE-建立序列CREATESESSION-建立会话CREATESYNONYM-建立同义词CREATEVIEW-建立视图2.RESOURCE角色:
-是授予开发人员的CREATECLUSTER-建立聚簇CREATEPROCEDURE-建立过程CREATESEQUENCE-建立序列CREATETABLE-建表CREATETRIGGER-建立触发器CREATETYPE-建立类型,3.DBA角色:
拥有系统所有系统级权限4.IMP_FULL_DATABASE角色:
5.EXP_FULL_DATABASE角色:
BACKUPANYTABLE-备份任何表EXECUTEANYPROCEDURE-执行任何操作SELECTANYTABLE-查询任何表,6.DELETE_CATALOG_ROLE角色:
这个角色是Oracle8新增加的,如果授予用户这个角色,用户就可以从表sys.aud$中删除记录,sys.aud$表中记录着审计后的记录,使用这个角色可以简化审计踪迹管理。
7.SELECT_CATALOG_ROLE角色、8.EXECUTE_CATALOG_ROLE角色:
SELECT_CATALOG_ROLE角色
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle 体系结构 介绍