IT猫扑网:您身边最放心的安全下载站! 最新更新|软件分类|软件专题|手机版|论坛转贴|软件发布

您当前所在位置:首页数据库Oracle → 关于Oracle一些常用脚本的汇总(2)

关于Oracle一些常用脚本的汇总(2)

时间:2015/6/28来源:IT猫扑网作者:网管联盟我要评论(0)

  碎片检查

  select tablespace_name,sqrt(max(blocks)/sum(blocks))*

  (100/sqrt(sqrt(count(blocks)))) fsfi

  from dba_free_space

  group by tablespace_name order by 2;

  fsfi值越小,碎片越大 自由空间碎片索引

  检查reverse_key index

  select o.object_name

  from dba_objects o

  where wner='DB_ACCT'

  AND O.OBJECT_ID IN

  (SELECT I.OBJ# FROM SYS.IND$ I

  WHERE BITAND(I.PROPERTY,4)=4)

  查具体后台进程号

  select spid from v$session a ,v$process b where a.PADDR=b.ADDR and sid=''

  查看死锁表

  SELECT SID, DECODE(BLOCK, 0, 'NO', 'YES' ) BLOCKER,

  DECODE(REQUEST, 0, 'NO','YES' ) WAITER

  FROM V$LOCK

  WHERE REQUEST > 0 OR BLOCK > 0

  ORDER BY block DESC;

  查看剩余表空间

  select a.tablespace_name,free/total*100 pct_free,free/1024/1024 "free(M)" from

  (select sum(bytes) free ,tablespace_name from dba_free_space group by tablespace_name) a,

  (select sum(bytes) total ,tablespace_name from dba_data_files group by tablespace_name) b

  where a.tablespace_name=b.tablespace_name

  order by pct_free;

  查看创建索引的进度

  select sid,message from  v$session_longops where sid ='' order by  start_time

  查看缴费到帐

  SELECT AREA_ID,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(count(1)) as cnt FROM ACCT_PAY_INTERFACE

  WHERE PAY_DATE>=sysdate-1 and FLAG='0' group by AREA_Id

  查看最消耗资源的sql

  SELECT * FROM  (SELECT PARSING_USER_ID EXECUTIONS,SORTS,COMMAND_TYPE,

  DISK_READS, sql_text FROM v$sqlarea ORDER BY disk_reads DESC ) WHERE ROWNUM<10

  查看占用系统资源的进程号spid

  SELECT a.username,a.machine,a.program,a.sid,a.serial#,a.status,c.piece,c.sql_text

  FROM v$session a,v$process b,v$sqltext c WHERE b.spid='' AND b.addr=a.paddr AND a.sql_address=c.address(+)

  ORDER BY c.piece

  查看占用系统io较大的session

  SELECT se.sid,se.serial#,pr.SPID,se.username,se.status,se.terminal,se.program,

  se.MODULE,se.sql_address,st.event,st.p1text,si.physical_reads,si.block_changes

  FROM v$session se, v$session_wait st,v$sess_io si,v$process pr WHERE st.sid=se.sid  AND st.sid=si.sid

  AND se.PADDR=pr.ADDR AND se.sid>6 AND st.wait_time=0 AND st.event NOT LIKE '%SQL%' ORDER BY physical_reads DESC

  对检索出的结果的几点说明:

  1、我是按每个正在等待的session已经发生的物理读排的序,因为它与实际的IO相关。

  2、你可以看一下这些等待的进程都在忙什么,语句是否合理?

  Select sql_address from v$session where sid=;

  Select * from v$sqltext where address=;

  执行以上两个语句便可以得到这个session的语句。

  你也以用alter system kill session 'sid,serial#';把这个session杀掉。

