导入/导出是or除了oracle幸存的最古老的两个命令行工具,正确的是exp/imp是一个好的转储工具,特别是在小型数据库的转储,表空间迁移,
表的抽取,检测逻辑和物理冲突等中有不小的功劳。
如何使exp的帮助以不同的字符集显示:set nls_lang=simplified chinese_china_zhs16gbk 可以让exp的帮助以中文显示。
set nls_lang=American_america 可以让字符集以英文的方式显示。
下面exp/imp的常用参数:(括号中为参数的默认值)
EXP的参数
USERID 用户名/口令 如:USERID=SCOTT/ORCL
FULL 导出整个数据库 (N) 一般在DBA用户下使用,因为其他用户可能有某些对象导出的权限问题
OWNER 所有者用户名列表,你希望导出哪个用户的对象,就用OWNER=USERNAME
FILE 输出文件(EXPDAT.DMP)
COMPRESS 导入一个EXTENT(Y)
TABLES 表名列表,指定导出的table的名称,如:tables=(table1,table2)
INDEXES 导出权限(Y)
ROWS 导出数据行(Y)
LOG 屏幕输出的日志文件
DIRECT 直接路径(N)
FEEDBACK 显示每X行(0)的进度,如FEEDBACK = 10000,表示每10000的进度
IMP的参数
USERID 同EXP
FULL 导入整个文件(N)
FROMUSER 所有人用户列表
FILE 输入文件(EXPDAT.DMP)
SHOW 只列出文件内容(N)
TABLES 表名列表
IGNORE 忽略穿件错误(N)
GRANTS 导入权限(Y)
ROWS 导入数据行(Y)
导入/导出命令举例(本实验使用2个用户,SYSTEM/ORCL DBA权限, SCOTT/ORCL普通用户):
EXP:
1.FULL,这个用于导出整个数据库,在ROWS=N一起使用的时候,可以导出整个数据库的结构,切记,使用DBA用户,否则会出现权限的警告
exp userid=system/orcl file=system_full.dmp full=y compress=y direct=y log=system_full.log
2.OWNER 导出SCOTT用户所有对象
exp userid=system/orcl file=system_ownerscott.dmp owner=scott compress=y direct=y
exp userid=scott/orcl file=scott.dmp compress=y direct=y
这2种方式导出的文件是一样的。
3.TABLES 导出指定的表
exp userid=scott/orcl file=scott_tables.dmp compress=y direct=y tables=(otc_asset,otc_asset_log_nq,otc_secu_acct,otc_secu_shares)
4.ROWS=N 如果指定这个参数,则指数据不导出来。
重点解释下参数compressy,direct=y:
COMPRESS=Y
1.随着表记录的insert 和delete ,表被存储在不同的数据文件中(则Extent中)
2.导出时,compress=Y,改变表结构中的 Initial 值(则首个Extent的值),也就是将分散在不同数据文件中的(同一张表的)数据放置在同一个数据文件中(在导出实现)
3.compress=Y有风险。导入时, 如果不存在连续一个大数据块,则会报错
参考: http://bbs.chinaunix.net/thread-3647003-1-1.html
DIRECT=Y
direct=y 表示使用direct path read来直接路径读取导出,绝对路径,
加了以后,exp导出的速度很快。就是直接使用direct io来读数据文件,不经过buffer cache
IMP:
一般情况, 导入数据前应该彻底删除目标数据下的表, 序列, 函数/过程,触发器等;数据库对象已经存在, 按缺省的imp参数, 则会导入失败如果用了参数ignore=y, 会把Oracle exp文件内的数据内容导入如果表有唯一关键字的约束条件, 不合条件将不被导入如果表没有唯一关键字的约束条件, 将引起记录重复
1.导入整库数据,FULL=Y(使用的是上面exp导出的dmp文件)
IMP USERID=system/orcl FILE=system_full.dmp LOG=IMP_SYSTEM_FULL.LOG IGNORE=Y
2.导入SCOTT用户的数据(使用的是上面exp导出的dmp文件)
IMP USERID=scott/orcl FILE=scott.dmp LOG=IMP_SYSTEM_FULL.LOG IGNORE=Y
2.TABLES 导入SCOTT用户的TABLE(使用的是上面exp导出的dmp文件
IMP USERID=scott/orcl FILE=scott_tables.dmp LOG=IMP_SYSTEM_FULL.LOG IGNORE=Y TABLES=(otc_asset,otc_asset_log_nq,otc_secu_acct,otc_secu_shares)