12c New Feature:Temporary Undo

背景:

本文是学习12c新特性的笔记,主要来源于官方文档和OU教材汇总而成。

什么是临时undo?

Temporary Undo是12c的新特性,如下图所示:

Temporary Undo verview

临时表广泛的被用作于为暂存中间结果分配区域,这是因为改变哪些表是比用非临时表快很多的。性能提升主要是因为实际上修改临时表没有redo条目直接产生。然而,在临时表(和索引)上操作的undo任然记录到redo log。临时表的undo,在该临时对象的其生命期的一致性读和事务回滚是有用的。超出此范围的undo是多余的。因此它在redo流中不需要持续。举例来说,事务恢复只是丢弃临时对象的undo。

从12c开始,可以通过把临时表的事务产生的undo,直接在临时表空间中存储独立undo流,来避免在redo流中记录undo。

注意:临时undo segment是会话私有的。它存储属于相应会话的临时表改变的undo

默认情况下,undo记录临时表是存储在undo表空间中,且记录到redo中,这是与undo管理永久表相同的方式。然而,你可以使用TEMP_UNDO_ENABLED初始化参数来从永久表的undo分离临时表的undo。当此参数设置为TRUE,临时表的undo调用temporary undo。
Continue reading 12c New Feature:Temporary Undo

12c New Features:使用RMAN连接CDB


Making RMAN Connections to a CDB
本节描述在12c中如何使用RMAN客户端连接CDB和PDB。它包含以下主题:
  • 关于CDBs的备份和恢复
  • 限制连接到PDB(Restrictions When Connected to a PDB)
  • 连接Root为目标(Connecting as Target to the Root)
  • 连接PDB为目标(Connecting as Target to a PDB)
关于CDBs的备份和恢复
你可以对整个CDB、只有root、单个或多个PDB执行RMAN操作。你可以根据以下规则让RMAN连接CDBs:
  • 在整个CDB上执行操作(例如,备份整个CDB)你需要连接到root作为目标。
  • 只对root执行操作(例如,备份root)你需要连接到root作为目标。
  • 对单个PDB执行操作,你可以连接到root或直接的连接PDB作为目标
    • 如果你通过root连接,必须使用PLUGGABLE DATABASE语法使用RMAN命令。例如,备份一个PDB,可以用BACKUP PLUGGABLE DATABASE命令
    • 如果你是直接连接到一个PDB,你可以使用和连接到非CDB一样的命令。例如,备份一个PDB,你可以使用BACKUP DATABASE命令。
  • 通过一个命令在两个或更多的PDBs上执行操作,你需要连接到root作为目标。例如,备份sales和hr的PDB,你可以连接到root,然后提交以下命令:BACKUP PLUGGABLE DATABASE sales,hr;
注意:如果你连接CDB为目标是通过操作系统认证,你就是连接为root。
限制连接到PDB(Restrictions When Connected to a PDB)
当你是直接连接PDB为目标,以下操作是不允许:
  • 备份archive logs
  • 删除archive logs
  • 删除archive logs备份
  • 恢复归档日志(RMAN在media recovery期间需要恢复archived logs)
  • 时间点恢复 Point-in-time recovery (PITR)
  • 表空间时间点恢复(TSPITR,Tablespace Point-in-time Recovery)
  • 表恢复 Table recovery
  • 副本数据库 Duplicate database
  • 闪回操作 Flashback operations
  • 运行数据恢复指导 Running Data Recovery Advisor
  • Report/delete obsolete
  • Register database
  • Import catalog
  • Reset database
  • 配置RMAN环境(使用CONFIGURE命令)
注意:当你连接目录为PDB,你不能连接到恢复目录(recovery catalog)
连接Root为目标(Connecting as Target to the Root)
有多种方法可以连接到root作为目标,以下三个是最常见的方法:
  • 通过普通用户本地连接(Connecting locally as a common user)
  • 通过操作系统认证连接( Connecting with operating system authentication)
  • 普通用户通过Oracle Net Services使用网络服务名连接
在所有的情况下,你连接的用户必须要有SYSDBA货SYSBACKUP权限。
例1使用SYS用户在本地连接到root,这是一个常见的用户,建立连接使用的是SYSDBA权限
例1: Connecting Locally to the Root
[oracle@db12c ~]$ rman target sys
connected to target database: DB12C (DBID=1279217785)
RMAN>
例2: Connecting to the Root with Operating System Authentication
[oracle@db12c ~]$ rman target /
connected to target database: DB12C (DBID=1279217785)
例3:Connecting to the Root with a Net Service Name
rman target c##bkuser@sales
target database Password: password
connected to target database: CDB (DBID=659628168)
连接PDB为目标(Connecting as Target to a PDB)
连接到一个PDB作为目标,你必须:
  • 连接到一个网络服务名称必须解析PDB的数据库服务。
  • 连接到拥有SYSDBA权限的一个本地用户或公共用户
  • 你想要执行RMAN操作的PDB名称
  • 解析对应的网络服务名到对应的PDB数据库服务
  • 在hrpdb PDB上创建对应的local user hrbkup并且授予sysdba权限。
