gdufo

 

Diagnostic and Tuning Tools

 

1、alert log file:DBA必须定期查看alert log文件,主要关注的信息主要有:内部的errors(ORA-600)和block corruption errors(ORA-1578或ORA-1498);DB的操作信息,如create database、startup、shutdown、archive log、recover等;对非默认参数的设置。它所记录的checkpoint start和end时间、未完成的checkpoint、归档时间crash的恢复时间是对调优很重要的。
注:alert_sid.log文件的路径由参数background_dump_dest决定;只有在参数log_checkpoints_to_alert被设置为true时,才会将checkpoint动作记录其中。

2、后台进程的trace files:Oracle会将后台进程检测出的errors信息写入trace files,主要用于诊断和查找故障原因,不包含tuning信息。

3、user trace files:它可以通过user或DBA的server processes请求产生,分为instance-level-tracing(通过set sql_trace=true/false设置)和session-level-tracing(通过 dbms_system.set_sql_trace_in_session设置指定session的tracing,或用alter session set sql_trace=true设置当前session的tracing)。user trace files包含了对tracing session的sql的信息。此外,还可用于alter database backup controlfile to trace和alter system set events(这个看到后面再说,现在不同了解)

4、views、utilities和tools:
①v$xxx视图显示了当前system的动态统计信息特别是v$sysstat。但是这些信息时往往是自实例启动以来的一个累计数据。所以有时会比较unhelpful。DBA_xxx视图记录了数据的存储统计信息。
②utlbstat和utlestat工具脚本:主要收集某段时间内的性能指标。
③statspack:其本质与utlbstat和utlestat是一致的,收集性能指标,优点在于它可以把统计信息保存在DB中从而进行不同阶段的比较。
④等待事件wait events:在troubleshooting时需要关注那些进程在等待,并在等待什么资源。
⑤此外还有其他的GUI工具用于DB的诊断。

5、dictionary和特殊的views:
当想要获得数据存储的细节信息时,需要先使用analyze语句对数据进行分析统计,再查看相关的DBA_xxx和特定的views。但这些统计信息是静 态的,只有再次运行analyze才会发生改变,而且对于较大data,用时较大。analyze获得的数据主要在下面的视图中:
DBA_TABLES/DBA_TAB_COLUMNS/DBA_CLUSTERS/DBA_INDEXES/INDEX_STATS/DBA_TAB_HISTOGRAMS/INDEX_HISTOGRAM
这个将会在后面详细讲述。

6、动态troubleshooting和性能视图:
①v$ views:是建立在想x$ tables的基础上,存储在内存结构中,保留instance的信息,所以只要在instance处于nomount的情况即可查询了。它们被罗列在v$fixed_table中,只有sys user可用。
②x$ tables:是动态的,数据随时变化,并且在shutdown时被清除,在startup时重新组装。当设置timed_statistics为true时,它们将保存时间信息。

③ systemwide statistics的收集
所有systemwide statistics的指标类型存放在v$statname中。所有指标的统计值存储在v$sysstat中。例如:select name, class, value from v$sysstat;
一般systemwide statistics的类型为:
• Class 1 refers to general instance activity.
• Class 2 refers to redo log buffer activity.
• Class 4 refers to locking.
• Class 8 refers to database buffer cache activity.
• Class 16 refers to OS activity.
• Class 32 refers to parallelization.
• Class 64 refers to tables access.
• Class 128 refers to debugging purposes.


④SGA全局统计,可以通过查看v$SGASTAT获得。
⑤等待事件的统计:所有可能引起等待的事件类型都存放在v$event_name中。
I) 所有的sessions的累计统计存放在v$system_event,显示了自instance startup后所有等待事件的统计数据。
II) 在troubleshooting时,往往需要知道某些进程在等待什么资源,对此,需要查找与session相关的视图。session的数据是从连接建立开始计算的。视图v$mystat显示了当前连接创建的session的统计信息。 eg. select sid, username, server from v$session where type=’USER’;
v$sesstat中显示了所有session的每个v$sysname的统计信息。如上图。
eg. 下面查询pga使用大约30000 bytes的session 
select username,name,value
  from v$statname a, v$session b, v$sesstat c
  where a.statistic# = c.statistic#
  and b.sid = c.sid
  and b.type = ‘USER’
  and a.name = ’session pga memory’
  and c.value > 30000;
III) session等待事件的统计:v$session_event显示了自instance startup后,每个session的所有不同等待统计。v$session_wait显示了active的session正在等待的事件或资源。

