是否可以删除Oracle方案中的所有内容?我找到了这个剧本:
Begin
for c in (select table_name from user_tables) loop
execute immediate ('drop table "'||c.table_name||'" cascade constraints');
end loop;
End;
/
但我想知道是否有什么东西可以删除模式、索引、表、约束中的所有内容……而不是模式(DROP USER...)。
谢谢。
6条答案
按热度按时间jw5wzhpr1#
通常,删除并添加用户是最简单的。如果您对数据库具有SYSTEM或sysdba访问权限,则这是首选方法。
如果您没有系统级访问权限,并且希望清除您的模式,则以下SQL将生成一系列DROP语句,然后可以执行这些语句。
然后,我通常会清理回收站,以便真正清理干净。老实说,我看不出甲骨文的回收站有什么用处,我希望我能禁用它,但不管怎样:
这将生成DROP语句的列表。并不是所有的索引都会执行--如果您使用CASCADE删除,删除PK_*索引将失败。但最终,您将拥有一个非常干净的模式。通过以下方式确认:
另外,只是添加一下,您问题中的Pl/SQL块将只删除表,它不会删除所有其他对象。
PS:从一些网站上复制的,对我很有用。经受了考验,工作起来像个护身符。
yv5phkfx2#
在GitHub上找到了以下开箱即用的脚本(SQL*Plus:12.2.0.1.0版产品):
https://gist.github.com/rafaeleyng/33eaef673fc4ee98a6de4f70c8ce3657
感谢作者Rafael Eyng。
只需登录到要删除其对象的模式。
可能仍有指向刚刚删除的表的公共同义词。下面的脚本也会删除这些内容:
hsgswve43#
是的你可以。您可以删除用户,从而删除架构对象。DROP USER语句用于从Oracle数据库中删除用户,并删除该用户拥有的所有对象。
仅当TestDB在其模式中不拥有任何对象时,该语句才能正常运行并删除名为TestDB的用户。对象。如果它包含任何对象,则在执行DROP USER语句后,您将收到以下错误消息
如果TestDB确实在其模式中拥有对象,则需要运行以下DROP USER语句:
此语句将删除TestDB拥有的所有对象,还将删除TestDB对象上的所有引用完整性约束。
jei2mxaa4#
以下SQLplus脚本生成从所需用户删除所有方案对象所需的SQL语句:
该脚本按原样100%为我工作--但如果由于某种原因它对您来说不完整,则可以使用虚拟机(VM)轻松进行增强,如下所示:
1.以[清空您的架构用户]身份登录
1.拍摄您的虚拟机的快照
1.运行上述脚本以创建删除语句
1.运行删除语句*(您可以忽略任何“对象不存在”错误,因为一些对象将在脚本删除语句之前被自动删除。这是由于所拥有的对象被删除而发生的)*
1.注销
1.以sys身份登录并执行“DROP USER[YOUR SCHEMA USER TO EMPTY];”--不带CASCADE选项
如果步骤6失败,那么您需要确定阻止您的用户被删除的剩余对象,并将它们添加到上面的脚本中。重复上述操作,直到您的用户删除(即您的脚本是全面的)然后保存您的脚本
将您的VM回滚到您的快照并重复步骤3和4(使用更新后的脚本)--现在您应该有一个100%为空的架构。
olhwl3o25#
只要跟上:
lokaqttq6#
这是我的用法: