首页 > 数据库 > Oracle > 导入导出(imp/exp)备份参数研究系列一

上图中有80%-90%的参数像FILE、TABLES、LOG等在日常工作中都会用到,另外部分参数INCTYPE,RECORD属于obsolete参数已经很少使用,上述两种情况不在本文讨论范围之内。1.COMPRESS参数
千万不要被COMPRESS的字面表象所误导,COMPRESS并非指压缩导出的dmp文件。该参数真正的用途:控制导出对象的STORAGE信息。如果参数设置为Y(默认),对象STORAGE初始化分区参数(initial)等于现在所有分区之和。因此设置COMPRESS=Y即便导出表不包含任何记录,导入后其所占的全部区会被浓缩到一个区内,占用空间不变。具体实验过程如下:
oracle版本号信息:
SYS>SELECT * FROM v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod经过上述操作后,表T并没有任何数据,但因delete后,高水位并没有降低,delete前后占用空间不变。下面分别将参数设置为Y以及N通过exp将表导出点击(此处)折叠或打开
- drop table t purge;
- create table t as select * from dba_objects;
- delete from t;
- commit;
- SELECT sum(BLOCKS) FROM dba_extents WHERE SEGMENT_NAME='T';
SUM(BLOCKS)
-----------
768- SELECT EXTENT_ID,BLOCKS FROM dba_extents WHERE SEGMENT_NAME='T';
EXTENT_ID BLOCKS EXTENT_ID BLOCKS
---------- ----------
0 8
1 8
2 8
3 8
4 8
5 8
6 8
7 8
8 8
9 8
10 8
11 8
12 8
13 8
14 8
15 8
16 128
17 128
18 128
19 128
20 128
查看导出的文件信息,可以看到无论COMPRESS设置Y还是N,导出的文件大小一致。点击(此处)折叠或打开
- exp scott/tiger tables=t file=t_comp_y.dmp log=t_comp_y.log COMPRESS=y
- exp scott/tiger tables=t file=t_comp_n.dmp log=t_comp_n.log COMPRESS=n
drop表后将两个dmp再次导入数据库,看一下效果点击(此处)折叠或打开
- oracle@linux-qtx3:~> ls -rlt t_comp*dmp
- -rw-r--r-- 1 oracle dba 16384 Mar 5 22:13 t_comp_y.dmp
- -rw-r--r-- 1 oracle dba 16384 Mar 5 22:13 t_comp_n.dmp
设置为Y的导入
导入完成后,登录数据库查看结果点击(此处)折叠或打开
- imp scott/tiger TABLES=t FILE=t_comp_y.dmp LOG=imp1.log
可以看到虽然表中并未包含任何数据,COMPRESS=Y导出然后再次导入后,表的占用空间并没有变化,依然是768个block。通过dbms_metadata.get_ddl查看表定义DDL语句发现:表的intial参数为6291456,即为768*8k,768个BLOCK。点击(此处)折叠或打开
- SELECT sum(BLOCKS) FROM dba_extents WHERE SEGMENT_NAME='T';
- SUM(BLOCKS)
- -----------
- 768
- SELECT EXTENT_ID,BLOCKS FROM dba_extents WHERE SEGMENT_NAME='T';
EXTENT_ID BLOCKS
---------- ----------
0 128
1 128
2 128
3 128
4 128
5 128
从而验证了上面所说的,当COMPRESS=Y导出后,oracle会把所有的extent压缩到表的创建语句initial参数中。
设置为N的导入
导入完成后,同样登录数据库查看结果点击(此处)折叠或打开
- imp scott/tiger TABLES=t FILE=t_comp_n.dmp LOG=imp2.log
COMPRESS=N的dmp文件导入后,其initial参数为默认的65536。点击(此处)折叠或打开
- SCOTT>SELECT sum(BLOCKS) FROM dba_extents WHERE SEGMENT_NAME='T';
- SUM(BLOCKS)
- -----------
- 8
明白上述道理后,COMPRESS=N结合ROW=N可以完成仅迁移表结构不迁移具体数据的工作。
需要说明的是上述实验环境为Oracle 10g,自11g引入延迟段新特性(延迟分配段空间)后,11g中COMPRESS参数设置为何值,对初始段大小无影响。2.FEEDBACK参数
根据该参数可以监控到导出的进度,每当导出X行后会在屏幕打出一个.符号(dot)。当有大量数据导出时,该参数显得就特别有价值,若不设置该参数,屏幕一直会停在某个画面导致DBA无法得知导出是否在进行还是被别的进程阻塞了。一旦设置该参数,DBA可以轻松得了解到大概导出了多少记录,进而可粗略的估算完成时间。
设置FEEDBACK后,对上述T表数据进行导出,可以看到共计160多万的数据,屏幕陆续的打印了16个点.点击(此处)折叠或打开
- SELECT count(*) FROM t;
- COUNT(*)
- ----------
- 1613728
点击(此处)折叠或打开
- exp scott/tiger tables=t file=t.dmp log=t.log FEEDBACK=100000
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29827284/viewspace-2134769/ ,如需转载,请注明出处,否则将追究法律责任。