oracle导入dmp的时候提示某个表空间不存在,但这个表空间确实已经建立好了,是啥问题呢

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle导入dmp的时候提示某个表空间不存在,但这个表空间确实已经建立好了,是啥问题呢相关的知识,希望对你有一定的参考价值。

该dmp文件有多个表空间,我把这些表空间都给同一个用户user配额了,user也授权了dba,resource权限了,但imp的时候就是提示tablespace XXX dose not exist

建议你使用下面的语句(在源库),查看一下用户所用的表空间,是否真的在你的目的库已经存在了
--源库
select distinct a.tablespace_name from dba_segments a where a.owner =upper('username');
select distinct a.temporary_tablespace from dba_users a where a.username =upper('username');

--目的库select name from v$datafile;

提示:既然系统都报错了,肯定八九不离十,先核对核对吧!追问

我查了一下,我原先给这个用户分配了5个表空间,其中一个是默认的,另外4个表空间是用如下语句分配的:alter user username quota unlimited on tablespace_name;结果刚刚查下来该用户的表空间只有默认的表空间和用上面语句执行分配的最后一个表空间,其他的表空间也是用上面的语句执行的,会不会系统只认最后一个分配给他的表空间?

追答

系统默认的给用户的存储表数据的表空间是在创建用户的时候指定的,如果没有指定就默认在user表空间,指定表空间的语句如下:
create user testserver_user identified by testserver_user default tablespace table_spacename;
你如果迁移的话,按照源库先整理吧,然后在目的库,再做合理的分配,比如这个用户需要建立分区表,就要指定表空间去建立这样的表,又或该用户下的表比较多,那么就可以考虑将表的索引建立在一个单独的表空间了,这样的话,便于管理。

追问

我指的有一个默认的表空间,就是在建用户的时候制定的哪个默认表空间,用的就是你上面的那段代码

追答

那你使用这个用户所建立的表都默认就建立在那个表空间啦,没特殊指定的话,都默认了

参考技术A 在数据库里面你没有指定dmpd的路径这个是需要创建的 然后授权才能读取导入
CREATE OR REPLACE DIRECTORY
DMPDP AS
'/oracledata/dmpdp';//你的dmpdp的文件存在路径

//用户授权
GRANT READ, WRITE ON DIRECTORY SYS.DMPDP TO IMA_MLC;
参考技术B 哪个表空间没有就建哪个,这样应该就没有问题,从未遇到过楼主的问题 参考技术C dmp文件导出的时候表空间的命名和你现在新建的表空间是一致的吗?追问

很肯定是一致的

oracle导入dmp 各种表空间不存在

报了一堆警告。。。所幸的是好像大多数都导入成功了?

参考技术A 如果你是自己学习用或者测试用,可以考虑把原本存在不同表空间的数据都导入到相同的表空间。
具体做法是remap_tablespace=tablespace1:tablespace2
上面的tablespace1就是你导入过程中提示不存在的表空间, tablespace2是你用来存放数据的表空间。
参考技术B 用sys或system用户登入,创建不存在的表空间,再进行导入。追问

表空间怎么创建? cmd界面下和plsql界面哪个容易点,讲清楚点呗

追答

在PLSQL建。
CREATE [SMALLFILE|BIGFILE] TABLESPACE tablespace_name
DATAFILE datefile_clause1 [,datefile_clause2] ……
[ EXTENT MANAGEMENT LOCAL ]
[ UNIFORM SIZE nnnnK|M ]
[ AUTOALLOCATE ]
[ SEGMENT SPACE MANAGEMENT AUTO|MANUAL ]
[ BLOCKSIZE nnnnK|M ]
[ ONLINE|OFFLINE ]
[ LOGGING|NOLOGGING ];
其中:
SMALLFILE|BIGFILE -- 小文件|大文件,省略为小文件;
tablespace_name — 表空间名
Datafile_Clause — 完整语法如下:
path\file_nameSIZEnnnnK|M REUSE
[AUTOEXTEND OFF|ON NEXT nnnnK|M MAXSIZE nnnnK|M|UNLIMITED ]
其中:
path\file_name — 数据文件的存储路径和文件名;
SIZE nnnn K|M -- 文件大小;
REUSE — 如果File 已经存在,用原文件新Size,原来无File,则忽略REUSE;
AUTOEXTEND — 文件空间自动增加,缺省等于AUTOEXTEND OFF;
ON NEXTnnnnK|M — 文件空间自动增加大小;
MAXSIXE nnnnK|M — 最大空间;
UNLIMITED — 无限制。
EXTENT MANAGEMENT LOCAL — 代表本地化表空间,可以缺省;
UNIFORM -- 区大小相同,默认为1M
AUTOALLOCATE — 区大小系统动态自动分配。缺省等于AUTOALLOCATE。
SEGMENT SPACE MANAGEMENT — 段空间分配方式;
BLOCKSIZE — 创建非标准块表空间。如果创建16K块标准的表空间,则需要设置参数
DB_16K_BLOCK_SIZE=16384。缺省时块大小按参数DB_BLOCK_SIZE创建;
ONLINE|OFFLINE — 表空间联机/脱机。缺省等于ONLINE;LOGGING|NOLOGGING — 创建日志/不创建日志。缺省等于LOGGING。

参考技术C 新建表空间

以上是关于oracle导入dmp的时候提示某个表空间不存在,但这个表空间确实已经建立好了,是啥问题呢的主要内容,如果未能解决你的问题,请参考以下文章

oracle用imp导入用户数据时,提示表或视图不存在

oracle的dmp文件可以导入到别的表空间吗

Oracle dmp文件导入(还原)到不同的表空间和不同的用户下

如何在Oracle中建表空间、建用户并导入dmp文件详解

oracle dmp导入后还需要建立表空间吗?

oracle导入dmp是不是表空间要一致?