Oracle 数据库的导入导出的几种方法
先决条件
-
创建目录对象,通过数据泵的方式迁移数据,都将对一些系统文件进行读写访问,而这些文件都需要通过命令行参数DIRECTORY来指定,DIRECTORY参数的值就是目录对象的名称。
CREATE DIRECTORY DUMP_DIR AS '/opt/oracle/dumpfile' -
目录对象创建完成后,数据库中的用户需要对该目录有读写权限,这样用户才能把数据导出到对应的目录中。
GRANT READ,WRITE ON DIRECTORY DUMP_DIR TO scott删除目录对象
DROP DIRECTORY DUMP_DIR
数据泵方式导出导入数据
-
expdp和impdp是操作系统提示符下执行的两条命令,expdp用来导出数据,impdp用来导入数据。执行格式为
expdp 参数=参数值 -
常用参数:
-
USERID 指定执行导出/导入任务的数据库用户和口令,也可以使用远程实例名称,例如
USERID='scmcloud/scmcloud@192.168.100.20:1521/orcl' -
DIRECTORY 指定一个目录对象的名称,数据泵对这个目录下的文件进行读写操作。
-
DUMPFILE 指定文件名称,expdp会将数据库中的数据导出到这个文件当中,这个文件位于DIRECTORY参数指定的目录中。
-
SCHEMAS 指定用户名称,这些用户所拥有的全部数据库队形将被导出/导入
-
TABLES 指定表名称,这些表及相关的数据库对象将被导入/导出
-
TABLESPACE 指定表空间的名称,这些表空间中的表等数据库对象将被导入/导出
-
TRANSPORT_TABLESPACE 指定表空间的名称,这些表空间的元数据(即结构信息)将被导出/导入
-
PARALLEL 指定任务调度的并发数,通过这个参数设定并发数以提高效率
-
-
由于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" /指定满足条件的数据
拷贝数据文件–更为高效的导出/导入方法
-
以sys用户身份,将源数据库中表空间改为READ ONLY
ALTER TABLESPACE ts_1 READ ONLY -
执行导出操作,参数列表如下:
userid=scmcloud/scmcloud directory=dump_dir parallel=1 dumpfile=exp%U.out tables=(emp,dept) /指定数据表 transportable=always -
将导出操作产生的文件,以及表空间对应的数据文件拷贝到另外一个系统中
-
在目标数据库中执行导入操作,参数列表如下:
userid=scmcloud/scmcloud directory=dump_dir parallel=1 dumpfile=exp1.out tables=(emp,dept) /指定数据表 transport_datafiles=(/opt/oracle/ts1.dbf) -
在源数据库中将表空间状态改回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