【问题标题】:ORA-00955: name is already used by an existing objectORA-00955: 名称已被现有对象使用
【发布时间】:2012-08-15 10:48:35
【问题描述】:

在 oracle 11G 中,我想永久删除用户,即不应该保留该用户的任何痕迹,并且我不应该出现这样的“现有对象”错误 - ORA-00955:名称已被现有对象使用,当我尝试使用其表重新创建该用户。

请帮我做这件事。 谢谢。

编辑 -

使用表和列创建用户的命令

CREATE USER Products identified by discounted
GRANT ALL PRIVILEGES TO Products
CREATE TABLE Cars(Brand varchar(25),Model varchar(25))

以上紧随其后的是, 完全删除用户并完全重新创建用户的命令

DROP USER PRODUCTS CASCADE
CREATE USER Products identified by discounted
GRANT ALL PRIVILEGES TO Products
CREATE TABLE Cars(Brand varchar(25),Model varchar(25))

导致异常-

java.sql.SQLSyntaxErrorException: ORA-00955: name is already used by an existing object

【问题讨论】:

  • 这是一个很难回答的问题吗?
  • 到目前为止你尝试过什么?您是否在创建用户或创建表时收到错误?
  • @eaolson - 当我尝试创建包含列的表时出现此错误。
  • 您使用什么命令来删除用户、重新创建用户和创建表?当您执行此操作时,您连接的是哪个用户?
  • @eaolson - 请参考我现在所做的编辑。

标签: oracle11g


【解决方案1】:

你没有说你登录的用户是什么,但我会假设它是 SYS 或具有几乎神一样权限的人。

在您的最后一行中,您将在当前架构中创建表 CARS,而不是在产品架构中。你可能想要的是:

CREATE TABLE products.cars(brand varchar2(25), model varchar2(25));

cars 表可能仍存在于您之前尝试的当前架构中。你可以用这个来判断它是否存在于任何地方:

SELECT owner, object_name, object_type FROM all_objects WHERE object_name = 'CARS';

附带说明,将所有权限授予普通用户并不是一个好主意,但我认为这是为了测试程序。此外,最好使用VARCHAR2 而不是VARCHAR

【讨论】:

  • 谢谢,问题解决了。然后,又出现了一个问题。表中没有行。同样,表的完全限定名称解决了这个问题。再次感谢!
  • 顺便说一句,为什么 varchar2 比 varchar 更受欢迎?
  • 这在很大程度上是历史性的。 VARCHAR2 是可变长度字符串的 Oracle 数据类型。 VARCHAR 目前是 VARCHAR2 的同义词,但在未来的版本中不能保证。 dba.stackexchange.com/questions/1301/…
【解决方案2】:

你的问题太笼统了。根据我的理解,如果您使用以下脚本,则可以删除用户创建的所有对象-

drop user USERNAME cascade;

Documentation

要成功执行此操作,您不应为此用户打开连接。

【讨论】:

  • 那行不通。我的数据库似乎到处都是死物,让我的生活变得悲惨。任何其他数据库都不会发生这种情况:(Oracle似乎很奇怪。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-22
相关资源
最近更新 更多