欢迎投稿

今日深度:

Oracle数据库备份数据缺失的问题,oracle数据库备

Oracle数据库备份数据缺失的问题,oracle数据库备份


项目中一直在使用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映射,自然而然就屏蔽了这些数据库特性的东西。


oracle数据库问题,如果数据库系统不小心丢失了没有备份的数据文件,该怎恢复数据库的正常状态?

那数据是肯定丢失了的。你可以选择将丢失的数据文件offline掉,再试图开启数据库。
 

oracle数据库在备份时有人正录入新的数据会不会出现数据丢失的现象???

这个肯定不会出现数据丢失的问题。

因为oracle数据库里是做了锁的,数据在更新的时候会使用排他锁,数据在查询的时候会使用共享锁。

所谓的排他锁就是指A在使用数据X的时候,B不能更新。。。
所谓的共享锁就是指A在使用数据X的时候,B也能查询。。。

在备份的时候,数据库会把此时的数据全部备份起来,如果正在这时有人向数据库写入数据,数据库可能会先写入缓存,等数据备份完成以后,在写到数据库里,你要备份新的数据就要重新备份一次。
 

www.htsjk.Com true http://www.htsjk.com/shujukunews/2293.html NewsArticle Oracle数据库备份数据缺失的问题,oracle数据库备份 项目中一直在使用Oracle数据库,由于我之前更多的是关注ORM映射框架,几乎没有关注过Oracle特性的东西,很多东西都不知道,而且项目...
评论暂时关闭