oracle系统视图

本文深入探讨Oracle数据库性能监控的重要视图,如V$SESSION_WAIT、V$SESSION_EVENT等,解析如何通过这些视图理解session活动、等待事件及SQL执行情况。同时,介绍了spool命令的高级用法,用于生成干净的输出文件,以及如何利用dbms_scheduler调用shell脚本执行任务。
摘要由CSDN通过智能技术生成

1.V$SESSION_WAIT 
session在数据库中当前正在等待什么,每一个连接到实例的session都对应一条记录。

(2)-V$SESSION_EVENT
记录了session自启动起所有的事件。

通过ADDRESS和HASH_VALUE可以为一判定一个SQL

v$sqltext存储的是完整的SQL,SQL被分割
v$sqlarea存储的SQL 和一些相关的信息,比如累计的执行次数,逻辑读,物理读等统计信息
v$sql存储的是具体的SQL 和执行计划相关信息,实际上,v$sqlarea 可以看做 v$sql 根据 sqltext 等 做了 group by 之后的信息


即使是相同的数据库用户,若 session 的优化模式、session 级的参数 等不一样,执行计划也能不同。
所以即使相同的sql,也可能具有不同的执行计划!  
  v$sql join to v$sql_plan 就代表了具体的sql的执行计划,通过下面3个字段做连接  
  ADDRESS RAW(4)
  HASH_VALUE NUMBER
  CHILD_NUMBER NUMBER
而v$SQLAREA 忽略了 执行计划 等差异,只是在形式上sql文本看起来一样!相当于做了个聚合,是多个不同执行计划的sql的聚合和累计信息


v$session_longops:
当事务回滚时,事件被记录在视图 V$SESSION_LONGOPS 中,该视图显示长期运行的事务。如果进程耗时超过六秒,则记录出现在该视图中。
可以通过如下语句查看回滚需要的时间:
select time_remaining from v$session_longops where sid = ;

V$FAST_START_TRANSACTIONS:
在大型的更新期间,实例异常关闭,或spid异常中断,发生故障的事务被回滚。如果启用了用于并行恢复的初始化参数值,则回滚是并行地而不是串行地发生。
视图 V$FAST_START_TRANSACTIONS 显示为回滚故障事务所产生的事务。类似的视图 V$FAST_START_SERVERS 显示对回滚进行处理的并行查询服务器的数量。
select * from v$fast_start_transactions;
可通过UNDOBLOCKSDONE、UNDOBLOCKSTOTAL估算回滚时间。


当我们想查看当前session的sid时经常会用到这两个function,此外也可通过这两个function查询当前session的更多信息。
such as:
select userenv('sid') from dual;
select sys_context('userenv', 'sid') from dual;
select sys_context('userenv', 'session_user') from dual;
select sys_context('userenv', 'ip_address') from dual;
sys_context包含了userenv的所有功能,详细参数参看:
userenv:http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/functions208.htm#SQLRF06157
sys_context:http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/functions165.htm#SQLRF06117


spool 生成纯净文件
1.创建sql文件,该文件包含格式相关的参数设置和脚本生成语句
例:
[oracle@db 20090709]$ more exp.sql
set trimspool on --去除重定向(spool)输出每行的拖尾空格,缺省为off
set term off   --关闭显示脚本中的命令的执行结果,防止滚屏影响操作,当数据量大时非常有用,缺省为on
set feedback off --关闭回显本次sql命令处理的记录条数,如:** rows selected,缺省为on
set pagesize 0  --设置输出每页行数,缺省为24,为了避免分页,设定为0,使用set head off去除列名时会造成空行
set line 1200   --设置输出每行的字符数,可根据实际情况设置,防止换行
spool userSecurity.sql
@exp_data1.sql
spool off
spool pay.sql
@exp_data2.sql
spool off

@exp_data1.sql、@exp_data2.sql中是select语句
如果不创建该sql脚本,则生成的文件中文件头尾分别为:
SQL> ....sql语句或@文件
SQL>spool off
补充:当不采用上述方式时,sqlplus -s / as sysdba也可达到效果

2.通过shell或直接sqlplus调用该脚本
例1:
sqlplus / as sysdba
SQL> @exp.sh
例2:
[oracle@db 20090709]$ more exp.sh
#!/bin/sh
sqlplus / as sysdba <<EOF
@exp.sql
EOF

[oracle@db 20090709]$ sh exp.sh


dbms_scheduler调用shell脚本
1.使用sys用户创建EXECUTABLE类型scheduler。
2.指定shell类型,如:#!/bin/sh
3.shell脚本内设置环境变量
[oracle@dbathree qxy]$ more check_env.sh
#!/bin/sh
env | sort | tee >> /orahome/qxy/env.out
执行后可以看到:
[oracle@dbathree qxy]$ more env.out
PWD=/
SHLVL=1
_=/bin/env

4.脚本中使用全路径

如果想使用其它用户可以通过grant create external job to user_name实现,但好像10g有bug,没调试成功。

创建语句:
begin
dbms_scheduler.create_job(job_name        => 'sys.test_schem',
                            job_type        => 'EXECUTABLE',
                            job_action      => '/orahome/qxy/test_schem.sh',
                            start_date      => trunc(sysdate) + 16 / 24 +
                                               44 / 60 / 24,
                            enabled         => true,
                            comments        => 'expdp busi02!');
end;

执行脚本:
[oracle@dbathree qxy]$ more test_schem.sh
#!/bin/bash
export ORACLE_SID=busi
export ORACLE_BASE=/orahome/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
export PATH=$ORACLE_HOME/bin:$PATH
expdp system/oracle dumpfile=busi020616.dmp directory=DUMP_FILE schemas=busi02

转载于:https://www.cnblogs.com/BradMiller/archive/2011/01/26/1945721.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值