oracle和redas的区别,深入理解Oracle flashback的几种方式区别

本文详细介绍了Oracle 10g中闪回功能(如flashback database、drop、table和query)的区别,包括其与传统recovery的差异,恢复原理、参数设置以及实际操作步骤。重点讲解了如何使用闪回功能避免误操作并修复错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

flashback(闪回)是Oracle10g里新加入的一个非常有用的一个feature。通过flashback的功能,我们可以避开传统的recover的方式去恢复一些我们进行的误操作。不过相当recovery来说。这两个还是有差别的。

1. recovery的恢复是基于数据文件的,先要restore备份好的数据文件,flashback是基于flashback log文件的,所以基点不一样,recovery是基于备份的时间上的,可以恢复到备份至完整归档的任何一个时刻,而flashback是基于flashback log的,而log的存储时效是受限于db_flashback_retention_target这个参数的(以分钟为单位,默认1440分钟,即24小时)。

2. recovery的恢复是应用redo记录的,所以会对期间我们不关心的数据也进行修补,而flashback可以只针对我们关心的数据进行修补。

3. recovery的恢复可以恢复数据文件物理损坏或者日志物理损坏,而flashback是基于flashback log的,只能处理由于用户的错误的逻辑操作,比如删除了表,删除了用户等。

由此可见,其实flashback和recovery的恢复还是有不少本质的差别的,因此我们要针对着相应的情况来进行相应的选择。

flashback具体来说有4种常用的操作,这几种操作虽然都冠以flashback,但是还是有着一些较大的差别,

1、flashback database(闪回数据库)

对应flashback database来说,一般用来处理误删除了user或者一些错误的数据操作。

要使用flash database的特性。我们一定要启动flashback功能,

SQL>alter database flashback on; 如果要关闭使用alter database flashback off;

同时要配置和检查参数db_flashback_retention_target,这个是控制flashback log的保留时间的参数,默认是1440分钟,即24小时。我们也只能恢复到这个时间之内。

使用如下

SQL>shutdown immediate;

SQL>startup open exclusive;

SQL>flashback database to timestamp to_date(’2009-05-13 00:35:50′, ‘yyyy-mm-dd hh24:mi:ss’);

或者基于scn号

SQL>flashback database to scn 5342420;

先用read only模式打开数据库,确定恢复的正确性,如果不对,调整时间或者scn,直到确认数据恢复正确。以resetlogs的方式打开数据库,由于flashback log和redo log是分开的,所以即使resetlogs,闪回区的内容依然存在,我们一样能够能够闪回到以resetlog打开数据库点之钱的那个状态上,只有当flashback的开关关掉以后,闪回区的内容将自动删除。

2. flashback drop(闪回删除)

用来恢复被误drop掉的表的恢复,这里有一个我以前错误理解的一个地方,其实这里的flash drop已经脱离了flashback log,在10g的版本里,Oracle在表删除以后,并没有真的把这个表删除,而是对删除表做了重命名,并且用recycle bin来对其进行管理,我们可以通过user_recyclebin和dba_recyclebin来进行查询.

SQL>select * from user_recyclebin或者是select * from dba_recyclebin;

通过flashback table testtable to before drop.

有时可能一个表被反复的建立和drop,这样在recycle一个origianl name的有多个记录相对,默认将是恢复最后一个,如果要指定恢复一个可以用他们的可以通过指定name的方式

3. flashback table(闪回表)

有时,不小心,对表进行了错误的update,那么我们就可以通过这个feature来进行恢复,比如,我们update … set … where ..或者delete 了表里不应该的数据,我们可以使用flashback table testtable to timestamp to_date((’2009-05-13 00:35:50′, ‘yyyy-mm-dd hh24:mi:ss’)),这里要注意和前两个不同的,这里是利用undo表做恢复的基准,所以有关undo的参数undo_management和undo_retention对这个有影响。具体可以看看这两个参数的说明文档。注,flashback table是只能处理DML操作过后的语句的恢复,如果在期间有DDL语句操作到这个表上,做flashback table时将报错ORA-01466: unable to read data - table definition has changed。在做flashback table时先要alter table t enable row movement。

4. flashback query(闪回查询)

闪回查询好像以前版本有过,在10g里。使用select * from t as of timestamp 或者 select * from t as of scn .flash query也是利用unod表空间里的undo数据,所以和3一样,

原来对这几个flashback的feature的理解是一致的,都是基于flashback log的,这个是我一个错误的认识,通过以上的描述可以看到,只有flashback database是基于flashback log的,所以只有在flashback on的时候才能使用,而其他几个分别和undo以及数据库字典dba_recyclebin/user_recyclebin,所以flashback不考虑flashback_on的状况。 注可以通过

SQL>select * from v$database;来查询flashback_no的值。

这里要特别感谢liuyi8903,就在他的提示下,我才意识到我以前对flashback的理解上有错误

Vite + Vue 3 + TypeScript 的项目中,你可以使用 Vue Router 来处理路由调用接口。 首先,确保你已经安装了 Vue Router 和 axios(或其他用于发送 HTTP 请求的库)。你可以使用以下命令进行安装: ``` npm install vue-router axios ``` 接下来,在你的项目中创建一个 `router` 文件夹,在其中创建一个 `index.ts` 文件。在该文件中,你可以配置你的路由。以下是一个示例: ```typescript import { createRouter, createWebHistory, RouteRecordRaw } from &#39;vue-router&#39;; import Home from &#39;@/views/Home.vue&#39;; import About from &#39;@/views/About.vue&#39;; const routes: Array<RouteRecordRaw> = [ { path: &#39;/&#39;, name: &#39;Home&#39;, component: Home, }, { path: &#39;/about&#39;, name: &#39;About&#39;, component: About, }, ]; const router = createRouter({ history: createWebHistory(), routes, }); export default router; ``` 在上面的示例中,我们定义了两个路由:`Home` 和 `About`。你可以根据你的需求进行修改和扩展。 然后,在你的入口文件(如 `main.ts`)中,引入使用你的路由: ```typescript import { createApp } from &#39;vue&#39;; import App from &#39;./App.vue&#39;; import router from &#39;./router&#39;; const app = createApp(App); app.use(router); app.mount(&#39;#app&#39;); ``` 现在,你可以在你的组件中使用 `vue-router` 进行路由导航和调用接口。例如,在 `Home.vue` 组件中,你可以这样使用: ```vue <template> <div> <h1>Home</h1> <button @click="fetchData">Fetch Data</button> </div> </template> <script> import axios from &#39;axios&#39;; export default { methods: { fetchData() { axios.get(&#39;/api/data&#39;).then((response) => { console.log(response.data); }).catch((error) => { console.error(error); }); }, }, }; </script> ``` 在上面的示例中,我们使用了 axios 发送 GET 请求来获取数据。你可以根据你的需求调整和扩展这个例子。 希望这能帮助到你!如果你有任何其他问题,请随时问我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值