PLSQL_长脚本如何判断需耗时多久v.sql / v.sqltext / v.sqlarea / v.sql_plan及nohup(案例)

简介: 2014-08-27 Created By BaoXinjian 一、摘要 当执行耗时时间较长的PLSQL时,有时需要查看程式运行的进度,目前已经处理了多少资料,还需处理多上资料 如果程式中专门的Log Module管控这一块,问题就不太大 如果没有这个这块的管控,可能就需要通过跟踪ses...

2014-08-27 Created By BaoXinjian

一、摘要


当执行耗时时间较长的PLSQL时,有时需要查看程式运行的进度,目前已经处理了多少资料,还需处理多上资料

如果程式中专门的Log Module管控这一块,问题就不太大

如果没有这个这块的管控,可能就需要通过跟踪session,并查询动态性能视图,大概猜测出系统的运行情况,特别是undo表空间的变化

 

二、案例


案例:

Step1. 创建测试表bxj_test

create table bxj_test 
(
    invoice_id number,
    invoice_num varchar2(100),
    total number,
    company varchar2(100),
    description varchar2(500),
    creation_date date
)

 

Step2. 创建测试程式,杀入1以一条

declare
  i integer;
begin
  for i in 1 .. 100000000 loop
    insert into apps.bxj_test
    values
      (i,
       'INVOICENUM_' || lpad(to_char(i), 10, '0'),
       dbms_random.value(1, 100000000),
       'Gavin Corporation',
       'Invoice Description' || to_char(sysdate, 'YYYYMMDD HH24:MI:SS'),
       sysdate);
  end loop;
  commit;
end;

 

 

Step3. 动态性能视图1  -> v$session

SELECT   sid,
         --serial#,
         --username,
         --command,
         --status,
         --osuser,
         --sql_address,
         --sql_hash_value,
         sql_id,
         sql_exec_start,
         prev_sql_id,
         prev_exec_start,
         event,
         wait_class,
         state,
         sql_trace,
         program
  FROM   v$session
 WHERE   terminal = 'GAVIN-PC' 
 AND sid = 373
 AND status = 'ACTIVE'
 AND program like 'plsqldev.exe'

 

Step4. 动态性能视图2 - v$sql

select sql_id, sql_text, executions, cpu_time, elapsed_time from v$sql
where sql_id = '3rf19a6yjvz18' 

 

Step5. 动态性能视图3 - v$sqltext

select * from v$sqltext
where sql_id = '3rf19a6yjvz18'
order by piece

 

Step6. 动态性能视图4 - v$sql_plan

select sql_id, operation, optimizer, id, parent_id, depth, position, search_columns, cost from v$sql_plan
where sql_id = '3rf19a6yjvz18'

 

Step7. 其他动态性能视图

select * from V$SESSION_LONGOPS
where 1=1
and target = 'APPS.BXJ_TEST_INVOICE'
and sid = 38

select * from V$SESSION_WAIT
where sid = 24

select * from V$SESSION_WAIT_CLASS

select * from V$SESS_IO
where sid = 24

select * from V$SESSION_EVENT
where sid = 24

 

 

 

 

 

Step6. 通过确认undo空间的大小变化,确定已操作记录条数

 

 

三、案例 - nohup转入后台运行脚本


nohup 命令运行由 Command参数和任何相关的 Arg参数指定的命令,忽略所有挂断(SIGHUP)信号。

在注销后使用 nohup 命令运行后台中的程序。

要运行后台中的 nohup 命令,添加 & ( 表示“and”的符号)到命令的尾部。

 

1. 重定向日志文件

如 果不将 nohup 命令的输出重定向,输出将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。

 

2. 主要概念

(1). 功能:使进程在退出登录后仍旧继续执行。

(2). 格式:$ nohup <程序名>  &

(3). 结果:如果程序program有结果输出,输出结果将会被保存到当前目录下的一个文件名为 nohup.out的文件中,如果用户在当前目录没有写的权限, 则结果将会被保存到用户主目录下的nohup.out文件中。

