ITPub博客

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

导入导出(imp/exp)备份参数研究系列一

原创 Oracle 作者:13811135929 时间:2017-03-06 13:17:23 0 删除 编辑
      Oracle数据库有三种标准备份方案:分别为导入导出(IMP/EXP)或数据泵,热备份以及冷备份。其中导入导出(IMP/EXP)称之为逻辑备份,热备份、冷备份称之为物理备份。通过EXP可以将数据导出至二进制文件,然后通过IMP导入到数据库中,因为二进制文件不受限于操作系统类型,因此IMP/EXP可以跨平台。按照颗粒度,导入导出又可分为表的备份、用户的备份以及整库的备份。逻辑备份作为物理备份的一种补充,常用于数据迁移。IMP/EXP工具参数较多,这里不一一罗列,仅对部分日常较少用到但又比较有用的参数做了整理。
  通过help=y可以看到IMP/EXP的所有参数,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

点击(此处)折叠或打开

  1. drop table t purge;
  2. create table t as select * from dba_objects;
  3. delete from t;
  4. commit;
  5. SELECT sum(BLOCKS) FROM dba_extents WHERE SEGMENT_NAME='T';
    SUM(BLOCKS)
    -----------
            768
  6. 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
经过上述操作后,表T并没有任何数据,但因delete后,高水位并没有降低,delete前后占用空间不变。下面分别将参数设置为Y以及N通过exp将表导出

点击(此处)折叠或打开

  1. exp scott/tiger tables=t file=t_comp_y.dmp log=t_comp_y.log COMPRESS=y
  2. exp scott/tiger tables=t file=t_comp_n.dmp log=t_comp_n.log COMPRESS=n
查看导出的文件信息,可以看到无论COMPRESS设置Y还是N,导出的文件大小一致。

点击(此处)折叠或打开

  1. oracle@linux-qtx3:~> ls -rlt t_comp*dmp
  2. -rw-r--r-- 1 oracle dba 16384 Mar 5 22:13 t_comp_y.dmp
  3. -rw-r--r-- 1 oracle dba 16384 Mar 5 22:13 t_comp_n.dmp
drop表后将两个dmp再次导入数据库,看一下效果
设置为Y的导入

点击(此处)折叠或打开

  1. imp scott/tiger TABLES=t FILE=t_comp_y.dmp LOG=imp1.log
导入完成后,登录数据库查看结果

点击(此处)折叠或打开

  1. SELECT sum(BLOCKS) FROM dba_extents WHERE SEGMENT_NAME='T';
  2. SUM(BLOCKS)
  3. -----------
  4.         768
  5. 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导出然后再次导入后,表的占用空间并没有变化,依然是768个block。通过dbms_metadata.get_ddl查看表定义DDL语句发现:表的intial参数为6291456,即为768*8k,768个BLOCK。
从而验证了上面所说的,当COMPRESS=Y导出后,oracle会把所有的extent压缩到表的创建语句initial参数中。

设置为N的导入

点击(此处)折叠或打开

  1. imp scott/tiger TABLES=t FILE=t_comp_n.dmp LOG=imp2.log
导入完成后,同样登录数据库查看结果

点击(此处)折叠或打开

  1. SCOTT>SELECT sum(BLOCKS) FROM dba_extents WHERE SEGMENT_NAME='T';
  2. SUM(BLOCKS)
  3. -----------
  4.           8
COMPRESS=N的dmp文件导入后,其initial参数为默认的65536。

明白上述道理后,COMPRESS=N结合ROW=N可以完成仅迁移表结构不迁移具体数据的工作。
需要说明的是上述实验环境为Oracle 10g,自11g引入延迟段新特性
(延迟分配段空间)后,11g中COMPRESS参数设置为何值,对初始段大小无影响。

2.FEEDBACK参数


根据该参数可以监控到导出的进度,每当导出X行后会在屏幕打出一个.符号(dot)。当有大量数据导出时,该参数显得就特别有价值,若不设置该参数,屏幕一直会停在某个画面导致DBA无法得知导出是否在进行还是被别的进程阻塞了。一旦设置该参数,DBA可以轻松得了解到大概导出了多少记录,进而可粗略的估算完成时间。

点击(此处)折叠或打开

  1. SELECT count(*) FROM t;
  2.   COUNT(*)
  3. ----------
  4.    1613728
设置FEEDBACK后,对上述T表数据进行导出,可以看到共计160多万的数据,屏幕陆续的打印了16个点.

点击(此处)折叠或打开

  1. exp scott/tiger tables=t file=t.dmp log=t.log FEEDBACK=100000


















来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29827284/viewspace-2134769/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-08-25

  • 博文量
    28
  • 访问量
    70028