Oracle 12.1版本中,UNDO表空间仅存在CDB级别(共享UNDO),来自于AskScuti博客园

Oracle 12.2版本开始,UNDO表空间同时可以存在每个PDB级别(本地UNDO)。

问题表现前提:在12.2.0.1 多租户环境、备份后删除表空间并进行PDB PITR恢复、PDB采用本地UNDO(LOCAL_UNDO_ENABLED=TRUE)

MOS 文档 ID 2435452.1 (建议使用 Catalog)

目录

1. 问题现象

2. 原因

3. 方案

1. 问题现象

  在备份数据库后,删除PDB某个表空间(DROP TABLESPACE INCLUDING CONTENTS AND DATAFILES),执行可插入数据库(PDB)的时间点恢复,基于当前控制文件和完整日志,对PDB进行PITR恢复时(采用控制文件,非Catalog目录库),预期将失败

数据库版本信息

SQL> select banner from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
PL/SQL Release 12.2.0.1.0 - Production
CORE 12.2.0.1.0 Production
TNS for Linux: Version 12.2.0.1.0 - Production
NLSRTL Version 12.2.0.1.0 - Production

LOCAL UNDO是否启用

SQL> select property_name,property_value from database_properties where property_name like '%UNDO%';

PROPERTY_NAME      PROPERTY_VALUE
------------------ --------------
LOCAL_UNDO_ENABLED TRUE

备份数据库

RMAN> backup database format '/u01/app/oracle/backup/%s_%d_%U.full' tag 'FULL';

记录当前SCN

SQL> conn / as sysdba
Connected.
SQL> alter system switch logfile; System altered. SQL> select current_scn from v$database; CURRENT_SCN
-----------
7779561 SQL> alter system switch logfile; System altered. SQL> alter system switch logfile; System altered. SQL> alter system switch logfile; System altered.

连接PDB删除表空间

SQL> alter session set container=pdb1;

SQL> drop tablespace test including contents and datafiles;

Tablespace dropped.

SQL> alter pluggable database pdb1 close;

Pluggable database altered.

SQL> show pdbs

    CON_ID CON_NAME  OPEN MODE  RESTRICTED
---------- --------- ---------- ----------
3 PDB1 MOUNTED

执行PDB PITR恢复

run{
set until scn 7779561;
restore pluggable database pdb1;
recover pluggable database pdb1 auxiliary destination='/u01/app/oracle/au';
alter pluggable database pdb1 open resetlogs;
}

日志截取片段

2019-08-04T06:53:04.851088+08:00
Errors in file /u01/app/oracle/diag/rdbms/cdbocp/CDBOCP/trace/CDBOCP_m003_43519.trc:
ORA-01110: data file 24: '/u01/app/oracle/product/12.2.0/db_1/dbs/MISSING00024'
ORA-01565: error in identifying file '/u01/app/oracle/product/12.2.0/db_1/dbs/MISSING00024'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 7
2019-08-04T06:53:05.525255+08:00
Errors in file /u01/app/oracle/diag/rdbms/cdbocp/CDBOCP/trace/CDBOCP_m003_43519.trc:
ORA-01110: data file 25: '/u01/app/oracle/product/12.2.0/db_1/dbs/MISSING00025'
ORA-01565: error in identifying file '/u01/app/oracle/product/12.2.0/db_1/dbs/MISSING00025'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory

至此,被删除的表空间TEST(及数据文件)无法恢复出来,只是将信息写至控制文件中,数据文件无法通过RMAN Restore出来。因为当前控制文件已经没有了 TEST 表空间的记录,而控制文件又是整个CDB共享的。如果在非CDB环境中,没有使用Catalog的情况下,可以通过恢复之前的 controlfile 副本或(极端情况下的手工重建)来解决这个问题,但是你不希望在CDB中这样做,因为它会影响到所有数据库。

查看控制文件中关于数据文件的记录信息

SQL> select file# "A",checkpoint_change# "B",name from v$datafile where con_id=3;

   A         B NAME