7、statspack 这个我在其他文章中介绍了,嘻嘻这里只是提一下。sg中说,可以设置dbms_job,从而每周监控DB一定时间段的性能状态,进行对比从而定期进行tuning。

8、Oracle的等待事件:前面已经叙述了很多了,在这里要指出的是,v$session_wait中的p1text字段和 v$event_name中的parameter1字段是相对应。p2text和p3text也是一样的。此外,动态的初始化参数 timed_statistics设置为true时,将可以取wait_time字段的value。

此外,Oracle还提供了performance manager和Oracle enterprise两个可选包,用于性能的检测和管理。另外,DBA还应该根据自己的需要,创建自己的脚本用于统计,例如查看不同数据文件的使用状况的脚本。

posted @ 2010-01-12 12:26 gdufo| 编辑 收藏

学习v$librarycache

转自:http://blog.chinaunix.net/u2/66903/showart_2004210.html

通过查看v$librarycache视图,可以监控library cache的活动情况,进一步衡量share pool设置是否合理。其中RELOADS列,表示对象被重新加载的次数,在一个设置合理的系统里,这个数值应该接近于0,另外,INVALIDATIONS列表示对象失效的次数,对象失效后,这意味着sql必须要被重新解析。

    下述sql查询librarycache的性能状况

log_checkpoints_to_alert
SELECT NAMESPACE, PINS, PINHITS, RELOADS, INVALIDATIONS
FROM V$LIBRARYCACHE
ORDER BY NAMESPACE;

输出如下:

NAMESPACE             PINS    PINHITS    RELOADS INVALIDATIONS
--------------- ---------- ---------- ---------- -------------
BODY                  8870       8819          0             0
CLUSTER                393        380          0             0
INDEX                   29          0          0             0
OBJECT                   0          0          0             0
PIPE                 55265      55263          0             0
SQL AREA          21536413   21520516      11204             2
TABLE/PROCEDURE   10775684   10774401          0             0
TRIGGER               18521844   0             0             0

通过上述查询,可以算出library cache的命中率:
Library Cache Hit Ratio = sum(pinhits) / sum(pins)SUM(PINHITS)/SUM(PINS)
----------------------
.999466248
另外,对于上述的查询,解释如下:
1.对于SQL AREA来说,共执行了21536413次。
2.其中11,204次执行导致了library cache miss。这就需要对这些sql进行重新解析,因为它们已经被age out。
3.sql有2次失效,这同时导致了library cache miss。
4.命中率为99.94%,这意味着只有0.06%的sql需要重复解析。、
另外一个问题,在什么情况下需要调整share pool的大小?
根据performance tuning上的解释,综合我自己的看法,结论如下:
(1)当V$LIBRARYCACHE.RELOADS的值较大,且应用程序已经很好的使用了绑定变量时,可以考虑调大share pool的值。
(2)当V$LIBRARYCACHE.RELOADS的值很小,且share pool里的free值较大,可以考虑减少share pool的值。通过以下查询,获取share pool的free情况:
SELECT * FROM V$SGASTAT 
WHERE NAME = 'free memory'
AND POOL = 'shared pool';

POOL NAME BYTES
----------- -------------------------- ----------
shared pool free memory 4928280



另参考:

http://www.itpub.net/thread-269800-1-1.html

posted @ 2010-01-01 09:40 gdufo| 编辑 收藏

查询跟踪文件位置和文件名脚本

