如何恢复 Oracle 的默认用户表?

如何恢复 Oracle 的默认用户表?

问题:

我一直在尝试恢复这个转储文件,但不幸的是,导出文件的人并没有说清楚数据库需要什么用户、权限和角色。

所以我想我只需创建一个随机用户,将其导入到那里,查看错误,看看我能做什么。

在导入过程中,Oracle 要求输入system用户名和密码。我以为它只是需要这些来进行身份验证,所以就答应了。

实际情况是,转储文件的数据库表被恢复给了用户 system

现在,我可能对 Oracle 了解不多,但我猜这可能是坏的。真的很糟糕。我正在查看 Oracle SQL Developer,我可以看到很多可能不应该存在的表 - 我很确定 ACCRUALRULE 不是 Oracle 系统表。

我该如何解决这个问题?有没有办法将用户重置system为默认设置?我不想手动删除每个表,尤其是考虑到我不知道哪些表应该留在那里。

谢谢。

我的系统:

  • Windows 7的
  • Oracle 11g XE

答案1

手动删除创建的对象(在验证它们确实是从转储中创建的之后)或从备份中恢复...

附言:在对 SYS 进行任何操作之前,请先进行备份并在另一台机器或 VM 上测试该备份!

如果您启用了闪回和归档日志,您可以使用 RMAN 将数据库闪回到导入之前的时间点。

Oracle 闪回“使用闪回数据库回滚数据库”

答案2

如果我没有备份并且 Flashback 被禁用,我会执行以下操作:

select 'drop table ' || table_name || ' cascade constraints purge;'
from dba_tables
where table_name in (
  select object_name
  from dba_objects
  where owner = 'SYS'
  and object_type = 'TABLE'
  and created > 'DATE-OF-IMPORT-HERE');

当然,在运行此 DDL 之前,您需要检查两次(查找系统表,导入后不应创建大量系统表)。然后对其他对象重复此操作。

而且当然,测试并备份!

相关内容