将DMP文件导入到非常不同的数据库时,文件名无效

时间:2018-01-17 15:27:01

标签: oracle

我创建了一个全新的Oracle数据库,我正在尝试从另一个数据库的完整备份中导入DMP文件,我收到了一些错误。

命令

impdp system/welcome1 full=yes directory=BACKUPSDR dumpfile=bck_full_AXISPROD_15012018.dmp logfile=bck_full_AXISPROD_15012018.LOG

错误

Processing object type DATABASE_EXPORT/TABLESPACE
ORA-39083: Object type TABLESPACE failed to create with error:
ORA-02236: invalid file name
Failing sql is:
CREATE UNDO TABLESPACE "UNDOTBS1" DATAFILE SIZE 209715200 AUTOEXTEND ON NEXT 5242880 MAXSIZE 32767M BLOCKSIZE 8192 EXTENT MANAGEMENT LOCAL AUTOALLOCATE

2 个答案:

答案 0 :(得分:0)

以下并非必须正确,但可能会给你一些想法。

我已经格式化了您发布的漫长内容,只是为了强调--> here

ORA-02236: invalid file name

CREATE UNDO TABLESPACE "UNDOTBS1" 
DATAFILE                                     --> here
SIZE 209715200 AUTOEXTEND ON 
NEXT 5242880 MAXSIZE 32767M 
BLOCKSIZE 8192 EXTENT 
MANAGEMENT LOCAL AUTOALLOCATE

如您所见,数据文件名称缺失。有效吗?

如果您 - 在源数据库中 - 提取用于创建表空间的DDL,例如我的11g XE上的以下示例,您将看到如下内容:

SQL> select dbms_metadata.get_ddl ('TABLESPACE', tablespace_name)
  2  from dba_tablespaces;

  CREATE UNDO TABLESPACE "UNDOTBS1" 
  DATAFILE 'C:\ORACLEXE\APP\ORACLE\ORADATA   --> here

  CREATE TABLESPACE "SYSAUX" 
  DATAFILE                                   --> here
  SIZE 10485760
  AUTOEXTEND ON NEXT 104

UNDO表空间包含数据文件名。 SYSAUX没有。怎么会?如果显示DB_CREATE_FILES_DEST的当前值(如果设置,则告诉Oracle默认情况下在哪里创建数据文件):

SQL> show parameter DB_CREATE_FILE_DEST;
db_create_file_dest                  string
你可能会看到一些东西。在我的XE中,该参数未设置。

因此,我认为IMPDP期望与源数据库中设置的数据文件位置相同。如果它不存在,则会引发错误。

你能检查一下吗?

如果它出现问题,你应该提取CREATE TABLESPACE命令(就像我一样),修改数据文件名,使它们不再无效并预先创建表空间。如果您不确定它们应该有多大,请运行

SQL> select tablespace_name, sum(bytes) / (1024 * 1024) size_in_MB
  2  from dba_segments
  3  group by tablespace_name;
SYSAUX                           643,8125
UNDOTBS1                          10,1875
USERS                              4,1875
SYSTEM                            355,875

然后重复IMPDP并排除表空间,例如

exclude=tablespace:"IN ('UNDOTBS1', 'USERS')"

答案 1 :(得分:0)

在列出的SQL中可以看到,DATAFILE没有值。这意味着Oracle将尝试在默认位置创建数据文件。如果未设置该位置,则CREATE将失败。

您可以通过以下方式检查表空间的默认位置:

SQL> show parameter DB_CREATE_FILE_DEST;

NAME                  TYPE     VALUE
--------------------- -------- ------------------------------
db_create_file_dest   string

上面,它没有价值。要设置值,请使用alter system set

SQL> alter system set DB_CREATE_FILE_DEST='/ORCL/u02/app/oracle/oradata/ORCL/orclpdb1';

System altered.

SQL> show parameter DB_CREATE_FILE_DEST;

NAME                  TYPE     VALUE
--------------------- -------- ------------------------------------------
db_create_file_dest   string   /ORCL/u02/app/oracle/oradata/ORCL/orclpdb1

在这里,/ORCL/u02/app/oracle/oradata/ORCL/orclpdb1是使用https://container-registry.oracle.com/中的Oracle 12.2.0.1容器的第一个可插入数据库(PDB)中表空间的路径。