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 :指明目的用户方