(4). 查看:jobs

 

3. 例子

[gavinprod]> cat create_temp_table.sql
  create table bxj_test_no as
  select * from mtl_material_transactions;
[gavinprod]> nohup sqlplus / @/home/oracle/gavin/create_temp_table.sql > /home/oracle/gavin/create_temp_table.log 2>&1 & [gavinprod]> ps -ef | grep sql oracle 18777 17579 0 01:33:18 pts/3 0:00 sqlplus / @/home/oracle/gavin/create_temp_table.sql oracle 18880 17579 0 01:33:34 pts/3 0:00 grep sql

 

Thanks and Regards

参考:http://cc59.itpub.net/post/1845/286133

ERP技术讨论群: 288307890
技术交流,技术讨论,欢迎加入
Technology Blog Created By Oracle ERP - 鲍新建
相关文章
拿php写个原生增删改查案例出来(提供全部代码+sql)
拿php写个原生增删改查案例出来(提供全部代码+sql)
拿php写个原生增删改查案例出来(提供全部代码+sql)
|
5天前
|
SQL 存储 小程序
数据库数据恢复—Sql Server数据库文件丢失的数据恢复案例
数据库数据恢复环境: 5块硬盘组建一组RAID5阵列,划分LUN供windows系统服务器使用。windows系统服务器内运行了Sql Server数据库,存储空间在操作系统层面划分了三个逻辑分区。 数据库故障: 数据库文件丢失,主要涉及3个数据库,数千张表。数据库文件丢失原因未知,不能确定丢失的数据库文件的存放位置。数据库文件丢失后,服务器仍处于开机状态,所幸未写入大量数据。
数据库数据恢复—Sql Server数据库文件丢失的数据恢复案例
|
5月前
|
SQL 分布式计算 数据挖掘
Spark_Day07:Spark SQL(DataFrame是什么和数据分析(案例讲解))
Spark_Day07:Spark SQL(DataFrame是什么和数据分析(案例讲解))
82 0
|
24天前
|
SQL 自然语言处理 数据库
NL2SQL实践系列(2):2024最新模型实战效果(Chat2DB-GLM、书生·浦语2、InternLM2-SQL等)以及工业级案例教学
NL2SQL实践系列(2):2024最新模型实战效果(Chat2DB-GLM、书生·浦语2、InternLM2-SQL等)以及工业级案例教学
NL2SQL实践系列(2):2024最新模型实战效果(Chat2DB-GLM、书生·浦语2、InternLM2-SQL等)以及工业级案例教学
|
1月前
|
SQL 存储 数据挖掘
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
服务器数据恢复环境: 一台安装windows server操作系统的服务器。一组由8块硬盘组建的RAID5,划分LUN供这台服务器使用。 在windows服务器内装有SqlServer数据库。存储空间LUN划分了两个逻辑分区。 服务器故障&初检: 由于未知原因,Sql Server数据库文件丢失,丢失数据涉及到3个库,表的数量有3000左右。数据库文件丢失原因还没有查清楚,也不能确定数据存储位置。 数据库文件丢失后服务器仍处于开机状态,所幸没有大量数据写入。 将raid5中所有磁盘编号后取出,经过硬件工程师检测,没有发现明显的硬件故障。以只读方式将所有磁盘进行扇区级的全盘镜像,镜像完成后将所
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
|
2月前
|
SQL 存储 关系型数据库
场景+案例分析,SQL优化
场景+案例分析,SQL优化
41 3
|
2月前
|
SQL
sql server案例总结
sql server案例总结
12 0
原生php实现大案例(特色:不登录不能使用功能 注册 登录 文件上传 发帖 列表页 详情页 )提供sql
原生php实现大案例(特色:不登录不能使用功能 注册 登录 文件上传 发帖 列表页 详情页 )提供sql
|
4月前
|
SQL Oracle 关系型数据库
Oracle PL/SQL基础知识及应用案例
Oracle PL/SQL基础知识及应用案例
35 0