成为MySQL DBA后,再看ORACLE数据库(十二、逻辑备份)

一、概述

数据库的逻辑备份一般是指通过数据导出的方式将数据备份,而逻辑恢复则是指通过数据导入的方式把数据导入到数据库中,所以也称数据导入导出或数据的加载与卸载。导入/导出(IMP/EXP)是Oracle最古老的两个命令行工具,它只能单线程处理,效率有限。从Oracle 10g开始,Oracle推出了一种导出导入工具叫做数据泵(Oracle Data Pump),可以多进程并行处理。它包含两个工具EXPDP和IMPDP,分别对应数据导出与导入,数据泵也是目前ORACLE中使用最多的逻辑备份工具。以前的EXP/IMP主要基于Client/Server模式进行逻辑备份,而数据泵(EXPDP/IMPDP)主要工作在服务器端,可以通过并行方式快速导出或导入数据。通过IMPDP/EXPDP执行的命令实际上都是在调用Server端的API在执行操作,所以一旦一个任务被调度或执行,客户端就可以退出连接,任务会在Server端继续运行。此外,重新启动任务功能是数据泵的一个重要特性,可以随时停止和重启动一个数据泵任务,比如为在线用户释放资源,或者因为文件系统的空间问题导出失败时可以在解决空间问题后继续之前失败的任务。

二. expdp数据导出

使用expdp的前提是配置好数据泵目录,并且给导出使用的用户授予相关的权限。可以使用ORACLE默认的DATA_PUMP_DIR目录,或者自己创建一个目录。然后给用户授予目录的读写权限,以及导出导入权限。

#目录配置
select directory_name,directory_path from dba_directories;
create directory dump_app as '/home/oracle/dump';
#用户授权
grant read,write on directory dump_app to app1;
grant exp_full_database,imp_full_database to app1;

expdp -help可以查看数据导出的各种参数配置,包括配置并行度、数据压缩、数据加密、是否记录日志等。导出的dmp文件是跨平台可移植的二进制文件,不能在文本编辑器中编辑。下面总结了几种常用的数据导出命令:

#导出表
expdp app1/Temp##2022 directory=dump_app dumpfile=app1_table.dmp tables=atbwsl
#导出数据,但不导表结构
expdp app1/Temp##2022 directory=dump_app dumpfile=app1_table.dmp tables=atbwsl content=data_only reuse_dumpfiles=y
#导出用户
expdp app1/Temp##2022 directory=dump_app dumpfile=app1_schema.dmp schemas=app1
#基于表空间导出
expdp app1/Temp##2022 directory=dump_app dumpfile=users.dmp tablespaces=users
#整库导出
expdp app1/Temp##2022 directory=dump_app dumpfile=full.dmp full=y
#开启并行,并对数据进行加密和压缩
expdp app1/Temp##2022 directory=dump_app dumpfile=user.dmp schemas=app1 nologfile=yes encryption=data_only encryption_password=t3st reuse_dumpfiles=yes parallel=4 compression=data_only;

二. impdp数据导入

expdp生产的dmp文件可以用于impdp导入,以下列举了几个常用的导入命令:

#导入表
impdp app1/Temp##2022 directory=dump_app dumpfile=app1_table.dmp
#导入用户,将对象导入到其他用户下
impdp app1/Temp##2022 directory=dump_app dumpfile=app1_schema.dmp remap_schema=app1:scott
#导入表空间
impdp directory=dump_app1 dumpfile=users.dmp tablespaces=testtbs 
#整库导入,加并行
impdp app1/Temp##2022 directory=dump_app dumpfile=full.dmp full=y parallel=4

三、注意事项

1. 使用数据泵从低版本向高版本进行数据迁移不会有兼容性问题,但是高版本数据库可能包含一些低版本不支持的特性和对象。因此从高版本导出,导入到低版本时,需要在expdp导出的时候加上version参数,指定导入库的版本号。

2. 导出导入期间执行ctrl+c可以进入交互模式,导出导入任务并不会停止,此时支持status等查看命令,通过stop_job/start_job可以暂停/开始任务。

3. 导入时如果对象已存在,将不会替换或修改现有对象,导入只会追加数据。设置参数reuse_datafiles=yes,则可以覆盖已存在的对象。

4. expdp导出的文件不能使用imp导入,只能通过impdp导入数据库。

四、总结

由于Oracle数据泵生成的是二进制文件,不可读写,这和其他数据库逻辑备份生成sql文件或csv文件都不太一样。其实在Oracle中,确实没有一个简单的命令可以把数据导出到一个平面文件中,官方没有提供这样的命令行工具,一般可以通过其他的工具如SQL Developer、PLSQL等完成这样的操作。

posted @ 2024-06-28 20:51  海布里_MySQL  阅读(1)  评论(0编辑  收藏  举报