ORACLE常用问题1000问.docx
- 文档编号:27471427
- 上传时间:2023-07-01
- 格式:DOCX
- 页数:15
- 大小:20.48KB
ORACLE常用问题1000问.docx
《ORACLE常用问题1000问.docx》由会员分享,可在线阅读,更多相关《ORACLE常用问题1000问.docx(15页珍藏版)》请在冰豆网上搜索。
ORACLE常用问题1000问
ORACLE常用傻瓜問題1000問
大家在應用ORACLE的時候可能會遇到很多看起來不難的問題,特別對新手來說,今天我簡單把它總結一下,發布給大家,希望對大家有幫助!
和大家一起探討,共同進步!
對ORACLE高手來說是不用看的.
虚擬字段
133.CURRVAL和nextval
为表创建序列
CREATESEQUENCEEMPSEQ...;
SELECTempseq.currvalFROMDUAL;
自动插入序列的数值
INSERTINTOemp
VALUES(empseq.nextval,'LEWIS','CLERK',
7902,SYSDATE,1200,NULL,20);
134.ROWNUM
按设定排序的行的序号
SELECT*FROMempWHEREROWNUM<10;
135.ROWID
返回行的物理地址
SELECTROWID,enameFROMempWHEREdeptno=20;
136.将N秒转换为时分秒格式?
setserverouton
declare
Nnumber:
=1000000;
retvarchar2(100);
begin
ret:
=trunc(n/3600)||'小时'||to_char(to_date(mod(n,3600),'sssss'),'fmmi"分"ss"秒"');
dbms_output.put_line(ret);
end;
137.如何查询做比较大的排序的进程?
SELECTb.tablespace,b.segfile#,b.segblk#,b.blocks,a.sid,a.serial#,
a.username,a.osuser,a.status
FROMv$sessiona,v$sort_usageb
WHEREa.saddr=b.session_addr
ORDERBYb.tablespace,b.segfile#,b.segblk#,b.blocks;
138.如何查询做比较大的排序的进程的SQL语句?
select/*+ORDERED*/sql_textfromv$sqltexta
wherea.hash_value=(
selectsql_hash_valuefromv$sessionb
whereb.sid=&sidandb.serial#=&serial)
orderbypieceasc;
139.如何查找重复记录?
SELECT*FROMTABLE_NAME
WHEREROWID!
=(SELECTMAX(ROWID)FROMTABLE_NAMED
WHERETABLE_NAME.COL1=D.COL1ANDTABLE_NAME.COL2=D.COL2);
140.如何删除重复记录?
DELETEFROMTABLE_NAME
WHEREROWID!
=(SELECTMAX(ROWID)FROMTABLE_NAMED
WHERETABLE_NAME.COL1=D.COL1ANDTABLE_NAME.COL2=D.COL2);
141.如何快速编译所有视图?
SQL>SPOOLVIEW1.SQL
SQL>SELECT‘ALTERVIEW‘||TNAME||’
COMPILE;’FROMTAB;
SQL>SPOOLOFF
然后执行VIEW1.SQL即可。
SQL>@VIEW1.SQL;
142.ORA-01555SNAPSHOTTOOOLD的解决办法
增加MINEXTENTS的值,增加区的大小,设置一个高的OPTIMAL值。
143.事务要求的回滚段空间不够,表现为表空间用满(ORA-01560错误),回滚段扩展到达参数MAXEXTENTS的值(ORA-01628)的解决办法.
向回滚段表空间添加文件或使已有的文件变大;增加MAXEXTENTS的值。
144.如何加密ORACLE的存储过程?
下列存储过程内容放在AA.SQL文件中
createorreplaceproceduretestCCB(iinnumber)as
begin
dbms_output.put_line('输入参数是'||to_char(i));
end;
SQL>wrapiname=a.sql;
PL/SQLWrapper:
Release8.1.7.0.0-ProductiononTueNov2722:
26:
482001
Copyright(c)OracleCorporation1993,2000.AllRightsReserved.
ProcessingAA.sqltoAA.plb
运行AA.plb
SQL>@AA.plb;
145.如何监控事例的等待?
selectevent,sum(decode(wait_Time,0,0,1))"Prev",
sum(decode(wait_Time,0,1,0))"Curr",count(*)"Tot"
fromv$session_Wait
groupbyeventorderby4;
146.如何回滚段的争用情况?
selectname,waits,gets,waits/gets"Ratio"
fromv$rollstatC,v$rollnameD
whereC.usn=D.usn;
147.如何监控表空间的I/O比例?
selectB.tablespace_namename,B.file_name"file",A.phyrdspyr,
A.phyblkrdpbr,A.phywrtspyw,A.phyblkwrtpbw
fromv$filestatA,dba_data_filesB
whereA.file#=B.file_id
orderbyB.tablespace_name;
148.如何监控文件系统的I/O比例?
selectsubstr(C.file#,1,2)"#",substr(C.name,1,30)"Name",
C.status,C.bytes,D.phyrds,D.phywrts
fromv$datafileC,v$filestatD
whereC.file#=D.file#;
149.如何在某个用户下找所有的索引?
selectuser_indexes.table_name,user_indexes.index_name,uniqueness,column_name
fromuser_ind_columns,user_indexes
whereuser_ind_columns.index_name=user_indexes.index_name
anduser_ind_columns.table_name=user_indexes.table_name
orderbyuser_indexes.table_type,user_indexes.table_name,
user_indexes.index_name,column_position;
150.如何监控SGA的命中率?
selecta.value+b.value"logical_reads",c.value"phys_reads",
round(100*((a.value+b.value)-c.value)/(a.value+b.value))"BUFFERHITRATIO"
fromv$sysstata,v$sysstatb,v$sysstatc
wherea.statistic#=38andb.statistic#=39
andc.statistic#=40;
151.如何监控SGA中字典缓冲区的命中率?
selectparameter,gets,Getmisses,getmisses/(gets+getmisses)*100"missratio",
(1-(sum(getmisses)/(sum(gets)+sum(getmisses))))*100"Hitratio"
fromv$rowcache
wheregets+getmisses<>0
groupbyparameter,gets,getmisses;
152.如何监控SGA中共享缓存区的命中率,应该小于1%?
selectsum(pins)"TotalPins",sum(reloads)"TotalReloads",
sum(reloads)/sum(pins)*100libcache
fromv$librarycache;
selectsum(pinhits-reloads)/sum(pins)"hitradio",sum(reloads)/sum(pins)"reloadpercent"
fromv$librarycache;
153.如何显示所有数据库对象的类别和大小?
selectcount(name)num_instances,type,sum(source_size)source_size,
sum(parsed_size)parsed_size,sum(code_size)code_size,sum(error_size)error_size,
sum(source_size)+sum(parsed_size)+sum(code_size)+sum(error_size)size_required
fromdba_object_size
groupbytypeorderby2;
154.监控SGA中重做日志缓存区的命中率,应该小于1%
SELECTname,gets,misses,immediate_gets,immediate_misses,
Decode(gets,0,0,misses/gets*100)ratio1,
Decode(immediate_gets+immediate_misses,0,0,
immediate_misses/(immediate_gets+immediate_misses)*100)ratio2
FROMv$latchWHEREnameIN('redoallocation','redocopy');
155.监控内存和硬盘的排序比率,最好使它小于.10,增加sort_area_size
SELECTname,valueFROMv$sysstatWHEREnameIN('sorts(memory)','sorts(disk)');
156.如何监控当前数据库谁在运行什么SQL语句?
SELECTosuser,username,sql_textfromv$sessiona,v$sqltextb
wherea.sql_address=b.addressorderbyaddress,piece;
157.如何监控字典缓冲区?
SELECT(SUM(PINS-RELOADS))/SUM(PINS)"LIBCACHE"FROMV$LIBRARYCACHE;
SELECT(SUM(GETS-GETMISSES-USAGE-FIXED))/SUM(GETS)"ROWCACHE"FROMV$ROWCACHE;
SELECTSUM(PINS)"EXECUTIONS",SUM(RELOADS)"CACHEMISSESWHILEEXECUTING"FROMV$LIBRARYCACHE;
后者除以前者,此比率小于1%,接近0%为好。
SELECTSUM(GETS)"DICTIONARYGETS",SUM(GETMISSES)"DICTIONARYCACHEGETMISSES"
FROMV$ROWCACHE
158.监控MTS
selectbusy/(busy+idle)"sharedserversbusy"fromv$dispatcher;
此值大于0.5时,参数需加大
selectsum(wait)/sum(totalq)"dispatcherwaits"fromv$queuewheretype='dispatcher';
selectcount(*)fromv$dispatcher;
selectservers_highwaterfromv$mts;
servers_highwater接近mts_max_servers时,参数需加大
159.如何知道当前用户的ID号?
SQL>SHOWUSER;
OR
SQL>selectuserfromdual;
160.如何查看碎片程度高的表?
SELECTsegment_nametable_name,COUNT(*)extents
FROMdba_segmentsWHEREownerNOTIN('SYS','SYSTEM')GROUPBYsegment_name
HAVINGCOUNT(*)=(SELECTMAX(COUNT(*))FROMdba_segmentsGROUPBYsegment_name);
162.如何知道表在表空间中的存储情况?
selectsegment_name,sum(bytes),count(*)ext_quanfromdba_extentswhere
tablespace_name='&tablespace_name'andsegment_type='TABLE'groupbytablespace_name,segment_name;
163.如何知道索引在表空间中的存储情况?
selectsegment_name,count(*)fromdba_extentswheresegment_type='INDEX'andowner='&owner'
groupbysegment_name;
164、如何知道使用CPU多的用户session?
11是cpuusedbythissession
selecta.sid,spid,status,substr(a.program,1,40)prog,a.terminal,osuser,value/60/100value
fromv$sessiona,v$processb,v$sesstatc
wherec.statistic#=11andc.sid=a.sidanda.paddr=b.addrorderbyvaluedesc;
165.如何知道监听器日志文件?
以8I为例
$ORACLE_HOME/NETWORK/LOG/LISTENER.LOG
166.如何知道监听器参数文件?
以8I为例
$ORACLE_HOME/NETWORK/ADMIN/LISTENER.ORA
167.如何知道TNS连接文件?
以8I为例
$ORACLE_HOME/NETWORK/ADMIN/TNSNAMES.ORA
168.如何知道Sql*Net环境文件?
以8I为例
$ORACLE_HOME/NETWORK/ADMIN/SQLNET.ORA
169.如何知道警告日志文件?
以8I为例
$ORACLE_HOME/ADMIN/SID/BDUMP/SIDALRT.LOG
170.如何知道基本结构?
以8I为例
$ORACLE_HOME/RDBMS/ADMIN/STANDARD.SQL
171.如何知道建立数据字典视图?
以8I为例
$ORACLE_HOME/RDBMS/ADMIN/CATALOG.SQL
172.如何知道建立审计用数据字典视图?
以8I为例
$ORACLE_HOME/RDBMS/ADMIN/CATAUDIT.SQL
173.如何知道建立快照用数据字典视图?
以8I为例
$ORACLE_HOME/RDBMS/ADMIN/CATSNAP.SQL
本讲主要讲的是SQL语句的优化方法!
主要基于ORACLE9I的.
174./*+ALL_ROWS*/
表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化.
例如:
SELECT/*+ALL+_ROWS*/EMP_NO,EMP_NAM,DAT_INFROMBSEMPMSWHEREEMP_NO='CCBZZP';
175./*+FIRST_ROWS*/
表明对语句块选择基于开销的优化方法,并获得最佳响应时间,使资源消耗最小化.
例如:
SELECT/*+FIRST_ROWS*/EMP_NO,EMP_NAM,DAT_INFROMBSEMPMSWHEREEMP_NO='CCBZZP';
176./*+CHOOSE*/
表明如果数据字典中有访问表的统计信息,将基于开销的优化方法,并获得最佳的吞吐量;
表明如果数据字典中没有访问表的统计信息,将基于规则开销的优化方法;
例如:
SELECT/*+CHOOSE*/EMP_NO,EMP_NAM,DAT_INFROMBSEMPMSWHEREEMP_NO='CCBZZP';
177./*+RULE*/
表明对语句块选择基于规则的优化方法.
例如:
SELECT/*+RULE*/EMP_NO,EMP_NAM,DAT_INFROMBSEMPMSWHEREEMP_NO='CCBZZP';
178./*+FULL(TABLE)*/
表明对表选择全局扫描的方法.
例如:
SELECT/*+FULL(A)*/EMP_NO,EMP_NAMFROMBSEMPMSAWHEREEMP_NO='CCBZZP';
179./*+ROWID(TABLE)*/
提示明确表明对指定表根据ROWID进行访问.
例如:
SELECT/*+ROWID(BSEMPMS)*/*FROMBSEMPMSWHEREROWID>='AAAAAAAAAAAAAA'
ANDEMP_NO='CCBZZP';
180./*+CLUSTER(TABLE)*/
提示明确表明对指定表选择簇扫描的访问方法,它只对簇对象有效.
例如:
SELECT/*+CLUSTER*/BSEMPMS.EMP_NO,DPT_NOFROMBSEMPMS,BSDPTMS
WHEREDPT_NO='TEC304'ANDBSEMPMS.DPT_NO=BSDPTMS.DPT_NO;
181./*+INDEX(TABLEINDEX_NAME)*/
表明对表选择索引的扫描方法.
例如:
SELECT/*+INDEX(BSEMPMSSEX_INDEX)USESEX_INDEXBECAUSETHEREAREFEWMALEBSEMPMS*/FROMBSEMPMSWHERESEX='M';
182./*+INDEX_ASC(TABLEINDEX_NAME)*/
表明对表选择索引升序的扫描方法.
例如:
SELECT/*+INDEX_ASC(BSEMPMSPK_BSEMPMS)*/FROMBSEMPMSWHEREDPT_NO='CCBZZP';
183./*+INDEX_COMBINE*/
为指定表选择位图访问路经,如果INDEX_COMBINE中没有提供作为参数的索引,将选择出位图索引的
布尔组合方式.
例如:
SELECT/*+INDEX_COMBINE(BSEMPMSSAL_BMIHIREDATE_BMI)*/*FROMBSEMPMS
WHERESAL<5000000ANDHIREDATE 184./*+INDEX_JOIN(TABLEINDEX_NAME)*/ 提示明确命令优化器使用索引作为访问路径. 例如: SELECT/*+INDEX_JOIN(BSEMPMSSAL_HMIHIREDATE_BMI)*/SAL,HIREDATE FROMBSEMPMSWHERESAL<60000; 185./*+INDEX_DESC(TABLEINDEX_NAME)*/ 表明对表选择索引降序的扫描方法. 例如: SELECT/*+INDEX_DESC(BSEMPMSPK_BSEMPMS)*/FROMBSEMPMSWHEREDPT_NO='CCBZZP'; 186./*+INDEX_FFS(TABLEINDEX_NAME)*/ 对指定的表执行快速全索引扫描,而不是全表扫描的办法. 例如: SELECT/*+INDEX_FFS(BSEMPMSIN_EMPNAM)*/*FROMBSEMPMSWHEREDPT_NO='TEC305'; 187./*+ADD_EQUALTABLEINDEX_NAM1,INDEX_NAM2,...*/ 提示明确进行执行规划的选择,将几个单列索引的扫描合起来. 例如: SELECT/*+INDEX_FFS(BSEMPMSIN_DPTNO,IN_EMPNO,IN_SEX)*/*FROMBSEMPMSWHEREEMP_NO='CCBZZP'ANDDPT_NO='TDC306'; 188./*+USE_CONCAT*/ 对查询中的WHERE后面的OR条件进行转换为UNIONALL的组合查询. 例如: SELECT/*+USE_CONCAT*/*FROMBSEMPMSWHEREDPT_NO='TDC506'ANDSEX='M'; 189./*+NO_EXPAND*/ 对于WHERE后面的OR或者IN-LIST的查询语句,NO_EXPAND将阻止其基于优化器对其进行扩展. 例如: SELECT/*+NO_EXPAND*/*FROMBSEMPMSW
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ORACLE 常用 问题 1000