监视数据更改

使用 SPL 例程时,可以创建对数据库所作的更改的记录。可以记录由特定用户所作的更改,也可以在每次进行更改时作记录。

可以监视单个用户对数据库所作的所有更改。通过用于跟踪每个用户所作的更改的 SPL 例程来引导所有更改。如果要在用户 acctclrk 每次修改数据库时作记录,请使用下列特权来设置数据库:
  • 您是数据库的 DBA。
  • 所有其他用户对数据库都具有 Connect 特权。他们可以具有 Resource 特权。对于本示例,他们对正在受保护的表不具有 Delete 特权。
  • 使用 DBA 关键字来创建 SPL 例程。
  • SPL 例程执行删除操作并记录特定用户作了更改。
编写类似于以下示例的 SPL 例程(针对 UNIX™ 平台),此例程使用用户提供的客户号来更新表。如果用户刚好是 acctclrk,那么将在文件 updates 中放置删除记录。
CREATE DBA PROCEDURE delete_customer(cnum INT)

DEFINE username CHAR(8);

DELETE FROM customer
      WHERE customer_num = cnum;

IF username = 'acctclrk' THEN
      SYSTEM 'echo Delete from customer by acctclrk >>
/mis/records/updates' ;
END IF
END PROCEDURE;
要监视通过此过程进行的所有删除操作,请除去 IF 语句并使 SYSTEM 语句更具通用性。以下过程将先前例程更改为记录所有删除操作:
CREATE DBA PROCEDURE delete_customer(cnum INT)

DEFINE username CHAR(8);
LET username = USER ;
DELETE FROM tbname WHERE customer_num = cnum;

SYSTEM
  'echo Deletion made from customer table, by '||username
||'>>/hr/records/deletes';

END PROCEDURE;