12c pdb使用数据泵导入导出

本文介绍如何在Oracle 12c环境中通过数据泵进行数据的导出与导入操作。首先展示了如何查看当前的SID及PDB,并切换到容器数据库。接着指导创建数据泵目录并授予用户权限,最后详细说明了数据泵导出与导入的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.查看当前的SID,查看pdb并切换到容器数据库,这里的pluggable数据库是orcl

[oracle@orcl ~]$ echo $ORACLE_SID
zzorcl
[oracle@orcl ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Tue Jul 3 16:40:56 2018

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT
SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCL                           READ WRITE NO
SQL> 

2.切换到插件库

SQL> alter session set container = orcl;

Session altered.

3.可以自己创建数据泵目录,也可以用oracle默认目录,这里以目录dp_dir,路径为oracle家目录

SQL> create or replace directory dp_dir as  '/home/oracle';

Directory created.

SQL> exit

4.授予dp用户在数据泵路径有读写权限

SQL> grant read,write on directory dp_dir to dp;
Grant succeeded.

5.设置tnsnames.ora,增加pdborcl。SERVICE_NAME为orcl,下面是我在TNSNAMES.ora 里加的

pdbORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = zzorcl)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

  ZZORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = zzorcl)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = zzorcl)
    )
  )

LISTENER_ZSQ =
  (ADDRESS = (PROTOCOL = TCP)(HOST =zzorcl)(PORT = 1521))

6.数据泵导出、导入(scott为例子)

expdp dp/dp@pdborcl directory=dp_dir dumpfile=scott_pdborcl.dmp logfile=scott_pdborcl.log schemas=scott


impdp dp/dp@pdborcl directory=dp_dir dumpfile=scott_pdborcl.dmp logfile=scott_pdborcl_imp.log schemas=scott
<think>好的,我现在需要帮助用户了解如何在CDB使用数据泵导入数据库。首先,我得回顾一下用户提供的引用内容,特别是引用[1]和[4]提到了12c和19c中的CDBPDB结构,以及数据泵导入时的注意事项。 用户的问题是关于在CDB使用数据泵导入数据库,可能是指将数据导入PDB中。根据引用[1],在12c中,导入导出PDB需要在userid参数中指定tnsnames的值。而引用[4]提到19c中连接CDBPDB的问题,需要正确切换容器。 首先,我需要确认数据泵CDB中的使用步骤。根据引用[1],步骤包括创建必要的tnsnames条目,连接到根容器(CDB$ROOT),然后使用impdp命令时在userid参数中指定PDB的tns名称。例如,userid=username/password@tnsname。同时,可能需要使用directory参数指定目录对象,以及指定正确的dumpfile和logfile。 另外,引用[3]提到导入时需要确保表空间和用户名与源数据库一致,否则会出现问题。因此,在导入前需要检查目标PDB中是否存在对应的表空间和用户,或者根据引用[2]的说法,如果使用传输表空间特性,可能不需要预先创建表空间,因为元数据会被导入。不过用户的问题可能更关注于常规的数据泵导入,所以可能需要预先创建表空间和用户。 此外,引用[4]指出在19c中,默认用户属于CDB,需要指定连接到PDB才能正确创建用户。因此,在导入PDB时,必须确保连接的是PDB而不是CDB,或者在userid中使用正确的tns名称指向PDB。 总结步骤应该是:配置tnsnames.ora,连接到CDB的root,创建目录对象(如果有必要),执行impdp命令并指定userid@tnsname,同时处理可能的表空间和用户问题。 可能需要验证以下几点:是否正确配置了tns条目,是否在正确的容器中执行操作,是否处理了用户权限和表空间存在性。此外,注意数据泵版本与数据库版本的兼容性,以及导出文件是否来自相同或兼容的版本。 用户可能遇到的常见错误包括ORA-31684(对象已存在)、ORA-01918(用户不存在)等,这些需要根据具体情况处理,比如使用exclude参数或预先创建用户和表空间。同时,查看日志文件可以帮助诊断问题,如引用[1]提到的查看导入进度的方法。 最后,生成相关问题时需要考虑用户可能进一步想了解的内容,比如如何验证导入结果,处理不同版本间的导入,或者如何优化导入性能等。</think>在CDB(容器数据库)中使用数据泵(Data Pump)导入数据库时,需特别注意多租户架构的特性。以下是具体步骤和注意事项: ### 步骤说明 1. **配置TNS条目** 在`tnsnames.ora`文件中为PDB(可插拔数据库)添加独立的网络服务名,例如: ``` PDBSOURCE = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = pdbsource) ) ) ``` 确保导入时能通过TNS名称定位到目标PDB[^1]。 2. **连接到根容器(CDB$ROOT)** 使用`sqlplus`登录到CDB的根容器: ```sql sqlplus / as sysdba ``` 3. **创建目录对象(若未存在)** ```sql CREATE DIRECTORY dpump_dir AS '/path/to/dumpfiles'; GRANT READ, WRITE ON DIRECTORY dpump_dir TO system; ``` 4. **执行数据泵导入命令** 在命令行中使用`impdp`时,需在`userid`参数中指定PDB的TNS名称,例如: ```bash impdp userid=system/password@pdbsource DIRECTORY=dpump_dir DUMPFILE=export.dmp LOGFILE=impdp.log ``` 若需全库导入,可添加`FULL=YES`参数[^4]。 ### 注意事项 - **用户与表空间一致性** 目标PDB中需预先创建与导出文件匹配的表空间和用户,否则可能因元数据缺失导致导入失败[^3]。 - **容器切换问题** 若导入对象涉及CDB级操作(如公共用户),需确保当前会话位于`CDB$ROOT`;若操作仅针对PDB,则需通过`ALTER SESSION SET CONTAINER=pdbname`切换容器[^4]。 - **版本兼容性** 导出文件需与目标数据库版本兼容,例如Oracle 19c的数据泵可能无法直接导入12c环境中。 ### 常见错误处理 - **ORA-31684** 对象已存在时,可通过`TABLE_EXISTS_ACTION=REPLACE`或`EXCLUDE=TABLE`参数控制冲突。 - **ORA-01918** 用户不存在时,需在目标PDB中手动创建相应用户并授权。 ### 示例场景 若需将`hr_pdb`的数据导入CDB中的新PDB`hr_new`: ```bash impdp system/password@hr_new DIRECTORY=dpump_dir DUMPFILE=hr_pdb.dmp REMAP_SCHEMA=hr:hr_new ``` 需确保`hr_new`用户已在目标PDB创建[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值