oracle 12c pdb expdp/impdp 数据导入导出

2024-01-09 22:36

本文主要是介绍oracle 12c pdb expdp/impdp 数据导入导出,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

环境

(源)rac 环境 byoradbrac

系统版本:Red Hat Enterprise Linux Server release 6.5
软件版本:Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit
byoradb1:172.17.38.44
byoradb2:172.17.38.45

(目的)单机环境 byoradb

系统版本:CentOS Linux release 7.9.2009
软件版本:Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit
byoradbdg:172.17.38.55

源端操作数据导出(expdp)

12c 的环境如果引入了pdb模式
那每个pdb需要单独执行 数据库级别的导出 即 full=yes ;
且每个pdb 导出目录需单独配置 ;
导出使用的账号可以使用sys 或其他sysdba账号或者每个pdb的管理账号分别导出每个pdb;

源端配置每个pdb的tnsname


#登录数据库sqlplus  / as sysdba#查看所有pdbSQL>show pdbs;

在这里插入图片描述

#配置 tnsnames.ora , 使账号能通过@方式在服务端直接连入pdbfind / -name tnsnames.ora

在这里插入图片描述

#分别为每个pdb配置好tnsname
vi  /u01/app/oracle/product/12c/dbhome_1/network/admin/tnsnames.oraSOAPRD =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 172.17.38.44)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = SOAPRD)))CATDB =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 172.17.38.44)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = CATDB)))PORTALPROD =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 172.17.38.44)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = PORTALPROD)))TEMP_ROMENS2FI_PROD =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 172.17.38.44)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = temp_romens2fi_prod)))TEMP_ROMENS2FI_DEV =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 172.17.38.44)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = TEMP_ROMENS2FI_DEV)))BIEEDB =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 172.17.38.44)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = BIEEDB)))

源端检查配置每个pdb的导出目录

#切换pdb
alter session set container=PORTALPROD ;#查看导出目录
SELECT  * from dba_directories  ; #重建导出目录
create or replace directory bakz as '/oracledata/';

源端执行导出

#未指定tnsname时直接连入cdb
#PDB$SEED 为pdb模板、 可选择性导出、新环境也会存在
#根据实际情况导出pdbnohup expdp \' sys/zyz123456 as sysdba \' directory=bakz  dumpfile=expdpcdb.dmp logfile=expdpcdb.log full=yes   > nohup_expcdb.out &nohup expdp \' sys/zyz123456@PORTALPROD  as sysdba \' directory=bakz  dumpfile=expdpPORTALPROD.dmp logfile=expdpPORTALPROD.log full=yes   > nohup_expPORTALPROD.out &

导出完成后传入到新环境

scp  xxx   172.17.38.55:/xxx

目的端操作数据导入(impdp)

12c 的环境如果引入了pdb模式
那每个pdb需要单独执行导入操作;
且每个pdb 导出目录需单独配置 ;
导入使用的账号可以使用sys 或其他sysdba账号或者每个pdb的管理账号分别导入每个pdb;

由于源端为rac环境、 自动创建表空间指定数据文件时、单机不存在asm路径、
所以需要手动创建对应表空间

创建新环境

可参考
oracle12c 静默安装
或者
Oracle12c一键安装

创建pdb

可参考
Oracle12c创建pdb

# 修改系统参数
alter system set db_create_file_dest='/oracledata/app/oracle/oradata/';
#创建pdb
CREATE PLUGGABLE DATABASE BIEEDB ADMIN USER pdbadminz IDENTIFIED BY "zyz@123456" ;
#切换pdb
alter session set container=BIEEDB ;
#打开pdb
alter pluggable database BIEEDB open;
#查看自动创建的数据文件位置
select name   from v$datafile;

源端查询、生成创建表空间语句 (每个pdb需单独处理)

#普通表空间
select  'create tablespace '|| a.name || ' datafile ''/oracledata/app/oracle/oradata/BYORADB/0E07968F3BDD1243E0630100007FB9BA/datafile/'||b.name||'_'||a.name||'01.dbf'' size ' ||  -- 此处文件路径依照目的端datafile文件路径、每个pdb 需对应
case when ROUND(sum(c.bytes)/1024/1024/1024,0)=0
then  TO_CHAR('500M')
ELSE to_char(ROUND(sum(c.bytes)/1024/1024/1024, 0))||'G'
end  
||' AUTOEXTEND on next 1G ;',
a.con_id ,a.TS#,b.name as conname , a.name as tablespname, ROUND(sum(c.bytes)/1024/1024/1024, 4)  as usegb ,ROUND(sum(c.bytes)/1024/1024/1024, 0)  as usegbm from V$tablespace a INNER JOIN  v$pdbs  b on a.con_id=b.con_id inner join v$datafile c on a.TS#=c.TS# and a.con_id=c.con_id  where a.name not in ('SYSAUX','SYSTEM','TEMP') 
and a.con_id=4 -- 指定pdb
group by a.con_id, a.TS#,a.name , b.name 
ORDER BY a.con_id 
;
#临时表空间
SELECT tablespace_name AS "Tablespace Name",ROUND(SUM(bytes) / (1024 * 1024*1024), 2) AS "Size in MB"
FROM dba_temp_files   
GROUP BY tablespace_name;#可使用dbms包查看如果生成创建语句中不带数据文件路径、 则导入时会自动创建、无需手动创建
SELECT DBMS_METADATA.GET_DDL('TABLESPACE', 'TABLESPACE_name')
FROM DUAL;

