【问题标题】:Replace all USER Objects in a Database替换数据库中的所有 USER 对象
【发布时间】:2019-09-25 23:27:18
【问题描述】:

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

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 

【问题讨论】:

    标签: oracle import oracle12c


    【解决方案1】:

    简单地说,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>
    

    【讨论】:

      猜你喜欢
      • 2011-12-25
      • 1970-01-01
      • 1970-01-01
      • 2017-08-09
      • 1970-01-01
      • 2022-12-31
      • 2017-07-31
      • 2010-12-04
      • 1970-01-01
      相关资源
      最近更新 更多