IMPDP – ORA-39083 ORA-01917 (user or role does not exist) Errors On A Schema Or Table or Tablespace Level Import Data Pump Job (Doc ID 1916469.1)
In this Document
Symptoms |
Changes |
Cause |
Solution |
References |
APPLIES TO:
Oracle Database – Enterprise Edition – Version 10.1.0.2 to 12.2.0.1 [Release 10.1 to 12.2]
Oracle Database – Standard Edition – Version 10.1.0.2 to 12.2.0.1 [Release 10.1 to 12.2]
Oracle Database – Personal Edition – Version 10.1.0.2 to 12.2.0.1 [Release 10.1 to 12.2]
Enterprise Manager for Oracle Database – Version 10.1.0.2 to 13.1.2.0.0 [Release 10.1 to 13.1]
Information in this document applies to any platform.
***Checked for relevance on 26-Feb-2016***
SYMPTOMS
1. You created a schema with grants to other users or roles, e.g.:
connect / as sysdba
— create a role:
create role my_role;
— create test schema’s
create user tc identified by tc default tablespace users
temporary tablespace temp;
alter user tc quota unlimited on users;
grant create session, create table, create role to tc;
create user tc2 identified by tc default tablespace users
temporary tablespace temp;
alter user tc2 quota unlimited on users;
grant create session, create table to tc2;
— create a test table and grants:
connect tc/tc
create table tc.my_tab (nr number, txt varchar2(10));
grant select on my_tab to tc2;
grant insert on my_tab to my_role;
connect / as sysdba
2. You want to move the schema to a different database and you export the schema with Export Data Pump, e.g.:
$ expdp system/manager directory=my_dir dumpfile=expdp_tc.dmp logfile=expdp_tc.log reuse_dumpfiles=y schemas=tc
Export: Release 11.2.0.4.0 – Production on Tue Aug 12 15:07:39 2014
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 – 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
FLASHBACK automatically enabled to preserve database integrity.
Starting “SYSTEM”.”SYS_EXPORT_SCHEMA_01″: system/******** directory=my_dir dumpfile=expdp_tc.dmp logfile=expdp_tc.log reuse_dumpfiles=y schemas=tc
Estimate in progress using BLOCKS method…
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 0 KB
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/TABLESPACE_QUOTA
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT
. . exported “TC”.”MY_TAB” 0 KB 0 rows
Master table “SYSTEM”.”SYS_EXPORT_SCHEMA_01″ successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_SCHEMA_01 is:
/u01/expdp/EXPDP_TC.DMP
Job “SYSTEM”.”SYS_EXPORT_SCHEMA_01″ successfully completed at Tue Aug 12 15:07:50 2014 elapsed 0 00:00:09
3. You import the schema with Import Data Pump, but the following errors are seen:
$ impdp system/manager directory=my_dir dumpfile=expdp_tc.dmp logfile=impdp_tc.log schemas=tc
Import: Release 11.2.0.4.0 – Production on Tue Aug 12 15:29:00 2014
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 – 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Master table “SYSTEM”.”SYS_IMPORT_SCHEMA_01″ successfully loaded/unloaded
Starting “SYSTEM”.”SYS_IMPORT_SCHEMA_01″: system/******** directory=my_dir dumpfile=expdp_tc.dmp logfile=impdp_tc.log schemas=tc
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/TABLESPACE_QUOTA
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . imported “TC”.”MY_TAB” 0 KB 0 rows
Processing object type SCHEMA_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT
ORA-39083: Object type OBJECT_GRANT failed to create with error:
ORA-01917: user or role ‘MY_ROLE’ does not exist
Failing sql is:
GRANT INSERT ON “TC”.”MY_TAB” TO “MY_ROLE”
ORA-39083: Object type OBJECT_GRANT failed to create with error:
ORA-01917: user or role ‘TC2’ does not exist
Failing sql is:
GRANT SELECT ON “TC”.”MY_TAB” TO “TC2”
Job “SYSTEM”.”SYS_IMPORT_SCHEMA_01″ completed with 2 error(s) at Tue Aug 12 15:29:04 2014 elapsed 0 00:00:02
CHANGES
CAUSE
1. Errors such as:
ORA-39083: Object type OBJECT_GRANT failed to create with error:
ORA-01917: user or role ‘TC2’ does not exist
are reported during an Import Data Pump because a schema (TC) was exported, which had objects with grants to other users or roles (like TC2 or MY_ROLE).
In the target database, those users or roles did not exist, and as a result the import fails to grant privileges to those non-existing users or roles.
2. This problem also reproduces for TABLE level Export DataPump jobs (TABLES=…), or TABLESPACE level (TABLESPACES=…), or TRANSPORT_TABLESPACE level jobs (TRANSPORT_TABLESPACES=…).
SOLUTION
1. Ignore those errors after confirming that these missing grants do not impact what you want to achieve with the import.
– OR –
2. Also import the missing schemas’s and roles into the target database and then re-import the grants, e.g.:
— on the source database, run another Export Data Pump job, and export the users and/or roles that were reported in the errors of the earlier import Data Pump job:
$ expdp system/manager directory=my_dir dumpfile=expdp_users.dmp logfile=expdp_users.log reuse_dumpfiles=y full=y include=user:\”in(\’TC2\’, \’MY_ROLE\’)\” include=role:\”in(\’TC2\’, \’MY_ROLE\’)\”
— on the target database, import these users and roles:
$ impdp system/manager directory=my_dir dumpfile=expdp_users.dmp logfile=impdp_users.log full=y
— on the target database, re-run an import of the grants:
$ impdp system/manager directory=my_dir dumpfile=expdp_tc.dmp logfile=impdp_tc.log schemas=tc include=grant
– OR –
2. Alternatively you can avoid the errors by ensuring that the schema’s and roles also exist in the target database before the import starts, e.g.:
— on the source database, export the schema you want to move:
$ expdp system/manager directory=my_dir dumpfile=expdp_tc.dmp logfile=expdp_tc.log reuse_dumpfiles=y schemas=tc
— on the source database, export the users and/or roles that have grants on objects owned by TC:
$ expdp system/manager directory=my_dir dumpfile=expdp_users.dmp logfile=expdp_users.log reuse_dumpfiles=y full=y include=user:\”in(\’TC2\’, \’MY_ROLE\’)\” include=role:\”in(\’TC2\’, \’MY_ROLE\’)\”
— on the target database, import these users and roles:
$ impdp system/manager directory=my_dir dumpfile=expdp_users.dmp logfile=impdp_users.log full=y
— on the target database, import the schema you want to move:
$ impdp system/manager directory=my_dir dumpfile=expdp_tc.dmp logfile=impdp_tc.log schemas=tc
– OR –
4. Alternatively you can avoid the errors by excluding all object GRANTS during the Export or Import Data Pump job, e.g.:
$ impdp system/manager directory=my_dir dumpfile=expdp_tc.dmp logfile=impdp_tc.log schemas=tc exclude=grant
Note that this will exclude ALL grants, also grants on objects owned by TC to users or roles that do exist in the target database.