如何在不同的表空间中导入oracle转储

前端之家收集整理的这篇文章主要介绍了如何在不同的表空间中导入oracle转储前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想将一个oracle转储导入到不同的表空间。

我有一个用户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将尝试使用相同的数据库标识符,这将很可能会失败,因为您在不同的数据库

原文链接:https://www.f2er.com/oracle/206982.html

猜你在找的Oracle相关文章