ORACLE数据泵在数据迁移中的使用
在oracle database 10g和11g中,你可以使用更通用更强大的数据泵导出和导入(Data Pump Export and Import)实用程序实现数据的逻辑备份和逻辑恢复。为什么说数据泵更为强大?对比imp和exp,impdp 和expdp具有以下优点:
(1)提供映射机制,更加灵活
remap 提供表空间、用户之间的映射,目标数据库无需建立和原数据库同名的表空间和用户。
例如:REMAP_TABLESPACE=tablesapce1:tablesapce2;
REMAP_SCHEMA=user1:user2;
(2)IMPDP比IMP导入效率更高
IMPDP可以通过设置PARALLEL来提高并行度。
注意:使用Data Pump工具时,其转储文件只能被存放在DIRECTORY对象对应的操作系统目录中,而不能直接指定转储文件所在的操作系统目录。 在Oracle中创建目录对象时,需要使用CREATE DIRECTORY语句。授予权限时,需要使用GRANT语句。
例如: CREATE DIRECTORY mydir AS ‘d:\’;
如果users用户要使用该目录,必须要有读写权限:
GRANT READ,WRITE ON DIRECTORY mydir TO users;
1.expdp 导出工具(将数据库中选定的记录集以二进制文件(dmp)的形式存储到操作系统中)
EXPDP提供了数据库模式、用户模式、表空间模式、表模式的数据导出。
| 模式 | 使用的参数 | 说明 |
| FULL(全库) |
FULL |
导出整个数据库 |
|
Schema (模式) |
SCHEMAS |
导出一个或多个用户模式中的数据和元数据 |
|
Table (表) |
TABLES |
导出指定模式中指定的表、分区及其依赖对象 |
|
Tablespace (表空间) |
TABLESPACES |
导出一个或多个表空间中的数据 |
|
Transportable Tablespace (可移动表空间) |
TRANSPORT_ TABLESPACES |
导出一个或多个表空间中对象的元数据 |
例1:命令行方式导出:数据库导出模式。将当前数据全部导出,不写日志文件。
C:\>expdp 用户名/密码 DIRECTORY=mydir DUMPFILE=expfull.dmp FULL=Y NOLOGFILE=Y
例2:命令行方式导出:模式导出模式。 导出scott模式下的所有对象及其数据。
C:\>expdp 用户名/密码 DIRECTORY=mydir DUMPFILE=scott.dmp SCHEMAS=scott
例3:命令行方式导出:表导出模式 .导出scott模式下的table1表和table2表,转储文件名称为test.dmp,日志文件命名为test.log。
C:\>expdp 用户名/密码 DIRECTORY=mydir DUMPFILE=test.dmp TABLES=table1,table2 LOGFILE=test.log
例4:命令行方式导出:表空间导出模式。 导出tablespace1,tablespace2表空间中的所有对象及其数据。
C:\>expdp 用户名/密码 DIRECTORY=mydir DUMPFILE=test.dmp TABLESPACES=tablespace1,tablespace2
例5:命令行方式导出:按条件查询导出 导出test.table表中属性A1大于10,且A2大于2000的数据。
C:\>expdp 用户名/密码 DIRECTORY=mydir DUMPFILE=test.dmp TABLES=table QUERY='emp:"WHERE A1>10 AND A2>2000"' NOLOGFILE=Y
2.impdp导入工具
要导入一个使用Expdp输出的转储文件集,需要使用Impdp。与EXPDP中的导出方式相对应,数据泵导入也有5种模式:
| 模式 | 使用的参数 | 说明 |
| FULL(全库) |
FULL |
导入整个数据库 |
|
Schema (模式) |
SCHEMAS |
导入一个或多个用户模式中的数据和元数据 |
|
Table (表) |
TABLES |
导入指定模式中指定的表、分区及其依赖对象 |
|
Tablespace (表空间) |
TABLESPACES |
导入一个或多个表空间中的数据 |
|
Transportable Tablespace (可移动表空间) |
TRANSPORT_ TABLESPACES |
导入一个或多个表空间中对象的元数据
|
例1:命令行方式导入 ——数据全库导入模式,利用完整数据库的逻辑备份恢复数据库:
C:\>impdp 用户名/密码 DIRECTORY=mydir DUMPFILE=test.dmp FULL=Y
例2:命令行方式导入 ——模式导入模式
(1)使用备份文件test.dmp恢复user模式。
C:\>impdp 用户名/密码 DIRECTORY=mydir DUMPFILE=test.dmp SCHEMAS=user
(2) 如果要将一个备份模式的所有对象导入另一个模式中,可以使用REMAP_SCHEMA参数设置。例如,将备份的user1模式对象导入user2模式中。
C:\>impdp 用户名/密码 DIRECTORY=mydir DUMPFILE=test.dmp LOGFILE=test.log REMAP_SCHEMA=user1:user2
例3: 命令行方式导入 ——表导入模式
(1) 使用逻辑备份文件test.dmp恢复user模式下的table1表和table2表中数据。
C:\>impdp 用户名/密码 DIRECTORY=mydir DUMPFILE=test.dmp TABLES=table1,table2 NOLOGFILE=Y CONTENT=DATA_ONLY
CONTENT=DATA_ONLY 是向已经存在的表追加数据。相当于追加模式导入数据。
(2) 如果表结构也不存在了,则应该导入表的定义以及数据。
C:\>impdp 用户名/密码 DIRECTORY=mydir DUMPFILE=test.dmp TABLES=table1,table2 NOLOGFILE=Y
例4:命令行方式导入 ——表空间导入模式
(1)利用tablespace1,tablespace2表空间的逻辑备份test.dmp恢复tablespace1,tablespace2表空间。
C:\>impdp 用户名/密码 DIRECTORY=mydir DUMPFILE=test.dmp TABLESPACES=tablespace1,tablespace2
(2)如果要将备份的表空间导入另一个表空间中,可以使用REMAP_TABLESPACE参数设置。例如,将tablespace1表空间的逻辑备份导入tablespace2表空间:
C:\>impdp 用户名/密码 DIRECTORY=mydir DUMPFILE=test.dmp REMAP_TABLESPACE=tablespace1:tablespace2;
例5:命令行方式导入 —— 按条件查询导入
C:\>impdp 用户名/1234 DIRECTORY=mydir DUMPFILE=test.dmp TABLES=T1,T2 QUERY= 'T1: "WHERE deptno=20 AND sal>2000"'
例6:命令行方式导入 —— 追加导入
如果表中已经存在数据,可以利用备份向表中追加数据:
C:\>impdp 用户名/1234 DIRECTORY=mydir DUMPFILE=test.dmp TABLES=T1 TABLE_EXISTS_ACTION=APPEND
其他:
(1)在进行导入时,如果对dmp文件一无所知,imp 提供show=y 显示tablespace 和users 信息,DP可以用 impdp '/as sysdba' dumpfile=<your.dmpfile> logfile=import_log.txt sqlfile=ddlfile.txt 实现相同功能。
(2)impdp 用户名/密码 用户名写哪个?写system?写DMP文件里的用户名?
(3)tablespace 中有两个用户USER1和USER2,两个用户的数据共同组成了tablespace的所有数据。
进行全表空间导出时,登录用户名怎么写?
expdp user1/1234 directory=dir2 dumpfile=test_dum.dmp tablespaces=tablespace1 导出了tablespace所有的数据。用system用户,得到相同结果。
现在,test_dum.dmp中有USER1和USER2的所有数据,我想把这两个用户的数据导到GETDATA用户中,
impdp GetData/1234@orcl directory=dir2 dumpfile=test_dum.dmp remap_schema=user1:GetData logfile=no; 只导入了user1的数据。
impdp GetData/1234@orcl directory=dir2 dumpfile=test_dum.dmp remap_schema=user1:GetData,user2:GetData logfile=no; 导入了user1和user2的全部数据,导到了GetData中。
浙公网安备 33010602011771号