--查询跟踪文件位置和文件名脚本
SELECT    a.VALUE || b.symbol || c.instance_name || '_ora_' || d.spid || '.trc' trace_file
  FROM (SELECT VALUE FROM v$parameter WHERE NAME = 'user_dump_dest') a,
       (SELECT SUBSTR (VALUE, -6, 1) symbol FROM v$parameter
         WHERE NAME = 'user_dump_dest') b,
       (SELECT instance_name FROM v$instance) c,
       (SELECT spid FROM v$session s, v$process p, v$mystat m
         WHERE s.paddr = p.addr AND s.SID = m.SID AND m.statistic# = 0) d
/

另一种方式:
其实也可以使用控制文件tracefile_identifier 参数来确定跟踪文件的名称,例如:
参数tracefile_identifie可以用来控制生成在user_dump_dest 目录下的trace文件名称
SQL> alter session set sql_trace=true ;
Session altered.
SQL> alter session set tracefile_identifier ='DEBUG';
Session altered.
在user_dump_dest 目录下的trace文件名称定义为:
INSTANCE_PID_ora_TRACEID.trc , 其中INSTANCE为ORACLE的实例名,PID为操作系统的进程ID(V$PROCESS.OSPID),TRACEID就是设置的tracefile_identifie值。

--读取当前session设置的参数(10g以前)www.6zhang.com
set feedback off
set serveroutput on
declare
event_level number;
begin
    for event_number in 10000..10999 loop
      sys.dbms_system.read_ev(event_number,event_level);
      if (event_level > 0) then
      sys.dbms_output.put_line('Event '||to_char(event_number)||
                               'is set at level '||to_char(event_level));
end if ;
end loop;
end;
/

 

posted @ 2009-12-30 20:12 gdufo| 编辑 收藏

Oracle-常用监控SQL

转: http://hi.baidu.com/windy8848/blog/item/3844fef25e7a8114b07ec51e.html

1.监控事例的等待:
select event,sum(decode(wait_time,0,0,1)) prev, sum(decode(wait_time,0,1,0)) curr,count(*)
from v$session_wait
group by event order by 4;

2.回滚段的争用情况:
select name,waits,gets,waits/gets ratio from v$rollstat a,v$rollname b where a.usn=b.usn;

3.监控表空间的I/O比例:
col name format a10
col file format a50
select df.tablespace_name name,df.file_name "file",f.phyrds pyr,f.phyblkrd pbr,f.phywrts pyw,
f.phyblkwrt pbw
from v$filestat f,dba_data_files df
where f.file#=df.file_id

4.监控文件系统的I/O比例:
select substr(a.file#,1,2) "#",substr(a.name,1,30) "name",a.status,a.bytes,
b.phyrds,b.phywrts
from v$datafile a,v$filestat b
where a.file#=b.file#

5.在某个用户下找所有的索引:
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;

6. 监控 SGA 的Buffer Cache 中的命中率
/*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;
*/
select 1-((a.value-b.value-c.value)/d.value)
from v$sysstat a,v$sysstat b,v$sysstat c,v$sysstat d
where a.name='physical reads' and
b.name='physical reads direct' and
c.name='physical reads direct (lob)' and
d.name='session logical reads';

7. 监控 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;

8. 监控 SGA 中共享缓存区的命中率,应该小于1%
select sum(pins) "Total Pins", sum(reloads) "Total Reloads",
sum(reloads)/sum(pins) *100 libcache
from v$librarycache;
#I f the reloads-to-pins ratio is greater than 1%,increase the value of the SHARED_POOL_SIZE parameter.
来自OCP9i教材

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


9. 显示所有数据库对象的类别和大小
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;

10. 监控 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'');

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

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

13. 监控字典缓冲区
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

14. 找ORACLE字符集
select * from sys.props$ where name=''NLS_CHARACTERSET'';

15. 监控 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时,参数需加大

16. 碎片程度
select tablespace_name,count(tablespace_name) from dba_free_space group by tablespace_name
having count(tablespace_name)>10;
alter tablespace name coalesce;
alter table name deallocate unused;
create or replace view ts_blocks_v as
select tablespace_name,block_id,bytes,blocks,''free space'' segment_name from dba_free_space
union all
select tablespace_name,block_id,bytes,blocks,segment_name from dba_extents;
select * from ts_blocks_v;
select tablespace_name,sum(bytes),max(bytes),count(block_id) from dba_free_space
group by tablespace_name;

查看碎片程度高的表
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);

17. 表、索引的存储情况检查
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;
select segment_name,count(*) from dba_extents where segment_type=''INDEX'' and owner=''&owner''
group by segment_name;

18、找使用CPU多的用户session
12是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#=12 and c.sid=a.sid and a.paddr=b.addr order by value desc;

20.监控log_buffer的使用情况:(值最好小于1%,否则增加log_buffer 的大小)
select rbar.name,rbar.value,re.name,re.value,(rbar.value*100)/re.value||''%'' "radio"
from v$sysstat rbar,v$sysstat re
where rbar.name=''redo buffer allocation retries''
and re.name=''redo entries'';

21、查看运行过的SQL语句:
SELECT SQL_TEXT
FROM V$SQL

22.oracle等待事件检测 
 

使用ORACLE的等待事件检测性能瓶颈
案例分析:以sys用户登录
1.首先从整个系统考虑,找到从系统启动以来最主要的等待事件是什么?
SQL>@syssum.sql
2.更为重要的是,在应用执行的时候,最主要的等待事件是什么?
SQL>@cr_base.sql
SQL>@in_base.sql
执行用户应用操作一段时间后
SQL>@re_base.sql
3. 查询产生等待事件最多的哪些会话??(以等待事件log file parallel write为例)
SQL>@seswt.sql log

