问题背景
今天下午测试的小伙伴微信上找我说测试环境有一个表在进行导出时提示找不到表,但是可以查询表中的数据,心里想这导数据的方法早就给过他们脚本了,改下参数直接到就可以了。具体的信息如下图:
问题分析:
于是在自己的本机环境上去测试下,先创建一个测试表,建表脚本如下:
create table parttab001
(
col001 number,
col002 varchar2(1000)
) partition by range (col001)
(
partition p001 values less than (1000001),
partition p002 values less than (2000001),
partition p003 values less than (3000001),
partition p004 values less than (4000001),
partition p005 values less than (5000001)
);
##构造数据
declare
stmt varchar2(2000);
begin
for j in 1..3000000 loop
stmt := 'insert into parttab001 values ('||to_char (j)||', lpad (to_char ('||to_char (j)||'), 1000, '||'''0'''||'))';
execute immediate stmt;
-- commit after every 100000 rows
if mod (j, 100000) = 0 then
commit;
end if;
end loop;
commit;
end;
/
使用如下的导出脚本进行导出:
expdp \"/ as sysdba\" directory=tmp dumpfile=parttab001_%u.dmp logfile=expdp_parttab001.log tables=sys.PARTTAB001 job_name=test_usr parallel=2
问题重现了,同样提示对象不存在,如下图:
但数据库中是有这个表的,能查询到数据:
这就有点奇怪了,于是到MOS上去搜了下,搜到
DataPump Export (EXPDP) Fails With Error ORA-39165: Schema SYS Was Not Found (Doc ID 553402.1)
问题修复:
1、使用exp进行导出
2、使用CTAS把表创建到其它用户下面再进行导出