使用数据字典和动态性能视图目标完成这一课的学习后,您应该能达到下列目标:•了解内置数据库对象•了解数据字典的内容和使用•了解数据字典视图的创建方式•了解数据字典视图的类别•查询数据字典和动态性能视图•了解管理脚本命名约定数据字典数据字典是ORACLE数据库的最重要部分之一,它由一组只读的表和视图所组成。它提供如下信息:ORACLE用户名特权和角色模式对象信息完整性约束空间分配情况数据库结构审计信息数据字典视图数据字典视图:USER_XXX:任何用户可访问的视图,给出该用户的所有对象信息。ALL_XXX:任何用户可访问的视图,给出数据库所有用户的所有对象的基本信息。DBA_XXX:只有DBA特权的用户可访问的视图,给出数据库的所有详细信息。V$XXX:记录数据库的动态信息。数据字典的特点数据字典的特点:所有数据字典基表和视图都由SYS用户拥有。对于ALL_XXX和USER_XXX视图建立公共同义词。列名对所有视图都一致。后缀名对所有视图都一致。USER_XXX类视图无OWNER列。许多DBA_XXX视图无等价的USER_XXX和ALL_XXX视图。内置数据库对象随数据库一起创建的其它对象:•数据字典•性能表•PL/SQL程序包•数据库事件触发器内置数据库对象创建数据库时,除创建数据库文件外,还将创建其它几种结构。•数据字典:包含对数据库中对象的说明•动态性能表:包含由数据库管理员(DBA)用来监视和优化数据库及例程的信息•PL/SQL程序包:向数据库添加功能的程序单元。这些程序包在执行CREATEDATABASE命令之后运行catproc.sql脚本时创建。PL/SQL程序包不在本课讨论的范围之内。•数据库事件触发器:触发器是在表或视图发生修改,或执行某些用户操作或数据库系统操作时隐式执行的过程。数据库事件触发器不在本课讨论的范围之内。数据字典•每个Oracle数据库的中心•描述数据库以及数据库对象•包含只读表和视图•存储在SYSTEM表空间内•由用户SYS拥有•由Oracle服务器进行维护•通过SELECT访问数据定义语言(DDL):create、alter、drop(创建、修改结构、删除)(其他:rename)数据操纵语言(DML):insert、delete、select、update(增、删、查、改)(其他:truncate)数据控制语言(DCL):grant、revoke(授权、回收)、setrole事务控制:commit、rollback、savepoint(其他:locktable、setconstraint、settransaction)审计控制:audit、noaudit系统控制:altersystem会话控制:altersession其他语句:comment(添加注释)、explainplan、analyze、validate、call数据字典数据字典是Oracle数据库最重要的部分之一,它是一组只读表和视图,提供有关其相关数据库的信息。只要执行数据定义语言(DDL)命令,Oracle服务器就会更新数据字典。此外,数据操纵语言(DML)命令(如引起表扩展的命令)也可以更新数据字典。数据字典不仅是每个Oracle数据库最重要的部分,它还是所有用户(从最终用户到应用程序设计者以及数据库管理员)的重要信息来源。要访问数据字典,请使用SQL语句。因为数据库是只读的,所以只能对数据字典的表和视图发出查询。基表和数据字典视图数据字典包含以下两个部分:•基表–存储数据库的说明–使用CREATEDATABASE命令创建•数据字典视图–用于简化基表信息–通过公共同义词访问–使用catalog.sql脚本创建基表和数据字典视图数据字典包含对数据库中的对象的说明。它包括两种对象类型。基表:基表是存储有关数据库的信息的底层表。基表是在任何Oracle数据库中首先创建的对象。在使用CREATEDATABASE创建数据库时,只要Oracle服务器运行sql.bsq脚本,就会自动创建这些对象。只有Oracle服务器才能对这些基表执行写入操作。用户很少直接访问基表,因为其中的数据大多数都是以隐含格式存储的。切勿使用DML命令直接更新基表,但AUD$表除外。例如,IND$表就是一个基表,它包含有关数据库中的索引的信息。数据字典视图:数据字典视图是基表的汇总,可以更有效地显示基表信息。例如,在数据字典视图中,除了显示对象编号外还会使用对象名。数据字典视图是在运行CREATEDATABASE命令之后使用catalog.sql脚本创建的。创建数据字典视图创建数据字典视图创建数据库时,会自动创建数据字典的基表。使用OracleUniversalInstaller创建数据库时,会自动运行用于创建数据字典和动态性能视图的脚本以及Oracle服务器选项的脚本。手动创建新数据库时,需要手动运行这些脚本。此外,将Oracle服务器升级为新版本时,可能也需要重新运行这些脚本。只有具有SYSDBA权限的用户SYS才能运行这些脚本。以上脚本位于下列目录中:UNIX:$ORACLE_HOME/rdbms/adminNT:%ORACLE_HOME%\rdbms\admin数据字典内容数据字典提供有关以下方面的信息:•逻辑数据库结构和物理数据库结构•对象的定义和空间分配•完整性约束•用户•角色•权限•审计数据字典内容数据字典包含以下内容:•数据库内所有方案对象的定义,这些对象包括表、视图、索引、簇、同义词、序列、过程、函数、程序包、触发器等等•已为方案对象分配的空间量以及它们当前使用的空间量•列的缺省值•完整性约束信息•Oracle用户的名称•已授予每个用户的权限和角色•审计信息,如有哪些人访问或更新了各种方案对象数据字典的使用方式主要用途:•Oracle服务器使用它来查找有关以下内容的信息:–用户–方案对象–存储结构•执行DDL语句时,Oracle服务器会对它进行修改。•用户和DBA可将它作为数据库相关信息的只读参考数据字典的使用方式Oracle服务器使用数据字典的方式:数据字典基表中的数据是Oracle服务器运行所必需的。因此,应该只能由Oracle服务器来写入或更改数据字典信息。在数据库操作过程中,Oracle服务器通过读取数据字典来确定方案对象是否存在,以及用户是否对它们具有适当的访问权限。Oracle服务器还会不断地更新数据字典,及时反映数据库结构方面的变化。用户和数据库管理员使用数据字典的方式:数据字典的视图可以作为所有数据库用户的参考。某些视图可由所有Oracle用户访问;另外一些视图只供数据库管理员使用。数据字典视图的类别•三种静态视图集•按范围分类为:–DBA:所有方案中的视图–ALL:用户可以访问的视图–USER:用户方案中的视图数据字典视图的类别带有DBA前缀的视图:带有DBA前缀的视图显示整个数据库的全局视图。只有数据库管理员才能查询它们。如果用户被授予了系统权限SELECTANYTABLE,则也可以查询数据字典中前缀为DBA的视图。若要查询数据库中的所有对象,DBA可以发出下列语句:SELECTowner,object_name,object_typeFROMdba_objects;数据字典视图的类别带有ALL前缀的视图:带有ALL前缀的视图指的是从用户角度看到的完整数据库视图。这些视图返回有关方案对象的信息,除了用户所拥有的方案对象外,还包括那些通过公开或显式授予权限和角色的方式让用户获得访问权限的方案对象。例如,以下查询返回用户具有访问权限的全部对象的信息:SELECTowner,object_name,object_typeFROMall_objects;数据字典视图的类别带有USER前缀的视图:典型数据库用户最可能感兴趣的视图是带有USER前缀的视图。这些视图:•涉及数据库中用户自己独有的环境•通常涉及当前用户所拥有的对象•除OWNER列暗指当前用户外,具有与其它视图一致的列•返回ALL视图中信息的子集•为方便起见,可具有缩写的公共同义词例如,下列查询返回用户方案中包含的所有对象:SELECTowner,object_name,object_typeFROMusers_objects;数据字典视图的类别数据字典视图:数据字典视图是静态视图,从这些视图中用户可以知道:•是否曾经创建了某个对象?•该对象是什么的一部分?•谁拥有该对象?•用户具有哪些权限?•对该对象有哪些限制?注:有关全部数据字典视图的列表,请参考Oracle9iDatabaseReference文档数据字典示例•总览–DICTIONARY,DICT_COLUMNS•方案对象–DBA_TABLES,DBA_INDEXES,DBA_TAB_COLUMNS,DBA_CONSTRAINTS•空间分配–DBA_SEGMENTS,DBA_EXTENTS•数据库结构–DBA_TABLESPACES,DBA_DATA_FILES数据字典示例要获取数据字典视图的概览,可以查询DICTIONARY视图或其同义词DICT视图。例如:SELECT*FROMdictionary;用where子句来缩小查询范围:SELECT*FROMdictionaryWHEREtable_nameLIKE‘dba_seg%’要获得视图中各列的列表,请使用DESCRIBE关键字:DESCRIBEdba_users;要获得数据字典视图中各列的概览,可以查询DICT_COLUMNS视图。要查看数据字典视图的内容,请使用SELECT命令。SELECT*FROMdba_users;注:有关数据字典视图及其中各列的完整列表,请参考“Oracle9iDatabaseReference”文档动态性能表•虚拟表•记录当前的数据库活动•在数据库可操作时不断更新•通过内存和控制文件访问信息•用于监控和优化数据库•由SYS用户拥有•同义词以V$开头•在V$FIXED_TABLE中列出动态性能表在Oracle服务器的整个操作过程中,它将当前数据库活动记录在称为动态性能视图的一组虚拟表中。只有数据库处于运行状态时,这些虚拟表才驻留在内存中,反映数据库操作的实时状况。它们指向内存和控制文件中的实际信息源。这些表不是真正的表,大多数用户都无法访问它们;但是数据库管理员可以在这些视图上查询、授予SELECT权限并创建视图。这些视图有时称为固定视图,因为数据库管理员无法更改或删除这些视图。动态性能表由SYS拥有,它们的名称均以V_$开头。在这些表上先创建视图,然后再为这些视图创建公共同义词。同义词名以V$开头。例如,V$DATAFILE视图包含有关数据库中数据文件的信息,而V$FIXED_TABLE视图包含有关数据库中所有动态性能表和视图的信息。动态性能表可使用户了解到以下信息:•该对象是否处于联机状态并可用?•该对象是否已打开?•目前持有哪些锁?•该会话是否处于活动状态?动态性能表示例•V$CONTROLFILE•V$DATABASE•V$DATAFILE•V$INSTANCE•V$PARAMETER•V$SESSION•V$SGA•$SPPARAMETER•V$TABLESPACE•V$THREAD•V$VERSION动态性能表示例示例:•V$CONTROLFILE:列出控制文件的名称•V$DATABASE:包含控制文件中的数据库信息•V$DATAFILE:包含控制文件中的数据文件信息•V$INSTANCE:显示当前例程的状态•V$PARAMETER:列出会话的当前有效参数和值•V$SESSION:列出当前每个会话的会话信息•V$SGA:包含有关系统全局区(SGA)的摘要信息•V$SPPARAMETER: