Oracle_Database10g_性能调整与优化-第12章_V$视图
- 格式:doc
- 大小:343.00 KB
- 文档页数:67
oracle数据库性能调优⼀:注意WHERE⼦句中的连接顺序:ORACLE采⽤⾃下⽽上的顺序解析WHERE⼦句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最⼤数量记录的条件必须写在WHERE⼦句的末尾.尤其是“主键ID=?”这样的条件。
⼆: SELECT⼦句中避免使⽤ ‘ * ‘:ORACLE在解析的过程中, 会将'*' 依次转换成所有的列名, 这个⼯作是通过查询数据字典完成的, 这意味着将耗费更多的时间。
简单地讲,语句执⾏的时间越短越好(尤其对于系统的终端⽤户来说)。
⽽对于查询语句,由于全表扫描读取的数据多,尤其是对于⼤型表不仅查询速度慢,⽽且对磁盘IO造成⼤的压⼒,通常都要避免,⽽避免的⽅式通常是使⽤索引Index。
三:使⽤索引的优势与代价。
优势:1)索引是表的⼀个概念部分,⽤来提⾼检索数据的效率,ORACLE使⽤了⼀个复杂的⾃平衡B-tree结构. 通常,通过索引查询数据⽐全表扫描要快. 当ORACLE找出执⾏查询和Update语句的最佳路径时, ORACLE优化器将使⽤索引. 同样在联结多个表时使⽤索引也可以提⾼效率. 2)另⼀个使⽤索引的好处是,它提供了主键(primary key)的唯⼀性验证.。
那些LONG或LONG RAW数据类型, 你可以索引⼏乎所有的列. 通常, 在⼤型表中使⽤索引特别有效. 当然,你也会发现, 在扫描⼩表时,使⽤索引同样能提⾼效率.代价:虽然使⽤索引能得到查询效率的提⾼,但是我们也必须注意到它的代价. 索引需要空间来存储,也需要定期维护, 每当有记录在表中增减或索引列被修改时, 索引本⾝也会被修改. 这意味着每条记录的INSERT , DELETE , UPDATE将为此多付出4 , 5 次的磁盘I/O . 因为索引需要额外的存储空间和处理,那些不必要的索引反⽽会使查询反应时间变慢.。
⽽且表越⼤,影响越严重。
使⽤索引需要注意的地⽅:1、避免在索引列上使⽤NOT , 我们要避免在索引列上使⽤NOT, NOT会产⽣在和在索引列上使⽤函数相同的影响. 当ORACLE”遇到”NOT,他就会停⽌使⽤索引转⽽执⾏全表扫描.2、避免在索引列上使⽤计算.WHERE⼦句中,如果索引列是函数的⼀部分.优化器将不使⽤索引⽽使⽤全表扫描.举例:代码如下:低效:SELECT … FROM DEPT WHERE SAL * 12 > 25000;⾼效:SELECT … FROM DEPT WHERE SAL > 25000/12;3、避免在索引列上使⽤IS NULL和IS NOT NULL避免在索引中使⽤任何可以为空的列,ORACLE性能上将⽆法使⽤该索引.对于单列索引,如果列包含空值,索引中将不存在此记录. 对于复合索引,如果每个列都为空,索引中同样不存在此记录. 如果⾄少有⼀个列不为空,则记录存在于索引中.举例: 如果唯⼀性索引建⽴在表的A列和B列上, 并且表中存在⼀条记录的A,B值为(123,null) , ORACLE将不接受下⼀条具有相同A,B值(123,null)的记录(插⼊). 然⽽如果所有的索引列都为空,ORACLE将认为整个键值为空⽽空不等于空. 因此你可以插⼊1000 条具有相同键值的记录,当然它们都是空! 因为空值不存在于索引列中,所以WHERE⼦句中对索引列进⾏空值⽐较将使ORACLE停⽤该索引.代码如下:低效:(索引失效) SELECT … FROM DEPARTMENT WHERE DEPT_CODE IS NOT NULL;⾼效:(索引有效) SELECT … FROM DEPARTMENT WHERE DEPT_CODE >=0;4、注意通配符%的影响使⽤通配符的情况下Oracle可能会停⽤该索引。
OracleDatabase10g数据库安装及配置教程Oracle安装配置教程分享给⼤家供⼤家参考,具体内容如下1、安装Oracle 版本:Oracle Database 10g Release 2 (10.2.0.1)下载地址:安装设置:1)这⾥的全局数据库名即为你创建的数据库名,以后在访问数据,创建“本地Net服务名”时⽤到;2)数据库⼝令在登录和创建“本地Net服务名”等地⽅会⽤到。
2、创建“本地Net服务名”1)通过【程序】-》【Oracle - OraDb10g_home1】-》【配置和移植⼯具】-》【Net Configuration Assistant】,运⾏“⽹络配置助⼿”⼯具:2)选择“本地 Net 服务名配置”:3)这⾥的“Net 服务名”我们输⼊安装数据库时的“全局数据库名”:4)主机名我们输⼊本机的IP地址:5)测试数据库连接,⽤户名/密码为:System/数据库⼝令(安装时输⼊的“数据库⼝令”):默认的⽤户名/密码错误:更改登录,输⼊正确的⽤户名/密码:测试成功:3、PLSQL Developer 连接测试输⼊正确的⽤户名/⼝令:成功登陆:数据库4、创建表空间打开sqlplus⼯具:sqlplus /nolog连接数据库:conn /as sysdba创建表空间:create tablespace camds datafile 'D:\oracle\product\10.2.\oradata\camds\camds.dbf' size 200m autoextend on next 10m maxsize unlimited;5、创建新⽤户运⾏“P/L SQL Developer”⼯具,以DBA(⽤户名:System)的⾝份登录:1)新建“User(⽤户):2)设置⽤户名、⼝令、默认表空间(使⽤上⾯新建的表空间)和临时表空间:3)设置⾓⾊权限:4)设置”系统权限“:5)点击应⽤后,【应⽤】按钮变灰,新⽤户创建成功:6)新⽤户登录测试:输⼊新⽤户的“⽤户名/⼝令”:新⽤户“testcamds”成功登陆:6、导⼊导出数据库先运⾏cmd命令,进⼊命令⾏模式,转到下⾯的⽬录:D:\oracle\product\10.2.0\db_1\BIN【该⽬录下有exp.exe⽂件】1)导⼊命令语法:imp userid/pwd@sid file=path/file fromuser=testcamds touser=userid命令实例:imp testcamds/123@camds file=c:\testcamds fromuser=testcamds touser=testcamds导⼊结果:2)导出:命令语法:exp userid/pwd@sid file=path/file owner=userid命令实例:exp testcamds/123@camdsora file=c:\testcamds owner=testcamds 导⼊结果://创建临时表空间create temporary tablespace zfmi_temptempfile 'D:\oracle\oradata\zfmi\zfmi_temp.dbf'size 32mautoextend onnext 32m maxsize 2048mextent management local;//tempfile参数必须有//创建数据表空间create tablespace zfmiloggingdatafile 'D:\oracle\oradata\zfmi\zfmi.dbf'size 100mautoextend onnext 32m maxsize 2048mextent management local;//datafile参数必须有//删除⽤户以及⽤户所有的对象drop user zfmi cascade;//cascade参数是级联删除该⽤户所有对象,经常遇到如⽤户有对象⽽未加此参数则⽤户删不了的问题,所以习惯性的加此参数//删除表空间前提:删除表空间之前要确认该表空间没有被其他⽤户使⽤之后再做删除drop tablespace zfmi including contents and datafiles cascade onstraints;//including contents 删除表空间中的内容,如果删除表空间之前表空间中有内容,⽽未加此参数,表空间删不掉,所以习惯性的加此参数//including datafiles 删除表空间中的数据⽂件//cascade constraints 同时删除tablespace中表的外键参照如果删除表空间之前删除了表空间⽂件,解决办法: 如果在清除表空间之前,先删除了表空间对应的数据⽂件,会造成数据库⽆法正常启动和关闭。
Oracle数据库参数优化
参数优化对于Oracle数据库来说非常重要,因为它可以有效提高数据库的性能,并提供良好的可用性。
参数优化可令数据库更加稳定和高效地运行。
但是,在参数优化方面,很多初学者犯了不少错误,有些甚至会影响数据库的性能,甚至可能导致数据库出现问题。
因此,在优化参数方面,必须慎重、细心、谨慎。
首先,在参数优化之前,必须对当前参数进行全面的测试,找出需要优化的参数。
一般来说,优化可以采用两种方法,一种是优化全局参数,另一种是优化实例参数。
如果参数设置过高或者过低,可能会影响数据库的性能,因此,在参数优化时,必须按照Oracle数据库提供的最佳实践去设置参数。
最后,应该强调的是,在参数优化时,不要增加参数或者设置参数太高,并且要确保参数优化后,数据库在重要的方面有所改善,比如。
千里之行,始于足下。
oracle优化方法总结Oracle优化是提高数据库性能和响应能力的重要步骤。
本文总结了一些常见的Oracle优化方法。
1. 使用索引:索引是提高查询性能的主要方法。
通过在表中创建适当的索引,可以加快查询速度,并减少数据访问的开销。
但是要注意不要过度使用索引,因为过多的索引会增加写操作的开销。
2. 优化查询语句:查询语句的效率直接影响数据库的性能。
可以通过合理地编写查询语句来提高性能。
例如,使用JOIN来替代子查询,尽量避免使用通配符查询,使用LIMIT来限制结果集的大小等。
3. 优化表结构:表的设计和结构对数据库的性能也有很大的影响。
合理的表设计可以减少数据冗余和不必要的数据存储,提高查询速度。
例如,适当地使用主键、外键和约束,避免过多的数据类型和字段等。
4. 优化数据库参数设置:Oracle有很多参数可以用来调整数据库的性能。
根据具体的应用场景和需求,可以根据情况调整参数的值。
例如,调整SGA和PGA的大小,设置合适的缓冲区大小,调整日志写入方式等。
5. 使用分区表:当表的数据量很大时,可以考虑将表分成多个分区。
分区表可以加速查询和维护操作,提高数据库的性能。
可以按照时间、地域、业务等来进行分区。
6. 优化存储管理:Oracle提供了多种存储管理选项,如表空间和数据文件管理。
合理地分配存储空间和管理数据文件可以提高数据库的性能。
例如,定期清理无用的数据文件,使用自动扩展表空间等。
第1页/共2页锲而不舍,金石可镂。
7. 数据压缩:对于大量重复数据或者冷数据,可以考虑使用Oracle的数据压缩功能。
数据压缩可以减少磁盘空间的使用,提高IO性能。
8. 使用并行处理:对于大型计算或者批处理任务,可以考虑使用Oracle的并行处理功能。
并行处理可以将任务分成多个子任务,并行执行,提高处理能力和效率。
9. 数据库分区:对于大型数据库,可以考虑将数据库分成多个独立的分区。
数据库分区可以提高数据的并行处理能力,减少锁竞争和冲突,提高数据库的性能。
Oracle数据库内存优化操作说明Oracle数据库内存优化是提高数据库性能的重要手段之一。
通过设置合理的内存参数,可以有效地削减IO操作,提高数据访问速度。
本文将介绍一些常见的Oracle数据库内存优化操作。
一、调整PGA参数PGA(Program Global Area)是每个数据库会话独有的内存区域,用于存储排序、哈希操作等临时数据。
调整PGA参数可以提高排序和连接操作的性能。
1. 设置PGA_AGGREGATE_TARGET参数该参数把握PGA内存的总量,一般建议设置为SGA的1/3到1/2。
可以通过以下命令设置:ALTER SYSTEM SET PGA_AGGREGATE_TARGET=XXXM;2. 调整SORT_AREA_SIZE参数该参数把握每个排序操作使用的PGA内存大小,一般建议设置为100MB到200MB。
可以通过以下命令设置:ALTER SESSION SET SORT_AREA_SIZE = XXXM;3. 调整HASH_AREA_SIZE参数第1页/共4页该参数把握每个哈希操作使用的PGA内存大小,一般建议设置为SORT_AREA_SIZE的1/2到1倍。
可以通过以下命令设置:ALTER SESSION SET HASH_AREA_SIZE = XXXM;二、调整SGA参数SGA(System Global Area)是Oracle数据库的全局共享内存区域,用于存储缓存数据、SQL执行方案等。
调整SGA参数可以提高数据访问的速度。
1. 调整SHARED_POOL_SIZE参数该参数把握缓存SQL语句的内存大小,一般建议设置为SGA的1/4到1/3。
可以通过以下命令设置:ALTER SYSTEM SET SHARED_POOL_SIZE=XXXM;2. 调整DB_CACHE_SIZE参数该参数把握数据库缓冲区的内存大小,一般建议设置为SGA的1/2到2/3。
可以通过以下命令设置:ALTER SYSTEM SET DB_CACHE_SIZE=XXXM;3. 调整LOG_BUFFER参数该参数把握数据库日志缓冲区的内存大小,一般建议设置为10MB到100MB。
Oracle12c 性能优化攻略:攻略1-1:创建具有最优性能的数据库⼀:章节前⾔本章着眼于影响表中数据存储性能的数据库特性本章着眼于影响表中数据存储性能的数据库特性。
表的性能部分取决于在创建之前所应⽤的数据库特性。
例如:在最初创建数据库时采⽤的物理存储特性以及相关的表空间都会在后来影响表的性能。
类似地,表性能还受到最开始选择的物理特性的影响。
例如:表类型和数据类型。
因此应⽤实践中使⽤的数据库、表空间、和表的创建标准(并将性能问题放在⼼上),就形成了优化数据可能性和可扩展性的基础。
组成Oacle 数据库的物理结构⽤来存储、管理、保护以及读取数据。
在创建数据库的时候,可以选择应⽤⼀些与性能相关的特性。
例如⽂件的初始布局以及表空间的管理类型,都是在创建数据库时制定。
这时所实现的架构上的决策,通常都会产⽣很长远的影响。
提⽰: oralce 实例的定义是其内存结构及其后台进程。
⽽Oracle 数据库则由物理⽂件(即:数据⽂件、控制⽂件、在线重做⽇志⽂件)组成。
如图1-1所描述的那样,表空间是⽀持管理⼀组数据⽂件的逻辑结构。
数据⽂件就是磁盘的物理⽂件。
配置表空间时,要注意⼀些对性能会产⽣深远影响的特性,也就是本地管理表空间以及⾃动段存储管理的表空间。
如果合理地设计这些特性,将来也就能最⼤限度得可接受到表性能 图1-1 逻辑存储于物理存储之间的关系图表是数据库中存储数据的对象。
数据库性能衡量的是应⽤能够以什么样的速度插⼊、更新、删除、和查询数据。
因此,此书就从优化表性能的攻略讲起。
本章⾸先介绍创建数据库和表空间时,可能会影响表性能的各⽅⾯因素,然后,讨论另外⼀些主题,⽐如根据于性能相关的业务需求,选择表类型和数据类型。
稍后介绍的主题包括管理表空间使⽤情况的物理实现⽅式。
本章还会详细介绍其他问题。
例如探测表碎⽚、处理位于⾼⽔位线下⽅的空闲空间、⾏链接以及数据压缩。
除此之外还会描述Oracle 段顾问(Oracle Segment Advisor ).这个⼯具很好⽤,能够帮助你⾃动探测并解决碎⽚和未使⽤的空间问题。
千里之行,始于足下。
Oracle数据库参数优化Oracle数据库参数优化是指通过调整数据库的配置参数,提高数据库的性能和稳定性。
下面是一些常见的Oracle数据库参数优化技巧:1. SGA参数优化:- 调整sga_target参数以控制SGA的大小。
SGA包括数据库缓冲区、共享池、重做日志缓冲区等,适当调整SGA的大小可以减少IO操作,提高数据库性能。
- 调整db_cache_size参数以增大数据库缓冲区的大小,提高数据块的访问速度。
- 调整shared_pool_size参数以增大共享池的大小,提高SQL语句的解析和执行效率。
2. PGA参数优化:- 调整pga_aggregate_target参数以控制PGA的大小。
PGA是用于处理SQL查询和排序的内存区域,适当调整PGA的大小可以减少磁盘IO操作,提高查询和排序的性能。
3. Redo日志参数优化:- 调整log_buffer参数以增大重做日志缓冲区的大小,减少频繁的重做日志刷新操作,提高数据库的写入性能。
- 调整log_checkpoint_timeout参数以控制重做日志刷新的频率,避免过于频繁的刷新。
4. 并行处理参数优化:- 调整parallel_max_servers参数以增大并行处理的资源限制,提高并行查询和并行DML操作的性能。
第1页/共2页锲而不舍,金石可镂。
- 调整parallel_min_servers参数以设置最小的并行处理资源数,避免并行操作的启动延迟。
5. SQL优化:- 使用合适的索引和优化的SQL语句,优化查询的执行计划。
- 使用绑定变量而不是直接将参数传递到SQL语句中,避免SQL重解析,提高性能。
6. 服务器参数优化:- 调整processes参数以增加数据库的并发连接数。
- 调整sessions参数以控制数据库的最大会话数。
- 调整open_cursors参数以增大打开游标的数量,避免游标溢出。
以上是一些常见的Oracle数据库参数优化技巧,但具体的优化策略需要根据实际情况进行调整,可以参考Oracle官方文档和专业的DBA建议。
数据库视图的性能优化技巧数据库视图是数据库中的一种特殊对象,它是对基本表或其他视图导出表现数据的虚拟表。
视图能够简化复杂查询,提高查询效率,并且提供了一种逻辑层面的数据表示方式,更符合用户的查询需求。
然而,当视图包含大量数据或涉及复杂的查询操作时,其性能可能会受到影响。
为了优化数据库视图的性能,我们可以采取以下一些技巧。
第一,创建合适的索引。
索引是数据库中提高查询效率的关键因素之一。
对于频繁被使用的视图,我们可以考虑在相关表或视图所涉及的列上创建合适的索引。
通过索引,数据库可以更快地定位和提取所需的数据,从而提高视图的查询性能。
第二,避免使用复杂的函数和操作符。
在视图查询中,避免使用复杂的函数和操作符,因为它们可能导致视图的性能下降。
尽量使用简单的操作和函数,如SUM、COUNT、AVG等,以减少计算和资源消耗。
第三,减少视图的嵌套和联接。
视图的性能常常会受到嵌套和联接操作的影响。
嵌套视图和多重联接会导致视图的查询变得复杂和耗时,因此应尽量避免过度嵌套和联接操作。
可以考虑通过将复杂子查询转化为单独的视图或表来简化查询,从而提高性能。
第四,避免使用视图中不必要的列。
当视图涉及的列较多时,数据库会消耗更多的资源来处理查询和返回结果集。
因此,为了优化性能,我们应该避免在视图中包含不必要的列。
只查询和返回需要的列,可以减少资源的消耗和查询的响应时间。
第五,定期更新视图的元数据。
视图是依赖于数据库中的表和列的,当表结构或数据发生变化时,视图的元数据也需要相应地更新才能保持准确性和性能。
定期更新视图的元数据,可以提高查询效率并避免出现不一致的数据结果。
第六,使用合适的缓存机制。
针对经常被查询的视图,可以考虑使用缓存机制来提高性能。
将视图的查询结果缓存在内存中,可以避免不必要的数据库查询,从而减少系统资源的消耗,加快查询速度。
第七,定期检查性能并进行调优。
数据库视图的性能是一个持续优化的过程,我们需要定期检查和评估视图的性能,并进行相应的调优。
常见Oracle数据库优化策略与方法
Oracle数据库优化是提高数据库性能的关键步骤,可以采取多种策略。
以下是一些常见的Oracle数据库优化策略:
1.硬件优化:这是最基本的优化方式。
通过升级硬件,比如增加RAM、使用
更快的磁盘、使用更强大的CPU等,可以极大地提升Oracle数据库的性能。
2.网络优化:通过优化网络连接,减少网络延迟,可以提高远程查询的效率。
3.查询优化:对SQL查询进行优化,使其更快地执行。
这包括使用更有效的
查询计划,减少全表扫描,以及使用索引等。
4.表分区:对大表进行分区可以提高查询效率。
分区可以将一个大表分成多
个小表,每个小表可以单独存储和查询。
5.数据库参数优化:调整Oracle数据库的参数设置,使其适应工作负载,可
以提高性能。
例如,调整内存分配,可以提升缓存性能。
6.数据库设计优化:例如,规范化可以减少数据冗余,而反规范化则可以提
升查询性能。
7.索引优化:创建和维护索引是提高查询性能的重要手段。
但过多的索引可
能会降低写操作的性能,因此需要权衡。
8.并行处理:对于大型查询和批量操作,可以使用并行处理来提高性能。
9.日志文件优化:适当调整日志文件的配置,可以提高恢复速度和性能。
10.监控和调优:使用Oracle提供的工具和技术监控数据库性能,定期进行性
能检查和调优。
请注意,这些策略并非一成不变,需要根据实际情况进行调整。
在进行优化时,务必先备份数据和配置,以防万一。
高级DBA经常告诉刚刚入行的DBA,在Oracle 6年代,他们曾经将每一张V $视图烂熟于心。
在Oracle 6中,仅仅只有23个V$视图,那时侯的DBA可以很轻松地使用它们。
而在Oracle 9i中,有259个V$视图以及近400个X$表;现在Oracle 10gR2 (10.2.0.1.0) 有372个V$视图和613个X$表。
几乎所有的出色调整或者DBA产品都有一个共性。
它们中的大多数都是通过访问V$视图来获取从数据库、单个查询、或者单个用户检索出来的内部信息。
通过Joe Trezzo和其他V$宗师们大量的介绍,访问V$视图已经变得越来越普遍。
只有在看过V$视图之后,您才能体会之前的欠缺。
V$视图可以全面、准确地展示Oracle数据库的核心信息。
它是将普通水平的管理人员变为DBA专家的纽带。
第13章将更全面地介绍X$表,该表是V$视图的底层部分。
附录B和C提供了V$视图的相关信息,以及X$表的创建脚本。
遗憾的是,由于篇幅所限,我不能展示每一个V$脚本,我也不想重复其他章节已经深入讨论过的内容。
请查看我们的网站()来获得最新的可使用的V$脚本。
本章主要内容:●创建V$视图并设置其访问权限●获得所有V$视图的列表●获得组成V$视图的X$脚本的列表●检查组成DBA_视图的底层对象●查询V$DATABASE,以获得数据库的创建时间和归档信息●了解自动工作量仓库(Automatic Workload Repository,简称AWR)●查询V$LICENSE,以查看许可限制和警告设置●访问V$OPTIONS,以查看所有已经安装的选项●查询V$SGA来分配Oracle的基本内存●查询V$SGSSTAT来详细分配Oracle的内存●在V$PARAMETER中查找init.ora的设置●测定数据的命中率(V$SYSSTAT)●测定数据字典的命中率(V$ROWCACHE)创建时均以v_$作为这些视图的前缀。
catldr.sql脚本创建了两张视图,用于SQL*Loader的直接加载的统计信息。
每个V$视图的底层视图定义(从技术角度讲,这些视图从没有被创建,它们的定义只是以二进制形式硬编码)可以通过名为V$FIXED_VIEW_DEFINITION的V$视图查看。
视图是通过选取一个或多个X$表中的信息来创建的。
系统为每一个v_$视图创建了一个可以允许用户访问的视图。
用户不能访问实际的v$视图(他们实际上是访问v_$视图;v$对象只对SYS 用户可见),所以,该方法通过在一个视图上创建另一个视图的方法提供了对这些视图的访问。
然后,视图的前缀改为了V$。
最后,因为SYS用户拥有这些表,每个视图上就创建了一个公共同名视图。
下面的程序清单展示了一个用catalog. sql创建V$视图的示例create or replace view gv_$datafile asselect *from gv$datafile;create or replace public synonym gv$datafile for gv_$datafile;下文详细描述了整个事件的完整步骤:(1) 当创建数据库时,根据X$表创建GV$视图的定义:create or replace view gv$fixed_table asselect inst_id,kqftanam, kqftaobj, 'TABLE', indxfrom X$kqftaunion allselect inst_id,kqfvinam, kqfviobj, 'VIEW', 65537from X$kqfviunion allselect inst_id,kqfdtnam, kqfdtobj, 'TABLE', 65537from X$kqfdt;(2) 执行版本特定的目录脚本:SQL> @catalog(3) 根据V$视图创建v_$视图:create or replace view v_$fixed_tableasselect * from v$fixed_table;(4) 再根据v_$视图创建新的V$同名视图:create or replace public synonym v$fixed_table for v_$fixed_table;技巧:SYSTEM 访问的V$视图实际上是指向v_$视图的同名视图,而v_$视图是以根据X$表创建的原始V$视图为基础而建立的视图(最好将上面的话多读几遍)。
这些视图上唯一可以执行的操作就是SELECT 。
为了用户能够访问V$视图,必须授于用户访问底层的v_$视图的权限。
不能授于用户访问V$视图的权限(即使是SYS 用户):connect sys/change_on_install as sysdbaGrant select on v$fixed_table to richn;ORA-02030: can only select from fixed tables/views.尽管在尝试授权访问V$FIXED_TABLE 时返回的错误消息反映了不正确的信息(紧接前面的代码),但授权仍然无法实现。
然而,可以授权访问V$视图底层的v_$视图。
要与SYS 超级用户连接,请使用下面的语句:Connect sys/change_on_install as sysdbaConnected.要向指定用户授于访问底层视图的权限,请使用下列语句:grant select on v_$fixed_table to richn;Grant succeeded.要以指定的用户身份连接,请使用下列语句:conn richn/tuscConnected.使用下列的语句来访问V$FIXED_TABLE视图,它是根据V_$FIXED_TABLE创建的同名视图:select count(*)from v$fixed_table;COUNT(*)--------1224尽管已经过授权,仍然不能访问v_$fixed_table:select count(*)from v_$fixed_table;ORA-00942: table or view does not exist.如果加上前缀SYS,就可以访问v_$fixed_table了:conn richn/tuscselect count(*)from SYS.v_$fixed_table;COUNT(*)--------1224为了避免混淆,最好是授于对v_$表的访问权限,并通知DBA用户可访问V$视图。
通过这个方法,就可以授权他人访问V$视图的信息,而不用向他们提供S YS或者SYSTEM账户的密码。
关键是对他SYS所有的原始v_$视图授予SELECT 权限。
技巧:当其他的DBA需要访问V$视图的信息,但是没有SYS或SYSTEM密码时,可以授予他们访问v_$视图的权限。
然后这些用户就可以访问与v_$视图具有公共同名的V$视图。
然而,所写的脚本必须直接查询SYS.V_$视图,以避免重引用公共同名视图造成的性能损失。
警告:应该仅在需要的时候才授于非DBA用户访问V$视图的权限,并且要小心谨慎。
记住,查询V$视图会造成性能损失,并且您的环境越复杂,这些损失就越多。
12.1.1 获得所有V$视图的数量和列表要获得某个版本的Oracle的所有V$视图的数量,可以查询V$FIXED_TABLE 视图。
即使是同一个版本,V$视图的数量也会变化。
下面的示例显示了针对Ora cle 10g的V$视图查询。
每一个新版本Oracle中的V$视图的数量一直在不断膨胀。
下面程序清单展示了获得V$视图数量的查询:select count(*)from v$fixed_tablewhere name like 'V%';COUNT(*)--------372许多V$视图仍然没有记入技术资料文档。
随着视图数据的增长,在Oracle 中探索数据的方法变得越来越多。
在Oracle 8中,引入了GV$视图。
GV$视图(全局V$)与V$视图基本一样,只是附加了一个实例ID列。
下面的程序清单给出了GV$视图的部分列表(仅是部分列表;完整的列表见附录B)。
select namefrom v$fixed_tablewhere name like 'GV%'order by name;NAME---------------------------------GV$ACCESSGV$ACTIVE_INSTANCESGV$ACTIVE_SERVICESGV$ACTIVE_SESSION_HISTORYGV$ACTIVE_SESS_POOL_MTHGV$ADVISOR_PROGRESSGV$ALERT_TYPESGV$AQ1GV$ARCHIVEGV$ARCHIVED_LOGGV$ARCHIVE_DESTGV$ARCHIVE_DEST_STATUSGV$ARCHIVE_GAPGV$ARCHIVE_PROCESSES...技巧:查询V$FIXED_TABLE 视图可以获得数据库中所有的GV$视图和V$视图。
GV$视图和V$视图几乎完全一样,但实例ID 列包含了一个标识符。
12.1.2 查找用于创建V$视图的X$表为了理解V$视图的信息是从何处得到的,可以查询底层的X$表(查阅第13章了解更详细的信息)。
有时候,查询底层的X$表可能更有利,因为V$视图通常根据多个X$表连接得到。
X$表非常隐秘,因为它和Oracle 数据字典的底层表结构很相似。
Oracle 在SGA 中创建V$视图,使用户可以以一种更便于阅读的格式来检查X$表中存储的信息。
实际上,当在V$视图上执行SELECT 操作时,SELEC T 操作负责从SGA 中提取信息—— 更明确地说,是从X$表中提取信息。
在了解SELECT 所操作的底层V$视图后,您就有能力创建自定义视图;直接复制Select 语句底层的V$视图,然后修改或者创建一个针对X$表的新定制的S ELECT 语句。
这个技术可创建出更具选择性和更加优化的查询。
下面的程序清单用于访问对底层X$表的查询。
为了获得组成V$视图的X$表的列表,必须访问V $FIXED_TABLE_DEFINITION 视图(输出结果已经过格式设置,更便于阅读)。
select *from v$fixed_view_definitionwhere view_name = 'GV$FIXED_TABLE';输出结果VIEW_NAME VIEW_DEFINITION-------------- ------------------------------------------------GV$FIXED_TABLE select inst_id,kqftanam, kqftaobj, 'TABLE', indxfrom X$kqftaunion allselect inst_id,kqfvinam, kqfviobj, 'VIEW', 65537from X$kqfviunion allselect inst_id,kqfdtnam, kqfdtobj, 'TABLE', 65537from X$kqfdt技巧:访问V$FIXED_TABLE_DEFINITION 视图可以获得组成V$视图的底层X$表的所有信息。