写在前面
本人从事代码行业已5年有余,主要做后台开发,工作中不可避免的会涉及数据库,公司很多产品线,本人负责的项目涉及的主流数据库有Oracle、sql server、mysql等,在开发过程中遇到的挑战也有很多,一直以来我都有个习惯,就是将实际开发和部署遇到的问题通过在线笔记记录下来以便下次查找。今天,我将做一个重大的决定:把我的经验和踩过的坑通过CSDN的平台分享给广大读者朋友,希望对大家有所帮助。
本系列面向的读者群体
1.程序爱好者
2.数据库爱好者
3.编码人员
4.数据库工程师
5.运维实施人员
6.大中专院校数据库相关专业学生和老师
本系列涉及的技术范围
1.Oracle、sql server、mysql等数据库基础知识
2.数据库分类及不同类型数据库的特点
3.数据库安装配置、部署和调优
4.大厂数据库选型
5.如何通过业务场景选择适合的数据库
本节内容
Oracle数据库的备份和还原,通过数据泵expdp/impdp实现数据的导出和导入
步入正题
数据泵导出导入(EXPDP和IMPDP)的作用
1、实现逻辑备份和逻辑恢复;
2、在数据库用户之间移动对象;
3、在数据库之间移动对象;
4、实现表空间搬移等。
expdp/impdp和exp/imp的区别
1、exp和imp是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用。
2、expdp和impdp是服务端的工具程序,他们只能在oracle服务端使用,不能在客户端使用。
3、imp只适用于exp导出的文件,不适用于expdp导出文件;impdp只适用于expdp导出的文件,而不适用于exp导出文件。
4、对于10g以上的服务器,使用exp通常不能导出0行数据的空表,而此时必须使用expdp导出。
备份
模拟场景:备份A服务器上oracle 数据库实例ORCL中TEST用户的所有数据
操作步骤:
--设置当前需要操作的数据库实例(运行cmd.exe打开命令行)
1) set Oracle_sid=数据库实例名(本场景是ORCL,以下涉及的数据库实例名均为ORCL)
--用sqlplus工具 以操作系统权限进入【用PL/SQL或者其他的工具以管理员身份(sysdba)进入也可,注意这里的密码是安装Oracle数据库时设置的管理员密码】
2)sqlplus / as sysdba
--创建逻辑目录,没有在磁盘上真正创建, 此时要在磁盘E上创建expdp_dmp目录用来存储导出的数据文件和日志文件
3) create directory expdp_dmp as 'E:/expdp_dmp';
--查询当前创建的所有导出目录
4) select * from dba_directories;
--为用户赋予对创建目录的读写权限
5) grant read,write on directory expdp_dmp to TEST;
--导出数据,此步骤在cmd.exe命令行中直接执行(注意不是sqlplus也不是pl/sql)
6) expdp 用户名/密码@数据库实例名 schemas=要导出的用户(本场景是TEST用户) directory=创建的文件夹名称(expdp_dmp ) dumpfile=test.dmp(导出的文件名称) logfile=imp.log(导出过程的日志文件,可以不加)
–导出脚本参考
expdp test/123@ORCL directory=expdp_dmp schemas=test dumpfile=test.dmp logfile=test.log exclude=TABLE:\"LIKE 'A20%'\"
说明:
1.expdp 和impdb 需要在Windows命令行下进行
2.schemas参数设置导出的用户
3.tables参数设置需要导出的表
4.exclude参数设置过滤无需导出的表
5.导入导出脚本不带分号
还原
模拟场景:将A服务器备份的ORCL数据库还原到B服务器上作为测试库
操作步骤:
1)确保目标服务器B已经正确安装Oracle数据库;
2)在B服务器上新建相同的用户TEST和表空间(如果是更新则删除原来的用户和数据drop user test cascade 重新创建用户和表空间);
3)执行备份过程的前5步;
4)执行导入命令;
--导入命令格式
impdb 用户名/密码@数据库实例名 schemas=要导入的用户(本场景是TEST用户) directory=创建的文件夹名称(expdp_dmp ) dumpfile=test.dmp(导入的文件名称) logfile=imp.log(导入过程的日志文件,可以不加)
–导入脚本参考
impdb test1/123@ORCL directory=expdp_dmp schemas=test dumpfile=test.dmp logfile=test.log table_exists_action=append REMAP_SCHEMA=fromuser:touser remap_tablespace=FTABLESPACE:TOTABLESPACE
说明:
1.table_exists_action指定还原时表存在时的动作
(skip 是如果已存在表,则跳过并处理下一个对象;append是为表增加数据;truncate是截断表,然后为其增加新数据;replace是删除已存在表,重新建表并追加数据)
2.通过remap_schema来指定原数据库的用户,与导入数据库的用户;
3.通过remap_tablespace来指定原数据库的表空间,与导入数据库的表空间;
4.expdp、impdp可以支持空表。
结语
想要成为一名优秀的DBA工程师,需要不断的钻研和探索,虽然过程充满挑战,但是成功时的喜悦总是让人倍感轻松…
敬请关注【玥色设计】《DBA进阶之路》系列文章