IMP & EMP实例

来源:互联网 发布:上交所技术公司 知乎 编辑:程序博客网 时间:2024/05/17 07:53

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')
/

PARAMETER            VALUE
-------------------- ------------------------------
NLS_LANGUAGE         AMERICAN
NLS_TERRITORY        AMERICA
NLS_CHARACTERSET     AL32UTF8

 

(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_%'
/

SEGMENT_NAME    PARTITION_NAME       size
--------------- -------------------- ----------
xxxxx           xxxxx_201111_1      288 m
xxxxx           xxxxx_201111_2      296 m
xxxxx           xxxxx_201111_3      304 m

 

 

3.查看要导出的磁盘是否有空间

[oracle@test64 backup]$ df -h .
Filesystem            容量  已用 可用 已用% 挂载点
/dev/mapper/VolGroup01-backup
                      4.0G  2.8G 1014M  74% /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.dmpfromuser=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 scott/oracle@orcl

在执行跨版本的数据迁移任务时,尽可能用低版本的EXP执行导出(源端和目标端数据库版本中,哪个低就用哪个执行导出),尽可能用目标端数据库的IMP版本执行导入。

exp help=y

imp和emp读取参数时,以最后读取到的为准

IMP和EMP无法迁移外部表的数据

所谓的全库导出,只是逻辑上的全库,只导出与用户数据相关的对象。

exp \'sys/oracle as sysdba\'  tables=oe.PURCHASEORDER file=PURCHASEORDER.dmp log=PURCHASEORDER.log

[oracle@test64 exp]$  exp system/oracle owner=scott file=scott.dmp log=scott.log grants=n indexes=n constraints=n triggers=n

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    2G
FAT32    4G
NTFS     2T

linux系统
ext2
Block大小    KB   2KB  4KB
最大單一檔案限制  16GB  256GB  2TB
最大檔案系統總容量  2TB  8TB  16TB

[root@test64 ~]# tune2fs -l /dev/sda1 | grep -i "block size"
Block size:               1024

常规导出,BUFFER=512000  参数,5M,影响导出速度

direct=y直接路径导入法,recordlength指定exp的i/o buffer,最大不超过65535,设置为数据库DB_BLOCK_SIZE的整数倍比较好。16K、32K、64K,建议设置为65545

直接路径导出的条件:
1.  需命令行或者使用参数文件
2.  当有LOB类型列时自动会转化为常规路径法,建议即使是直接路径导出,也设置recordlength和buffer两个参数
3.  不支持表空间模式
4.  不能指定query参数

IMP导入的参数与EXP并没有直接关系,如以表模式导出的dump文件,可以用IMP以用户模式或full模式导入。

IMP的几个条件
1.  生成dump文件的数据库版本(包括小版本),如果比目标数据库服务器的版本高,导入可能失败。
2.  生成dump文件时如果用的是具有dba或者exp_full_database角色的用户,导入时也必须有相应的权限。
3.  导出的数据中是否含LOB类型列、分区表、分区索引等,如果有,可能在导入前也需要做一些准备工作

导入表和导出表的顺序
create table ---> 创建表数据(insert、dump) ---> 创建位图index ---> create constraints、views、produces、trigger并启动 ---> 导入bitmap、function-based、domain等类型索引


当目标表空间环境与源表空间环境不同的时候
1.  导入表时,默认会首先导入“导出时表所在的”表空间,如果没找到,会保存到“导入的”用户默认的表空间

2.  如果导入的表中含有LOB、分区表、分区索引等类型的对象,需要先创建这些对象,再执行导入。

仅导入表结构,不要数据(可用于导数据库的机构)
事先需要准备好用户,表空间

imp后面加个参数  rows=n   即可  (exp也支持这个参数)

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

原创粉丝点击