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

Mic*_*eem 37 oracle

我想将oracle转储导入另一个表空间.

我有一个用户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:以下语句因ORACLE错误20001失败:"BEGIN DBMS_STATS.SET_TABLE_STATS IMP-00003:ORACLE错误20001遇到ORA-20001:输入值无效或不一致

之后我尝试了相同的导入命令,但选项statistics = none.这导致以下错误:

ORA-00959:表空间'A_TBLSPACE'不存在

该怎么做?

注意:很多列都是CLOB类型.看起来问题与此有关.

注2:oracle版本是9.2,10.1和10.1 XE的混合.但我不认为它与版本有关.

And*_*rew 33

你在这里遇到了几个问题.

首先,您正在使用的Oracle的不同版本是表统计信息错误的原因 - 当我们的一些Oracle 10g数据库升级到版本2时,我遇到了同样的问题,而且有些版本仍在版本1上,而且我正在交换.它们之间的DMP文件.

对我有用的解决方案是使用相同版本的工具expimp工具在不同的数据库实例上进行导出和导入.通过使用相同的PC(或Oracle Server)发出所有导出和导入命令,这是最容易做到的.

其次,我怀疑你是ORA-00959: tablespace 'A_TBLSPACE' does not exist因为你正试图将一个.DMP文件从一个完整的Oracle数据库导入到10g Express Edition(XE)数据库中,默认情况下,该数据库会创建一个预定义的表空间USERS.您.

如果是这种情况,那么你需要做以下事情..

  1. 使用.DMP文件,创建包含结构(表)的SQL文件:

    imp <xe_username>/<password>@XE file=<filename.dmp> indexfile=index.sql full=y

  2. 在文本编辑器中打开indexfile(index.sql),该编辑器可以查找并替换整个文件,并在IN ORDER中发出以下查找和替换语句(忽略单引号..'):

    Find: 'REM<space>' Replace: <nothing>

    Find: '"<source_tablespace>"' Replace: '"USERS"'

    Find: '...' Replace: 'REM ...'

    Find: 'CONNECT' Replace: 'REM CONNECT'

  3. 保存索引文件,然后针对您的Oracle Express Edition帐户运行它(我发现最好创建一个新的空白XE用户帐户 - 或者如果我正在刷新则删除并重新创建):

    sqlplus <xe_username>/<password>@XE @index.sql

  4. 最后运行相同的.DMP文件,您使用相同的帐户创建索引文件,以导入数据,存储过程,视图等:

    imp <xe_username>/<password>@XE file=<filename.dmp> fromuser=<original_username> touser=<xe_username> ignore=y

在尝试创建某些对象(例如数据库作业)时,您可能会收到Oracle错误页面,因为Oracle将尝试使用相同的数据库标识符,这很可能会因为您位于不同的数据库而失败.


小智 16

如果您使用的是Oracle 10g和datapump,则可以使用REMAP_TABLESPACE子句.例:

REMAP_TABLESPACE=A_TBLSPACE:NEW_TABLESPACE_GOES_HERE
Run Code Online (Sandbox Code Playgroud)


小智 6

对我来说这项工作没问题(Oracle数据库10g快捷版10.2.0.1.0版):

impdp B/B full=Y dumpfile=DUMP.dmp REMAP_TABLESPACE=OLD_TABLESPACE:USERS
Run Code Online (Sandbox Code Playgroud)

但是对于新的恢复,您需要新的表空间

PS也许有用http://www.oracle-base.com/articles/10g/OracleDataPump10g.php

  • 是的,但是要使用 expdb/impdb,您需要数据库上的一个目录...我没有创建该目录的权限。 (2认同)