oracle查看历史session

oracle查看历史session,第1张

一、如何查询session执行的历史sql语句

如何知道一个session都执行过哪些SQL语句?(查看当前比较容易,历史的呢?怎么复原sql的执行场景——事务关系、执行序列、单SQL还是存储过程)

方法一查询v$sqltext、v$sqlarea、v$sqlstats视图

select from v$sqlarea t where tPARSING_SCHEMA_NAME in ('schema') order by tLAST_ACTIVE_TIME desc;

#对v$sqltext、v$sqlarea查看的是shared pool中的SQL,其时间索引是其解析历史,因为共享的问题这个查询可能并不能完整地反映出执行的历史。

#v$sqlstats信息保留时间比v$sql、v$sqltext、v$sqlarea长,及时SQL已经换出shared pool仍然可查到

方法二

联合v$active_session_history和v$sqlarea

#v$active_session_history 这个表只是个取样数据,按秒进行,只有在那一秒采样点处于on cpu或非idle等待的session统计在内。所以可能会不全,有些执行很短的SQL会忽略。这个视图无法还原完整的session历史。

#v$sqlarea中有执行过的SQL语句,但并无到session的关联信息,v$session中只关联了当前的sql,所以也不行。

查看视图:dba_hist_sqlstats、dba_hist_sqltext(历史数据)

二、如何使用PL/SQL Developer查看和杀掉session

oracle多用户 *** 作有时候会造成session阻塞,形成了锁表等问题。

可以使用sql语句进行查询,但用工具更为方便。本文就介绍使用PL/SQL developer工具查看或杀掉oracle的session。

工具/原料 PL/SQL Developer 版本为 8001480 方法/步骤 打开PL/SQL Developer,输入用户名密码和数据库等信息。 在工具栏中选择tools,在d出的窗口选择Sessions。

即可。 如图所示,所有的session和起sid都列了出来,我们需要找Status为active(活动)的。

点击一下即可,或者选择如图的下拉菜单,选择 Active sessions 如图,现在有两个活动的session,选择其中一个session后在下方可以查看此session的更多信息。 在SQL Text一栏中可以查看正在执行的sql语句。

在Locks一栏中,可以查看现在锁表等信息。 若要杀掉其中一个session,那么,对这个session一行点击右键,选择“kill”即可。

三、如何查看PL/SQL执行的历史

除了PL/SQL的ctrl+e的查看方法外还有如下方法:方法一查询v$sql、v$sqltext、v$sqlarea、v$sqlstats视图select from v$sqlarea t where tPARSING_SCHEMA_NAME in ('schema') order by tLAST_ACTIVE_TIME desc;#对v$sqltext、v$sqlarea查看的是shared pool中的SQL,其时间索引是其解析历史,因为共享的问题这个查询可能并不能完整地反映出执行的历史。

#v$sqlstats反应的是实例启动起来的sql执行统计,sql语句本身比v$sqltext/area完整,因为后者有可能失效换出缓存。方法二联合v$active_session_history和v$sqlarea#v$active_session_history 这个表只是个取样数据,按秒进行,只有在那一秒采样点处于on cpu或非idle等待的session统计在内。

所以可能会不全,有些执行很短的SQL会忽略。这个视图无法还原完整的session历史。

#v$sqlarea中有执行过的SQL语句,但并无到session的关联信息,v$session中只关联了当前的sql,所以也不行。从v$sqlstat可以查看到数据库启动起来的所有SQL信息,但是没有时间顺序关系、没有执行用户信息,只有执行次数与资源统计。

