如何在不同的表空间中导入oracle转储
我想将oracle转储导入另一个表空间 我有一个由用户a使用的表空间a。我已经撤销了这个用户的DBA,并给了他连接和资源的授权。然后我把所有的东西都交给了司令部 exp a/***owner=a file=oracledump.DMP log=log.log compress=y 现在,我想将转储导入到用户B使用的表空间B中。因此,我给了他connect和resource(无DBA)的授权。然后我执行了以下导入: imp b/***file=oracledump.DMP log=import.log fromuser=a touser=b 结果是一个包含大量错误的日志: IMP-00017:以下语句失败,出现ORACLE错误20001:“BEGIN DBMS\u STATS.SET\u TABLE\u STATS IMP-00003:遇到ORACLE错误20001 ORA-20001:输入值无效或不一致 之后,我尝试了相同的导入命令,但选择了statistics=none。这导致了以下错误: ORA-00959:表空间“A_TBLSPACE”不存在 如何做到这一点 注意:很多列都是CLOB类型的。看起来问题与此有关如何在不同的表空间中导入oracle转储,oracle,oracle-dump,Oracle,Oracle Dump,我想将oracle转储导入另一个表空间 我有一个由用户a使用的表空间a。我已经撤销了这个用户的DBA,并给了他连接和资源的授权。然后我把所有的东西都交给了司令部 exp a/***owner=a file=oracledump.DMP log=log.log compress=y 现在,我想将转储导入到用户B使用的表空间B中。因此,我给了他connect和resource(无DBA)的授权。然后我执行了以下导入: imp b/***file=oracledump.DMP log=import.l
注2:oracle版本是9.2、10.1和10.1 XE的混合。但我认为这与版本无关。问题与CLOB列有关。imp工具似乎无法重写create语句以使用另一个表空间 资料来源: 解决办法是: 在正确的表空间中手动创建架构。如果没有创建架构的脚本,可以使用imp工具的indexfile=来创建它 您必须自行禁用所有约束,oracle imp工具不会禁用它们 之后,可以使用以下命令导入数据: imp b/***file=oracledump.dmp log=import.log fromuser=a touser=b statistics=none ignore=y 注意:由于其他错误,我仍然需要statistics=none 有关数据泵的额外信息 从Oracle 10开始,导入/导出得到了改进:数据泵工具([) 使用此选项将数据重新导入新表空间:
将目录tempdump上的读、写权限授予一个
注意:转储文件是从服务器磁盘存储和读取的,而不是从本地(客户端)磁盘读取的。您使用的是什么版本的Oracle?如果是10g或更高版本,您应该考虑使用数据泵,而不是导入/导出。我不确定它是否能够处理这种情况,但我希望它能够处理 是10g及以上版本的exp/imp的替代品。它的工作原理与exp/imp非常相似,只是它的性能更好(据推测,我不使用它,因为我被困在9i的土地上)
如果您使用的是Oracle 10g和datapump,则可以使用REMAP_TABLESPACE子句。例如:
REMAP_TABLESPACE=A_TBLSPACE:NEW_TABLESPACE_GOES_HERE
这里有几个问题 首先,您使用的Oracle的不同版本是表统计错误的原因-当我们的一些Oracle 10g数据库升级到第2版时,我遇到了相同的问题,有些数据库仍在第1版上,我在它们之间交换.DMP文件 对我有效的解决方案是使用相同版本的
exp
和imp
工具在不同的数据库实例上进行导出和导入。通过使用同一台PC(或Oracle Server)发出所有导出和导入命令,这是最容易做到的
其次,我怀疑您得到的是ORA-00959:表空间“A_TBLSPACE”不存在
,因为您试图将.DMP文件从一个成熟的Oracle数据库导入10g Express Edition(XE)数据库,该数据库默认情况下为您创建一个名为USERS
的预定义表空间
如果是这样,那么您需要执行以下操作
imp/@XE file=indexfile=index.sql full=y
Find:'REM'替换:
Find:“”“”Replace:““USERS””
Find:“…”替换为:“REM…”
查找:“连接”替换为:“REM连接”
sqlplus/@XE@index.sql
imp/@XE file=fromuser=touser=ignore=y
当您尝试创建某些对象(如数据库作业)时,可能会出现Oracle错误页面,因为Oracle将尝试使用相同的数据库标识符,这很可能会失败,因为您在不同的数据库上。答案很难,但可行: 情况是:用户A和表空间X
impdp B/B full=Y dumpfile=DUMP.dmp REMAP_TABLESPACE=OLD_TABLESPACE:USERS
gsar -f -s"TSDAT_OV101" -r"USERS " rm_schema.dump rm_schema.n.dump
gsar -f -s"TABLESPACE """USERS """ ENABLE STORAGE IN ROW CHUNK 8192 RETENTION" -r" " rm_schema.n1.dump rm_schema.n.dump
gsar -f -s"TABLESPACE """USERS """ LOGGING" -r" " rm_schema.n1.dump rm_schema.n.dump
gsar -f -s"TABLESPACE """USERS """ " -r" " rm_schema.n.dump rm_schema.n1.dump
CREATE OR REPLACE DIRECTORY tempdump AS '/temp/old_datapump/';
GRANT READ, WRITE ON DIRECTORY tempdump TO old_user;
CREATE OR REPLACE DIRECTORY tempdump AS '/temp/new_datapump/';
GRANT READ, WRITE ON DIRECTORY tempdump TO new_user;
expdp tables=old_user.table directory=tempdump dumpfile=adump.dmp logfile=adump.log
impdp directory=tempdump dumpfile=adump_table.dmp logfile=bdump_table.log
REMAP_TABLESPACE=old_tablespace:new_tablespace REMAP_SCHEMA=old_user:new_user
-- don't care about the details
CREATE TABLESPACE DATABASE_TABLESPACE
DATAFILE 'DATABASE_TABLESPACE.dat'
SIZE 10M
REUSE
AUTOEXTEND ON NEXT 10M MAXSIZE 200M;
ALTER DATABASE DEFAULT TABLESPACE DATABASE_TABLESPACE;
CREATE USER username
IDENTIFIED BY userpassword
CONTAINER=all;
GRANT create session TO username;
GRANT create table TO username;
GRANT create view TO username;
GRANT create any trigger TO username;
GRANT create any procedure TO username;
GRANT create sequence TO username;
GRANT create synonym TO username;
GRANT create synonym TO username;
GRANT UNLIMITED TABLESPACE TO username;