Oracle数据库导入/导出(转储)

mtain 2016年04月17日 700次浏览

Oracle数据库导入/导出(转储)

说明

Oracle数据库转储主要有:

  1. 数据泵导出导入(EXPDP和IMPDP)
  2. EXP和IMP
  3. 第三方备份工具RMAN

EXP/IMP和EXPDP/IMPDP区别

  1. EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用。
  2. EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用。
  3. IMP只适用于EXP导出的文件,不适用于EXPDP导出文件;IMPDP只适用于EXPDP导出的文件,而不适用于EXP导出文件。

**注意:**在此推荐使用数据泵的方式,本文中也以此种方式作为示例

导出

  1. 创建导入导出数据目录

     linux命令行执行
     mkdir /u01/oracle/11g/app/oracle/dpdata
    
     sqlplus中执行
     create or replace directory dpdata as '/u01/oracle/11g/app/oracle/dpdata';
    
  2. 导出命令expdp user/passwd directory=dpdata dumpfile=XXX.dmp

导入

  1. 创建表空间
    执行如下命令,可看到当前数据库其它表空间的存储位置

     select name from v$datafile;
     NAME
     --------------------------------------------------------------------------------
     /u01/app/oracle/oradata/orcl/system01.dbf
     /u01/app/oracle/oradata/orcl/sysaux01.dbf
     /u01/app/oracle/oradata/orcl/undotbs01.dbf
     /u01/app/oracle/oradata/orcl/users01.dbf
    

    创建表空间:
    CREATE TABLESPACE 表空间名 DATAFILE ’/u01/app/oracle/oradata/orcl/data.dbf(表空间位置)’ SIZE 200M AUTOEXTEND ON EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;

  2. 创建用户并赋予权限
    CREATE USER 用户名 IDENTIFIED BY 密码 DEFAULT TABLESPACE 表空间名;

    用户赋予权限
    grant connect,resource to 用户名;
    grant unlimited tablespace to用户名;
    grant create database link to用户名;
    grant select any sequence,create materialized view to 用户名;

    GRANT “DATAPUMP_EXP_FULL_DATABASE” TO 用户名;
    GRANT “DATAPUMP_IMP_FULL_DATABASE” TO 用户名;
    REVOKE UNLIMITED TABLESPACE FROM 用户名;
    ALTER USER aimsdata QUOTA UNLIMITED ON 用户名;
    GRANT DEBUG CONNECT SESSION TO 用户名;

  3. 导入备份数据
    创建目录create directory xxxdata1 as ’/home/oracle/xxxdata’;
    创建完成后,退出sql,将dmp文件拷贝到此目录下
    给用户赋予操作目录的权限
    grant read,write on directory xxxdata1 to 用户名;

    执行导入命令
    1.全库导入
    impdp username/password DIRECTORY=XXXDATA1 DUMPFILE=XXX.DMP FULL=y

    2.按用户导入
    impdp username/password DIRECTORY=XXXDATA1 DUMPFILE=XXX.DMP SCHEMAS=用户名;

    3.其它参数命令
    impdp username/password directory=xxxdata dumpfile=xxx.dmp TABLE_EXISTS_ACTION=REPLACE
    TABLE_EXISTS_ACTION=REPLACE如果已经存在数据表执行覆盖操作

    从一个用户导入另一个用户(更改SCHEMA)
    impdp 用户名/密码 directory=dpdata dumpfile=xxx.DMP TABLE_EXISTS_ACTION=REPLACE REMAP_SCHEMA=原用户名:新用户名
    impdp 用户名/密码 directory=dpdata dumpfile=xxx.DMP fromuser=原用户名 touser=新用户名(此种方式更多的用在imp中)

    用户和表空间都不同的导入
    impdp 用户名/密码 directory=dpdata dumpfile=xxx.DMP REMAP_SCHEMA=原用户名:新用户名 remap_tablespace=原表空间:新表空间 EXCLUDE=USER table_exists_action=REPLACE
    **注:**当表空间不一致的时候尽可能采用这种导入时更换表空间,如果先导入然后再alter表空间的话容易产生索引等问题

    注意:

    1. 如果提示”非dmp文件”则采用非数据泵的方式导入
      imp 用户名/密码 file=/home/oracle/数据库_20151105.dmp FULL=Y

    2. 如果是多个dmp文件,不确定那个一个文件是主文件则执行
      impdp 用户名/密码 directory=dpdata dumpfile=file1.DMP,file2.DMP,file3.DMP

    3. 查询已经创建的directirise目录
      select * from dba_directorise;

par参数文件方式导入导出

par文件的方式进行导入导出:par文件中配置了impdp命令的参数,用起来非常的方便,只需执行impdp parfile=111.par即可,此种方式可以配置好参数然后将文件发送给别人导入,方便快捷简单

示例:
expdp.par

userid='用户名/密码@实例名' 
directory=dpdata
dumpfile=xxxdata_20160928_%U.dmp 
logfile=expdpdb.log 
filesize=10000m
parallel=3 
JOB_NAME=xxx_1

impdp.par

userid='用户名/密码@实例名' 
directory=dpdata
dumpfile=DataXXX.dmp
fromuser=原用户名
touser=新用户名