查看SQL执行总进度

  1. /*
  2. OPNAME:指长时间执行的操作名.如:Table Scan
  3. TARGET:被操作的object_name. 如:tableA
  4. TARGET_DESC:描述target的内容
  5. SOFAR:这个是需要着重去关注的,表示已要完成的工作数,如扫描了多少个块。
  6. TOTALWORK:指目标对象一共有多少数量(预计)。如块的数量。
  7. UNITS:
  8. START_TIME:进程的开始时间
  9. LAST_UPDATE_TIM:最后一次调用set_session_longops的时间
  10. TIME_REMAINING: 估计还需要多少时间完成,单位为秒
  11. ELAPSED_SECONDS:指从开始操作时间到最后更新时间
  12. CONTEXT:
  13. MESSAGE:对于操作的完整描述,包括进度和操作内容。
  14. USERNAME:与v$session中的一样。
  15. SQL_ADDRESS:关联v$sql
  16. SQL_HASH_VALUE:关联v$sql
  17. QCSID:主要是并行查询一起使用。
  18. */
  19. SELECT V.SQL_ID,
  20. USERNAME,
  21. SID,
  22. OPNAME,
  23. ROUND(SOFAR * 100 / TOTALWORK, 0) || '%' AS "执行进度百分比",
  24. TIME_REMAINING "估计剩余时间(秒)",
  25. SQL_TEXT,
  26. A.ELAPSED_SECONDS "执行时间(秒)",
  27. A.START_TIME "执行开始时间",
  28. A.TOTALWORK "总数(块block)",
  29. A.SOFAR "已完成数(块block)",
  30. A.SOFAR / A.ELAPSED_SECONDS "每秒扫描数(块block)"
  31. FROM V$SESSION_LONGOPS A, V$SQL V
  32. WHERE 1 = 1
  33. --AND TIME_REMAINING <> 0
  34. AND SQL_ADDRESS = ADDRESS
  35. AND SQL_HASH_VALUE = HASH_VALUE
  36. ORDER BY A.ELAPSED_SECONDS DESC;
  37. SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR(
  38. SQL_ID => '85tpcyjsu9mx6',
  39. REPORT_LEVEL => 'ALL') AS REPORT
  40. FROM DUAL;

查看正在执行的sql

  1. select distinct bb.STATUS,
  2. bb.USERNAME,
  3. bb.sid,
  4. bb.SERIAL#,
  5. bb.last_call_et runtime,
  6. bb.PROGRAM,
  7. aa.SQL_ID,
  8. aa.sql_text
  9. from v$sql aa, v$session bb
  10. where aa.sql_id = bb.SQL_ID
  11. and bb.status = 'ACTIVE'
  12. and bb.username is not null
  13. order by last_call_et desc;

查看当前的数据库连接数

select count(*) from v$process ;

数据库允许的最大连接数

select value from v$parameter where name =’processes’;

修改数据库最大连接数

alter system set processes = 300 scope = spfile;

关闭/重启数据库

shutdown immediate; —关闭数据库
startup; —重启数据库

当前的session连接数

select count(*) from v$session

当前并发连接数

select count(*) from v$session where status=’ACTIVE’; 

v$process:

视图提供的信息,都是oracle服务进程的信息,没有客户端程序相关的信息
服务进程分两类,一是后台的,一是dedicate/shared server
pid, serial# 这是oracle分配的PID
spid 这才是操作系统的pid
program 这是服务进程对应的操作系统进程名

v$session:

主要提供的是一个数据库connect的信息,
主要是client端的信息,比如以下字段:
machine 在哪台机器上
terminal 使用什么终端
osuser 操作系统用户是谁
program 通过什么客户端程序,比如TOAD
process 操作系统分配给TOAD的进程号
logon_time 在什么时间
username 以什么oracle的帐号登录
command 执行了什么类型的SQL命令
sql_hash_value SQL语句信息

解锁

1、查询数据

SELECT *FROM TEST AS OF TIMESTAMP TO_TIMESTAMP(‘2018-03-07 15:33:00’, ‘YYYY-MM-DD HH24:MI:SS’);

2、恢复数据

FLASHBACK TABLE TEST TO TIMESTAMP TO_TIMESTAMP(‘2018-03-07 15:33:00’, ‘YYYY-MM-DD HH24:MI:SS’);

3、启动表的行移动

ALTER TABLE TEST ENABLE ROW MOVEMENT;

4、数据恢复

FLASHBACK TABLE TEST TO TIMESTAMP TO_TIMESTAMP(‘2018-03-07 15:33:00’, ‘YYYY-MM-DD HH24:MI:SS’);

方法二:
create table tmp asselect * from table_name as of timestamp trunc(sysdate)-10注:trunc(sysdate)-10 就是一个时间点