使用imp(12.2.0.1.0)时收到imp-00403警告,但生成的import\ sys.sql失败,为空

gudnpqoy  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(2961)

我有一个oracle database 12c enterprise edition 12.2.0.1.0版,在windows 2019上(64位)。
简而言之,在导入转储文件时,我得到以下信息:
imp-00403:警告:此导入生成了一个单独的sql文件“import\u sys”,其中包含由于权限问题而失败的ddl。
场景的全部细节:
步骤1:sqlplus作为sysdba:

CREATE TABLESPACE TEST_1 datafile 'D:/DB_DATA/orcl/TEST_1.DBF' SIZE 1G AUTOEXTEND ON MAXSIZE 31G;
CREATE USER TEST_1 IDENTIFIED BY pwd DEFAULT TABLESPACE TEST_1 QUOTA UNLIMITED ON TEST_1;
GRANT CONNECT TO TEST_1;
GRANT RESOURCE TO TEST_1;
GRANT EXP_FULL_DATABASE TO TEST_1;
GRANT IMP_FULL_DATABASE TO TEST_1;

步骤2:sqlplus作为测试1:

CREATE TABLE TEST_1.test_table (field_1 VARCHAR2(10) NOT NULL, field_2 VARCHAR2(10) NOT NULL);
CREATE UNIQUE INDEX TEST_1.i_test_table ON TEST_1.test_table (field_1);
INSERT INTO TEST_1.test_table (field_1,field_2) VALUES ('A','B');
COMMIT;

第3步:从命令:

exp TEST_1/pwd@orcl TABLES=(TEST_1.test_table) DIRECT=Y FILE=c:\test_table.dmp

步骤4:sqlplus作为测试1:

DROP TABLE TEST_1.test_table PURGE;

第5步:从命令:

imp TEST_1/pwd@orcl TABLES=(test_table) FROMUSER=TEST_1 TOUSER=TEST_1 FILE=c:\test_table.dmp

这个表实际上是导入的,但是我得到了提到的警告。每个论坛都说这是权限问题,应该检查sql文件,但是生成的文件是空的。我还尝试将sys和sysdba授予用户,并尝试使用sysdba帐户本身进行导入-总是得到相同的结果。我已经安装了另一个数据库,但是12.2我安装了12.1,执行完全相同的步骤,我没有得到12.1中的警告。
请不要建议我使用impdp而不是imp或忽略警告等这是确切的问题,这是我需要解决的-没有升级,没有降级。
我将日志和转储文件与12.1生成的日志和转储文件进行了比较(这是有效的)-我看不出有任何区别。我怀疑这是小鬼本身的问题,但必须有一个解决办法。
有什么想法吗?

fiei3ece

fiei3ece1#

根据文件:
注意:从oracle database 12c release 2(12.2)开始,出于安全原因,导入实用程序(imp)将不再以用户sys的形式导入对象。如果转储文件包含需要重新创建为user sys的对象,则imp实用程序会尝试将其重新创建为user system。如果用户系统无法重新创建对象,则必须在导入完成后自己手动重新创建对象。
如果导入作业由具有dba角色的用户运行,并且用户系统不能重新创建所有对象,则以下警告消息将写入日志文件:

IMP-00403:
Warning: This import generated a separate SQL file "logfilename_sys" which contains DDL that failed due to a privilege issue.

生成的sql文件包含用户系统无法重新创建的对象的失败ddl。要重新创建这些对象,必须在导入完成后手动执行失败的ddl。
即使实际上没有什么要做的,也会生成警告,这可以从空文件中看到。
我的oracle支持文档id 2298963.1提到这一点并说:
如果文件为空,则不需要手动重新创建任何对象。
由于您检查了该文件,但该文件为空,并且没有其他警告或错误,因此可以忽略此(虚假)警告。当没有相关的对象使用上面的定义时,它会在不需要的时候报告警告,这似乎是一个很小的错误。
要避免这种情况,请以不具有dba角色的用户身份运行导入。至少,医生是这么说的。。。但是你的用户没有这个角色。看来这项限制实际上与 exp_full_database 和/或 imp_full_database 角色,您的用户确实拥有这些角色,并且这些角色被授予dba(由 catexp.sql ). 考虑到这些角色有多么强大,这样做是有道理的,但是文档的混乱是没有帮助的(在19世纪的文件中也是如此;我已经给了甲骨文反馈,回到你的问题。)
在你的例子中,你不需要 exp_full_database 或者 imp_full_database 角色,因为您只在单个架构上操作。如果撤销这些角色,警告应该消失。

相关问题