Search code examples
oracle-databaseimportoracle12c

Replace all USER Objects in a Database


My question is related to the meaning of USER in Oracle. We have a database with many user, but R1S contains almost all the tables, sequence, etc. We want to load new tables data, but we also need to update the sequence values to be in phase with the table data.

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

in the impdp I've noticed that the sequences hadn't been updated because they already exists. We want to force the load of this kind of data. I've thought in do a DROP USER R1S CASCADE;

This USER used in the drop command is an SCHEMA. With the DROP USER command we are deleting the schema called R1S.

I've said that because in the impdp documentation i see i can force schme import :

SCHEMAS=R1S 

Or the basic command will do the same job ?

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

Solution

  • Simply put, schema = user + its objects (tables, views, procedures, sequences, ...) so - when you drop user, all its objects are also dropped.

    If you are happy with the rest of import results (i.e. tables are correctly imported), and if there are not that many sequences there, perhaps it would be simpler to

    • recreate sequences (drop + create), or
    • alter

    those sequences. The first option is easy, while the second requires a few commands. Increment it so that it reaches desired value, fetch from it, reset increment to its previous value (1, by default). Here's an example:

    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>