暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 空表未在默认表空间引发的问题

老揣的瓜皮日常 2021-07-19
296

        文章内有任何不正确的地方,仅代表个人观点,欢迎讨论与指教。



    遇到个瓜皮事情,有个数据库,里面有俩系统 A,B ; 某天,A 系统要下线,照往常查出 A 所用的表空间,确认无B的对象后删除表空间,删除A 用户,即可完成。(删之前备份要做好)

    删除后N个月后(很漫长),B系统反馈他们有大批量表不见了,经确认都是空表。也不知B系统更换多少人员,反正就是丢了后他们无法重新创建。那么这个瓜皮事情自然就又落到我头上了。

    经过查看,数据库的延迟段是开着的,B系统用户(模拟)也有unlimited tablespace 权限,因为这两个系统厂商都是一个,在创建空表的时候给塞入A的表空间里了,而且由于延迟段的原因,空表不占用存储,自然就在下线的时候没有查出来。(这么沙雕的操作我是没想到的)

SQL> show parameter deferred


NAME TYPE VALUE
------------------------------------ --------------------------------- ------------------------------
deferred_segment_creation boolean TRUE


SQL> select * from dba_sys_privs where grantee='LEO';


GRANTEE PRIVILEGE ADMIN_OPT
------------------------------------------------------------------------------------------ -------------------- ---------
LEO                                                                                        UNLIMITED TABLESPACE NO
复制


    为了避免下次这类事情发生,要么:    

    1. 关闭延迟段。

    2. 创建环境的时候不要授权unlimited tablespace ,逐个表空间授权。

    3. 逻辑备份的时候要expdp备份,exp是不会导出空表的




文章转载自老揣的瓜皮日常,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论