4.查找哪些语句引起的等待,按照最消耗资源的顺序排列显示
SQL>@sqls1.sql 1000 1000
--以最消耗资源会话13为例
SQL>@sqlst.sql 13
查找出相关sql语句的地址比如:2168CBB8
SQL>@sqls2.sql 2168CBB8
 

附录:脚本
--syssum.sql
set linesize 200
col "Wait Event" for a45
select EVENT "Wait Event",TIME_WAITED "Time Waited",
       TIME_WAITED/(SELECT SUM(TIME_WAITED) FROM v$system_event) "%Time waited",
       TOTAL_WAITS "Waits",
       TOTAL_WAITS/(SELECT SUM(TOTAL_WAITS) FROM V$system_event) "%Waited"
from v$system_event
order by 3 desc;

--cr_base.sql
create table sys_b(
event varchar2(64),
time_waited number,
total_waits number);
create table sys_e(
event varchar2(64),
time_waited  number,
total_waits  number);

--in_base.sql
insert into sys_b
select event,time_waited,total_waits
from v$system_event;

--re_base.sql
insert into sys_e
select event,time_waited,total_waits
from v$system_event;
create table sys_dif
as
select e.event ,e.time_waited-b.time_waited  TIME_WAITED,
                e.total_waits-b.total_waits  TOTAL_WAITS
from sys_b b,sys_e e
where b.event=e.event;
select event "Wait Event",time_waited "Time Waited",
       time_waited/(select sum(time_waited) from sys_dif) "%Time waited",
       total_waits "Waits",
       total_waits /(select sum(total_waits) from sys_dif) "%Waited"
from sys_dif
order by 3 desc;
drop table sys_dif;
drop table sys_b;
drop table sys_e;
 
等待事件的等待次数
--seswa.sql
select event "Wait Event",
       count(seconds_in_wait) "Waited So Far(sec)",
       count(sid) "Num Sess Waiting"
from v$session_wait
group by event;

--seswt.sql
select sid,event "Wait Event",state "Wait Stat",
       wait_time "W'd So Far(secs)", seconds_in_wait "Time W'd (secs)"
from v$session_wait
where event like '&a'
order by 5;

--sqls1.sql
select * from
        (select address "Stmt Addr",
                disk_reads "Disk RDS",
                buffer_gets "Buff Gets",
                sorts "Sorts",
                executions "Runs",
                loads "Body Loads"
          from v$sqlarea where disk_reads > &A
          order by disk_reads  )
where rownum < &B;
 
--sqlst.sql
select cpu.sid "SID",cpu.username "USER Name",cpu.value "CPU(sec)",
       reads.value "IO Read(k)",writes.value "IO Write(k)"
