`
lianhuxu
  • 浏览: 861 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

逻辑备库RESTART_DELAY研究

阅读更多
逻辑备库中经常会出现由于主库未提交的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
0
0
分享到:
评论

相关推荐

    基于Linux 定时器的封装

    本资源对linux常用的定时器进行了一定的封装并命名为rapaidx项目,包括rapaidx_timer_create(定时器生成)、rapaidx_timer_start(启动定时器)、rapaidx_timer_stop(停止定时器)、rapaidx_timer_restart(重启...

    DC逻辑综合使用流程说明

    Target_library是逻辑综合的目标库,由代工厂提供的*.db文件,用相似的方法添加所需库文件。Link_library是一般和目标库相同的链接库。 设计读入 在设计读入步骤中,用户可以通过“File &gt; Read”读入设计文件。在...

    电熨斗控制程序的代码

    - **延时控制** (DELAY1, DELAY2, DELAYCK1S):用于实现精确的延时功能。 - **工作模式选择** (RUN_MODE, RUN_MODE1):分别表示当前的工作模式以及具体的模式编码。 - **程序流程**: - **初始化阶段** (START)...

    synopsys dc中文教程(比较详细)

    设计师通过Synopsys Design Compiler进行综合,该过程包括分析HDL代码,生成与技术库无关的中间模型,然后进行逻辑优化,最后将优化后的逻辑映射到特定的目标单元库中,形成综合后的网表。这一过程不仅考虑了时序和...

    Windows服务自动重启Java服务

    在JSW的配置文件(如wrapper.conf)中,我们可以设置`wrapper.service.restart.delay`和`wrapper.service.restart.interval`属性来控制服务失败后的重启策略。 对于不使用JSW的情况,我们可以通过编写`bat脚本`来...

    Oracle 10g 在HP-UX下的按照文档

    创建一个大小为 20GB 的逻辑卷(LV)作为 Oracle 的安装目录。执行如下命令: ```bash lvcreate -L 20480 -n oraclesid /dev/vg00 newfs -F vxfs /dev/vg00/oraclesid mount /dev/vg00/oraclesid /oraclesid `...

    Oracle RAC安装详细教程

    /etc/init.d/network restart ``` #### 配置yum仓库 - **挂载光盘**: ```bash mkdir /mnt/{cdrom,ks} -p mount /dev/sr0 /mnt/cdrom ``` - **配置yum仓库**: ```bash cat &gt; /etc/yum.repos.d/rhel-...

    插件版本及名称:rabbitmq-delayed-message-exchange-3.9.0.ez

    在实际应用中,结合RabbitMQ的其他特性,如死信队列、优先级队列和持久化,延迟消息交换插件可以构建出更复杂和健壮的消息处理逻辑。这使得RabbitMQ不仅是一个简单的消息中间件,还能成为企业级系统中不可或缺的组件...

    Windows使用bat批处理实现守护进程脚本分享

    2. **主逻辑循环**:脚本的核心是一个无限循环,不断检查目标进程是否正在运行。这里使用`qprocess.exe | find`命令来查询目标进程是否存在。 3. **启动新进程**:当检测到目标进程不存在时,脚本会创建一个新的...

    C语言模拟打砖块程序

    该程序基于Turbo C环境开发,利用了`graphics.h`库来进行图形界面操作。通过分析程序结构与逻辑,帮助读者理解其工作原理。 #### 二、关键数据结构与函数 程序中定义了一些关键的数据结构和自定义函数,这些构成了...

    实现动态球的功能(Java)

    本程序展示了如何使用 Java 的 AWT 和 Swing 库来创建简单的图形用户界面和动画效果。通过组合 `Canvas`、`JFrame` 等组件,并利用 `Timer` 控件实现动画效果,我们构建了一个动态展示彩色小球移动的应用。此外,还...

    夏宇闻老师的讲稿

    Verilog语言的主要特点包括:支持多种抽象级别、具备丰富的库支持、易于学习并且具有良好的可读性和可移植性。 ### 语法总结 #### Always声明语句 `always` 块用来定义一个在某些信号变化时会被触发的过程语句。它...

    percona toolkit 2.2

    8. **pt-find**:搜索特定模式下的所有文件,支持复杂的查找逻辑。 9. **pt-fingerprint**:收集 SQL 查询的指纹,以便于进行性能分析。 10. **pt-fk-error-logger**:记录外键错误日志,帮助定位和解决外键约束相关...

    Percona-Toolkit-3.0.3

    此外,它们还具备高度的自包含性,使得安装过程既快速又简单,并且无需额外安装库。 ### 历史背景 Percona Toolkit 的前身是 Maatkit 和 Aspersa,这两个工具集在 MySQL 服务器管理领域享有盛誉。Percona Toolkit ...

    计算机应用技术(实用手册)

    Delay Prior to Thermal(激活延时设置): 此项目可用来选在择温探(Thermal)装置动作之前的延迟时间。 AGP Aperture Size(AGP卡槽内存分配设置): 这个项目可指定让AGP装置来使用的系统内存大小,这取用大小...

Global site tag (gtag.js) - Google Analytics