从dba_hist_sqlstat可以看到AWR snapshot之间的SQL统计信息,与v$sqlstats比不受实例重启的影响,因为实例重启之后v$sqlstats中的信息就清除了。方法三:session traceSQL> execute dbms_sessionsession_trace_enable(true,true);PL/SQL procedure successfully pletedSQL> select count() from dba_hist_sqltext; COUNT()---------- 478SQL> select from V$sesstat where rownum=1; SID STATISTIC# VALUE---------- ---------- ---------- 134 0 1SQL> execute dbms_sessionsession_trace_disable;PL/SQL procedure successfully pleted$ cd $ORACLE_HOME/admin/test/udump$ ls -lrt$ tkprof test_ora_2195620trc reporttxt sys=no explain=no aggregate=yes$ more reporttxt --这个文件包括了启停trace之间所有SQL语句的执行信息,执行计划、统计方法四:logminer只包含DML与DDL语句,不能查询select语句。

另外需要开启supplemental logging,默认是没有开启的。conn / as sysdba--安装LOGMINERSQL> @$ORACLE_HOME/rdbms/admin/dbmslmdsql;SQL> @$ORACLE_HOME/rdbms/admin/dbmslmsql;SQL> @$ORACLE_HOME/rdbms/admin/dbmslmssql;SQL> @$ORACLE_HOME/rdbms/admin/prvtlmplb;--开启附加日志alter database add supplemental log data;--模拟DML *** 作conn p_chenming/。

SQL> select from test2;SQL> insert into test2 values(7,77);SQL> mit;conn / as sysdba--切归档SQL> alter system switch logfile;SQL> select name,dest_id,thread#,sequence# from v$archived_log; --最后一个即为新的归档--新建LOG MINERSQL> execute dbms_logmnradd_logfile(logfilename=>'/oracle/archive_10g/test/test_1_138_786808434arc',options=>dbms_logmnrnew); --开始minerSQL> execute dbms_logmnrstart_logmnr(options=>dbms_logmnrdict_from_online_catalog);--查看结果SQL> col username format a8;SQL> col sql_redo format a50 SQL> select username,s,timestamp,sql_redo from v$logmnr_contents where table_name='TEST2'; SQL> select username,s,timestamp,sql_redo from v$logmnr_contents where username='P_CHENMING'; --关闭MINERSQL> execute dbms_logmnrend_logmnr;--关闭辅助日志SQL> alter database drop supplemental log data;总结查看v$sqlarea只能查看粗略的历史,因为很多SQL是共享的。查看ASH也不全,因为这是采样数据,测试的时候基本没有把SQL查询出来。

查看V$SQLSTATS能看到所有执行过的sql,以及其执行统计,但是没有时序、没有用户信息。查看TRACE应该是最完整的,但需要在执行SQL前开启。

查看logminer不能查看select语句,而且默认的系统没有开启supplementing log,所以能查看的内容有限。或许还有审计的方法可用,我没测试。

每种方法都有各自的缺陷,看来很难有一种完备的查看SQL执行历史的方法。

四、如何查看PL/SQL执行的历史

除了PL/SQL的ctrl+e的查看方法外还有如下方法:方法一查询v$sql、v$sqltext、v$sqlarea、v$sqlstats视图select from v$sqlarea t where tPARSING_SCHEMA_NAME in ('schema') order by tLAST_ACTIVE_TIME desc;#对v$sqltext、v$sqlarea查看的是shared pool中的SQL,其时间索引是其解析历史,因为共享的问题这个查询可能并不能完整地反映出执行的历史。

#v$sqlstats反应的是实例启动起来的sql执行统计,sql语句本身比v$sqltext/area完整,因为后者有可能失效换出缓存。方法二联合v$active_session_history和v$sqlarea#v$active_session_history 这个表只是个取样数据,按秒进行,只有在那一秒采样点处于on cpu或非idle等待的session统计在内。

所以可能会不全,有些执行很短的SQL会忽略。这个视图无法还原完整的session历史。

#v$sqlarea中有执行过的SQL语句,但并无到session的关联信息,v$session中只关联了当前的sql,所以也不行。从v$sqlstat可以查看到数据库启动起来的所有SQL信息,但是没有时间顺序关系、没有执行用户信息,只有执行次数与资源统计。

