今天协助DW组的一位同事,从一个生产库上导部分表到测试库。由于测试库的表空间命名规则和生产不一样,又不想再创建不符合测试库命名规则的tablespace。
imp userid=schema/password fromuser=username1 touser=username2 ignore=y file=expfile.dmp tables=table_name;
执行后报ORA-00959:tablespace 'tablespace_name' does not exist。其实原因很明显,ignore=y ,即oracle会执行create table的ddl语句,而这个ddl语句肯定是依据原库中的语句生成的,故tablespace不存在也是很自然的了。
故想了个办法绕过,在原库上通过dbms_metadata.get_ddl包在原库上获得create table的ddl语句。select dbms_metadata.get_ddl('TABLE','table_name','schema') from dual;对该语句做一些小的修改,修改相应的schema和tablespace_name,手工在新库上执行。然后将之前的imp语句中的ignore修改为n,即不执行create table的操作,直接插入数据,当然也不会有了报错。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/11258275/viewspace-668768/
,如需转载,请注明出处,否则将追究法律责任。