数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
ORACLE常用傻瓜問題1000問(之四)

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站


 

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

 

作者:  CCBZZP

 

        大家在應用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",
   C.status, C.bytes, D.phyrds, D.phywrts
   from v$datafile C, v$filestat D
   where C.file# = D.file#;

149. 如何在某个用户下找所有的索引?
   select user_indexes.table_name, user_indexes.index_name,uniqueness, column_name
   from user_ind_columns, user_indexes
   where user_ind_columns.index_name = user_indexes.index_name
   and user_ind_columns.table_name = user_indexes.table_name
   order by user_indexes.table_type, user_indexes.table_name,
   user_indexes.index_name, column_position;

150. 如何监控 SGA 的命中率?
   select a.value + b.value "logical_reads", c.value "phys_reads",
   round(100 * ((a.value+b.value)-c.value) / (a.value+b.value)) "BUFFER HIT RATIO"
   from v$sysstat a, v$sysstat b, v$sysstat c
   where a.statistic# = 38 and b.statistic# = 39
   and c.statistic# = 40;

151. 如何监控 SGA 中字典缓冲区的命中率?
   select parameter, gets,Getmisses , getmisses/(gets+getmisses)*100 "miss ratio",
   (1-(sum(getmisses)/ (sum(gets)+sum(getmisses))))*100 "Hit ratio"
   from v$rowcache
   where gets+getmisses <>0
   group by parameter, gets, getmisses;

152. 如何监控 SGA 中共享缓存区的命中率,应该小于1% ?
   select sum(pins) "Total Pins", sum(reloads) "Total Reloads",
   sum(reloads)/sum(pins) *100 libcache
   from v$librarycache;

   select sum(pinhits-reloads)/sum(pins) "hit radio",sum(reloads)/sum(pins)    "reload percent"
   from v$librarycache;

153. 如何显示所有数据库对象的类别和大小?
   select count(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
   from dba_object_size
   group by type order by 2;

154. 监控 SGA 中重做日志缓存区的命中率,应该小于1%
   SELECT name, 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
   FROM v$latch WHERE name IN ('redo allocation', 'redo copy');

155. 监控内存和硬盘的排序比率,最好使它小于 .10,增加 sort_area_size
   SELECT name, value FROM v$sysstat WHERE name IN ('sorts (memory)', 'sorts      (disk)');


156. 如何监控当前数据库谁在运行什么SQL语句?
   SELECT osuser, username, sql_text from v$session a, v$sqltext b
   where a.sql_address =b.address order by address, piece;

157. 如何监控字典缓冲区?
   SELECT (SUM(PINS - RELOADS)) / SUM(PINS) "LIB CACHE" FROM V$LIBRARYCACHE;
   SELECT (SUM(GETS - GETMISSES - USAGE - FIXED)) / SUM(GETS) "ROW CACHE" FROM    V$ROWCACHE;
   SELECT SUM(PINS) "EXECUTIONS", SUM(RELOADS) "CACHE MISSES WHILE EXECUTING" FROM    V$LIBRARYCACHE;
   后者除以前者,此比率小于1%,接近0%为好。

   SELECT SUM(GETS) "DICTIONARY GETS",SUM(GETMISSES) "DICTIONARY CACHE GET MISSES"
   FROM V$ROWCACHE


158. 监控 MTS
   select busy/(busy+idle) "shared servers busy" from v$dispatcher;
   此值大于0.5时,参数需加大
   select sum(wait)/sum(totalq) "dispatcher waits" from v$queue where    type='dispatcher';
   select count(*) from v$dispatcher;
   select servers_highwater from v$mts;
   servers_highwater接近mts_max_servers时,参数需加大

159. 如何知道当前用户的ID号?
    SQL>SHOW USER;
    OR
    SQL>select user from dual;

160. 如何查看碎片程度高的表?
   SELECT segment_name table_name , COUNT(*) extents
   FROM dba_segments WHERE owner NOT IN ('SYS', 'SYSTEM') GROUP BY segment_name
   HAVING COUNT(*) = (SELECT MAX( COUNT(*) ) FROM dba_segments GROUP BY       segment_name);

162. 如何知道表在表空间中的存储情况?
   select segment_name,sum(bytes),count(*) ext_quan from dba_extents where
   tablespace_name='&tablespace_name' and segment_type='TABLE' group by       tablespace_name,segment_name;

163. 如何知道索引在表空间中的存储情况?
   select segment_name,count(*) from dba_extents where segment_type='INDEX' and       owner='&owner'
   group by segment_name;

164、如何知道使用CPU多的用户session?
   11是cpu used by this session

   select a.sid,spid,status,substr(a.program,1,40)       prog,a.terminal,osuser,value/60/100 value
   from v$session a,v$process b,v$sesstat c
   where c.statistic#=11 and c.sid=a.sid and a.paddr=b.addr order by value desc;

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


   待续...

 

 

 

 


  

 




相关文章

相关软件