从dba_hist_sqlstat可以看到AWR snapshot之间的SQL统计信息,与v$sqlstats比不受实例重启的影响,因为实例重启之后v$sqlstats中的信息就清除了。方法三:session traceSQL> execute dbms_sessionsession_trace_enable(true,true);PL/SQL procedure successfully pletedSQL> select count() from dba_hist_sqltext; COUNT()---------- 478SQL> select from V$sesstat where rownum=1; SID STATISTIC# VALUE---------- ---------- ---------- 134 0 1SQL> execute dbms_sessionsession_trace_disable;PL/SQL procedure successfully pleted$ cd $ORACLE_HOME/admin/test/udump$ ls -lrt$ tkprof test_ora_2195620trc reporttxt sys=no explain=no aggregate=yes$ more reporttxt --这个文件包括了启停trace之间所有SQL语句的执行信息,执行计划、统计方法四:logminer只包含DML与DDL语句,不能查询select语句。

另外需要开启supplemental logging,默认是没有开启的。conn / as sysdba--安装LOGMINERSQL> @$ORACLE_HOME/rdbms/admin/dbmslmdsql;SQL> @$ORACLE_HOME/rdbms/admin/dbmslmsql;SQL> @$ORACLE_HOME/rdbms/admin/dbmslmssql;SQL> @$ORACLE_HOME/rdbms/admin/prvtlmplb;--开启附加日志alter database add supplemental log data;--模拟DML *** 作conn p_chenming/。

SQL> select from test2;SQL> insert into test2 values(7,77);SQL> mit;conn / as sysdba--切归档SQL> alter system switch logfile;SQL> select name,dest_id,thread#,sequence# from v$archived_log; --最后一个即为新的归档--新建LOG MINERSQL> execute dbms_logmnradd_logfile(logfilename=>'/oracle/archive_10g/test/test_1_138_786808434arc',options=>dbms_logmnrnew); --开始minerSQL> execute dbms_logmnrstart_logmnr(options=>dbms_logmnrdict_from_online_catalog);--查看结果SQL> col username format a8;SQL> col sql_redo format a50 SQL> select username,s,timestamp,sql_redo from v$logmnr_contents where table_name='TEST2'; SQL> select username,s,timestamp,sql_redo from v$logmnr_contents where username='P_CHENMING'; --关闭MINERSQL> execute dbms_logmnrend_logmnr;--关闭辅助日志SQL> alter database drop supplemental log data;总结查看v$sqlarea只能查看粗略的历史,因为很多SQL是共享的。查看ASH也不全,因为这是采样数据,测试的时候基本没有把SQL查询出来。

查看V$SQLSTATS能看到所有执行过的sql,以及其执行统计,但是没有时序、没有用户信息。查看TRACE应该是最完整的,但需要在执行SQL前开启。

查看logminer不能查看select语句,而且默认的系统没有开启supplementing log,所以能查看的内容有限。或许还有审计的方法可用,我没测试。

每种方法都有各自的缺陷,看来很难有一种完备的查看SQL执行历史的方法。

五、如何查看oracle中存储过程执行的历史记录

select tsql_id,

tsql_text,

splan_hash_value,

soptimizer_cost,

sexecutions_total,

selapsed_time_total,

sdisk_reads_total,

sbuffer_gets_total

from DBA_HIST_SQLSTAT s, DBA_HIST_SQLTEXT t

where ssql_id=tsql_id

and tsql_text like'%存储过程名称%';

没有想到其他好办法,确实不太好查了,把存储过程当作SQL来查找吧。

六、oracle 中查询占用session最多的进程

故障发生时,尝试用下面的语句抓取数据库引起故障的点。

