实时获得最耗CPU资源的SQL语句(zt)
在Oracle性能诊断和日常监控中,最耗CPU的语句通常也是我们最需要关心的语句。所以在Oracle10g的awr中,将cpu time和elapsed time最高的语句加入到了报表,并且放到了SQL语句部分的前两位。那么在平时的监控中,也可以通过shell脚本实时捕获系统中CPU耗用最多的进程中正在执行的SQL,以更加有效和及时的诊断和发现问题。[@more@]首先写一个根据spid来或者其SQL的脚本get_by_spid.sql#!/bin/ksh# creator:NinGoo# function: get sql statement by spid# parameter: spid# useage: get_by_spid.sh spidsqlplus -S /nolog <
产生top sql的原因(zt)
.[@more@]这是一个网友的面试题,问到top sql一般是什么情况下产生的,不同的公司,dba参与项目的阶段不同,所以答案也就有所区别,一般来讲,top sql产生的阶段有:系统设计阶段(表结构设计),编码实现阶段(SQL编写),SQL审核优化阶段等,这样涉及到的人的因素就有:系统设计人员+开发人员+DBA,任何一个环节出了问题,就有可能出现top sql,所以一个项目,出了性能问题,并不一定是DBA的责任,但优秀的DBA,可以消除潜在的风险。产生top sql的原因,细化起来有以下原因:1 表结构设计的不合理2 索引创建不合理3 不必要的表关联4 隐式数
索引是如何定期rebuild的(zt)
1. 发现哪个index碎片较多,需要对索引进行rebuild的语句2. 对索引进行rebuild的语句,特别对于那些24X7的应用,大家都是如何对大表的索引进行rebuild[@more@]对于索引的碎片,并不是很重要的,如果索引膨胀的很快很大,如果空间允许,也不是很重要的,但如果空间比较紧张,那就要定期进行rebuild。对于大表的rebuild一定要心,在访问很频繁的系统中,一定要加online选项,虽然花费的时间长一些,因为这样不阻塞DML,否则系统就很危险,alter index ... rebuild online的机制请看偶的文章。仅仅用rebuild online也是很有风险的,因为在索引
实例解析Oracle是共享模式还是专用模式
1.是否配置为共享服务器,最主要的参数是: 8i mts_servers 9i shared_server show parameter shared_server mts_servers如果数值 > 0 ,就是enable了共享服务器. [@more@]2.在配置为共享服务器的情况,Client可以选择用共享服务器或者专用服务器来连接到数据库,这个参数的控制是在tnsnames.ora里设定的。 aaaa= (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = aaaa)(PORT = 1521)) ) (CONNECT_DATA = (SID = aa) (SERVER = DEDICATED) ) )红色部分指定了用DEDICATED方式连接DB. 另外,Background
由Bug引起的ORA-01114&ORA-27069错误
.[@more@]Fri Apr 11 08:48:35 2008ARC1: Beginning to archive log 3 thread 1 sequence 1044Creating archive destination LOG_ARCHIVE_DEST_1: 'D:ORACLEORADATAHREMPLOYARCHIVE1_1044.DBF'Fri Apr 11 08:48:48 2008ARC1: Completed archiving log 3 thread 1 sequence 1044Fri Apr 11 09:00:30 2008ALTER DATABASE DATAFILE 'D:ORACLEORADATAHREMPLOYHR.DBF' RESIZE 4096M Fri Apr 11 09:00:59 2008Completed: ALTER DATABASE DATAFILE 'D:ORACLEORADATAHREMPLOFri Apr 11 09:01:00 2008KCF: write/open error block=0x5832d online=1
如何通过 table名称找到PK对应的字段
user_cons_columnsuser_ind_columns.[@more@]select constraint_name AS PK, column_name, position from sys.user_cons_columns where constraint_name =(select constraint_name from sys.user_constraints where table_name='R_CARTON_LIST_T' and constraint_type='P' and owner='SFISM4') ;
直接路径插入 -- insert /*+append*/ into [zt]
http://www.itpub.net/thread-965298-1-1.html 一、直接路径插入与间接路径插入的不同 这个问题相信很多人都已经知道了,为了方便初学者,我再来重审一遍。create table 表1 as select 列1,列2,... select 表2 insert /*+append*/ into 表1 select 列1,列2,... select 表2 如上形式的插入,都叫做直接路径插入。当然,在SQL*Loader中也有直接路径插入的形式。 所谓直接路径插入,就是绕过Buffer cache,直接将数据插入进表所在数据文件中。 [@more@] 假如有表AA,要将AA中的数据插入进表BB,在普通的间接插入下,先将AA
SQL语句性能调整原则(zt)
.[@more@]一、问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统的响应速度就成为目前系统需要解决的最主要的问题之一。系统优化中一个很重要的方面就是SQL语句的优化。对于海量数据,劣质SQL语句和优质SQL语句之间的速度差别可以达到上百倍,可见对于一个系统不是简单地能实现其功能就可,而是要写出高质量的SQL语句,提高系统的可用性。 在多数情况下,Oracle使用索引来更快地遍历表,
查找行迁移及消除行迁移(chained rows)
analyze table 之后:select table_name,num_rows,CHAIN_CNT from user_tables ; orselect table_name,num_rows,CHAIN_CNT from dba_tables where owner='XXXXXXX' ;[@more@]Row Migration,是Oracle里面的一个重要的基本概念。 一般传统意义上,我们需要消除行迁移。 因为这样,会造成额外的IO消耗。传统的办法一般是导入倒出整个表。 但是这样的风险比较大,而且Downtime会比较长。 当有外键约束之类的时候,也非常的麻烦。 也有人选择用删除migration的行,然后重新Insert ,但是和EXP/Imp一样,当遭碰到FK/PK限制的
参数配置 -- 最大性能模式 dataguard 不影响Production DB .
log_archive_dest_2='SERVICE=standby_test MANDATORY REOPEN=60'; 当从库出现问题的时候,要不影响到主库的生产,我们可以去掉 MANDATORY 和 REOPEN 目前比较好的办法就是STANDBY的设置为optional ,因为有可能是半夜网络当掉,那时DBA又不在位子上,无法手工设为defer的。有个可选的办法就是白天为mandatory,晚上为optional,可以写脚本定时执行转换的。[@more@]附: Oracle9i Dataguard建立 ------------------------------------------------------------------------------- 操作环境:Windows 2000 Professional + Serveic
关于Oracle 数据库备份的几个概念
一 . 双机热备 从广义上讲,双机热备(双机容错)就是对于重要的服务,使用两台服务器,互相备份,共同执行同一服务。当一台服务器出现故障时,可以由另一台服务器承担服务任务,从而在不需要人工干预的情况下,自动保证系统能持续提供服务 双机热备由备用的服务器解决了在主服务器故障时服务不中断的问题。但在实际应用中,可能会出现多台服务器的情况,即服务器集群 双机热备一般情况下需要有共享的存储设备。但某些情况下也可以使用两台独立的服务器 实现双机热备,需要通过专业的集群软件或双机软件[@more@] 从狭义上讲,双
9I DATAGUARD原理,实施和维护总结
1、DATAGUARD原理 STANDBY一旦创建,DATAGUARD就会通过将主数据库的REDO传递给STANDBY数据库,然后在STANDBY中应用REDO实现数据库的同步。 [@more@] 有两种类型的STANDBY:物理STANDBY和逻辑STANDBY物理STANDBY提供与主数据库完全一样的拷贝(块到块),数据库SCHEMA,包括索引都是一样的。它是直接应用REDO实现同步的。 逻辑STANDBY则不是这样,在逻辑STANDBY中,逻辑信息是相同的,但物理组织和数据结构可以不同,它和主库保持同步的方法是将接收的REDO转换成SQL语句,然后在STANDBY上执行SQL语句。逻辑STANDBY除灾难恢复外
配置9i standby(zt)
.[@more@]环境:windows 2000+Oracle 9.2.0.4;主库名为test,备库名为pstandby 1、首先确认Primary数据库是否在归档模式下,如果不是请自己调整,这里略过。 SQL>; archive log list 数据库日志模式 存档模式 自动存档 启用 存档终点 D:oracleoradatatestArchive 最早的概要日志序列 45 下一个存档日志序列 47 当前日志序列 47 2、激活Primary Database的Forced Logging SQL>; ALTER DATABASE FORCE LOGGING; 3、设置Pri
oracle常用经典SQL查询(zt)
.[@more@]1、查看表空间的名称及大小 select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_sizefrom dba_tablespaces t, dba_data_files dwhere t.tablespace_name = d.tablespace_namegroup by t.tablespace_name; 2、查看表空间物理文件的名称及大小 select tablespace_name, file_id, file_name,round(bytes/(1024*1024),0) total_spacefrom dba_data_filesorder by tablespace_name; 3、查看回滚段名称及大小 select segment_name, tablespace_name, r.status, (initial_extent/1024) InitialExtent,(next_extent/1024) Ne
解决数据库慢方法论 (zt)
.[@more@]数据库的performance是一个长期的监控过程,不能头疼医头,脚疼医脚。数据库慢一般有三种情况1。逐渐变慢2。突然变慢3。不定时变慢第一种情况 “逐渐变慢”,要建立一个长期的监控机制。比如,写个shell脚本每天的忙时(通常9~10 etc.)定时收集os,network,db的信息, 每个星期出report对收集到的信息进行分析。 这些数据的积累,可以决定后期的优化决策,并且可以是DBA说服manager采用自己决策的重要数据。DBA的价值,就在每个星期的report中体现。第二种情况 “突然变慢”,也是最容易解决的。先从业务的角度看是DB的使用跟以前
关于Oracle to_char()函数中的IW,WW 周别显示
查今天是 "今年" 的第几周 select to_char(sysdate,'ww') from dual; 或 select to_char(sysdate,'iw') from dual; 附注: 上文所提之iw及ww格式在doc内解释如下 IW = Week of year (1-52 or 1-53) based on the ISO standard WW = Week of year (1-53) where week 1 starts on the first day of the year and continues to the seventh day of the year. [@more@]周日都是第12周select to_char(to_date('20080323','yyyymmdd'),'WW') from dual;select to_char(to_date('20080323','yyyymmdd'),'I
Oracle的性能调整
关于Oracle的性能调整,一般包括两个方面,一是指Oracle数据库本身的调整,比如SGA、PGA的优化设置,二是连接Oracle的应用程序以及SQL语句的优化。做好这两个方面的优化,就可以使一套完整的Oracle应用系统处于良好的运行状态。 本文主要是把一些Oracle Tuning的文章作了一个简单的总结,力求以实际可操作为目的,配合讲解部分理论知识,使大部分具有一般Oracle知识的使用者能够对Oracle Tuning有所了解,并且能够根据实际情况对某些参数进行调整。关于更加详细的知识,请参见本文结束部分所提及的推荐书籍,同时由于该话题内容太多且复杂
Windows下 OracleServiceSID 服务具体是干什么用的
Windows下安装oracle数据库后,出现一个服务 OracleServiceSID, 在注册表中的 ORA_SID_AUTOSTART 默认设置为 true , 数据库实例会随着服务的开启而开启, 人为设置为false ,那么这个windows服务开启,但是数据库实例不会随之自动开启 。 一直不解 OracleServiceSID 这个windows服务到底是什么用处 ? 一个权限方面的服务限制 (因为不打开sqlplus登入不了) ? 还是ORACLE SID 环境变量方面的指定作用 ?[@more@]---NinGoo : windows的程序,只有注册成服务,才能在用户注销的时候继续运行你也可以不用服务启
OracleServiceSID 服务启动实例随之启动的注册表键值: ORA_SID_AUTOSTART
修改注册表项,HKEY_LOCAL_MACHINESOFTWAREORACLEHOME0下设置。ORA_SID_AUTOSTART = true,服务启动,数据库实例随服务启动而打开;ORA_SID_AUTOSTART = false,服务启动时不打开数据库实例,仅仅启动windows服务。[@more@]win2k环境下设置oracle服务OracleServiceSID 。 1.修改注册表项,HKEY_LOCAL_MACHINESOFTWAREORACLEHOME下设置。 ORA_SID_AUTOSTART = true,服务启动,数据库随服务启动而打开; ORA_SID_AUTOSTART = false,服务启动时不打开数据库,仅仅启动windows服务。 2.使用oradim修改windows服务 -EDIT -SID s
9i -- 确认每个连接用户session占用的内存量
.[@more@]select b.PGA_USED_MEM PGA_USED_MEM, b.PGA_ALLOC_MEM PGA_ALLOC_MEM, b.PGA_FREEABLE_MEM PGA_FREEABLE_MEM,b.PGA_MAX_MEM PGA_MAX_MEM from v$session a, v$process b where a.PADDR=b.ADDR and a.sid ='&sid'select a.sid, b.name, sum(value)/1024/1024 from v$sesstat a, v$statname b where a.statistic#=b.statistic# and b.name like '%pga%'group by sid,name