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 下找到,下载下来,就可以了。