http://blog.csdn.net/luowangjun/article/details/5627102
利用Oracle审计功能来监测试环境的变化
做过测试的人都应该会碰到这样的情况:测试发现的bug在开发机器上没有出现,显然这是环境差异的原因。相当多情况下,因为测试使用的数据库结构和开发使用的数据库结构不一致造成的。尤其是一些公司在提交测试版本的时候,注重应用程序的版本提交,往往忽略提交和程序匹配的数据库结构,在这种情况下,如果程序和数据库结构不匹配的话,系统稳定就怪了,就像windows没有对应的注册表一样,能稳定吗?
回到正题,如果采用oracle作为底层数据库的系统,如何避免这种情况呢?其实,Oracle的审计功能除了用于安全性检查之外,放到测试领域则有一个好处,就是监控测试数据库的变化情况。Oracle审计内容很丰富:包括语句审计、对象审计、细粒度审计(FGA),监控数据库环境的变化,只要用到语句审计和对象审计即可。
首先:需要检查数据库服务器是否开启了审计,采用show parameter aud命令。 Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> show parameter aud
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest string F:/APP/ADMINISTRATOR/ADMIN/ORC L/ADUMP
audit_sys_operations boolean FALSE
audit_trail string FALSE
如果audit_trail = FALSE或者none,则表明没有开启审计功能,需要开启审计功能,为了建立数据库环境修改的详细记录,需要将audit_trail=db_extended,这样可以在审计视图(dba_audit_trail)看到详细库结构修改(执行了什么样的SQL语句):
SQL> Alter system set audit_trail=db_extended scope=spfile ;
SQL> shutdown immediate //因为audit_trail是静态参数,所以需要重启oracle实例
SQL> startup open 然后设定要审计的用户和表,如果要审计某个用户修改数据库情况,输入如下语句:
SQL> audit all by test whenever successful ;//意思是只要test用户改动数据库成功的地方,都可以审计到。
上面的all参数是代表审计大部分对象(表、视图、序列)增加、删除,无法对表结构的修改,所以还需要显示的指定表结构的修改。
SQL> audit alter table by test by access whenever successful; 设定完毕,执行测试,如下:
SQL> create table test_table (id number ,name varchar2(20)) ;
表已创建。
SQL> alter table test_table add(shool varchar2(20)) ;
表已更改。
SQL> alter table test_table add(school varchar2(20)) ;
表已更改。
SQL> drop table test_table ;
表已删除。
然后查询oracle审计视图(dba_audit_trail),可以看到数据库结构的详细变化情况,包括表的增加、修改、删除、什么时候结构修改、由那台机器修改都很清楚,如下所示: 如果测试系统中,如果有一些很重要的表(如:数据字典表、权限表、基础配置表等)的修改,会严重影响运行,这些测试环境的变化需要详细跟踪,则需要对重要的表对应启动记录级的审计,
SQL> audit insert,update ,delete on test.test_table by access whenever successful ; 对重要表进行记录级的修改,如下所示: 对记录修改完毕后,这些修改变化可以在审计视图(dba_audit_trail)一一找到,如下所示:

最新文章

  1. Html中列表标签<ul>的使用
  2. C++学习笔记27:异常处理机制
  3. centos7安装docker并设置开机启动
  4. python分布式任务调度Celery
  5. iOS开发——高级技术&签名机制
  6. 暴力枚举 UVA 725 Division
  7. Java之--Java基础知识
  8. 面试相关的技术问题---java基础
  9. yii2 访问控制
  10. inPolygonTest学习和C++实现
  11. java 多线程之卖票两种方式
  12. 使用make
  13. python的zipfile、tarfile模块
  14. this 指向问题, 三个例子
  15. Centos 下使用VLAN+Bridge 搭建KVM基础网络环境
  16. 质量能量等效的泛化--物理学定律方程与等效原理的对应关系 Generalization of Mass-Energy Equivalence--Corresponding Relations between Equations of Physical Laws and Equiva
  17. 课程一(Neural Networks and Deep Learning),第三周(Shallow neural networks)—— 2、Practice Questions
  18. ELK初探
  19. 开发openfire 消息拦截器插件PacketInterceptor
  20. 批量远程执行shell命令工具

热门文章

  1. (九)errno和perror、标准IO
  2. JS历史
  3. miniui设置边框的方法
  4. osg,qt编译的一些问题
  5. 关于JS一些验证邮箱的一些问题
  6. android 高效加载大图
  7. c#新手之1-如何组织类及相互调用
  8. xcode代码提示功能失效的解决方法
  9. Python学习资料整理以及书籍、开发工具推荐
  10. zipalign内存对齐优化