//在oracle中监控死锁//SELECT snusername, mSID, snSERIAL#, mTYPE, DECODE(mlmode, 0, 'None', 1, 'Null', 2, 'Row Share', 3, 'Row Excl', 4, 'Share', 5, 'S/Row Excl', 6, 'Exclusive', lmode, LTRIM(TO_CHAR(lmode, '990'))) lmode, DECODE(mrequest, 0, 'None', 1, 'Null', 2, 'Row Share', 3, 'Row Excl', 4, 'Share', 5, 'S/Row Excl', 6, 'Exclusive', request, LTRIM(TO_CHAR(mrequest, '990'))) request, mid1, mid2 FROM v$session sn, v$lock m WHERE (snSID = mSID AND mrequest != 0) --存在锁请求,即被阻塞 OR (snSID = mSID --不存在锁请求,但是锁定的对象被其他会话请求锁定 AND mrequest = 0 AND lmode != 4 AND (id1, id2) IN (SELECT sid1, sid2 FROM v$lock s WHERE request != 0 AND sid1 = mid1 AND sid2 = mid2)) ORDER BY id1, id2, mrequest; //定位引起oracle死锁的sql//select sql_text from v$sql where hash_value in (select sql_hash_value from v$session where sid in (select session_id from v$locked_object)) //下面的SQL查询可以用于确定锁住数据库对象的锁://select cowner, cobject_name, cobject_type, bsid, bserial#, bstatus, bosuser, bmachine from v$locked_object a , v$session b, dba_objects c where bsid = asession_id and aobject_id = cobject_id; //显示哪些会话被锁住/// showlocksql /COLUMN o_name format a10COLUMN lock_type format a20COLUMN object_name format a15SELECT RPAD (oracle_username, 10) o_name, session_id SID, DECODE (locked_mode, 0, 'None', 1, 'Null', 2, 'Row share', 3, 'Row Execlusive', 4, 'Share', 5, 'Share Row Exclusive', 6, 'Exclusive' ) lock_type, object_name, xidusn, xidslot, xidsqn FROM v$locked_object, all_objectsWHERE v$locked_objectobject_id = all_objectsobject_id;//显示所有的TM和TX锁/// showalllocksql /SELECT SID, TYPE, id1, id2, DECODE (lmode, 0, 'None', 1, 'Null', 2, 'Row share', 3, 'Row Exclusive', 4, 'Share', 5, 'Share Row Exclusive', 6, 'Exclusive' ) lock_type, request, ctime, BLOCK FROM v$lockWHERE TYPE IN ('TX', 'TM');// 在Oracle数据库中,可以通过kill session的方式来终止一个进程,其基本语法结构为: 被kill掉的session,状态会被标记为killed,Oracle会在该用户下一次touch时清除该进程我们发现当一个session被kill掉以后,该session的paddr被修改,如果有多个session被kill,那么多个session的paddr都被更改为相同的进程地址://alter system kill session 'sid,serial#' ; // 在oracle中kill掉的进程有时还需要等待pmon回滚数据库已经占有的资源有时候我们需要使用下面的脚本找出那些已经在oracle中kill掉的进程,在 *** 作系统中在kill一次//select paddr from v$process p where pid 1 minus select spaddr from v$session s;$ kill -9 &paddr。

1、首先,我们打开PLSQL工具连接到需要进行数据比对的ORACLE数据库。

2、登录成功后,点击工具(tool)选择匹配用户结构(compare user objects)我们先匹配数据表结构以防止匹配数据时造成数据无法修改的风险。

3、在d出的界面中选择我们需要匹配的数据表,点击目标会话(target session)输入需要匹配数据的对应数据库用户名密码,点击ok连接成功后单击匹配数据(compare)。

4、如果数据表结构有差异在d出的界面会显示数据库中表结构的差异,并形成相关的升级sql语句,数据表匹配只考虑源数据库中没有的表或列,查看sql语句是否为我们想要匹配的,如果是点击确认匹配,数据库表结构匹配完成。

