后台执行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';
阅读(2555) | 评论(0) | 转发(0) |