DBA日常维护中执行SQL的一些小技巧

来源:互联网 发布:java获取股票历史数据 编辑:程序博客网 时间:2024/05/02 11:45
后台执行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 sessionselect object_name,object_type,reason,message_type,message_levelfrom dba_outstanding_alertswhere message_group='Space';