#p#副标题#e#

  3、应观注一下event这列,这是我们调优的关键一列,下面对常出现的event做以简要的说明:

  a、buffer busy waits,free buffer waits这两个参数所标识是dbwr是否够用的问题,与IO很大相关的,当v$session_wait中的free buffer wait的条目很小或没有的时侯,说明你的系统的dbwr进程决对够用,不用调整;free buffer wait的条目很多,你的系统感觉起来一定很慢,这时说明你的dbwr已经不够用了,它产生的wio已经成为你的数据库性能的瓶颈,这时的解决办法如下:

  a.1增加写进程,同时要调整db_block_lru_latches参数

  示例:修改或添加如下两个参数

  db_writer_processes=4

  db_block_lru_latches=8

  a、2开异步IO,IBM这方面简单得多,hp则麻烦一些,可以与Hp工程师联系。

  b、db file sequential read,指的是顺序读,即全表扫描,这也是我们应该尽量减少的部分,解决方法就是使用索引、sql调优,同时可以增大db_file_multiblock_read_count这个参数。

  c、db file scattered read,这个参数指的是通过索引来读取,同样可以通过增加db_file_multiblock_read_count这个参数来提高性能。

  d、latch free,与栓相关的了,需要专门调节。

  e、其他参数可以不特别观注

  外部联接"+"的用法

  ---- 外部联接"+"按其在"="的左边或右边分左联接和右联接.

  若不带"+"运算符的表中的一个行不直接匹配于带"+"预算符的表中的任何行,

  则前者的行与后者中的一个空行相匹配并被返回.若二者均不带’+’

  则二者中无法匹配的均被返回.利用外部联接"+"

  可以替代效率十分低下的 not in 运算,大大提高运行速度.例如,下面这条命令执行起来很慢

  select a.empno from emp a where a.empno not in

  (select empno from emp1 where job=’SALE’);

  ---- 倘若利用外部联接,改写命令如下:

  select a.empno from emp a ,emp1 b

  where a.empno=b.empno(+)

  and b.empno is null

  and b.job=’SALE’;

  ---- 可以发现,运行速度明显提高

  如何更改UNDO tablespace

  create undo tablespace undotbs2 datafile 'D:\oracle\product\10.2.0\oradata\qa\undotbs2.dbf' size 40M;

  alter system set undo_tablespace=undotbs2 scope=both;

  create pfile from spfile;

  alter tablespace undotbs1 offline;

  drop tablespace undotbs1 including contents;

  ----将表改成

  ALTER   TABLE   t_monitor_real_minute   NOLOGGING;

  Oracle RAC的参数文件和单实例参数文件不同,所以修改参数文件时需要注意。

  首先设置归档路径:

  SQL> alter system set log_archive_dest='/opt/oracle/archive' scope=spfile sid='*';

  System altered.

  SQL> select sid,name,value from v$spparameter where name='log_archive_dest';

  SID  NAME     VALUE

  ---------- -------------------- ------------------------------

  *    log_archive_dest     /opt/oracle/archive

  然后关闭两个实例,启动实例,更改数据库为归档模式:

  SQL> shutdown immediate;

  Database closed.

  Database dismounted.

  ORACLE instance shut down.

  SQL> startup mount;

  ORACLE instance started.

  Total System Global Area 1258291200 bytes

  Fixed Size      1978336 bytes

  Variable Size 352325664 bytes

  Database Buffers    889192448 bytes

  Redo Buffers   14794752 bytes

  Database mounted.

  SQL> alter database archivelog;

  Database altered.

  SQL> alter database open;

  Database altered.

  SQL> archive log list;

  Database log mode  Archive Mode

  Automatic archival Enabled

  Archive destination      /opt/oracle/archive

  Oldest online log sequence     83

  Next log sequence to archive   84

  Current log sequence     84

  接下来启动另外一个节点,完成归档模式的变更过程。

  本文出自 "dbpath" 博客,请务必保留此出处https://dbpath.blog.51cto.com/405409/83603

关键词标签:Oracle常用脚本

相关阅读

文章评论
发表评论

热门文章 Oracle中使用alter table来增加,删除,修改列Oracle中使用alter table来增加,删除,修改列oracle中使用SQL语句修改字段类型-oracle修oracle中使用SQL语句修改字段类型-oracle修使用低权限Oracle数据库账户得到管理员权限使用低权限Oracle数据库账户得到管理员权限Oracle对user的访问控制Oracle对user的访问控制

相关下载

人气排行 ORACLE SQL 判断字符串是否为数字的语句Oracle中使用alter table来增加,删除,修改列的语法ORACLE和SQL语法区别归纳(1)oracle grant 授权语句如何加速Oracle大批量数据处理Oracle删除表的几种方法ORACLE修改IP地址后如何能够使用Oracle 10g创建表空间和用户并指定权限