问:我怎样才能够登录造成服务器错误的命令和SQL语句?我有一个触发器,在服务器错误出现后登录了log_error表里的ERROR、TIMESTAMP、USERNAME、OSUSER、MACHINE、PROCESS、PROGRAM。除此之外,我还想登录造成错误的命令和SQL语句。我怎样才能将这一信息合并到触发器里?我尝试了以下的SQL语句获得了SQL文本: select A.username, A.osuser, A.machine, A.process, A.program,B.sql_text into&n……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号

TechTarget
官方微博

TechTarget中国
问:我怎样才能够登录造成服务器错误的命令和SQL语句?我有一个触发器,在服务器错误出现后登录了log_error表里的ERROR、TIMESTAMP、USERNAME、OSUSER、MACHINE、PROCESS、PROGRAM。除此之外,我还想登录造成错误的命令和SQL语句。我怎样才能将这一信息合并到触发器里?我尝试了以下的SQL语句获得了SQL文本:
select A.username, A.osuser, A.machine, A.process, A.program,B.sql_text into var_user, var_osuser, var_machine, var_process, var_program, var_sqltext from sys.v_$session A,sys.v_$sqlarea B where A.audsid = userenv(’sessionid’) and B.hash_value = A.sql_hash_value and B.address = A.sql_address; insert into log_errors_tab(ERROR,TIMESTAMP,USERNAME,OSUSER,MACHINE, PROCESS,PROGRAM,SQL_TEXT) values(dbms_standard.server_error(1),sysdate,var_user,var_osuser,var_machine,var_process, var_program,var_sqltext); |
但是这种方法将上面的SQL语句放入表里,但不是错误语句。有没有方法登录引起错误的SQL语句?同样,有没有可能在SQL查询里执行查询的时候知道绑定变量的值?
答:你代码不能工作的原因就是当你检查v$sesion和v$sqlarea时,你就获取了目前正在执行的语句……而不是SERVERERROR触发器执行的语句。唯一的方法就是获取发生时的语句的内容。1)在目前保参数里执行该语句之前就捕获,这样你就能在SERVERERROR触发器开启时使用它。2)将所有的信息聚集在insert/update/delete触发器里并且“重建”该语句的内容。我不知道捕获具体的、很容易引起错误的SQL语句的方法。
但是……为了获得该SQL语句的基本内容,您能简单地使用一个或者是多个系统定义事件属性,这些属性只适用于触发器代码。以下是示例:
ora_sysevent = The event that was happening when the error occurred (insert, update, etc) ora_dict_obj_name = The name of the object that was being effected (EMP, DEPT, etc) ora_dict_obj_type = The type of the object that was being effected (TABLE, VIEW, etc) |
你可以查看Oracle文档第13章里《应用程序开发指南——基础》。
你可以在insert/update/delete触发器里使用系统事件属性来判定什么事情已经完成了,是谁做的以及做这件事的目的。你可以使用新的、旧的触发器变量获取column值。一旦尼获得了SERVERERROR触发器。你就不能访问所有的ora_ values(查看上面的资料里的第13章)。
或许你需要思考为什么你想登录SQL语句并且尝试其他的方法……如:也许你可以用Oracle的审计功能或者DBMS_APPLICATION_INFO,对模块设置并在v$session里设置作用列次。
作者
翻译
相关推荐
-
甲骨文自治数据库亮相 带来云计算新希望
早前甲骨文还不在云计算公司之列,而现在该公司正在迅速弥补其失去的时间。甲骨文的云计算核心是甲骨文自治数据库(O […]
-
2017年12月数据库流行度排行榜 定格岁末排名瞬间
数据库知识网站DB-engines最近更新的2017年12月份数据库流行度排名情况是否能提供更多的看点呢?TechTarget数据库网站将与您分享12月份的榜单排名情况,让我们拭目以待。
-
2017年11月数据库流行度排行榜 半数以上数据库积分减少
数据库知识网站DB-engines更新了2016年11月份的数据库流行度排行榜。TechTarget数据库网站将与您一同关注11月份的榜单排名情况。
-
控制合约 不再畏惧Oracle
许多公司都与Oracle有无限制授权协议,他们害怕离开这个协议,所以就证明他们在使用Oracle的软件,即使因为需求单独购买部分授权许可也可能总体是省钱的。