Chinaunix首页 | 论坛 | 博客
  • 博客访问: 841024
  • 博文数量: 150
  • 博客积分: 5123
  • 博客等级: 大校
  • 技术积分: 1478
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-06 10:03
文章分类

全部博文(150)

文章存档

2011年(2)

2010年(139)

2009年(9)

分类: Oracle

2010-11-26 09:56:02

后台执行sql的技巧:
    DBA做维护工作时,一般是通过ssh或telnet到数据库主机上执行SQL,如果执行一个长时间的SQL,DBA的笔记本电脑与数据库主机如果发生网络中断,就会让执行了一半的SQL中断,为了避免这种情况,可以使用nohup让这个SQL后台执行,如下所示:
nohup sqlplus /nolog @my.sql  > my.log & 
然后另开一个会话,查看执行的进展情况:
tail -f my.log
    当时如果数据库主机是Linux的话,一般Linux下都会有一个工具screen,如果有screen就不需要使用nohup后台执行了,在screen中运行sqlplus:
    screen -S osdba
  基中-S osdba是为screen的session起一个名字
    然后现在这时的终端命令就是在screen环境中,然后运行sqlplus,如果这时ssh断了,下次再ssh到数据库主机中可以运行screen -x osdba来进行到先前的screen的session中。
    而当我们执行一个长时间的SQL,有可能会出现表空间不足导致这个SQL执行出错,这时可以在SQL中设置:
    alter session enable resumable; 
    alter session set resumable_timeout=72000;
    这样设置后,如果出现表空间不足导致这个SQL无法执行下去时,这个SQL会挂住,加完空间后这个操作会继续,这样可以防止SQL运行了一半而失败。
    同时可以在dba_resumable视图中查看该会话的状态:
select user_id,session_id, status, start_time, suspend_time,sql_text, error_number, error_msg from dba_resumable;

dbms_resumable.set_session_timeout(49,1800);
select dbms_resumable.get_session_timeout(49) from dual;
dbms_resumable.abort(49);
在10g中,我们也可以通过DBA_OUTSTANDING_ALERTS 来监控resumable session
select object_name,object_type,reason,message_type,message_level
from dba_outstanding_alerts
where message_group='Space';


阅读(2504) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~