Oracle 11 exp命令导出分区表dmp文件报错EXP-00003解决方法&数据泵导出表数据

1.命令:(直接在cmd执行,不用登录plsql)

例如:exp username/password@TEST file=E:\STUDENT.dmp tables=(STUDENT)

导出表STUDENT到本地E盘目录,username和password分别是数据库用户名和密码,TEST是数据库;

 

2.执行时发生错误,EXP报错:exp-00003:未找到段(0,0)定义

百度说是因为:数据库在exp导出11g时报错EXP-00003。在11g版本中在没有数据的情况下是不会分配extent。所以如果出现这种情况需要手动对表分配extent。

 

 

3.解决方案,找到一些的语句不行,查出来想要导出的表并不是空表,最后找到一个语句是,这个语句的结果能够看到想要导出的表是没有分配extend的.

select 'alter table '||table_name||' allocate extent(size 64k);' sql_text,table_name,tablespace_name

from user_tables where table_name not in (select segment_name from user_segments where segment_type = 'TABLE');

 

4.把执行出来的结果SQL_TEXT拿出来执行,给表分配extend:

alter table STUDENT allocate extent(size 64k);

但是执行报错ORA-14254: 不能为 (组合) 范围分区表或列表分区表指定 ALLOCATE STORAGE

 

 

5.解决ORA-14254:这个错误,应该是因为要这个表有分区的原因,不能够对整个表进行分配extend, 修改上面的SQL_TEXT,按照分区对表进行分配extend. 没有报错。

alter table STUDENT modify partition STUDENT_00 allocate extent;

STUDENT_00是表的分区名字,表的分区有多个,要对每个分区执行上面这个语句;

 

6.把表的每个分区都分配了extend了之后,重新到cmd执行exp命令,不会报错。

导出的时候是按照分区导出的,所有分区导出的行数加起来和表的记录数相同。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------使用数据泵导出数据-----------------------------------------------------

使用数据泵,即:expdp导出数据:

expdp操作后导出的dmp文件是在服务端的,不能直接导出到客户端的电脑上。

所以是 远程服务器端,进行导出操作,再把dmp文件下载下来。

select * from dba_directories;

create directory expdpdataname'/data11/expdpdata';

 

 

插入一条数据到dba_directories,指定的directory_path是服务端|数据库所在服务器的路径[路径自己挑],下面再用对应的directory_name执行expdp操作;

在cmd直接输入该sql语句执行

expdp 用户名/密码@数据库名 DUMPFILE=表名.dmp TABLES=(用户名.表名)  DIRECTORY=expdpdataname

会要求输入 用户名密码 登录,连接后 显示

启动.....

正在使用BLOCKS 方法进行估计.....

处理对象类型 ..... 

使用BLOCKS方法的总估计:....

.....

处理对象类型....

导出了... ....

...的转储文件集为:/data11/expdpdata/表名.dmp

 

最后,到数据库服务器的路径 /data11/expdpdata/表名.dmp 下找到,下载下来,就可以了。

 

 

 

你可能感兴趣的:(oracle)