【问题标题】:How to restore dump file in Oracle 12c如何在 Oracle 12c 中恢复转储文件
【发布时间】:2018-11-28 21:31:14
【问题描述】:

我想在 oracle 12c 中恢复数据库。我已经为此做了一些事情,但是在导入数据时,我遇到了一些关于 db 中不存在的用户的错误。因为数据库需要一些必须在 oracle 12c 中定义的用户。我为 db 创建了 db 需要的用户,但在 oracle 12 中创建用户系统因会话问题而改变。我不得不将 c## 表达式放在用户名前面,问题仍然存在。我尝试了不同的方法来恢复,但没有导入所有表和数据。我认为这是关于用户问题。我的问题是如何创建与备份数据库用户相同的用户并恢复数据库。

【问题讨论】:

  • 如果您在日志中发布错误详细信息会很好。
  • 我更正了错误。
  • 你的意思是你解决了你的问题?您能否编辑您的问题并添加解决方案详细信息以及您遇到的错误。
  • 我的意思是我编辑了我的问题。我的问题仍然有问题。
  • 我已经说过,如果您发布错误详细信息会很好。您将在日志文件中找到它。并发布您正在使用的命令。它会显示您是以 root 身份连接到 PDB 还是 CDB。

标签: oracle datapump


【解决方案1】:

基于 OP 通过回答我的 cmets 的输入:

/ AS SYSDBA 默认连接到CDB 而不是您本地的PDB。有很多方法,但是到目前为止,您需要先连接到您本地的PDB

SYS@<pdb service_name> AS SYSDBA

然后执行你的CREATE USER 和其他命令:

CREATE USER HASTANE IDENTIFIED BY HASTANE DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP; 
GRANT DBA TO HASTANE; 
IMP HASTANE/HASTANE FILE=c:\VERI.DMP FULL=Y

【讨论】:

    【解决方案2】:

    第一步:创建 pdbuser

    1. 以 sysdba 身份运行 Sqlplus sys/,(如果有密码,您应该接下来输入)

    2. 运行alter session set container=pdbDBName---;(例如:pdborcl)

    3. 运行create user test identified by password default tablespace users temporary tablespace temp;

    4. 运行grant pdb_dba to test;

    5. 运行grant dba to test;

    第二步:在tns文件中添加pdbname

    1. 运行CMD

    2. 运行tnsping cdbDB(例如:tnsping orcl)

    3. 找到 tns 路径并打开 tnsnames.ora 文件(如果不存在则在当前文件的同一目录下)

    4. 添加 pdbDBName 像 cdbDBName(eg:orcl) 见下面的例子

    示例:

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

    第三步:从命令提示符检查 tnsping

    1. 运行CMD

    2. tnsping pdbDB(例如:tnsping pdborcl)

    3. 查看 tns 状态。路径详细信息应该没问题。

    第四步连接到 pdbDB

    1. 运行 Sqlplus

    2. test/password@pdborcl--不要使用分号。现在您已连接到 pdb 数据库

    第五步:导入转储文件

    1. 运行CMD

    2. 输入imp test/password@pdborcl file=myfile.dump 现在它应该开始导入过程

    注意:如果可插拔数据库处于关闭模式。在开始导入过程之前将其挂载到打开模式

    1. 运行 Sqlplus

    2. 以 sysdba 身份连接 sys/(它将连接到 cdbdatabase)

    3. alter pluggable database all open

    【讨论】:

      【解决方案3】:

      首先了解该数据库。这是一个关于 12c 中的用户管理的文档 Administering User Accounts and Security DBA essentials 总的来说是一个很好的起点

      您正在查看容器数据库的根目录,您需要在本地 PDB 中创建用户并将数据导入其中。最简单的方法是为该 pdb 创建一个指向特定 PDB service_name 的 tnsalias 以进行导入。

      【讨论】:

      • 你只是假设事情,因为 OP 没有提到任何错误细节。根据 OP 的解释,我期待 ORA-65094:invalid local user or role name 错误。但是,OP 需要准确地告诉我们。
      • OP 提到 c## 需要作为用户名的前缀,普通用户需要....并不是一个假设。
      • 我的转储文件没有以c##开头的用户名。是否可以根据会话恢复数据库?
      • 为了能够将数据库导入 pdb,您需要连接到 pdb 而不是容器数据库。为您的 pdb 创建一个 tnsalias 并使用该别名连接到 pdb。创建您的用户并导入您想要的内容。您可以使用 sqlplus / as sysdba 连接到容器并在开始创建用户之前发出“alter session set container = your_pdb_name”。
      【解决方案4】:

      导入程序 用于将完整的 DB 转储导入 12c 数据库。假设在 DB 安装期间您已经创建了容器和一个可插拔 DB (pd1)。

      转到 SQL PLUS

      CONN / AS SYSDBA
      CONN system/syspassword@//localhost:1521/pd1 # connected to pluggable DB 
      CREATE USER pdusr IDENTIFIED BY pdpass3344;
      CREATE OR REPLACE DIRECTORY impdir AS 'C:\app\oracle\oradata\impdir';
      GRANT READ, WRITE ON DIRECTORY impdir TO pdusr;
      GRANT DBA,CONNECT TO pdusr; # granted permissions to pd1 DB because we are connected to mrmspd
      

      退出sql plus,打开CMD

      impdp system/syspassword@//localhost:1521/pd1 full=Y directory=impdir dumpfile=expdat.dmp logfile=impdp_mrms.log
      

      并确保将 expdat.dmp 放入 C:\app\oracle\oradata\impdir

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-11
        • 2020-02-25
        • 1970-01-01
        • 2017-07-31
        • 2020-06-07
        • 2023-01-02
        相关资源
        最近更新 更多