替换数据库中的所有用户对象

Replace all USER Objects in a Database

我的问题与Oracle中USER的含义有关。 我们有一个包含很多用户的数据库,但是 R1S 包含几乎所有的 tables、序列等。我们想加载新的 tables 数据,但是我们还需要将序列值更新为与 table 数据同相。

ORA-31684: Object type USER:"R1S" already exists
ORA-31684: Object type SEQUENCE:"R1S"."RS2QNUNI" already exists
. . imported "R1S"."RSCIN"                            13.16 MB  150346 rows

在 impdp 中,我注意到序列尚未更新,因为它们已经存在。我们想强制加载这种数据。 我想过 DROP USER R1S CASCADE;

drop 命令中使用的这个 USER 是一个 SCHEMA。使用 DROP USER 命令,我们将删除名为 R1S 的模式。

我已经说过,因为在 impdp 文档中我看到我可以强制导入 schme:

SCHEMAS=R1S 

或者基本命令会做同样的工作?

impdp xxxxxx/******** FULL=Y CONTENT=ALL directory=EXPLOIT_DUMP_DIR dumpfile=expdp_X.exp LOGFILE=impdp_X.log 

简单地说,schema = user + its objects(表、视图、过程、序列...)所以 - 当您 drop user 时,它的所有对象也会被删除。

如果您对其余的导入结果感到满意(即表格已正确导入),并且如果那里没有那么多序列,也许

会更简单
  • 重新创建序列 (drop + create),或
  • alter

那些序列。第一个选项很简单,而第二个选项需要一些命令。增加它以使其达到所需的值,从中获取,将增量重置为其先前的值(默认情况下为 1)。这是一个例子:

SQL> select s.nextval from dual;

   NEXTVAL
----------
     15028

SQL> alter sequence s increment by 100000;

Sequence altered.

SQL> select s.nextval from dual;

   NEXTVAL
----------
    115028

SQL> alter sequence s increment by 1;

Sequence altered.

SQL> select s.nextval from dual;

   NEXTVAL
----------
    115029

SQL> select s.nextval from dual;

   NEXTVAL
----------
    115030

SQL>