Oracle 数据库的导入导出的几种方法

先决条件

  1. 创建目录对象,通过数据泵的方式迁移数据,都将对一些系统文件进行读写访问,而这些文件都需要通过命令行参数DIRECTORY来指定,DIRECTORY参数的值就是目录对象的名称。

    CREATE DIRECTORY DUMP_DIR AS '/opt/oracle/dumpfile'

  2. 目录对象创建完成后,数据库中的用户需要对该目录有读写权限,这样用户才能把数据导出到对应的目录中。

    GRANT READ,WRITE ON DIRECTORY DUMP_DIR TO scott

    删除目录对象

    DROP DIRECTORY DUMP_DIR

数据泵方式导出导入数据

  1. expdp和impdp是操作系统提示符下执行的两条命令,expdp用来导出数据,impdp用来导入数据。执行格式为expdp 参数=参数值

  2. 常用参数:

    • USERID 指定执行导出/导入任务的数据库用户和口令,也可以使用远程实例名称,例如USERID='scmcloud/scmcloud@192.168.100.20:1521/orcl'

    • DIRECTORY 指定一个目录对象的名称,数据泵对这个目录下的文件进行读写操作。

    • DUMPFILE 指定文件名称,expdp会将数据库中的数据导出到这个文件当中,这个文件位于DIRECTORY参数指定的目录中。

    • SCHEMAS 指定用户名称,这些用户所拥有的全部数据库队形将被导出/导入

    • TABLES 指定表名称,这些表及相关的数据库对象将被导入/导出

    • TABLESPACE 指定表空间的名称,这些表空间中的表等数据库对象将被导入/导出

    • TRANSPORT_TABLESPACE 指定表空间的名称,这些表空间的元数据(即结构信息)将被导出/导入

    • PARALLEL 指定任务调度的并发数,通过这个参数设定并发数以提高效率

  3. 由于expdp/impdp命令每次执行时,需要若干参数,为了简化命令行的书写,一般将这些参数写入文本文件当中,通过命令expdp parfile=/opt/oracle/parameters.txt这种形式进行导出/导入操作

数据泵的工作机制

数据泵有三种工作机制:常规路径,直接路径和外部表。

常规路径的工作原理是:在导出数据时,表的结构已相关的数据库对象被转换为CREATE语句,他们被称为元数据,表中的数据已SELECT方式被读到数据库缓冲区缓存中,这个数据和元数据最终被写入导出文件当中,在执行导入操作时,位于导出文件中的CREATE语句先被执行,而数据则以INSERT的方式写入数据库表中。

直接路径的工作原理是:数据被直接拷贝到导出文件当中,同样在导入数据时,数据也是被直接拷贝的。

外部表的工作原理是: 数据泵先创建外部表,然后把表中的数据写入外部表对应的文件当中,在导入数据时,数据泵同样会创建外部表,使它对应导出过程中产生的文件,然后把外部表中的数据导入都数据库的表中。

在expdp/impdp的命令行中,可通过参数ACESS_METHOD指定数据泵使用的工作机制

- AUTOMATIC 数据泵自动确定工作机制
- DIRECT_PATH 数据泵采用直接路径机制
- EXTERNAL_TABLE  数据泵采用外部表机制

各种数据库结构的导出/导入方法

数据表的导入导出

参数文件如下:

userid=scmcloud/scmcloud
directory=dump_dir
parallel=1
logfile=dump_dir:exp1.log		/指定是否产生日志,若不需要日志则使用参数NOLOGFILE
dumpfile=exp%U.out
tables=(emp,dept)			/指定数据表
content=data_only			/指定导出元数据还是数据
compression=data_only			/启用压缩,参数可选值为ALL,DATA_ONLY,METADATA_ONLY和NONE
query=emp:"where deptno=10"		/指定满足条件的数据

拷贝数据文件–更为高效的导出/导入方法

  1. 以sys用户身份,将源数据库中表空间改为READ ONLY

    ALTER TABLESPACE ts_1 READ ONLY

  2. 执行导出操作,参数列表如下:

     userid=scmcloud/scmcloud
     directory=dump_dir
     parallel=1
     dumpfile=exp%U.out
     tables=(emp,dept)			/指定数据表
     transportable=always
    
  3. 将导出操作产生的文件,以及表空间对应的数据文件拷贝到另外一个系统中

  4. 在目标数据库中执行导入操作,参数列表如下:

     userid=scmcloud/scmcloud
     directory=dump_dir
     parallel=1
     dumpfile=exp1.out
     tables=(emp,dept)					/指定数据表
     transport_datafiles=(/opt/oracle/ts1.dbf)
    
  5. 在源数据库中将表空间状态改回READ WRITE

    ALTER TABLESPACE TS_1 READ WRITE

用户模式的导出/导入

参数列表如下:

userid=scmcloud/scmcloud
directory=dump_dir
parallel=1
dumpfile=exp1.out
schemas=scott						

表空间的导出/导入

参数列表如下:

userid=scmcloud/scmcloud
directory=dump_dir
parallel=1
dumpfile=(expx%U.out,expy%U.out,expz%U.out)
tablespaces=users

数据库的导入/导出

参数列表如下:

userid='sys/1234 as sysdba'
directory=dump_dir
parallel=3
dumpfile=(expx%U.out,expy%U.out,expz%U.out)
full=yes