逻辑备库中经常会出现由于主库未提交的inactive事务而导致逻辑备库restart delay,而处理方法就是kill掉对应的session,这种情况出现的原因在于我们在主库上面执行一条事务但并未提交,因为开会或各种打断后由于网络或者各种异常导致该会话处于inactive状态,这个时候逻辑备库的restart_delay时间就会停留在事务开始时间,而一种可以重现的方法就是在测试库中未提交事务之前拔掉网线,测试如下:
执行事务
SQL> insert into test select * from user_tables where rownum<=2;
2 rows created.
查看事务状态
SQL> select addr,status,start_time from v$transaction;
ADDR STATUS START_TIME
---------------- ---------------- --------------------
000000009D0CD010 ACTIVE 05/23/11 15:12:41
查看对应会话信息
SQL> select sid,taddr,status,logon_time from v$session where taddr='000000009D0CD010';
SID TADDR STATUS LOGON_TIME
---------- ---------------- -------- -------------------
313 000000009D0CD010 ACTIVE 2011-05-23 15:12:14
这个时候拔掉网线,
查看事务状态
ADDR STATUS START_TIME
---------------- ---------------- --------------------
000000009D0CD010 ACTIVE 05/23/11 15:12:41
查看会话状态
SID TADDR STATUS LOGON_TIME
---------- ---------------- -------- -------------------
313 000000009D0CD010 INACTIVE 2011-05-23 15:12:14
接下来说明一下会话的状态 ,下面是metalink对于inactive session的定义,
- A user starts a program/session, then leaves it running and idle
for an extended period of time.
To automate cleanup of INACTIVE sessions you can create a profile with an appropriate IDLE_TIME setting and assign that profile to the users.
Note:159978.1: How To Automate Disconnection of Idle Sessions,outlines the steps to setup IDLE_TIME for this.
对于session的状态有以下几种
1.active 处于此状态的会话,表示正在执行,处于活动状态。
2.killed 处于此状态的会话,表示出现了错误,正在回滚,当然,也是占用系统资源的,被kill掉的session,状态会被标记为killed,Oracle会在该用户下一次touch时清除该进程。
alter system kill session 'SID,SERIAL#' ;
当在Oracle中kill session以后, Oracle只是简单的把相关session的paddr 指向同一个虚拟地址.此时v$process和v$session失去关联,进程就此中断,然后Oracle就等待PMON去清除这些Session.所以通常等待一个被标记为Killed的Session退出需要花费很长的时间,如果此时被Kill的process,重新尝试执行任务,那么马上会收到进程中断的提示,process退出,此时Oracle会立即启动PMON来清除该session.这被作为一次异常中断处理.
3.inactive 处于此状态的会话表示不是正在执行的,虽然oracle本身会去清除这些进程,但是目前还没有找到文档详细解释oracle清除这些inactive session的文档,但是从相关资料看出这个周期为4-5个小时,这个时间段不足以满足restart本身的时间特性,所以需要寻求方法手动触发这些清除过程,从metalink的文档中提出了两种方法:
1. 修改sqlnet.ora文件,新增expire_time=x(单位是分钟)
但是通过测试此种方法并不能触发oracle清除异常的事务
2. 通过PROFILE的IDLE TIME来清除这些异常事务
ALTER PROFILE DEFAULT LIMIT IDLE_TIME 10;
设置PROFILE策略必须保证resource_limit为true
15:40:27 SYS@ test>show parameter resource_limit;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
resource_limit boolean TRUE
该参数可以动态修改:
SQL> alter system set resource_limit=true;
System altered.
执行事务
SQL> insert into test select * from user_tables where rownum<=2;
查看事务状态
SQL> select addr,status,start_time from v$transaction;
ADDR STATUS START_TIME
---------------- ---------------- --------------------
000000009D126130 ACTIVE 05/23/11 15:47:21
查看会话状态
SID TADDR STATUS LOGON_TIME
---------- ---------------- -------- -------------------
299 000000009D126130 ACTIVE 2011-05-23 15:47:06
超过IDLE TIME后查看状态
SQL> select addr,status,start_time from v$transaction;
select addr,status,start_time from v$transaction
*
ERROR at line 1:
此外通过定时脚本检测删除异常的session也是一种可行的方法,
select '------------------------------'||to_char(sysdate,'mm-dd-yyyy hh24:mi:ss')||'-------------------------------------' Time from dual;
select 'Following user forms session, inactive for more than 60 min, are killed' from dual;
set head on
set pagesize 1000
SELECT
p.spid,
s.process,
s.status,
s.machine,
to_char(s.logon_time,'mm-dd-yy hh24:mi:ss') Logon_Time,
s.last_call_et/3600 Last_Call_ET,
s.action,
s.module,
s.sid,
s.serial#
FROM
V\$SESSION s
, V\$PROCESS p
WHERE
s.paddr = p.addr
AND
s.username IS NOT NULL
AND
s.last_call_et/3600 > 1
and
s.status='INACTIVE' order by logon_time;
spool off
分享到:
相关推荐
本资源对linux常用的定时器进行了一定的封装并命名为rapaidx项目,包括rapaidx_timer_create(定时器生成)、rapaidx_timer_start(启动定时器)、rapaidx_timer_stop(停止定时器)、rapaidx_timer_restart(重启...
Target_library是逻辑综合的目标库,由代工厂提供的*.db文件,用相似的方法添加所需库文件。Link_library是一般和目标库相同的链接库。 设计读入 在设计读入步骤中,用户可以通过“File > Read”读入设计文件。在...
- **延时控制** (DELAY1, DELAY2, DELAYCK1S):用于实现精确的延时功能。 - **工作模式选择** (RUN_MODE, RUN_MODE1):分别表示当前的工作模式以及具体的模式编码。 - **程序流程**: - **初始化阶段** (START)...
设计师通过Synopsys Design Compiler进行综合,该过程包括分析HDL代码,生成与技术库无关的中间模型,然后进行逻辑优化,最后将优化后的逻辑映射到特定的目标单元库中,形成综合后的网表。这一过程不仅考虑了时序和...
在JSW的配置文件(如wrapper.conf)中,我们可以设置`wrapper.service.restart.delay`和`wrapper.service.restart.interval`属性来控制服务失败后的重启策略。 对于不使用JSW的情况,我们可以通过编写`bat脚本`来...
创建一个大小为 20GB 的逻辑卷(LV)作为 Oracle 的安装目录。执行如下命令: ```bash lvcreate -L 20480 -n oraclesid /dev/vg00 newfs -F vxfs /dev/vg00/oraclesid mount /dev/vg00/oraclesid /oraclesid `...
/etc/init.d/network restart ``` #### 配置yum仓库 - **挂载光盘**: ```bash mkdir /mnt/{cdrom,ks} -p mount /dev/sr0 /mnt/cdrom ``` - **配置yum仓库**: ```bash cat > /etc/yum.repos.d/rhel-...
在实际应用中,结合RabbitMQ的其他特性,如死信队列、优先级队列和持久化,延迟消息交换插件可以构建出更复杂和健壮的消息处理逻辑。这使得RabbitMQ不仅是一个简单的消息中间件,还能成为企业级系统中不可或缺的组件...
2. **主逻辑循环**:脚本的核心是一个无限循环,不断检查目标进程是否正在运行。这里使用`qprocess.exe | find`命令来查询目标进程是否存在。 3. **启动新进程**:当检测到目标进程不存在时,脚本会创建一个新的...
该程序基于Turbo C环境开发,利用了`graphics.h`库来进行图形界面操作。通过分析程序结构与逻辑,帮助读者理解其工作原理。 #### 二、关键数据结构与函数 程序中定义了一些关键的数据结构和自定义函数,这些构成了...
本程序展示了如何使用 Java 的 AWT 和 Swing 库来创建简单的图形用户界面和动画效果。通过组合 `Canvas`、`JFrame` 等组件,并利用 `Timer` 控件实现动画效果,我们构建了一个动态展示彩色小球移动的应用。此外,还...
Verilog语言的主要特点包括:支持多种抽象级别、具备丰富的库支持、易于学习并且具有良好的可读性和可移植性。 ### 语法总结 #### Always声明语句 `always` 块用来定义一个在某些信号变化时会被触发的过程语句。它...
8. **pt-find**:搜索特定模式下的所有文件,支持复杂的查找逻辑。 9. **pt-fingerprint**:收集 SQL 查询的指纹,以便于进行性能分析。 10. **pt-fk-error-logger**:记录外键错误日志,帮助定位和解决外键约束相关...
此外,它们还具备高度的自包含性,使得安装过程既快速又简单,并且无需额外安装库。 ### 历史背景 Percona Toolkit 的前身是 Maatkit 和 Aspersa,这两个工具集在 MySQL 服务器管理领域享有盛誉。Percona Toolkit ...
Delay Prior to Thermal(激活延时设置): 此项目可用来选在择温探(Thermal)装置动作之前的延迟时间。 AGP Aperture Size(AGP卡槽内存分配设置): 这个项目可指定让AGP装置来使用的系统内存大小,这取用大小...