Oracle阻挠删表的坚定努力(oracle 不让删表)

自从2018年Oracle公司发布了其全新的自主数据库系统以来,它一直在努力防止用户意外或恶意删除数据库中的重要表。Oracle自主数据库系统不仅具有高度智能化的自我修复能力,还能自动分区管理,提供高效的自动索引优化以及允许自动升级和派生虚拟数据库等。然而,在这样一个强大自主的系统中,删除表格仍然是用户一个值得小心对待的操作,因为这可能会带来不可挽回的后果。

然而,对于有些人来说,“删表”似乎成了一种习惯性的动作,虽然经典的“撤消”功能能在某些情况下帮助用户恢复误操作的结果,但有的人已经陷入到“删表”恶习中,他们可能会失去对整个生产环境的管理权限,对公司的业务进程造成严重破坏。

Oracle公司积极努力避免出现这种情况,已经在多个版本中添加了一些有效的防护措施。

Oracle在19C版本时加入了回收站特性,能够将被删除的表格放入回收站,提供一种“准备回收垃圾”的操作。通过回收站,可以方便地恢复误删除的表格,即使事先清空回收站,也可以从备份中将它们恢复出来。但是,这个功能也容易让人忽略了删除表所带来的实际后果,可能导致性能和空间问题。

Oracle 19C中引入了“强制保护”功能,该功能采用了锁定机制,可以防止意外的删除操作。这个机制可以通过“锁定”一个表格达到防止误删的目的。当这个选项被启用时,用户将无法删除受保护的表格,即使是在特权模式下进行操作。

这里我们来简单演示一下这个功能:

首先创建一张测试表:

CREATE TABLE test_table (
id NUMBER,
name VARCHAR2(50)
);

然后启用“强制保护”特性:

ALTER TABLE test_table ENABLE FORCE PROTECTION;

现在尝试进行删除操作:

DROP TABLE test_table;

这时会返回错误信息:ORA-12988: 不能删除表格test_table,它正在使用中。

Oracle 20C还引入了“记录表格信息”的功能,比如一旦检测到有人试图通过SQL语句删除表格,这个功能就会记录下这个行为以及相关的时间戳信息。这个功能可以帮助管理员监测员工的行为,以便及时发现一些错误操作。

SQL> DELETE FROM test_table;
No rows deleted.

SQL> SELECT event_timestamp, operation_name, obj_name
FROM unified_audit_trl
WHERE obj_name='TEST_TABLE';

EVENT_TIMESTAMP OPERATION_NAME OBJ_NAME
-------------------- -------------------- --------------------
2021-08-16T14:17:24 DELETE TABLE TEST_TABLE

Oracle公司为避免用户误删数据库中的表格,采用了多种措施,并不断完善和更新相关特性,使其具有更强大的防护能力。因此,管理员和开发人员都应该对这些措施有清晰的认识,以便更好地管理Oracle数据库。


数据运维技术 » Oracle阻挠删表的坚定努力(oracle 不让删表)