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

标签 oracle oracle-dump

我想将 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 IMP-00003: ORACLE error 20001 encountered ORA-20001: Invalid or inconsistent input values

之后,我尝试了相同的导入命令,但使用了选项 stats=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 文件。

对我有用的解决方案是使用相同版本的 expimp用于在不同数据库实例上进行导出和导入的工具。最简单的方法是使用同一台 PC(或 Oracle 服务器)发出所有导出和导入命令。

其次,我怀疑您得到的是 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. 在可以对整个文件进行查找和替换的文本编辑器中打开索引文件 (index.sql),然后按顺序发出以下查找和替换语句(忽略单引号..'):

    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 文件,以导入数据、存储过程、 View 等:

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

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

关于oracle - 如何在不同的表空间中导入 oracle 转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61963/

相关文章:

oracle - Application Express 中报告的多个链接列?

java - Hibernate createSqlQuery 没有从数据库获取 blob 数据 - query.list() 上的 "NumberFormatException"

oracle - 如何确定 Oracle Data Pump 导出文件中的模式

oracle - 将oracle10g数据dmp文件导入oracle 11g

oracle - 如何使用 expdp 导出 Oracle 中的用户及其角色和系统权限?

Oracle 导入转储文件抛出 ORA-39088 错误

oracle - 如何在oracle上添加主键约束?

oracle - oracle如何管理一个hash分区

sql-server - "FirstName"和 "LastName"存储在数据库 USER 或 USER_PROFILE 表中?

oracle - IMPDP remap_schema 多个文件