from
(select a.sid sid,a.username username,b.name,c.value value, a.serial# serial#
from v$session a,v$statname b,v$sesstat c
where a.sid=c.sid and b.statistic#=c.statistic# and b.name='CPU used by this session') cpu,
(select a.sid,a.username,b.name,c.value value from v$session a,v$statname b ,v$sesstat c
where a.sid=c.sid and b.statistic#=c.statistic# and b.name='physical reads') reads,
(select a.sid,a.username,b.name,c.value value from v$session a,v$statname b ,v$sesstat c
where a.sid=c.sid and b.statistic#=c.statistic# and b.name='physical writes') writes
where cpu.sid=reads.sid and reads.sid=writes.sid and cpu.username is not null;
 
--sqls2.sql
select sql_text "SQL Statement Text"
from v$sqlarea
where ADDRESS='&a';


posted @ 2009-12-09 14:44 gdufo| 编辑 收藏

show sga 的描述

转:http://blog.csdn.net/biti_rainy/archive/2004/06/30/30974.aspx

关于 show sga 结果的描述
Total System Global Area AAAAA bytes
Fixed Size BBBBB bytes
Variable Size CCCCC bytes
Database Buffers DDDDD bytes
Redo Buffers EEEEE bytes

fixes size : oracle 的不同平台和不同版本下可能不一样,但对于确定环境是一个固定的值,里面存储了 SGA 各部分 组件 的信息,可以看作 引导 建立 SGA 的区域

Variable Size : 包括 shared pool ,java pool ,large pool, 管理DB_BLOCK_BUFFERS 的内存,管理控制文件信息的内存,等等其他管理和控制 oracle 内部结构的内存

redo buffer

1: 设置参数

SQL> show parameters log_buffer

NAME TYPE VALUE
------------------------------------ ------- ------------------------------
log_buffer integer 524288


2:日志内存大小

SQL> select * from v$sgastat where name like '%log%';

POOL NAME BYTES
----------- -------------------------- ----------
log_buffer 656384

 

3 : 为了保护日志内存,而增加了辅助的内存,也就是保护页
SQL> show sga

Total System Global Area 496049552 bytes
Fixed Size 454032 bytes
Variable Size 109051904 bytes
Database Buffers 385875968 bytes
Redo Buffers 667648 bytes
SQL>

对于数据库来说,在不同 的平台下
log_buffer 是离散的 一组值,假设是集合 R,并且不是按照 os blockck 或者 db block 为步长增加的,(比如可能是 65k,128k,512k ,641k....这样的值) 当设置参数为某个值的时候,数据库选择的实际大小是 大于等于 该值 的 min(R) ,根据这组值,比如你设置了 log_buffer = 600k ,则实际选择的是641 k

然后,在实际分配内存的时候,为了 给 log buffer 做一些保护,还另外分配了一小部分空间,通常是 11 k 大小。则有641+11 = 652 k ,这才是 最后真正的 内存大小 ,也就是 show SGA 时候显示大小

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/biti_rainy/archive/2004/06/30/30974.aspx

posted @ 2009-12-09 11:04 gdufo| 编辑 收藏

什么是LATCH ? 什么又导致LATCH 竞争?

转:
http://carson.ycool.com/post.1264755.html

  • oracle 采用 latch、enqueue、distribute lock 、global lock等来进行‘锁’的管理
  • Latches are low level serialization mechanisms used to protect shared data structures in the SGA. A latch is a type  of a lock that can be very quickly acquired and freed
  • Enqueue 是另外一种锁,An enqueue is a more sophisticated mechanism which permits several concurrent processes to have varying degree of sharing of "known" resources. Any object which can be concurrently used, can be protected with enqueues. 它于 latch的不同之处在于,它是OS级别的,由OS的lock manger 来进行管理,并且严格遵守FIFO,而latch 确不然,很有可能是先申请latch的进程,却最后得到latch
  • A process acquires a latch when working with a structure in the SGA (System Global Area).  在process 工作的过程中持有,在工作结束的时候释放,在process 意外结束的时候,由PMON 来收拾残局
  • Latch 有两种,一个是willing-to-wait,一个是no wait
  • 如果一个process 申请latch 没有申请的到,就开始spin,spin的次数有_spin_count参数来决定,当达到_spin_count的值时,就开始休眠,休眠时间为0.01秒
  • 主要相关视图:v$latch,v$latch_misses,v$latch_name,

主要的Latch

  • Cache buffers chains latch:    产生:在data buffer 有block 被access的时候产生; 解决: 减少这个latch 竞争就是要减少sql 的逻辑IO
  • Cache buffers LRU chain latch:  产生: 1、当一个新的block 被读到data buffer 的时候 2、data 从databuffer 写到disk   3、对Data buffer 进行scan 以获得那些block是dirty 时候;   解决: 1、加大data buffer,但是这对于FTS 比较多的系统并不中用  2、设置Multiple buffer pools   3、加大DB_BLOCK_LRU_LATCHES 参数的值  4、always ensure DB_BLOCK_LRU_STATISTICS is set to FALSE
  • Redo allocation latch:   产生:在log buffer中分配空间的时候获得,一个instance 只有一个Redo allocation latch ; 解决:1、加大log buffer    2、设置 nologging 选项
  • Redo copy latch:   产生:当系统将redo records 写到log buffer 的时候产生; 
  • Library cache latch:   产生:The library cache latches 保护cached 的sql 语句,以及cached 的object 的定义,它是当将新的解析的sql 语句 插入到library cache 的时候产生,该值过大,表示hard parse 过多;  解决: 1、绑定变量   2、 适当加大shared pool     3、加大_KGL_LATCH_COUNT 参数
  • Library cache pin latch:  产生: 当cached sql 语句再次被执行的时候产生,这个latch 的严重丢失表明sql 被严重的多次执行;   解决: 几乎没有办法来解决该问题,一个效果不大的办法是书写:a.b 类似的sql
  • Shared pool latch:   the shared pool latchis used to protect critical operations when allocating and freeing memory in the shared pool.     解决:  1、绑定变量   2、避免hard parse   3、尽量一次解析多次执行   4、适当的shared_pool  5、MTS
  • Row cache objects latch:    产生: 当用户进程读取数据字典定义的时候      解决: 加大shared_pool

如果一个系统中的CPU 很繁忙,就应该减少_SPIN_COUNT 的值,反之,就应该增加

posted @ 2009-12-09 10:47 gdufo| 编辑 收藏

linux下完全删除Oracle

确认实例并删除数据库:
$ more /etc/oratab
$ . /usr/local/bin/oraenv
$ dbca    (xmanager里,执行删除)

删除oracle软件:
$ export ORACLE_HOME=/u01/app/oracle/product/1020/db_1
$ $ORACLE_HOME/bin/emctl stop dbconsole
$ ps -ef | grep dbconsole | grep -v grep    (检查)
$ $ORACLE_HOME/bin/lsnrctl stop
$ ps -ef | grep tnslsnr | grep -v grep    (检查)
$ $ORACLE_HOME/bin/isqlplusctl stop
$ ps -ef | grep isqlplus | grep -v grep    (检查)   
$ $ORACLE_HOME/bin/searchctl stop
$ ps -ef | grep ultrasearch | grep -v grep    (检查)
$ $ORACLE_HOME/oui/bin/runInstaller    (xmanager里,执行删除操作)

=================================================================================

1.$ORACLE_BASE/product & oraInventory
2./etc/oratab
3./tmp/ora相关
4./opt/orcl*
5./usr/local/bin/下的几个文件可以不删除,但注意下次跑root.sh时,提示覆盖文件时选择y

/usr/local/bin下的3个受影响的文件是
dbhome
oraenv
coraenv
下次安装跑root.sh时,注意选择覆盖


================================================================================
1.用oracle用户登录
如果要再次安装, 最好先做一些备份工作。
包括用户的登录脚本,数据库自动启动关闭的脚本,和Listener自动启动的脚本。
要是有可能连创建数据库的脚本也保存下来
2.使用SQL*PLUS停止数据库
[oracle@ora920 oracle]$ sqlplus /nolog
SQL> connect / as sysdba
SQL> shutdown [immediate]
SQL> exit

3.停止Listener
[oracle@ora920 oracle]$ lsnrctl stop

4.停止HTTP服务
[oracle@ora920 oracle]$ $ORACLE_HOME/Apache/Apache/bin/apachectl stop

5.用su或者重新登录到root(如想重新安装可以保留oracle用户,省得输入环境变量了)

6.将安装目录删除
[root@ora920 /root]# rm -rf /opt/oracle/

7.将/usr/bin下的文件删除
[root@ora920 /root]# rm /usr/bin/dbhome
[root@ora920 /root]# rm /usr/bin/oraenv
[root@ora920 /root]# rm /usr/bin/coraenv

8.将/etc/oratab删除
[root@ora920 /root]# rm /etc/oratab

9.将/etc/oraInst.loc删除
[root@ora920 /root]# rm /etc/oraInst.loc

10.将oracle用户删除(若要重新安装,可以不删除)
[root@ora920 /root]# userdel –r oracle

11.将用户组删除(若要重新安装,可以不删除)
[root@ora920 /root]# groupdel oinstall
[root@ora920 /root]# groupdel dba

12.将启动服务删除
[root@ora920 /root]# chkconfig --del dbora

posted @ 2009-12-06 13:35 gdufo| 编辑 收藏

rman 增量备份

rem run rman

rman target / cmdfile=G:\oracle\ msglog= e:/orabackup/full_rmanlog%date:~4,10%.log


run{
allocate channel c1 type disk;
backup
incremental level=0
format 'G:\inc0_%u_%T'
tag sun_inc0
database
plus archivelog delete input;
release channel c1;
}

run{
allocate channel c1 type disk;
backup
incremental level=2
format 'G:\inc2_%u_%T'
tag mon_inc2
database
plus archivelog delete input;
release channel c1;
}

run{
allocate channel c1 type disk;
backup
incremental level=2
format 'G:\inc2_%u_%T'
tag tue_inc2
database
plus archivelog delete input;
release channel c1;
}

run{
allocate channel c1 type disk;
backup
incremental level=1
format 'G:\inc1_%u_%T'
tag wed_inc1
database
plus archivelog delete input;
release channel c1;
}

run{
allocate channel c1 type disk;
backup
incremental level=2
format 'G:\inc2_%u_%T'
tag thu_inc2
database
plus archivelog delete input;
release channel c1;
}

run{
allocate channel c1 type disk;
backup
incremental level=2
format 'G:\inc2_%u_%T'
tag fri_inc2
database
plus archivelog delete input;
release channel c1;
}

run{
allocate channel c1 type disk;
backup
incremental level=2
format 'G:\inc2_%u_%T'
tag sat_inc2
database
plus archivelog delete input;
release channel c1;
}

run {
set archivelog destination to 'g:\';
restore archivelog sequence 16;
}

startup mount;

--如果是控制文件丢失
sql>startup nomount;
sql>
DECLARE
DEVTYPE VARCHAR2(256);
DONE BOOLEAN;
BEGIN
DEVTYPE:=DBMS_BACKUP_RESTORE.DEVICEALLOCATE(NULL);
DBMS_BACKUP_RESTORE.RESTORESETDATAFILE;
DBMS_BACKUP_RESTORE.RESTORECONTROLFILETO('G:\oracle\oradata\orcl\CONTROL01.CTL');
DBMS_BACKUP_RESTORE.RESTOREBACKUPPIECE('G:\CTRL_C-1231731297-20091202-03',DONE=>done);
DBMS_BACKUP_RESTORE.RESTORESETDATAFILE; DBMS_BACKUP_RESTORE.RESTORECONTROLFILETO('G:\oracle\oradata\orcl\CONTROL02.CTL');
DBMS_BACKUP_RESTORE.RESTOREBACKUPPIECE('G:\CTRL_C-1231731297-20091202-03',DONE=>done);
DBMS_BACKUP_RESTORE.RESTORESETDATAFILE; DBMS_BACKUP_RESTORE.RESTORECONTROLFILETO('G:\oracle\oradata\orcl\CONTROL03.CTL');
DBMS_BACKUP_RESTORE.RESTOREBACKUPPIECE('G:\CTRL_C-1231731297-20091202-03',DONE=>done);
DBMS_BACKUP_RESTORE.DEVICEDEALLOCATE(NULL);
END;
/
sql>alter database mount;

restore database;

posted @ 2009-12-02 17:31 gdufo| 编辑 收藏

从备份集恢复归档日志的测试与说明(转载)


近期研究备份和恢复卓有成效,正好对日志恢复有些生疏,看到EYGLE里有篇好文,先借过用用。

数据库出现问题,但不需要restore只需recover时,发现要用到的archivelog已经备份并删除了,因为我们备份archivelog一般是采用delete input的,
4z9kV C@ s2t0这时先需要restore archivelog,然后才能做recover,下面介绍一下restore archivelog的用法:

restore archivelog后面可以跟的参数有"all, from, high, like, logseq, low, scn, sequence, time, until"
$d"~2o|A gz3\0现在举一列子说明:ITPUB个人空间Kxv#D'^DN
1.列出已经备份的archivelog
I'@ `{t}0list backup of archivelog all;
:kBP3gU(].yB02.预览恢复出程,但不真正恢复
@5Xtp4z0可以在你执行恢复前先看看恢复过程,也可以验证一下你的语法是否写对
8d6k5{@\)hY B0restore archivelog all preview; 即在你要执行的restore archivelog命令后加previewITPUB个人空间m8U P Cf;K/h
restore archivelog sequence 18 preview;ITPUB个人空间2i9W_%C:c
3.恢复指定时间范围的archivelog
`o#Cm e Mk.Z03.1 显示2008-08-13 10:00:00到2008-08-13 11:00:00之间的archivelogITPUB个人空间sqP8IG
list backup of archivelog time between "to_date('2008-08-13 10:00:00','yyyy-mm-dd hh24:mi:ss')" and "to_date('2008-08-13 11:00:00','yyyy-mm-dd hh24:mi:ss')";ITPUB个人空间w7VIK Zvj,n1q o*O
3.2 预览恢复2008-08-13 10:00:00到2008-08-13 11:00:00之间的archivelogITPUB个人空间3eP"q n,}4G8ZD3g
restore archivelog time between "to_date('2008-08-13 10:00:00','yyyy-mm-dd hh24:mi:ss')" and "to_date('2008-08-13 11::00','yyyy-mm-dd hh24:mi:ss')" preview;ITPUB个人空间#Q@6r'O yW.S
3.3 真正恢复2008-08-13 10:00:00到2008-08-13 11:00:00之间的archivelogITPUB个人空间Q9v+Fs]d}EYi;E5T
restore archivelog time between "to_date('2008-08-13 10:00:00','yyyy-mm-dd hh24:mi:ss')" and "to_date('2008-08-13 11::00','yyyy-mm-dd hh24:mi:ss')"ITPUB个人空间*xJ[m2mU%m
4.恢复指定的archivelog
/c Z#W.ci \As1g6r ~N Z0restore archivelog sequence 18; 恢复sequence为18的archivelog
*NLO:AU3k0yQ5Y05.restore archivelog like恢复模糊查询出来的archivelog,这个只能用于通过catalog的备份,用nocatalog的会报错
6H A `l{4s4W6Mi0restore archivelog like '%18%';
C o3j*f KO2d/B[6k;O06.恢复指定sequence范围的archivelog
:DZ5L5K+N{0restore archivelog from sequence 18 until sequence 20;
7Ir,Vs P xc0或restore archivelog low sequence 18 high sequence 20;ITPUB个人空间m } ~*Ib%X5mz
或restore archivelog low logseq 18 high logseq 20;
3y@*nPP2yk07.指定archivelog的恢复目的地,如你想把archivelog恢复到一个临时目录时有用,但这个必须包含在run{}里面才能用ITPUB个人空间#~2D4f5P awr
set archivelog destination to 'e:\temp';

以上基本上可以解决你恢复archivelog的需求,我是在10.2.0.4版本中测试通过的,欢迎大家补充,转载请说明出处.

---------------------------------------------ITPUB个人空间+|,SDL.brF
以下部分是在本人正式环境中遇到的实际情况,非转载:
}%|Q$G3w[c0备份日志中有以下内容:
A zZYi\0通道 t1: 正在指定备份集中的存档日志
#mf lj j[ lLg0i_0输入存档日志线程 =1 序列 =18070 记录 ID=35794 时间戳=671966051
eg/s&[#J9XTA0输入存档日志线程 =1 序列 =18071 记录 ID=35796 时间戳=671966351ITPUB个人空间3K xs(E y5Z4n?
输入存档日志线程 =1 序列 =18072 记录 ID=35798 时间戳=671966652ITPUB个人空间$w`S$T`2D @Z1e'r
输入存档日志线程 =1 序列 =18073 记录 ID=35800 时间戳=671966952
4Z~/_*TXl0输入存档日志线程 =1 序列 =18074 记录 ID=35802 时间戳=671967249
*R1t:\!AN nrh0输入存档日志线程 =1 序列 =18075 记录 ID=35804 时间戳=671967550
8p~].OC9Pd0输入存档日志线程 =1 序列 =18076 记录 ID=35806 时间戳=671967850
{;] a?M*R6jjX C0输入存档日志线程 =1 序列 =18077 记录 ID=35808 时间戳=671968151ITPUB个人空间g;BEG2c:j
输入存档日志线程 =1 序列 =18078 记录 ID=35810 时间戳=671968451ITPUB个人空间`.XDt6S @)c6a

5h*GI5i+W+u:R6g0单独恢复18071 到18076ITPUB个人空间'J N1g+C xHw l4`3q

rman> run
n*G jV2~ g0{ allocate channel t1 type 'sbt_tape' parms 'ENV=(tdpo_optfile=/usr/tivoli/tsm/client/oracle/bin64/tdpo.opt)';ITPUB个人空间wkuw|-B\
restore archivelog from logseq 18071 until logseq 18076 ;
,Ym"ip\9CQ4M*n0release channel t1;
^(Tst B-Cs0}
ITPUB个人空间5^J v*mYM'|jK3O+g+?
ITPUB个人空间y9dn8O2|#V.w(M,yI
经过在线环境的实地测试,以上脚本可行

posted @ 2009-12-01 22:11 gdufo| 编辑 收藏

在归档模式下的Rman全恢复

在归档模式下的Rman全恢复
cmd
$>rman target nocatelog
RMAN> run{allocate channel c1 type disk;
CONFIGURE CONTROLFILE AUTOBACKUP ON; #备份
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'G:\ctrl_%F';
backup database format 'G:\orcl_%U';
sql 'alter system archive log current';
release channel c1;}
==
修改数据
sql>shutdown immediate
==
$>rman target nocatelog
rman>startup mount; --必须启动到mount
rman>restore database;
rman>recover database;
rman>run {sql'alter database open';} 如果在非归档的模式下:
     run {sql'alter database open resetlogs';} 并且修改的数据找不回来。

posted @ 2009-12-01 14:53 gdufo| 编辑 收藏

仅列出标题
共19页: First 上一页 4 5 6 7 8 9 10 11 12 下一页 Last 

导航

统计

常用链接

留言簿(6)

随笔分类

随笔档案

文章分类

文章档案

收藏夹

Hibernate

友情链接

搜索

最新评论

阅读排行榜

评论排行榜