EXP导出
一.导出前准备:
1.设置NLS_LANG环境变量
(1)查看数据库用的啥子字符集
col PARAMETER for a20
col VALUE for a30
select * from nls_database_parameters
where PARAMETER in ('NLS_LANGUAGE','NLS_TERRITORY','NLS_CHARACTERSET')
/
-------------------- ------------------------------
NLS_LANGUAGE
NLS_TERRITORY
NLS_CHARACTERSET
(2)指定当前shell的NLS_LANG参数(即设置exp工具的字符集)
[oracle@test64 ~]$ export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
2.查看要导出的几张表大小,估算dmp文件大小(实际值一般会比这少,因为导出的是使用了的块,另外exp支持压缩,而expdp是自动压缩的)
col SEGMENT_NAME for a15
col PARTITION_NAME for a20
col size for a10
select SEGMENT_NAME,PARTITION_NAME,BYTES/1024/1024 ||' m' "size" from user_segments
where PARTITION_NAME like 'xxxxx_201111_%'
/
--------------- -------------------- ----------
xxxxx
xxxxx
xxxxx
3.查看要导出的磁盘是否有空间
[oracle@test64 backup]$ df -h .
Filesystem
/dev/mapper/VolGroup01-backup
二.开始导出
[oracle@test64 backup]$ exp xxxxx/xxxxx direct=y log=/backup/test_exp.log grants=n indexes=n constraints=n triggers=n file=test_exp.dmp tables=(schema.table:xxxxx_201111_1,schema.table:xxxxx_201111_2,schema.table:xxxxx_201111_3)
红色参数请按自身情况设置。默认都是y
因为导出的是分区表,并没有将整表导出,可能会报EXP-00091: Exporting questionable statistics.
EXP-00091报错原因及解决办法请看http://blog.sina.com.cn/s/blog_8e5b826701011v2a.html
最后导出834M的dmp文件,耗时大概是1分多钟
=================================================================================================
IMP导入
三.导入前准备
1.根据要导入的数据库,设置NLS_LANG环境变量
2.查看要导入的表空间是否够用
四.开始导入
[oracle@test64 backup]$ nohup imp system/oracle log=/backup/test_imp.log ignore=y file=test_exp.dmp fromuser=webdb touser=webdb tables=(schema.table:xxxxx_201111_1,schema.table:xxxxx_201111_2,schema.table:xxxxx_201111_3 buffer=40960000 &
如果指定了fromuser和touser参数,再指定schema就会报错,将schema去掉就行了
buffer参数是导入时使用的缓存,数据从硬盘中的dmp文件读入缓存,再从缓存写入数据库dbf文件。这个buffer并不是越大越好
导入时间25分钟
参考书籍《涂抹ORACLE--三思笔记之一步一步学oracle》第12章import/export导入和导出数据
================================================================================================
表模式、用户模式、表空间模式、数据库模式
如果不是用dbca建库,而是手工建库的。必须首先执行cataxp.sql或catalog.sql(后者中包含调用cataxp.sql的语句)
cataxp.sql脚本:创建IMPORT/EXPORT所需数据字典及相关视图、EXP_FULL_DATABASE、IMP_FULL_DATABASE角色的创建并授权给dba用户
如果需要导出或导入其他人的schema,则分别需要以上2个权限。
grant EXP_FULL_DATABASE to scott;
在执行跨版本的数据迁移任务时,尽可能用低版本的EXP执行导出(源端和目标端数据库版本中,哪个低就用哪个执行导出),尽可能用目标端数据库的IMP版本执行导入。
exp help=y
imp和emp读取参数时,以最后读取到的为准
IMP和EMP无法迁移外部表的数据
所谓的全库导出,只是逻辑上的全库,只导出与用户数据相关的对象。
exp \'sys/oracle as sysdba\'
[oracle@test64 exp]$
Note: grants on tables/views/sequences/roles will not be exported
Note: indexes on tables will not be exported
Note: constraints on tables will not be exported
windows系统
FAT16
FAT32
NTFS
linux系统
ext2
Block大小
最大單一檔案限制
最大檔案系統總容量
[root@test64 ~]# tune2fs -l /dev/sda1 | grep -i "block size"
Block size:
常规导出,BUFFER=512000
direct=y直接路径导入法,recordlength指定exp的i/o buffer,最大不超过65535,设置为数据库DB_BLOCK_SIZE的整数倍比较好。16K、32K、64K,建议设置为65545
直接路径导出的条件:
1.
2.
3.
4.
IMP导入的参数与EXP并没有直接关系,如以表模式导出的dump文件,可以用IMP以用户模式或full模式导入。
IMP的几个条件
1.
2.
3.
导入表和导出表的顺序
create table ---> 创建表数据(insert、dump) ---> 创建位图index ---> create constraints、views、produces、trigger并启动 ---> 导入bitmap、function-based、domain等类型索引
当目标表空间环境与源表空间环境不同的时候
1.
2.
仅导入表结构,不要数据(可用于导数据库的机构)
事先需要准备好用户,表空间
imp后面加个参数
IMP可能会出现的几个问题
1.对象已存在
ignore=n(默认),IMP输出对象创建错误的信息,导致出错的对象会被跳过,IMP继续处理后续的对象。如果当前处理的对象类型是表的话,那么数据并不会被导入。
ignore=y,如果对象已存在,IMP会忽略这个问题,继续向对象插入数据,无论表中是否有数据、或有重复数据。IMP有可能会因报其他错误而中止。即使没有中止,也有可能造成一些逻辑错误。
2.记录不一致
目标端没有满足源端的数据格式要求
3.序列未变
如果ignore=y,且目标端有同名的序列,那么目标端的序列值不会有改变,如果想目标端的序列值跟源端一样,就删除目标端同名的序列
4.重复数据
如果ignore=y,且表中不含唯一索引、唯一约束的话
注:导入前确保不会记录重复、导入后查看是否有重复记录、确认为错误数据后手工删除
5.记录未被完全导入
如果ignore=y,且目标表有唯一索引、唯一约束、或其他约束的话,一旦发现要导入的数据不符合当前约束条件,导入就会报错(方便分析原因),然后跳过该条数据,继续处理下一条。
注:NOT NULL、唯一约束、主键(或not null+唯一索引)、外键、check约束
导入834M文件,buffer=40960000