首页 > 代码库 > oracle exp/imp示例及使用问题整理

oracle exp/imp示例及使用问题整理

oracle常用的迁移工具有exp,imp,expdp,impdp,dblink等方式,实际过程中可以根据工具特点,数据库的具体环境情况,灵活采用.  
exp/imp工具应方便简单使用,在数据量不大的情况下使用很频繁, 这个简要记录下使用中遇到的问题.

一、exp/imp版本不能往上兼容问题, 数据库的版本问题一定要搞清楚.

1. 低版本的exp/imp可以连接高版本的数据库, 高版本exp/imp不能连接低版本的数据库.  
2. 高版本exp导出的dmp文件, 低版本imp命令无法导入.    
3. 低版本exp导出的dmp文件, 高版本imp命令可以导入.

注意:  
操作者要有足够的权限,权限不够它会提示, 导入之前,需要创建相应的用户与表空间.

 

二、imp和exp使用的字符集不同

1. 查询数据库字符集

SQL> select * from v$nls_parameters where parameter=‘NLS_CHARACTERSET‘;

PARAMETER                       VALUE  
------------------------------- ----------    
NLS_CHARACTERSET                ZHS16GBK

SQL> quit

2. 指定客户端字符集与数据库一致

$ export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

windows系统下在cmd: set nls_lang=AMERICAN_AMERICA.ZHS16GBK

否则,导出时会出现如下报错:EXP-00091: Exporting questionable statistics.

 

三、全库导出,单用户导入问题

1. 全库导出

$ exp system/oracle file=system.dmp direct=y full=y;

direct=y  直接路径读取  
recordlength=65535 缓冲区

 

2. 按用户导入要指定buffer参数,否则报错IMP-00032与IMP-00008.

$ imp abc/abc file=system.dmp fromuser=abc touser=abc buffer=5400000;

3. 按用户导出该用户所有对象数据

$ exp abc/abc file=abc.dmp direct=y log=abc.log

注:要有记录日志的习惯,会查看报错的内容,针对处理.

 

四、示例:

1. 导出hr,tom用户下的所有对象

exp hr/hr file=hr_tom.emp owner=hr,tom log=hr_tom.log

2. 导入hr对象

imp hr/hr file=hr_tom.emp fromuser=hr touser=hr

3. 导入数据提速度示例

buffer参数值可以减少磁盘读取的次数, ignore=y在导入表的时间出现存在的表,会直接增量导入数据.如果无一致性约束的话,会导入复制数据,feedback会显示进度.

imp abc/abc file=abc.dmp buffer=10240000 commit=y feedback=100000 ignore=y

4. 表空间传输

Oracle传输表空间迁移数据库  
http://koumm.blog.51cto.com/703525/1574822

 

5. 直接从DMP文件中提示SQL文件

1) 从DMP文件中提示SQL文件  
imp abc/abc file=abc.dmp fromuser=abc touser=abc indexfile=abc.sql

2) 涉及外键约束的表创建将不成功,这时应该分离出主键外键约束来,可以这样提取建表脚本:  
imp abc/abc file=abc.dmp fromuser=abc touser=abc indexes=n constraints=n indexfile=abc.sql

 

exp选项:

buffer     :下载数据缓冲区,以字节为单位,缺省依赖操作系统    
consistent :下载期间所涉及的数据保持read only,缺省为n    
direct     :使用直通方式 ,缺省为n    
feeback    :显示处理记录条数,缺省为0,即不显示    
file       :输出文件,缺省为expdat.dmp    
filesize   :输出文件大小,缺省为操作系统最大值    
indexes    :是否下载索引,缺省为n,这是指索引的定义而非数据,exp不下载索引数据    
log        :log文件,缺省为无,在标准输出显示    
owner      :指明下载的用户名    
query      :选择记录的一个子集    
rows       :是否下载表记录    
tables     :输出的表名列表    
imp选项:    
buffer     :上载数据缓冲区,以字节为单位,缺省依赖操作系统    
commit     :上载数据缓冲区中的记录上载后是否执行提交    
feeback    :显示处理记录条数,缺省为0,即不显示    
file       :输入文件,缺省为expdat.dmp    
filesize   :输入文件大小,缺省为操作系统最大值    
fromuser   :指明来源用户方    
ignore     :是否忽略对象创建错误,缺省为n,在上载前对象已被建立往往是一个正常现象,所以此选项建议设为y    
indexes    :是否上载索引,缺省为n,这是指索引的定义而非数据,如果上载时索引已建立,此选项即使为n也无效,imp自动更新索引数据    
log        :log文件,缺省为无,在标准输出显示    
rows       :是否上载表记录    
tables     :输入的表名列表    
touser     :指明目的用户方

本文出自 “koumm的linux技术博客” 博客,请务必保留此出处http://koumm.blog.51cto.com/703525/1580290

oracle exp/imp示例及使用问题整理