5、登录成功后,点击工具(tool)选择匹配表数据(compare table data)。

6、如果是点击确认匹配,数据库表数据匹配完成。

��匠�焙蟛呕岜唤饪��茄�蓟嵩斐捎τ貌僮鞅蛔枞�?梢砸設ralce管理员权限用户登录Oracle数据,查询到被锁的对象,然后杀除指定的会话。用下面的语句查询被锁的对象,可以带上更多约束条件,如schemaname等更精确的匹配。

alter system kill session 'sid, serial#' 如上面查出来的一条记录的sid是53, serial#为663,就执行以下的语句alter system kill session '53,663' 如果要一次性杀死多个会话,一个一个填写sid和serial#十分的繁琐,应该在查询被锁对象的同时拼凑出多条的杀会话语句,以分号分隔,一起复制下来,然后就可以批量的执行了。 1SELECT'alter system kill session '''|| csid ||''||','|| cserial# ||''';',2 aobject_id, asession_id, bobject_name, c3 FROMv$locked_object a, dba_objects b, v$session c4 WHEREaobject_id = bobject_id5 ANDaSESSION_ID = csid(+)6 ANDschemaname ='Unmi'7 ORDERBYlogon_time

Oracle数据库无响应故障处理方式

Oracle数据库无响应故障,简单地讲就是数据库实例不能响应客户端发起的请求,客户端提交一个SQL后,就一直处于等待数据库实例返回结果的状态。更严重的现象是客户端根本不能连接到数据库,发起一个连接请求后,一直处于等待状态。Oracle数据库无响应故障怎么处理呢下面跟我一起来学习Oracle数据库无响应故障的处理方法吧!

无响应的故障现象一般有以下几种:

1Oracle的进程在等待某个资源或事件

这种现象一般可以从V$SESSION_WAT、V$LATCH、V$LATCHHOLDER等动态视图中检查进程正在等待的资源或事件,而被等待的资源或事件,一直都不能被获取,甚至是很长时间都不可获得。如果这个正在等待的进程持有了其他的资源,则会引起其他的进程等待,这样就很可能引起实例中大范围的会话发生等待。由于进程在等待资源或事件时,通常都处于SLEEP状态,消耗的CPU资源非常少(在等待latch时要稍微多消耗一些CPU资源),所以从OS来看,CPU的消耗并不高,甚至是非常低。

这种因为等待而引起的个别进程Hang,相对比较容易处理。

2 OracleProcess Spins

所谓Spin,就是指Oracle进程中的代码在执行某个过程时,陷入了循环。在V$SESSION视图中,往往可以看到Hang住的会话,一直处于“ACTIVE”状态。对于这样的会话,用“alter system kill session ‘sid,serial#’”命令也不能完全断开会话,会话只能被标记为“killed”,会话会继续消耗大量的CPU。进程Spins由于是在做循环,CPU的消耗非常大,从OS上明显可以看到这样的进程,通常会消耗整个CPU的资源。

而对于这样的Hang住的会话,处理起来相对比较复杂,并且为了从根本上解决问题,需要超过DBA日常维护所需要的技能。

从故障范围来看,无响应故障可以分为以下几种情况:

1 单个或部分会话(进程)Hang住

这种情况属于小范围的故障,业务影响相对较小,一般来说只会影响业务系统的个别模块。在一个多应用系统的数据库上面,如果Hang住的会话比较多,则影响的可能是其中的一个应用系统。这里有一个例外,如果Hang住的进程是系统后台进程,如pmon、smon等,则影响的范围就非常大了,最终甚至会影响整个数据库及所有应用系统。还有值得注意的是,即使是少部分会话Hang住,也要及时处理,否则极有可能会扩散到整个系统。

2 单个数据库实例Hang住

这种情况造成的影响非常大。在这个实例上的所有应用系统均受到严重影响,并且在找到根源并最终解决问题之前,数据库实例往往须要重启。

