Oracle数据字典使用入门下面按类别列出一些Oracle用户常用数据字典的查询使用方法。一、用户查看当前用户的缺省表空间SQLSELECTusername,default_tablespaceFROMuser_users;查看当前用户的角色SQLSELECT*FROMuser_role_privs;查看当前用户的系统权限和表级权限SQLSELECT*FROMuser_sys_privs;SQLSELECT*FROMuser_tab_privs;二、表查看用户下所有的表SQLSELECT*FROMuser_tables;查看名称包含log字符的表SQLSELECTobject_name,object_idFROMuser_objectsWHEREINSTR(object_name,'LOG')0;查看某表的创建时间SQLSELECTobject_name,createdFROMuser_objectsWHEREobject_name=UPPER('&table_name');查看某表的大小SQLSELECTSUM(bytes)/(1024*1024)ASsize(M)FROMuser_segmentsWHEREsegment_name=UPPER('&table_name');查看放在ORACLE的内存区里的表SQLSELECTtable_name,cacheFROMuser_tablesWHEREINSTR(cache,'Y')0;三、索引查看索引个数和类别SQLSELECTindex_name,index_type,table_nameFROMuser_indexesORDERBYtable_name;查看索引被索引的字段SQLSELECT*FROMuser_ind_columnsWHEREindex_name=UPPER('&index_name');查看索引的大小SQLSELECTSUM(bytes)/(1024*1024)ASsize(M)FROMuser_segmentsWHEREsegment_name=UPPER('&index_name');四、序列号查看序列号,last_number是当前值SQLSELECT*FROMuser_sequences;五、视图查看视图的名称SQLSELECTview_nameFROMuser_views;查看创建视图的select语句SQLSELECTview_name,text_lengthFROMuser_views;SQLSETlong2000;//说明:可以根据视图的text_length值设定setlong的大小SQLSELECTtextFROMuser_viewsWHEREview_name=UPPER('&view_name');六、同义词查看同义词的名称SQLSELECT*FROMuser_synonyms;七、约束条件查看某表的约束条件SQLSELECTconstraint_name,constraint_type,search_condition,r_constraint_nameFROMuser_constraintsWHEREtable_name=UPPER('&table_name');//注意,表名一定是大写才行SQLSELECTc.constraint_name,c.constraint_type,cc.column_nameFROMuser_constraintsc,user_cons_columnsccWHEREc.owner=upper('&table_owner')ANDc.table_name=UPPER('&table_name')ANDc.owner=cc.ownerandc.constraint_name=cc.constraint_name6ORDERBYcc.position;八、存储函数和过程查看函数和过程的状态SQLSELECTobject_name,statusFROMuser_objectsWHEREobject_type='FUNCTION';SQLSELECTobject_name,statusFROMuser_objectsWHEREobject_type='PROCEDURE';查看函数和过程的源代码SQLSELECTtextfromall_sourceWHEREowner=userANDname=UPPER('&plsql_name');九、触发器查看触发器SETlong50000;SETheadingoff;SETpagesize2000;SELECT'createorreplacetrigger'||trigger_name||''||chr(10)||DECODE(SUBSTR(trigger_type,1,1),'A','AFTER','B','BEFORE','I','INSTEADOF')||chr(10)||triggering_event||chr(10)||'ON'||table_owner||'.'||table_name||''||chr(10)||DECODE(instr(trigger_type,'EACHROW'),0,null,'FOREACHROW')||chr(10),trigger_bodyFROMuser_triggers;二、查看Oracle表空间大小及利用率的SQL语句-非常实用的语句setlinesize300col表空间名fora30SELECTUPPER(F.TABLESPACE_NAME)表空间名,D.TOT_GROOTTE_MB表空间大小(M),D.TOT_GROOTTE_MB-F.TOTAL_BYTES已使用空间(M),TO_CHAR(ROUND((D.TOT_GROOTTE_MB-F.TOTAL_BYTES)/D.TOT_GROOTTE_MB*100,2),'990.99')使用比,F.TOTAL_BYTES空闲空间(M),F.MAX_BYTES最大块(M)FROM(SELECTTABLESPACE_NAME,ROUND(SUM(BYTES)/(1024*1024),2)TOTAL_BYTES,ROUND(MAX(BYTES)/(1024*1024),2)MAX_BYTESFROMSYS.DBA_FREE_SPACEGROUPBYTABLESPACE_NAME)F,(SELECTDD.TABLESPACE_NAME,ROUND(SUM(DD.BYTES)/(1024*1024),2)TOT_GROOTTE_MBFROMSYS.DBA_DATA_FILESDDGROUPBYDD.TABLESPACE_NAME)DWHERED.TABLESPACE_NAME=F.TABLESPACE_NAMEORDERBY4DESC;三、XX网Oracle数据库SYSTEM表空间文件坏块的解决办法故障现象:NetBackup备份出错,日志如下:RMAN-00571:===========================================================RMAN-00569:===============ERRORMESSAGESTACKFOLLOWS===============RMAN-00571:===========================================================RMAN-03009:failureofbackupcommandonch01channelat06/15/200502:28:44ORA-19566:超出损坏块限制0(文件/u01/app/oradata/unicom/system01.dbf)故障分析:由于事前发生过别的表空间(cookdbs:/u01/app/oradata/unicom/cokdbs.dbf)也有坏块的情况,根据李智他们的建议,使用迁移数据后删除表空间的办法解决(仅适用于普通表空间)。这是查询该表空间上的表和索引对象的一个脚本:GXdb%morequery.sqlconn/assysdbacolownerfora25colsegment_namefora40spooltable.logselectdistinctOWNER,SEGMENT_NAMEfromdba_extentswhereTABLESPACE_NAME='COOKDB'andSEGMENT_TYPE='TABLE';spooloffspoolindex.logselectdistinctOWNER,SEGMENT_NAMEfromdba_extentswhereTABLESPACE_NAME='COOKDB'andSEGMENT_TYPE='INDEX';spooloffexit查询完毕后,使用一个迁移的脚本迁移到新的表空间:GXdb%moremove.sh#!/bin/kshsqlplus/nolog@query.sqlNEWTBS=cookdbs1echoconn/assysdbamove.sqlforTNAMEin`cattable.log|awk'/^COOKDB/{print$2}'`doechoaltertablecookdb.$TNAMEmovetablespace$NEWTBS;move.sqldoneforINAMEin`catindex.log|awk'/^COOKDB/{print$2}'`doechoALTERINDEXcookdb.$INAMEREBUILDTABLESPACE$NEWTBS;move.sqldoneechoexitmove.sqlsqlplus/nolog@move.sql本次经过检查,发现包括有System在内的四个表空间的四个数据文件有坏块。为了能使用NetBackup备份,对NetBackup脚本做以下修改(对相应的数据文件设置maxcorrupt):run{allocatechannelch00type'sbt_tape';setmaxcorruptfordatafile1,27,28,44to10;backup。。。。。。releasechannelch00;}如果有归档日志没有丢失,都备份过,可以使用rman的blockrecover来修复文件的坏块,例如:run{allocatechannelch00type'sbt_tape';blockrecoverdatafile27block302089,302090,332823,332824,332825,332826;blockrecoverdatafile28block340846,340847,340848,340849;blockrecoverdatafile44block380381,380382,380383,380384,380405,380406,380407,380408;blockrecoverdatafile1block1703064,1703065,1703066,1703067,1703088,1703089,1703090,1703091;releasechannelch00;}但是中间由于备份失败,本地维护删除过归档日志,此方法不适用。本次由于有SYSTEM表空间,不同于普通用户表空间,它有自己的特殊性。所以有些问题的解决方法也不尽相同。经多方探讨协商(OracleIndiaengineer、项目经理、本地维护、开发部门和系统工程部经理),总结了以下处理办法:解决SYSTEM表空间文件坏块的方法是导出全库数据,删除数据库,重建数据库,导入全库数据。具体的操纵步骤,经过讨论,见如下:主要是考虑到优化可以在线进行,也需要在线进行,还考虑到优化的万一出错性,既便出错至少还可以恢复到原始状态,如果优化没有成功,再做导出导入也不能恢复到初始状态。所以就先做导出导入工作再做优化处理。步骤是:1.