以上为依照数据源端的表空间创建目的端表空间、需注意每个pdb的目录与表空间容量、单个数据文件如未特殊设置、最大不可超过32G、 如某个表空间大于32G 、那以上sql生成的自动创建语句失效、 需手动调整

目的端创建表空间

create tablespace USERS datafile '/oracledata/app/oracle/oradata/BYORADB/0E071A0FA3E00637E0630100007F17A4/datafile/bieedb_user01.dbf' size 10G AUTOEXTEND on next 1G MAXSIZE 30G;

目的端配置每个pdb的tnsname

#分别为每个pdb配置好tnsname
vi  /oracledata/app/oracle/product/12c/dbhome_1/network/admin/tnsnames.oraSOAPRD =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 172.17.38.55)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = SOAPRD)))CATDB =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 172.17.38.55)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = CATDB)))PORTALPROD =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 172.17.38.55)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = PORTALPROD)))TEMP_ROMENS2FI_PROD =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 172.17.38.55)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = temp_romens2fi_prod)))TEMP_ROMENS2FI_DEV =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 172.17.38.55)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = TEMP_ROMENS2FI_DEV)))BIEEDB =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 172.17.38.55)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = BIEEDB)))

目的端检查配置每个pdb的导出目录

#切换pdb
alter session set container=PORTALPROD ;#查看导出目录
SELECT  * from dba_directories  ; #重建导出目录
create or replace directory bakz as '/oracledata/';

目的端执行导入

#未指定tnsname时直接连入cdb
#根据实际情况导入pdbnohup impdp \'sys/zyz123456 as sysdba\'   directory=bakz dumpfile=expdpcdb.dmp   logfile=impcdb.log  > nohup_impcdb.out &nohup impdp \'sys/zyz123456@BIEEDB  as sysdba\'   directory=bakz dumpfile=expdpBIEEDB.dmp   logfile=impdpBIEEDB.log   > nohup_impBIEEDB.out &

impdp 导入可多次重复执行 默认会跳过已存在的对象

这篇关于oracle 12c pdb expdp/impdp 数据导入导出的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/588667

相关文章

详谈redis跟数据库的数据同步问题

《详谈redis跟数据库的数据同步问题》文章讨论了在Redis和数据库数据一致性问题上的解决方案,主要比较了先更新Redis缓存再更新数据库和先更新数据库再更新Redis缓存两种方案,文章指出,删除R... 目录一、Redis 数据库数据一致性的解决方案1.1、更新Redis缓存、删除Redis缓存的区别二

oracle数据库索引失效的问题及解决

《oracle数据库索引失效的问题及解决》本文总结了在Oracle数据库中索引失效的一些常见场景,包括使用isnull、isnotnull、!=、、、函数处理、like前置%查询以及范围索引和等值索引... 目录oracle数据库索引失效问题场景环境索引失效情况及验证结论一结论二结论三结论四结论五总结ora

Redis事务与数据持久化方式

《Redis事务与数据持久化方式》该文档主要介绍了Redis事务和持久化机制,事务通过将多个命令打包执行,而持久化则通过快照(RDB)和追加式文件(AOF)两种方式将内存数据保存到磁盘,以防止数据丢失... 目录一、Redis 事务1.1 事务本质1.2 数据库事务与redis事务1.2.1 数据库事务1.

Oracle Expdp按条件导出指定表数据的方法实例

《OracleExpdp按条件导出指定表数据的方法实例》:本文主要介绍Oracle的expdp数据泵方式导出特定机构和时间范围的数据,并通过parfile文件进行条件限制和配置,文中通过代码介绍... 目录1.场景描述 2.方案分析3.实验验证 3.1 parfile文件3.2 expdp命令导出4.总结

更改docker默认数据目录的方法步骤

《更改docker默认数据目录的方法步骤》本文主要介绍了更改docker默认数据目录的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1.查看docker是否存在并停止该服务2.挂载镜像并安装rsync便于备份3.取消挂载备份和迁

不删数据还能合并磁盘? 让电脑C盘D盘合并并保留数据的技巧

《不删数据还能合并磁盘?让电脑C盘D盘合并并保留数据的技巧》在Windows操作系统中,合并C盘和D盘是一个相对复杂的任务,尤其是当你不希望删除其中的数据时,幸运的是,有几种方法可以实现这一目标且在... 在电脑生产时,制造商常为C盘分配较小的磁盘空间,以确保软件在运行过程中不会出现磁盘空间不足的问题。但在

java poi实现Excel多级表头导出方式(多级表头,复杂表头)

《javapoi实现Excel多级表头导出方式(多级表头,复杂表头)》文章介绍了使用javapoi库实现Excel多级表头导出的方法,通过主代码、合并单元格、设置表头单元格宽度、填充数据、web下载... 目录Java poi实现Excel多级表头导出(多级表头,复杂表头)上代码1.主代码2.合并单元格3.

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines

Mybatis拦截器如何实现数据权限过滤

《Mybatis拦截器如何实现数据权限过滤》本文介绍了MyBatis拦截器的使用,通过实现Interceptor接口对SQL进行处理,实现数据权限过滤功能,通过在本地线程变量中存储数据权限相关信息,并... 目录背景基础知识MyBATis 拦截器介绍代码实战总结背景现在的项目负责人去年年底离职,导致前期规

Redis KEYS查询大批量数据替代方案

《RedisKEYS查询大批量数据替代方案》在使用Redis时,KEYS命令虽然简单直接,但其全表扫描的特性在处理大规模数据时会导致性能问题,甚至可能阻塞Redis服务,本文将介绍SCAN命令、有序... 目录前言KEYS命令问题背景替代方案1.使用 SCAN 命令2. 使用有序集合(Sorted Set)