3 OPS或RAC中的多个实例或所有实例都Hang住

在这种情况下,即使是OPS或RAC,都已经没办法提供高可用特性了。使用这个数据库的所有应用系统将不能继续提供服务,这种情况往往须要重启。

无响应故障成因分析

Oracle数据库无响应,一般主要由以下几种原因引起:

1 数据库主机负载过高,严重超过主机承受能力

比如应用设计不当,数据库性能低下,活动会话数的大量增加,导致数据库主机的负载迅速增加,数据库不能正常 *** 作,并最终Hang住;主机物理内存严重不足,引起大量的换页,特别是在SGA中的内存被大量换出到虚拟内存时,数据库实例往往就会Hang住。

2 日常维护不当、不正确的 *** 作引起数据库Hang住

比如归档日志的存储空间满,导致数据库不能归档,引起数据库Hang住;在一个大并发的繁忙的系

统上,对DML *** 作比较多的大表进行move、增加外键约束等 *** 作也可能使系统在短时间内负载大幅升高,并引起数据库系统Hang住;不正确的资源计划(Resource Plan)配置,使进程得不到足够的CPU等。

3 Oracle数据库的Bug

几乎每个版本都存在着会导致数据库系统Hang住的Bug,这些Bug会在一些特定的条件下触发,特别是在RAC数据库中,引起数据库Hang住的Bug比较多。

4 其他方面的一些原因

比如在RAC数据库中,如果一个节点退出或加入到RAC的过程中,当进行Resource Reconfiguration时,会使系统冻结一段时间,也有可能使系统Hang住。

以上所描述的几种常见的会导致Oracle数据库实例Hang住的原因中,大部分的情况是可以避免的,只要维护得当,一般不会出现这种故障。对于Oracle数据库Bug所导致的数据库无响应故障,由于是在特定的情况下才会触发,所以如果能够尽量对数据库打上最新版本的补丁,并且熟悉当前版本中会导致系统Hang住的Bug以及触发条件,就能够最大限度地避免这种故障的发生,提高系统的可用性。

那么,在数据库Hang住的情况下,如何去分析并发现导致问题的根源一方面,由于系统Hang住会导致业务系统不可用,为了能够尽快地恢复业务,须快速地判断问题所在,然后Kill掉引起故障的会话和进程,或者数据库实例不得不重启以迅速恢复业务;但另一方面,如果只是重启数据库或Kill会话和进程来解决问题,在很多情况下是治标不治本的办法,在以后故障随时可能会出现。如何在二者之间进行抉择呢对于数据库Hang故障的处理,首先是尽可能地收集到系统Hang住时的状态数据,然后尽快地恢复业务,恢复业务后分析收集到的数据,找到数据库系统Hang住的真正原因,然后再进行相应的处理。下一节将详细描述数据库系统Hang住后的处理流程。

无响应故障处理流程

对于Oracle无响应故障的处理,我们可以按下图所示的流程进行。

值得注意的是,上图并不是一个完整的Oracle数据库故障处理流程图,只是处理Oralce数据库无响应这一类特定的故障的流程,只列出了针对这一特定类型故障处理时的关键处理点。不过既然是故障,所以这类故障的处理流程与其他故障的处理流程,有着非常相似的地方。

下面是整个流程的详细说明:

1 在出现数据库无响应故障后,首先确认系统的影响范围,如上节所描述的',是部分业务系统或模块还是所有的业务系统都受影响,是不是整个实例或多个实例都无响应。同时应询问系统维护和开发人员,受影响的系统在出现故障前是否有过变动,包括主机硬件、 *** 作系统、网络、数据库以及应用等。有时一个细小的变动就可能导致出现数据库Hang住这样严重的故障。曾经遇到一个库,应用只是修改了一个SELECT语句就导致了数据库Hang住。

2 为了避免由于网络、数据库监听或客户端因素影响分析,建议都登录到主机上进行 *** 作。

