龙空技术网

防删库实用指南 | 只需一步,快速召回被误删的表

阿里云瑶池数据库 828

前言:

今天看官们对“oracle回收站保留多久”大约比较重视,各位老铁们都想要分析一些“oracle回收站保留多久”的相关文章。那么小编也在网上网罗了一些有关“oracle回收站保留多久””的相关文章,希望咱们能喜欢,姐妹们快快来学习一下吧!

作者:黄忠,阿里云数据库技术专家

数据库的一些非常不错的企业级功能都是“养兵千日,用兵一时”,比如Oracle 10g中的回收站(Recycle Bin)功能,可以在特殊情况下发挥特种兵的功能,比如当你删除一个表空间、一个用户(Schema)时,可能会删除很多的表,包括你不想删除的一些表。

这种例子还是很多的,早些年很多的DBA使用图形工具来访问数据库,所连接的用户权限又比较高,当查询大量数据引起图形工具短暂失去响应时,很容易多打几下键盘或者多点几下鼠标,等到图形工具响应过来,发现些表或某些用户已经不见了。

前面讲的是无心之过,还可以看到一些有心的恶意操作,比如因员工和公司的关系不够友善引起的破坏性操作。这时就可以检查一下Oracle数据库回收站中是否还有被删除的表。

AliSQL是阿里云RDS MySQL团队精心打造的一个分支,在性能、功能、稳定性上都有极大的提升和突破。在2019年12月份发布的版本中也带了Recycle Bin功能,只需要设置一个参数就可以开启:

mysql> set global recycle_bin=on;Query OK, 0 rows affected (0.00 sec)mysql> show global variables like 'recycle_bin';+---------------+-------+| Variable_name | Value |+---------------+-------+| recycle_bin   | ON    |+---------------+-------+1 row in set (0.00 sec)

接下来让我们来创建一个表,插入一些数据,进行功能测试和验证。如下所示:

mysql> use test;Database changedmysql> create table t_recycle_bin_demo (col1 int not null);Query OK, 0 rows affected (0.01 sec)mysql> insert into t_recycle_bin_demo values (1),(2);Query OK, 2 rows affected (0.00 sec)Records: 2  Duplicates: 0  Warnings: 0mysql> select * from t_recycle_bin_demo;+------+| col1 |+------+|    1 ||    2 |+------+2 rows in set (0.00 sec)

假设这是一张很重要的表,并且被意外Drop掉了,让我们来看一下如何找回这张表的数据。如下所示:*请左右滑动阅览

mysql> drop table t_recycle_bin_demo;Query OK, 0 rows affected (0.01 sec)mysql> call dbms_recycle.show_tables();+-----------------+---------------+---------------+--------------------+---------------------+---------------------+| SCHEMA          | TABLE         | ORIGIN_SCHEMA | ORIGIN_TABLE       | RECYCLED_TIME       | PURGE_TIME          |+-----------------+---------------+---------------+--------------------+---------------------+---------------------+| __recycle_bin__ | __innodb_1073 | test          | t_recycle_bin_demo | 2020-02-27 06:48:24 | 2020-03-05 06:48:24 |+-----------------+---------------+---------------+--------------------+---------------------+---------------------+1 row in set (0.00 sec)mysql> select * from `__recycle_bin__`.`__innodb_1073`;+------+| col1 |+------+|    1 ||    2 |+------+2 rows in set (0.00 sec)

可以看到,AliSQL在开启回收站功能的情况下,被删除的表被移到了“__recycle_bin__”数据库下面,可以通过Select语句直接访问读出被删除的数据以进行恢复,这样就找回了你的重要数据。和Oracle不同的地方是,“__recycle_bin__”数据库访问需要明确的授权操作,这样可以防止表的所有者(可能是恶意者)同步清理回收站中的表。比如我用一般用户登进去操作,就会报权限错误,如下所示:*请左右滑动阅览

mysql> select * from `__recycle_bin__`.`__innodb_1073`;ERROR 1142 (42000): SELECT command denied to user 'test'@'localhost' for table '__innodb_1073'mysql> call dbms_recycle.purge_table('__innodb_1073');ERROR 1142 (42000): DROP command denied to user 'test'@'localhost' for table '__innodb_1073'

可以看到通过AliSQL的回收站功能,以及精心规划的权限管理机制,可以有效地处理表被意外或恶意删除的问题,确保你的数据安全。

点下方扩展链接了解Recycle Bin功能详情

标签: #oracle回收站保留多久