暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 19C 定义组合数据库操作

原创 Asher.HU 2021-02-04
1026


定义数据库操作涉及提供名称并指定其开始和结束时间。

使用该DBMS_SQL_MONITOR.BEGIN_OPERATION函数启动数据库操作,然后使用该DBMS_SQL_MONITOR.END_OPERATION过程结束数据库操作

要开始在不同的会话中运行,指定的组合session_idserial_numBEGIN_OPERATION函数返回数据库操作执行ID。如果dbop_exec_id为null,则数据库生成一个唯一值。

存在用于数据库操作的单个名称空间,这意味着可能发生名称冲突。Oracle建议使用以下命名约定:component_name.subcomponent_name.operation name对于数据库内部的操作,Oracle建议使用ORA组件名称。例如,可以将实例化视图刷新命名为ORA.MV.refresh可以将E-Business Suite薪资功能命名为EBIZ.payroll


要在当前会话中创建数据库操作:

  1. 在SQL * Plus或SQL Developer中,以具有必要特权的用户身份登录数据库。
  2. 使用开始操作DBMS_SQL_MONITOR.BEGIN_OPERATION

    此函数返回数据库操作执行ID。以下示例创建名为的操作ORA.sales.agg,并将执行ID存储在SQL * Plus变量中:

    VARIABLE exec_id NUMBER; 
    BEGIN 
      :exec_id := DBMS_SQL_MONITOR.BEGIN_OPERATION ( dbop_name => 'ORA.sales.agg' ); 
    END; 
    /
  3. 执行您要监视的SQL语句或PL / SQL程序。
  4. 使用结束操作DBMS_SQL_MONITOR.END_OPERATION

    以下示例结束操作ORA.sales.agg

    BEGIN
      DBMS_SQL_MONITOR.END_OPERATION ( dbop_name => 'ORA.sales.agg', dbop_eid => :exec_id );
    END;
    /


示例21-1创建数据库操作

以下示例说明了如何使用该DBMS_SQL_MONITOR程序包在不同的会话中开始和结束数据库操作。本示例假定以下内容:

  • 您是管理员,想监视user启动的会话中的语句sh
  • 您要监视sh.sales表和sh.customers表的查询
  • 您希望将这两个查询作为名为的数据库操作进行监视sh_count


表21-3创建数据库操作

系统会议上海会议描述
SQL> CONNECT SYSTEM
Enter password: *********
Connected.

不适用

启动SQL * Plus并以具有管理员权限的用户身份连接。

不适用

SQL> CONNECT sh
Enter password: ******
Connected.

在另一个终端中,启动SQL * Plus并以user身份作为user连接sh

SELECT SID, SERIAL# 
FROM   V$SESSION 
WHERE  USERNAME = 'SH';

       SID    SERIAL#
---------- ----------
       121      13397

不适用

SYSTEM会话中,查询会话ID和会话序列号sh

VARIABLE eid NUMBER

BEGIN
:eid:=DBMS_SQL_MONITOR.BEGIN_OPERATION
      ('sh_count', null, null,
       null, '121', '13397');
END;
/

PRINT eid

       EID
----------
         2

不适用

SYSTEM会话中,开始数据库操作,指定会话的会话ID和序列号sh

不适用

SELECT count(*) 
FROM   sh.sales;
 
  COUNT(*)
----------
    918843

SELECT COUNT(*) 
FROM   sh.customers;
 
  COUNT(*)
----------
     55500

sh会话中,查询salescustomers表。这些SQL查询是sh_count操作的一部分

BEGIN 
  DBMS_SQL_MONITOR.END_OPERATION
        ('sh_count',:eid);
END;
/

不适用

通过指定操作名称和执行ID结束数据库操作。

COL DBOP_NAME FORMAT a10
COL STATUS FORMAT a10
COL ID FORMAT 999

SELECT DBOP_NAME, DBOP_EXEC_ID AS ID,
       STATUS, CPU_TIME, BUFFER_GETS
FROM   V$SQL_MONITOR 
WHERE DBOP_NAME IS NOT NULL
      ORDER BY DBOP_EXEC_ID;

DBOP_NAME  ID     STATUS CPU_TIME GETS
---------- -- ---------- -------- ----
sh_count    1  EXECUTING    24997   65

不适用

查询元数据以进行sh_count数据库操作。该操作的状态是EXECUTING因为该会话尚未获取新的会话状态。

不适用

SELECT SYSDATE FROM DUAL;

要收集更改的会话信息,请执行一个查询,该查询执行到数据库的往返行程。

COL DBOP_NAME FORMAT a10
COL STATUS FORMAT a10
COL ID FORMAT 999

SELECT DBOP_NAME, DBOP_EXEC_ID AS ID,
       STATUS, CPU_TIME, BUFFER_GETS
FROM   V$SQL_MONITOR 
WHERE DBOP_NAME IS NOT NULL
      ORDER BY DBOP_EXEC_ID;

DBOP_NAME  ID     STATUS CPU_TIME GETS
---------- -- ---------- -------- ----
sh_count    1       DONE    24997   65

不适用

操作状态现已更新为DONE


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论