ORACLE?EXP/IMP的使用详解
导入/导出是ORACLE幸存的最古老的两个命令行工具,其实我从来不认为Exp/Imp是一种好的备份方式,正确的说法是Exp/Imp只能是一个好的转储工具,特别是在小型数据库的转储,表空间的迁移,表的抽取,检测逻辑和物理冲突等中有不小的功劳。当然,我们也可以把它作为小型数据库的物理备份后的一个逻辑辅助备份,也是不错的建议。对于越来越大的数据库,特别是TB级数据库和越来越多数据仓库的出现,EXP/IMP越来越力不从心了,这个时候,数据库的备份都转向了RMAN和第三方工具。下面说明一下EXP/IMP的使用。
如何使exp的帮助以不同的字符集显示:set?nls_lang=simplified?chinese_china.zhs16gbk,通过设置环境变量,可以让exp的帮助以中文显示,如果set?nls_lang=American_america.字符集,那么帮助就是英文的了
关于增量参数的说明:exp/imp的增量并不是真正意义上的增量,所以最好不要使用。
?
使用方法:
Exp?parameter_name=value?or?Exp?parameter_name=(value1,value2……)
只要输入参数help=y就可以看到所有帮助.
EXP常用选项
1.FULL,这个用于导出整个数据库,在ROWS=N一起使用时,可以导出整个数据库的结构。例如:
exp?userid=test/test?file=./db_str.dmp?log=./db_str.log?full=y?rows=n?compress=y?direct=y
2.?OWNER和TABLE,这两个选项用于定义EXP的对象。OWNER定义导出指定用户的对象;TABLE指定EXP的table名称,例如:
exp?userid=test/test?file=./db_str.dmp?log=./db_str.log?owner=duanl
exp?userid=test/test?file=./db_str.dmp?log=./db_str.log?table=nc_data,fi_arap
3.BUFFER和FEEDBACK,在导出比较多的数据时,我会考虑设置这两个参数。例如:
exp?userid=test/test?file=yw97_2003.dmp?log=yw97_2003_3.log?feedback=10000?buffer=100000000?tables=WO4,OK_YT
4.FILE和LOG,这两个参数分别指定备份的DMP名称和LOG名称,包括文件名和目录,例子见上面。
5.COMPRESS参数不压缩导出数据的内容。用来控制导出对象的storage语句如何产生。默认值为Y,使用默认值,对象的存储语句的init?extent等于当前导出对象的extent的总和。推荐使用COMPRESS=N。
6.?FILESIZE该选项在8i中可用。如果导出的dmp文件过大时,最好使用FILESIZE参数,限制文件大小不要超过2G。如:
exp?userid=duanl/duanl?file=f1,f2,f3,f4,f5?filesize=2G?owner=scott
这样将创建f1.dmp,?f2.dmp等一系列文件,每个大小都为2G,如果导出的总量小于10G
EXP不必创建f5.bmp.
IMP常用选项
1、FROMUSER和TOUSER,使用它们实现将数据从一个SCHEMA中导入到另外一个SCHEMA中。例如:假设我们做exp时导出的为test的对象,现在我们想把对象导入用户:
imp?userid=test1/test1?file=expdat.dmp?fromuser=test1?touser=test1
2、IGNORE、GRANTS和INDEXES,其中IGNORE参数将忽略表的存在,继续导入,这个对于需要调整表的存储参数时很有用,我们可以先根据实际情况用合理的存储参数建好表,
如何使exp的帮助以不同的字符集显示:set?nls_lang=simplified?chinese_china.zhs16gbk,通过设置环境变量,可以让exp的帮助以中文显示,如果set?nls_lang=American_america.字符集,那么帮助就是英文的了
?程序代码
EXP的所有参数(括号中为参数的默认值):
USERID???????用户名/口令?????如:?USERID=duanl/duanl??????
FULL?????????导出整个数据库?(N)
BUFFER???????数据缓冲区的大小?????????
OWNER???????所有者用户名列表,你希望导出哪个用户的对象,就用owner=username
FILE??????????输出文件?(EXPDAT.DMP)????
TABLES???????表名列表?,指定导出的table名称,如:TABLES=table1,table2
COMPRESS????导入一个extent?(Y)???
RECORDLENGTH??IO?记录的长度
GRANTS???????导出权限?(Y)????????????
INCTYPE???????增量导出类型
INDEXES???????导出索引?(Y)???????????
RECORD???????跟踪增量导出?(Y)
ROWS??????????导出数据行?(Y)????????
PARFILE???????参数文件名,如果你exp的参数很多,可以存成参数文件.
CONSTRAINTS??导出约束?(Y)????
CONSISTENT???交叉表一致性
LOG???????????屏幕输出的日志文件????
STATISTICS????分析对象?(ESTIMATE)
DIRECT????????直接路径?(N)??????????????
TRIGGERS?????导出触发器?(Y)
FEEDBACK?????显示每?x?行?(0)?的进度
FILESIZE???????各转储文件的最大尺寸
QUERY?????????选定导出表子集的子句
下列关键字仅用于可传输的表空间
TRANSPORT_TABLESPACE?导出可传输的表空间元数据?(N)
TABLESPACES?将传输的表空间列表
USERID???????用户名/口令?????如:?USERID=duanl/duanl??????
FULL?????????导出整个数据库?(N)
BUFFER???????数据缓冲区的大小?????????
OWNER???????所有者用户名列表,你希望导出哪个用户的对象,就用owner=username
FILE??????????输出文件?(EXPDAT.DMP)????
TABLES???????表名列表?,指定导出的table名称,如:TABLES=table1,table2
COMPRESS????导入一个extent?(Y)???
RECORDLENGTH??IO?记录的长度
GRANTS???????导出权限?(Y)????????????
INCTYPE???????增量导出类型
INDEXES???????导出索引?(Y)???????????
RECORD???????跟踪增量导出?(Y)
ROWS??????????导出数据行?(Y)????????
PARFILE???????参数文件名,如果你exp的参数很多,可以存成参数文件.
CONSTRAINTS??导出约束?(Y)????
CONSISTENT???交叉表一致性
LOG???????????屏幕输出的日志文件????
STATISTICS????分析对象?(ESTIMATE)
DIRECT????????直接路径?(N)??????????????
TRIGGERS?????导出触发器?(Y)
FEEDBACK?????显示每?x?行?(0)?的进度
FILESIZE???????各转储文件的最大尺寸
QUERY?????????选定导出表子集的子句
下列关键字仅用于可传输的表空间
TRANSPORT_TABLESPACE?导出可传输的表空间元数据?(N)
TABLESPACES?将传输的表空间列表
程序代码
IMP的所有参数(括号中为参数的默认值):
USERID???用户名/口令???????????
FULL?????导入整个文件?(N)
BUFFER???数据缓冲区大小?????????
FROMUSER?????所有人用户名列表
FILE?????输入文件?(EXPDAT.DMP)????
TOUSER???????用户名列表
SHOW?????只列出文件内容?(N)
TABLES??????表名列表
IGNORE???忽略创建错误?(N)????
RECORDLENGTH??IO?记录的长度
GRANTS??导入权限?(Y)??????????
INCTYPE??????增量导入类型
INDEXES?导入索引?(Y)??????????
COMMIT???????提交数组插入?(N)
ROWS????导入数据行?(Y)???????
PARFILE??????参数文件名
LOG??????屏幕输出的日志文件???
CONSTRAINTS??导入限制?(Y)
DESTROY??覆盖表空间数据文件?(N)
INDEXFILE?将表/索引信息写入指定的文件
SKIP_UNUSABLE_INDEXES??跳过不可用索引的维护?(N)
ANALYZE??执行转储文件中的?ANALYZE?语句?(Y)
FEEDBACK?显示每?x?行?(0)?的进度
TOID_NOVALIDATE??跳过指定类型?id?的校验
FILESIZE?各转储文件的最大尺寸
RECALCULATE_STATISTICS?重新计算统计值?(N)
下列关键字仅用于可传输的表空间
TRANSPORT_TABLESPACE?导入可传输的表空间元数据?(N)
TABLESPACES?将要传输到数据库的表空间
DATAFILES?将要传输到数据库的数据文件
TTS_OWNERS?拥有可传输表空间集中数据的用户
USERID???用户名/口令???????????
FULL?????导入整个文件?(N)
BUFFER???数据缓冲区大小?????????
FROMUSER?????所有人用户名列表
FILE?????输入文件?(EXPDAT.DMP)????
TOUSER???????用户名列表
SHOW?????只列出文件内容?(N)
TABLES??????表名列表
IGNORE???忽略创建错误?(N)????
RECORDLENGTH??IO?记录的长度
GRANTS??导入权限?(Y)??????????
INCTYPE??????增量导入类型
INDEXES?导入索引?(Y)??????????
COMMIT???????提交数组插入?(N)
ROWS????导入数据行?(Y)???????
PARFILE??????参数文件名
LOG??????屏幕输出的日志文件???
CONSTRAINTS??导入限制?(Y)
DESTROY??覆盖表空间数据文件?(N)
INDEXFILE?将表/索引信息写入指定的文件
SKIP_UNUSABLE_INDEXES??跳过不可用索引的维护?(N)
ANALYZE??执行转储文件中的?ANALYZE?语句?(Y)
FEEDBACK?显示每?x?行?(0)?的进度
TOID_NOVALIDATE??跳过指定类型?id?的校验
FILESIZE?各转储文件的最大尺寸
RECALCULATE_STATISTICS?重新计算统计值?(N)
下列关键字仅用于可传输的表空间
TRANSPORT_TABLESPACE?导入可传输的表空间元数据?(N)
TABLESPACES?将要传输到数据库的表空间
DATAFILES?将要传输到数据库的数据文件
TTS_OWNERS?拥有可传输表空间集中数据的用户
关于增量参数的说明:exp/imp的增量并不是真正意义上的增量,所以最好不要使用。
?
使用方法:
Exp?parameter_name=value?or?Exp?parameter_name=(value1,value2……)
只要输入参数help=y就可以看到所有帮助.
EXP常用选项
1.FULL,这个用于导出整个数据库,在ROWS=N一起使用时,可以导出整个数据库的结构。例如:
exp?userid=test/test?file=./db_str.dmp?log=./db_str.log?full=y?rows=n?compress=y?direct=y
2.?OWNER和TABLE,这两个选项用于定义EXP的对象。OWNER定义导出指定用户的对象;TABLE指定EXP的table名称,例如:
exp?userid=test/test?file=./db_str.dmp?log=./db_str.log?owner=duanl
exp?userid=test/test?file=./db_str.dmp?log=./db_str.log?table=nc_data,fi_arap
3.BUFFER和FEEDBACK,在导出比较多的数据时,我会考虑设置这两个参数。例如:
exp?userid=test/test?file=yw97_2003.dmp?log=yw97_2003_3.log?feedback=10000?buffer=100000000?tables=WO4,OK_YT
4.FILE和LOG,这两个参数分别指定备份的DMP名称和LOG名称,包括文件名和目录,例子见上面。
5.COMPRESS参数不压缩导出数据的内容。用来控制导出对象的storage语句如何产生。默认值为Y,使用默认值,对象的存储语句的init?extent等于当前导出对象的extent的总和。推荐使用COMPRESS=N。
6.?FILESIZE该选项在8i中可用。如果导出的dmp文件过大时,最好使用FILESIZE参数,限制文件大小不要超过2G。如:
exp?userid=duanl/duanl?file=f1,f2,f3,f4,f5?filesize=2G?owner=scott
这样将创建f1.dmp,?f2.dmp等一系列文件,每个大小都为2G,如果导出的总量小于10G
EXP不必创建f5.bmp.
IMP常用选项
1、FROMUSER和TOUSER,使用它们实现将数据从一个SCHEMA中导入到另外一个SCHEMA中。例如:假设我们做exp时导出的为test的对象,现在我们想把对象导入用户:
imp?userid=test1/test1?file=expdat.dmp?fromuser=test1?touser=test1
2、IGNORE、GRANTS和INDEXES,其中IGNORE参数将忽略表的存在,继续导入,这个对于需要调整表的存储参数时很有用,我们可以先根据实际情况用合理的存储参数建好表,