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

Vertica数据库中的"CASCADE"

原创 simonchiang 2022-12-12
1015

Vertica中的"CASCADE"

相信用过Vertica数据库的同学在删除数据库对象(表、用户、函数等等)的时候都遇到过如下的提示:

ROLLBACK 3128: DROP failed due to dependencies

这个时候,同学们可能就在drop语句的最后加上CASCADE,这样就可以执行成功了。

但是您需要注意,加上cascade过后,会把与该对象相关的其他对象一并删除。所以您最好检查下与这个对象相关联的都是些什么对象,避免将其他的表、数据误删。

比如:

  • 在删除用户的时候加上cascade,会把owner为该用户的所有的表一并删除。
  • 在删除自定义函数的时候加上cascade,如果某个表的字段默认值中引用了该函数,那这张表也会被一并删除。

那该怎么处理呢?

  • 尽量不要为了省事,直接在drop语句后面加上cascade,缺省都采用不加cascade的方式删除对象。
  • 如果报错,则把所有与该对象相关的所有对象都找出来,解耦,比如删除用户的时候,把owner为该用户的表的owner调整为其他用户,把引用了该函数的字段默认值去掉或者改为别的替代函数,然后再删除对象。
  • 配置数据库参数GlobalHeirUserName,当删除用户时,该用户下的对象会自动转移到参数GlobalHeirUserName所设置的用户下。

对象已经被cascade误删除了怎么办?

  • 赶紧找有没有使用vbr做过备份(DATABASE_BACKUPS系统表),如果有,使用vbr将对象进行恢复,尽量降低损失。
  • 如果没有做备份,那就只能梳理下业务逻辑,重跑下业务流程,将数据重新生成出来。
  • 如果设置了参数GlobalHeirUserName,则对象被自动转移到该参数设置的用户下。

在这里再强调下,数据库备份的重要性,可以参考官方文档(中文英文)对数据库进行备份。

二维码.png

最后修改时间:2024-08-29 10:48:40
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论