项目中一直在使用Oracle数据库,由于我之前更多的是关注ORM映射框架,几乎没有关注过Oracle特性的东西,很多东西都不知道,而且项目中换数据库的概率几乎为零,所以有必要好好研究一下Oracle。正所谓,不怕不知道,就怕不知道嘛。不然遇到问题,都不知道从哪里下手。
这两天的Oracle学习,收获不小。前几天测试中遇到很多的稀奇古怪的问题,都被很好的解释了。这里就一个典型的例子谈一谈。
就是在测试阶段,看着经理熟练的操作Oracle的各个指令,内心就已经有了一点不平静。经理就是经理,这都是多少年不写代码的人了,这些Oracle指令还记的那么清楚。
系统首次测试的时候,报出了一堆莫名其妙的bug。结果发现是备份的数据库不完整。结果导致测试环境中的数据库中缺少不少表和视图。
PS:当时我的想法是,Oracle这东西,为啥非要往虚拟机里装啊,晕菜~~~ 可是事实证明,往虚拟机里装Oracle是没问题的~~~
我们找到问题后,都感觉很莫名其妙,Oracle数据库怎么会有这样的问题呢?一定不是数据库的问题,可是备份的步骤很固定啊,不会有问题啊。而且之前gxpt项目中,数据库备份还原度时候,也没有这问题啊。不应该在gxpt还原中没问题,在tky项目就有了问题啊。
现在才发现,这是由于Oracle的闪回技术造成的。Oracle数据库也跟windows系统一样,有一个回收站。执行一般的删除表操作后,其实并没有执行真删除,而是将它们放在了回收站里面。放在回收站有一个好处,就是随时都能把删除的表还原。
你可以在sql plus窗口中执行"select * from tab" 操作,查看数据库中的表。这里会查询上来所有的表,以及一些长编码的东西,这些东西就是你删除表的痕迹。
但是闪回也有一些弊端。就是在数据库备份的时候,如果回收站中未清除,就有可能造成备份数据不完整的情况。
这就解释了备份失败的原因。而gxpt项目中,是使用的JPA映射,自然而然就屏蔽了这些数据库特性的东西。
原文地址:http://blog.csdn.net/liu765023051/article/details/38048485