前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >100天精通Oracle-实战系列(第22天)Oracle 数据泵全库导出导入

100天精通Oracle-实战系列(第22天)Oracle 数据泵全库导出导入

作者头像
Lucifer三思而后行
发布2022-09-30 14:53:42
1K0
发布2022-09-30 14:53:42
举报

Oracle 数据泵脚本备份数据库用户

->返回总目录<-

介绍

在工作中正常只需要导应用用户,全库导出导入的方式一般不太常用,本文仅做介绍演示。

通过设置参数 full=y 可以执行全库导出导入操作,必须使用拥有 DBA 权限或者 DATAPUMP_EXP_FULL_DATABASE 角色的用户才能执行该操作:

代码语言:javascript
复制
expdp system/oracle directory=expdp_dir dumpfile=full.dmp logfile=full_exp.log full=y
impdp system/oracle directory=expdp_dir dumpfile=full.dmp logfile=full_imp.log full=y

全库导出一般很少用于数据库迁移/升级/备份,不可控且容易造成时间空间的浪费,更适用于小容量、重要等级低的数据库(个人愚见,不喜勿喷)。

创建文件导出路径(源端/目标端)

有条件的话,可以nfs在目标端和源端挂载同一个盘,这样可以省去拷贝文件的时间。

代码语言:javascript
复制
## root 下
mkdir /expdp
chown oracle:oinstall /expdp

su - oracle
sqlplus / as sysdba
select * from dba_directories;
create directory expdp_dir as '/expdp'; 
grant read,write on directory expdp_dir to system;

全库导出

全库导出会导出以下信息:

  • 用于重建表空间,用户,表,索引,约束,触发器,序列,以及存储的 PL/SQL 脚本等元素的所有 DDL 语句
  • 除去 SYS 用户下的所有表中的数据

拼接系统用户:

代码语言:javascript
复制
select listagg('\''' || username || '\''',',') within group(order by username) from dba_users where created < (select created from v$database);

正常使用全库导出时,可以排除掉数据库的原始用户数据,只导出应用用户数据(使用exclude参数):

代码语言:javascript
复制
-- 排除系统用户
expdp system/oracle directory=expdp_dir full=y exclude=schema:\"IN \(\'ANONYMOUS\',\'APEX_030200\',\'APEX_PUBLIC_USER\',\'APPQOSSYS\',\'CTXSYS\',\'DBSNMP\',\'DIP\',\'EXFSYS\',\'FLOWS_FILES\',\'MDDATA\',\'MDSYS\',\'MGMT_VIEW\',\'OLAPSYS\',\'ORACLE_OCM\',\'ORDDATA\',\'ORDPLUGINS\',\'ORDSYS\',\'OUTLN\',\'OWBSYS\',\'OWBSYS_AUDIT\',\'SCOTT\',\'SI_INFORMTN_SCHEMA\',\'SPATIAL_CSW_ADMIN_USR\',\'SPATIAL_WFS_ADMIN_USR\',\'SYS\',\'SYSMAN\',\'SYSTEM\',\'WMSYS\',\'XDB\',\'XS$NULL\'\)\" dumpfile=full.dmp logfile=full_exp.log

不要使用 include 参数。

执行导出前,为了保持数据静止,建议关闭job,关闭监听,重启数据库(如果是rac,建议只保留一个节点开启):

代码语言:javascript
复制
lsnrctl stop

sqlplus / as sysdba
alter system set job_queue_processes=0 sid='*';
shu immediate
startup

记录当前数据库的无效对象:

代码语言:javascript
复制
select owner,object_name,object_type from dba_objects where status='IVALID';

在 oracle 用户下执行导出命令,可以根据实际情况开启并行度以及压缩等参数(如果是RAC,加上cluster=N):

代码语言:javascript
复制
expdp system/oracle directory=expdp_dir full=y exclude=schema:\"IN \(\'ANONYMOUS\',\'APEX_030200\',\'APEX_PUBLIC_USER\',\'APPQOSSYS\',\'CTXSYS\',\'DBSNMP\',\'DIP\',\'EXFSYS\',\'FLOWS_FILES\',\'MDDATA\',\'MDSYS\',\'MGMT_VIEW\',\'OLAPSYS\',\'ORACLE_OCM\',\'ORDDATA\',\'ORDPLUGINS\',\'ORDSYS\',\'OUTLN\',\'OWBSYS\',\'OWBSYS_AUDIT\',\'SCOTT\',\'SI_INFORMTN_SCHEMA\',\'SPATIAL_CSW_ADMIN_USR\',\'SPATIAL_WFS_ADMIN_USR\',\'SYS\',\'SYSMAN\',\'SYSTEM\',\'WMSYS\',\'XDB\',\'XS$NULL\'\)\" dumpfile=full.dmp logfile=full_exp.log compression=all parallel=8

导出时间依赖于数据库的大小以及磁盘的IO性能,导出完成后查看日志是否存在错误。

全库导入

需要注意的点:

  • 确保目标端字符集与源端保持一致,否则可能导致乱码。
  • 确保存放数据文件的磁盘空间足够。
  • 确保源端数据文件路径在目标端存在或者目标端配置OMF参数(手工创建表空间也可以)。
  • 目标端存在数据的话,需要加上table_exists_action参数。

执行导入前,同样建议关闭job,关闭监听,重启数据库(如果是rac,建议只保留一个节点开启):

代码语言:javascript
复制
lsnrctl stop

sqlplus / as sysdba
-- 设置OMF
alter system set db_create_file_dest='/oradata' sid='*';
-- 关闭job
alter system set job_queue_processes=0 sid='*';
-- 重启数据库
shu immediate
startup

在 oracle 用户下执行导入(如果是RAC,加上cluster=N,导入时可以选择全库导入,也可以导出指定用户):

代码语言:javascript
复制
-- 全库导入
impdp system/oracle directory=expdp_dir dumpfile=full.dmp logfile=full_imp.log full=y parallel=8 table_exists_action=truncate

如果导入过程中出现 ORA-31684 错误,代表目标库已存在,可以忽略这个错误。

收尾

当导入完成后,目标端执行无效对象重编译后,与源端进行比较:

代码语言:javascript
复制
sqlplus / as sysdba @?/rdbms/admin/utlrp.sql

打开监听,重启数据库,打开job:

代码语言:javascript
复制
lsnrctl start

sqlplus / as sysdba
shu immediate
startup
alter system set job_queue_processes=1000 sid='*';

至此,全库导出导入完成。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-09-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Oracle 数据泵脚本备份数据库用户
    • 介绍
      • 创建文件导出路径(源端/目标端)
        • 全库导出
          • 全库导入
            • 收尾
            相关产品与服务
            数据库
            云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档