我有一个用户A使用的表空间A.我已撤销该用户的DBA,并授予他的连接和资源。然后我用命令转储了一切
exp a/*** owner=a file=oracledump.dmp log=log.log compress=y
现在我想导入转储到用户B使用的表空间B.所以我给他授予连接和资源(没有DBA)。然后我执行了以下导入:
imp b/*** file=oracledump.dmp log=import.log fromuser=a touser=b
结果是具有大量错误的日志:
IMP-00017: following statement Failed with ORACLE error 20001: “BEGIN DBMS_STATS.SET_TABLE_STATS@H_301_17@ IMP-00003: ORACLE error 20001 encountered@H_301_17@ ORA-20001: Invalid or inconsistent input values
之后,我尝试了相同的导入命令,但选项statistics = none。这导致以下错误:
ORA-00959: tablespace ‘A_TBLSPACE’ does not exist
应该怎么做呢?
注意:很多列的类型是CLOB。它看起来像问题有关的。
注2:oracle版本是9.2,10.1和10.1 XE的混合。但我不认为它与版本有关。
首先,您使用的Oracle的不同版本是表统计错误的原因 – 我有一个问题,当我们的一些Oracle 10g数据库升级到版本2,一些仍然在版本1和我正在交换。 DMP文件。
对我有用的解决方案是使用相同版本的exp和imp工具在不同的数据库实例上导出和导入。通过使用同一台PC(或Oracle Server)发出所有导出和导入命令,这是最容易的。
其次,我怀疑你得到的ORA-00959:tablespace’A_TBLSPACE’不存在,因为你试图将一个.DMP文件从一个成熟的Oracle数据库导入到10g快速版(XE)数据库,默认情况下为您创建一个名为USERS的单个预定义表空间。
如果是这样,那么您需要执行以下操作。
>使用.DMP文件,创建包含结构(Tables)的sql文件:
imp< xe_username> /< password> @XE file =< filename.dmp> indexfile = index.sql full = y@H_301_17@>在文本编辑器中打开索引文件(index.sql),可以在整个文件中查找和替换,并发出以下find和replace语句IN ORDER(忽略单引号..’):
查找:“REM< space>替换:< nothing>
查找:’“< source_tablespace>”’替换:’“USERS”’
查找:’…’替换:’REM …’
查找:“CONNECT”替换:“REM CONNECT”@H_301_17@>保存索引文件,然后对您的Oracle Express Edition帐户运行它(我发现最好创建一个新的空白XE用户帐户 – 或者如果我刷新,删除并重新创建):
sqlplus< xe_username> /< password> @XE @ index.sql@H_301_17@>最后运行相同的.DMP文件,您为相同的帐户创建索引文件以导入数据,存储过程,视图等:
imp< xe_username> /< password> @XE file =< filename.dmp> fromuser =< original_username> touser =< xe_username> ignore = y
当尝试创建某些对象(如数据库作业)时,您可能会收到Oracle错误的页面,因为Oracle将尝试使用相同的数据库标识符,这将很可能会失败,因为您在不同的数据库。