oracle系统视图
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