例4:Connecting As Target to a PDB
rman target hrbkup@hrpdb
target database Password: password
connected to target database: CDB (DBID=659628168)

12c New Features:备份CDBs和PDBs


关于备份CDBs和PDBs
在12c中RMAN和Oracle Enterprise Manager Cloud Control对多租户环境提供完整的备份和恢复支持。多租户体系结构能够使一个Oracle Database作为CDB功能。你可以对整个CDB、或仅仅root、一个或多个PDB做备份和恢复。你也可以在PDB中的单个表空间和数据文件做备份和恢复。
你可能想要通过使用增量备份策略在夜间执行备份整个CDB,或者你可能想要经常对个别PDB进行备份和很少对整个CDB或者root做备份。
从对数据丢失的恢复能力,单独备份root和所有的PDB等同于备份整个CDB。两者的主要区别是在你输入RMAN命令的数量和恢复时间。恢复整个CDB比恢复root加上所有的PDB需要的时间更少。
备份整个CDB
备份整个CDB和备份非CDB类似,但你备份整个CDB,RMAN会备份root和所有的PDB,还有archived redo logs。你可以从CDB备份中恢复整个CDB,或只有root,一个或多个PDB。
备份整个CDB
按照说明在“Backing Up a Whole Database with RMAN”,使用有sysbackup或sysdba权限的公共用户(common user)连接root。
使用RMAN备份Root
你可以使用RMAN只针对root做备份。因为在整个CDB中root包含关键元数据。Oracle推荐定时备份root或备份整个CDB。
使用RMAN备份root:
  1. 启动RMAN并且使用有SYSBACKUP或SYSDBA权限的共有用户(common user)连接到root。
  2. 输入下面的命令:BACKUP DATABASE ROOT;
使用RMAN备份PDBs
RMAN可以支持对CDB中的一个或多个PDBs备份。有两种方法使用RMAN来备份PDB:
  • 连接到root和使用BACKUP PLUGGABLE DATABASE命令,这种方法能够使用一个命令备份多个PDB。

当你连接到一个PDB使用root,这种备份只对root和特定的PDB,而且不是其他的PDBs。

  • 连接到PDB和使用BACKUP DATABASE命令。这种方法只备份单一的PDB,而且你也可以使用相同的命令来备份non_CDB。

创建备份的时候,通过root连接,则可以连接到任意可见的PDB。

当你备份单独的PDB,archived redo log是不会被备份的。
连接到root备份一个或多个PDB:
  1. 启动RMAN并且使用有SYSBACKUP或SYSDBA权限的共有用户(common user)连接到root。
  2. 在RMAN提示符里发送BACKUP PLUGGABLE DATABASE命令。

 

连接到PDB备份单个PDB:

  1. 启动RMAN并且使用有SYSBACKUP或SYSDBA权限的本地用户(local user)连接到PDB。
  2. 在RMAN提示符里发送BACKUP DATABASE命令。
备份在PDB中的表空间和数据文件
因为表空间在不同的PDB中可以有相同的名字,为了消除歧义,你必须直接的连接到PDB来备份一个或多个表空间。相比之下,因为数据文件的序号(numbers)和路径(paths)在CDB中是独一无二的,你可以连接到root或者PDB来备份PDB的数据文件。如果你连接到root,你可以使用一条命令来备份多个PDB的数据文件。如果你连接到PDB,你只能可以备份这个PDB的数据文件。
备份PDB中的表空间:
  1. 启动RMAN并且使用有SYSBACKUP或SYSDBA权限的本地用户(local user)连接到PDB。
  2. 发送 BACKUP TABLESPACE命令,详细描述参看 “Backing Up Tablespaces and Data Files with RMAN”

备份PDB中的数据文件:
  1. 执行下列操作之一:
  • 启动RMAN并且使用有SYSBACKUP或SYSDBA权限的共有用户(common user)连接到root。
  • 启动RMAN并且使用有SYSBACKUP或SYSDBA权限的本地用户(local user)连接到PDB。
 2. 发送BACKUP DATAFILE命令。