日期:2014-05-16  浏览次数:20383 次

ORACLE常用傻瓜問題1000問(之四)

?

??大家在應用ORACLE的時候可能會遇到很多看起來不難的問題, 特別對新手來說, 今天我簡單把它總結一下, 發布給大家, 希望對大家有幫助! 和大家一起探討, 共同進步!

?

????????對ORACLE高手來說是不用看的.

?

?? 虚擬字段
133. CURRVAL 和 nextval
?? 为表创建序列
?? CREATE SEQUENCE EMPSEQ ... ;
?? SELECT empseq.currval FROM DUAL ;
?? 自动插入序列的数值
?? INSERT INTO emp?
??????? VALUES (empseq.nextval, 'LEWIS', 'CLERK',?
??????????????? 7902, SYSDATE, 1200, NULL, 20) ;

134. ROWNUM
?? 按设定排序的行的序号
?? SELECT * FROM emp WHERE ROWNUM < 10 ;

135. ROWID
?? 返回行的物理地址
?? SELECT ROWID, ename FROM emp? WHERE deptno = 20 ;

136. 将N秒转换为时分秒格式??
?? set serverout on?
?? declare?
?? N number := 1000000;?
?? ret varchar2(100);?
?? begin?
?? ret := trunc(n/3600) || '小时' || to_char(to_date(mod(n,3600),'sssss'),'fmmi"分?? "ss"秒"') ;?
?? dbms_output.put_line(ret);?
?? end;

137. 如何查询做比较大的排序的进程?
?? SELECT b.tablespace, b.segfile#, b.segblk#, b.blocks, a.sid, a.serial#,?
?? a.username, a.osuser, a.status?
?? FROM v$session a,v$sort_usage b?
?? WHERE a.saddr = b.session_addr?
?? ORDER BY b.tablespace, b.segfile#, b.segblk#, b.blocks ;

138. 如何查询做比较大的排序的进程的SQL语句?
?? select /*+ ORDERED */ sql_text from v$sqltext a?
?? where a.hash_value = (?
?? select sql_hash_value from v$session b?
?? where b.sid = &sid and b.serial# = &serial)?
?? order by piece asc ;

139. 如何查找重复记录?
?? SELECT * FROM TABLE_NAME?
?? WHERE ROWID!=(SELECT MAX(ROWID) FROM TABLE_NAME D
?? WHERE TABLE_NAME.COL1=D.COL1 AND TABLE_NAME.COL2=D.COL2);

140. 如何删除重复记录?
?? DELETE FROM TABLE_NAME
?? WHERE ROWID!=(SELECT MAX(ROWID) FROM TABLE_NAME D
?? WHERE TABLE_NAME.COL1=D.COL1 AND TABLE_NAME.COL2=D.COL2);

141. 如何快速编译所有视图?
?? SQL >SPOOL VIEW1.SQL?
?? SQL >SELECT ‘ALTER VIEW ‘||TNAME||’?
?? COMPILE;’ FROM TAB;?
?? SQL >SPOOL OFF?
?? 然后执行VIEW1.SQL即可。?
?? SQL >@VIEW1.SQL;

142. ORA-01555 SNAPSHOT TOO OLD的解决办法
?? 增加MINEXTENTS的值,增加区的大小,设置一个高的OPTIMAL值。

143. 事务要求的回滚段空间不够,表现为表空间用满(ORA-01560错误),回滚段扩展到达参数????? MAXEXTENTS的值(ORA-01628)的解决办法.
?? 向回滚段表空间添加文件或使已有的文件变大;增加MAXEXTENTS的值。

144. 如何加密ORACLE的存储过程?
??? 下列存储过程内容放在AA.SQL文件中
??? create or replace procedure testCCB(i in number) as
??? begin
??? dbms_output.put_line('输入参数是'||to_char(i));
??? end;

??? SQL>wrap iname=a.sql;
??? PL/SQL Wrapper: Release 8.1.7.0.0 - Production on Tue Nov 27 22:26:48 2001
??? Copyright (c) Oracle Corporation 1993, 2000.? All Rights Reserved.
??? Processing AA.sql to AA.plb
??? 运行AA.plb
??? SQL> @AA.plb ;

145. 如何监控事例的等待?
?? select event,sum(decode(wait_Time,0,0,1)) "Prev",?
?? sum(decode(wait_Time,0,1,0)) "Curr",count(*) "Tot"?
?? from v$session_Wait?
?? group by event order by 4;

146. 如何回滚段的争用情况?
?? select name, waits, gets, waits/gets "Ratio"?
?? from v$rollstat C, v$rollname D?
?? where C.usn = D.usn;

147. 如何监控表空间的 I/O 比例?
?? select B.tablespace_name name,B.file_name "file",A.phyrds pyr,?
?? A.phyblkrd pbr,A.phywrts pyw, A.phyblkwrt pbw?
?? from v$filestat A, dba_data_files B?
?? where A.file# = B.file_id?
?? order by B.tablespace_name;

148. 如何监控文件系统的 I/O 比例?
?? select substr(C.file#,1,2) "#", substr(C.name,1,30) "Name",?
?