---- --------- ----------------------------------------------------
9 7837930 /u01/app/oracle/oradata/CDBOCP/PDB1/system01.dbf
10 7837930 /u01/app/oracle/oradata/CDBOCP/PDB1/sysaux01.dbf
12 7837930 /u01/app/oracle/oradata/CDBOCP/PDB1/users01.dbf
21 7837930 /u01/app/oracle/oradata/CDBOCP/PDB1/tbs_c01.dbf
22 7837930 /u01/app/oracle/oradata/CDBOCP/PDB1/henry01.dbf
23 7837930 /u01/app/oracle/oradata/CDBOCP/PDB1/henry02.dbf
24 0 /u01/app/oracle/product/12.2.0/db_1/dbs/MISSING00024
25 0 /u01/app/oracle/product/12.2.0/db_1/dbs/MISSING00025
31 7837930 /u01/app/oracle/oradata/CDBOCP/PDB1/impdata01.dbf
37 7837930 /u01/app/oracle/oradata/CDBOCP/PDB1/flash_arc01.dbf
38 7837930 /u01/app/oracle/oradata/CDBOCP/bbb01.dbf A B NAME
---- --------- ---------------------------------------------------
43 7837930 /u01/app/oracle/oradata/CDBOCP/PDB1/rman01.dbf
44 7837930 /u01/app/oracle/oradata/CDBOCP/PDB1/undotbs02.dbf
45 7839301 /u01/app/oracle/oradata/CDBOCP/PDB1/scuti01.dbf

查看数据文件头记录的数据文件信息

SQL> select file# "A",checkpoint_change# "B",name from v$datafile_header where con_id=3;

   A         B NAME
---- --------- --------------------------------------------------
9 7837930 /u01/app/oracle/oradata/CDBOCP/PDB1/system01.dbf
10 7837930 /u01/app/oracle/oradata/CDBOCP/PDB1/sysaux01.dbf
12 7837930 /u01/app/oracle/oradata/CDBOCP/PDB1/users01.dbf
21 7837930 /u01/app/oracle/oradata/CDBOCP/PDB1/tbs_c01.dbf
22 7837930 /u01/app/oracle/oradata/CDBOCP/PDB1/henry01.dbf
23 7837930 /u01/app/oracle/oradata/CDBOCP/PDB1/henry02.dbf
24 0
25 0

31 7837930 /u01/app/oracle/oradata/CDBOCP/PDB1/impdata01.dbf
37 7837930 /u01/app/oracle/oradata/CDBOCP/PDB1/flash_arc01.dbf
38 7837930 /u01/app/oracle/oradata/CDBOCP/bbb01.dbf A B NAME
---- --------- ---------------------------------------------------
43 7837930 /u01/app/oracle/oradata/CDBOCP/PDB1/rman01.dbf
44 7837930 /u01/app/oracle/oradata/CDBOCP/PDB1/undotbs02.dbf
45 7839301 /u01/app/oracle/oradata/CDBOCP/PDB1/scuti01.dbf

2. 原因

This issue is reported in the below bugs

bug 27966859 closed as duplicate of unpublished bug 27855651

Bug 27855651 reported for 12.2 and the fix is included in 18.1

3. 方案

1) 采用Catalog恢复目录替代控制文件。参考《通过恢复目录(Catalogue)进行PDB级别的PITR恢复

2) 当采用Catalog进行可插入数据库恢复失败时,请检查补丁27855651的可用性。