3 如果主机不能登录(为了避免干扰流程主线,这里不讨论如网络问题这样也会导致不能连接的故障),尝试关闭出现问题的业务系统,甚至是所有的业务系统。如果关闭了所有的业务系统之后,仍然不能连接,则只有考虑重新启动数据库主机。在数据库主机重新启动后,使用 *** 作系统工具或OSW等长期监控 *** 作系统的资源使用,同时监控Oracle数据库的性能和等待等。

4 登录上主机后,先用top、topas等命令简单观察一下系统。看看系统的CPU使用、物理内存和虚拟内存的使用、IO使用等情况。

5 使用SQLPLUS连接数据库,如果不能连接,则只能从 *** 作系统上观察系统中是否有异常的现象,比如占用CPU过高的进程。使用gdb、dbx等debugger工具对数据库进行system state dump;使用strace、truss等工具检查异常进程的系统调用;使用pstack、procstack等工具察看异常进程的call stack等。

6 使用SQLPLUS连接上数据库后,进行hanganalyze、system state dump等 *** 作;或检查等待事件、异常会话等正在执行的SQL等待。

7 找到故障产生的原因,如果暂时找不到原因,尽量收集数据。

8确良如果应用急须恢复,可通过Kill会话、重启数据库实例等方式,先恢复应用。

9 根据最终诊断结果,对数据库升级打补丁,或者修改应用等方式从根本上解决问题。

怎样避免数据库出现无响应故障

作为Oracle数据库DBA,除了处理故障之外,更重要的是如何预防故障的发生。根据前面对数据库无响应故障的成因分析,在日常的维护工作中,须做到以下几点:

1 进行正确的维护 *** 作

很多的数据库无响应故障都是由于不正确的维护 *** 作引起的。应避免在业务高峰期做大的维护 *** 作,比如像move、加主外键约束等会长时间锁表的 *** 作。如果的确需要,尽量使用正确的 *** 作方法。比如用ONLINE方式重建索引;建主键、唯一键约束时先建索引,然后在建约束时指定新建的索引,等等。也就是保证系统的并发性、可伸缩性,避免系统串行 *** 作的出现。

2 优化应用设计,优化数据库性能

为避免性能问题导致在业务高峰期数据库不能及时有效处理来自业务的请求,甚至于完全Hang住。对于数据库中存在串行访问的部分进行优化,比如latch、enqueue,还包括不合理的sequence设计等。特别是在RAC数据库中,严重串行访问等待往往更容易引起严重的性能问题。优化应用设计,使数据库具有更好的可伸缩性和并行处理能力,能够有效地避免性能问题引起的数据库Hang住。

3 利用监控系统随时监控系统负载

遇到系统负载过高,内存不足,OS中虚拟内存换页很频繁等情况时,及时采取措施;监控Oracle数据库的核心进程,如pmon、smon等,看是否有异常,如过高的CPU消耗。出现异常应立即处理;监控归档空间和日志切换;监控数据库中的等待事件,比如是否有大量的enqueue、log file switch (archiving needed)、resmgr:become active等待事件等。

4 为数据库打上补丁

很多的无响应故障是由于Oracle的Bug引起的,数据库DBA应关注当前版本中有哪些Bug会导致数据库Hang住,尽量为数据库打上解决这些Bug的补丁。

;

select

status

from

v$instance;

如果报错不能执行(用dba用户,或者有查看$视图权限的用户),那么就是没启动。

如果结果为nomount,那么就是仅仅搭载了初始文件,分配了内存,但是还没有加载控制文件。

mount就是加载了控制文件。

open就是完全启动了。

除了open意外,其他状态都不算完全启动数据库。

以上就是关于oracle查看历史session全部的内容,包括:oracle查看历史session、oracle 查看表结构,表里的数据、如何杀掉(kill)Oracle中的会话(Session)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9497535.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存