执行PDB的PITR恢复失败的说明的更多相关文章

  1. 通过恢复目录(Catalogue)进行PDB级别的PITR恢复

    数据库版本:Oracle 12.2.0.1 本篇为<执行PDB的PITR恢复失败的说明 (文档 ID 2435452.1)>的证明篇,通过当前控制文件,无法在PDB级别进行PITR(Poi ...

  2. 使用zfs进行pg的pitr恢复测试

    前段时间做了一下zfs做pg的增量恢复测试,mark一下. 服务器信息: 主机:192.168.173.43 备机:192.168.173.41 主备使用流复制搭建,在备机上面进行了zfs快照备份. ...

  3. ceph-deploy install时,远端节点在执行apt-get update命令时失败

    环境 OS:Ubuntu 16.04 背景 使用ceph-deploy部署Ceph集群,调用ceph-deploy install命令在远端节点安装ceph环境,执行apt-get update命令时 ...

  4. 消息 4900,级别 16,状态 2,第 1 行 对表 'XX.XXX' 执行 ALTER TABLE SWITCH 语句失败。对于已启用更改跟踪的表,不可能切换其分区。请先禁用更改跟踪,再使用 ALTER TABLE SWITCH。

    问题描述: 今天处理切换分区数据的时候出现了这个错误: 消息 4900,级别 16,状态 2,第 1 行 对表 'XX.XXX' 执行 ALTER TABLE SWITCH 语句失败.对于已启用更改跟 ...

  5. 执行testng appium用例失败,自动截图

    新建一个截图监听类ScreenShotListener ,重写onTestFailure方法,里面定义了 监听的driver ,截图文件路径和名称 package com.fsssc.htsgl.ut ...

  6. Confluence 6 XML 备份恢复失败的问题解决

    XML 站点备份仅仅针对新数据库恢复的时候是必要的. Upgrading Confluence,Setting up a test server 或者 Production Backup Strate ...

  7. jenkins主从从服务器发布脚本执行成功但总提示失败 FATAL: Remote call on XXXX failed

    主从jenkins当调用 slave 执行编译脚本后提示如下错误,找了半天怎么也没有问题,后来忽然发现slave上java的版本和master不同,一个 1.8 一个 1.10,将slave降回1.8 ...

  8. 执行SCP命令拷贝文件失败

    scp是我最常用的远程文件拷贝工具,今天发现突然不能用了: svan-mac:hive-tools xiean$ scp  -Pxx target/urs-hive-tools-jar-with-de ...

  9. kettle使用命令行传入数据库链接参数(ip、数据库、端口、用户、密码)执行job时子转换失败。

    使用cmd 传参数执行 kettle job 遇到错误: 错误原因,无法找到文件.... 原来使用,通过目录指定转换,好处是:当以文件资源库保存时,可以直接将文件夹复制走,直接运行就可以,不需要单独针 ...

随机推荐

  1. P1422 小玉家的电费(scanf,printf)

    题目描述 夏天到了,各家各户的用电量都增加了许多,相应的电费也交的更多了.小玉家今天收到了一份电费通知单.小玉看到上面写:据闽价电[2006]27号规定,月用电量在 150 千瓦时及以下部分按每千瓦时 ...

  2. C# 工具类LogHelper

    一.创建一个WinForm的项目,并通过NuGet安装log4net. 二.创建LogHelper类以及log4net.config配置文件. 三.编写相关代码. 1.LogHelper类 using ...

  3. 连接数据库的工具JdbcUtil

    public class JdbcUtil { private static String driver=null;//驱动 private static String url=null;//连接地址 ...

  4. tensorflow数据集加载

    本篇涉及的内容主要有小型常用的经典数据集的加载步骤,tensorflow提供了如下接口:keras.datasets.tf.data.Dataset.from_tensor_slices(shuffl ...

  5. Python函数装饰器

    装饰器的原则 1)不修改被修饰函数的源代码: 2)不修改被修饰函数的调用方式: 装饰器的知识点 = 高阶函数 + 函数嵌套 + 闭包 1. 只用高阶函数写装饰器--->有瑕疵 import ti ...

  6. Win10如何设置休眠选项(关于睡眠、休眠、快速启动这几个伪关机功能如何设置更适合笔记本电脑?)

    · Win10如何设置休眠选项(关于睡眠.休眠.快速启动这几个伪关机功能如何设置更适合笔记本电脑?) 应用场景 升级正式版win10以后,发现竟然没有休眠选项,从电源管理器里面也没有找到,有时候有些重 ...

  7. PAT (Basic Level) Practice (中文)1047 编程团体赛 (20 分)

    编程团体赛的规则为:每个参赛队由若干队员组成:所有队员独立比赛:参赛队的成绩为所有队员的成绩和:成绩最高的队获胜. 现给定所有队员的比赛成绩,请你编写程序找出冠军队. 输入格式: 输入第一行给出一个正 ...

  8. SqlServer该如何合适的索引

    SQL索引在数据库优化中占有一个非常大的比例, 一个好的索引的设计,可以让你的效率提高几十甚至几百倍,在这里将带你一步步揭开他的神秘面纱. 1.1 什么是索引? SQL索引有两种,聚集索引和非聚集索引 ...

  9. script标签引入脚本的引入位置与效果

    用script标签引入脚本的引入位置大致有两种情况: 1,在head中引入: 2,在body末尾引入: 浏览器由上到下解析代码,正常情况下,先解析head中的代码,在解析body中的代码:放在head ...

  10. ASP.NET Core 2.1 中的 HttpClientFactory (Part 4) 整合Polly实现瞬时故障处理

    原文:https://www.stevejgordon.co.uk/httpclientfactory-using-polly-for-transient-fault-handling发表于:2018 ...