Oracle 12.2 新特性:在线PDB数据库克隆(Pluggable Hot Clone)

在Oracle 12c的多租户(Multitenant)特性中,可以通过灵活的克隆复制来创建PDB(Pluggable Database),使得运维的工作大大简化。但是在12.1中,进行数据库Clone时,源数据库需要 置于Read Only模式 ,即影响源数据库的使用,又会带来时间窗口的不便。

在12.2中,Oracle引入了 Hot Clone 技术,可以通过在线的方式,对源库进行复制。大大简化的运维的复杂性。

以下测试向大家展示了这一新特性的用法和功能。首先在PDB1执行一个数据表的连续插入动作,维持活动事务(注意:最后中断是因为克隆已经完成了):

SQL> connect eygle/eygle@pdb1
Connected.
SQL> create table enmotech ( id number, dt timestamp );
Table created.
Elapsed: 00:00:01.17
SQL> begin2   for i in 1 .. 600 loop3    insert into enmotech values (i, systimestamp );4    commit;5    dbms_lock.sleep(2);6   end loop;7  end;8  /
^Cbegin
*
ERROR at line 1:
ORA-01013: user requested cancel of current operation
ORA-06512: at "SYS.DBMS_LOCK", line 205
ORA-06512: at line 5
Elapsed: 00:04:20.96

选择PDB1作为克隆复制的源数据库,在源数据库保持活动的状态下,进行Clone复制:

[oracle@pg1-enmotech-com ~]$ sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on Thu Dec 1 03:22:50 2016
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL> select con_id,name from v$datafile where con_id=3;CON_ID
----------
NAME
--------------------------------------------------------------------------------3
/u01/app/oracle/oradata/ORCL/3F605C8D8A4206B6E0536838A8C04ACF/datafile/o1_mf_system_d0n37tyk_.dbf3
/u01/app/oracle/oradata/ORCL/3F605C8D8A4206B6E0536838A8C04ACF/datafile/o1_mf_sysaux_d0n37tyx_.dbf3CON_ID
----------
NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/ORCL/3F605C8D8A4206B6E0536838A8C04ACF/datafile/o1_mf_undotbs1_d0n37tyy_.dbf3
/u01/app/oracle/oradata/ORCL/3F605C8D8A4206B6E0536838A8C04ACF/datafile/o1_mf_users_d0n38fdr_.dbf

接下来执行数据库克隆的操作,无需对源库执行任何操作:

SQL> ! mkdir /u01/app/oracle/oradata/ORCL/enmotech
SQL> alter system set db_create_file_dest='/u01/app/oracle/oradata/ORCL/enmotech';
System altered.
SQL> create pluggable database yhem from pdb1 ;Pluggable database created.

克隆复制完成之后,可以打开数据库,查看数据,之前的事务数据已经被部分的复制过来:

SQL> alter pluggable database yhem open;
Pluggable database altered.
SQL> alter session set container=YHEM;
Session altered.
SQL> alter session set current_schema=EYGLE;
Session altered.
SQL> select count(*) from enmotech;COUNT(*)
----------10
SQL> select * from enmotech; ID DT
---------- ------------------------------------------------------1 01-DEC-16 03.37.06.539694 AM2 01-DEC-16 03.37.08.556754 AM3 01-DEC-16 03.37.10.558066 AM4 01-DEC-16 03.37.12.563268 AM5 01-DEC-16 03.37.14.564449 AM6 01-DEC-16 03.37.16.570639 AM7 01-DEC-16 03.37.18.571286 AM8 01-DEC-16 03.37.20.571668 AM9 01-DEC-16 03.37.22.903123 AM10 01-DEC-16 03.37.24.902948 AM
10 rows selected.

通过告警日志记录的信息,可以看到整个动作的核心步骤,实际上Oracle做了不完全恢复,最后在指定的SCN打开了数据库:

2016-12-01T03:35:43.207319+08:00
ALTER SYSTEM SET db_create_file_dest='/u01/app/oracle/oradata/ORCL/enmotech' SCOPE=BOTH;
2016-12-01T03:37:08.934023+08:00
create pluggable database yhem from pdb1
2016-12-01T03:37:08.989913+08:00
PDB1(3): AUDSYS.AUD$UNIFIED (SQL_TEXT) - CLOB populated
2016-12-01T03:37:29.640510+08:00
YHEM(5):Endian type of dictionary set to little
****************************************************************
Pluggable Database YHEM with pdb id - 5 is created as UNUSABLE.
If any errors are encountered before the pdb is marked as NEW,
then the pdb must be dropped
local undo-1, localundoscn-0x00000000000000e0
****************************************************************
YHEM(5):Media Recovery Start
2016-12-01T03:37:30.026018+08:00
YHEM(5):Serial Media Recovery started
2016-12-01T03:37:30.154319+08:00
YHEM(5):Recovery of Online Redo Log: Thread 1 Group 2 Seq 68 Reading mem 0
YHEM(5):  Mem# 0: /u01/app/oracle/oradata/ORCL/onlinelog/o1_mf_2_d0n2yzro_.log
YHEM(5):  Mem# 1: /u01/app/oracle/fast_recovery_area/orcl/ORCL/onlinelog/o1_mf_2_d0n2z0vm_.log
2016-12-01T03:37:30.346568+08:00
YHEM(5):Incomplete Recovery applied until change 2198639 time 12/01/2016 03:37:26
2016-12-01T03:37:30.353390+08:00
YHEM(5):Media Recovery Complete (orcl)YHEM(5):Autotune of undo retention is turned on.
2016-12-01T03:37:36.701219+08:00
YHEM(5):[15846] Successfully onlined Undo Tablespace 2.
YHEM(5):Undo initialization finished serial:0 start:139692076 end:139692182 diff:106 ms (0.1 seconds)
YHEM(5):Database Characterset for YHEM is AL32UTF8
YHEM(5):JIT: pid 15846 requesting stop
Completed: create pluggable database yhem from pdb1
2016-12-01T03:38:32.727311+08:00
alter pluggable database yhem open
YHEM(5):Autotune of undo retention is turned on.
2016-12-01T03:38:32.850162+08:00
YHEM(5):Endian type of dictionary set to little
YHEM(5):[15846] Successfully onlined Undo Tablespace 2.
YHEM(5):Undo initialization finished serial:0 start:139748579 end:139748829 diff:250 ms (0.2 seconds)
YHEM(5):Deleting old file#9 from file$
YHEM(5):Deleting old file#10 from file$
YHEM(5):Deleting old file#11 from file$
YHEM(5):Deleting old file#12 from file$
YHEM(5):Deleting old file#13 from file$
YHEM(5):Adding new file#18 to file$(old file#9)
YHEM(5):Adding new file#19 to file$(old file#10)
YHEM(5):Adding new file#20 to file$(old file#11)
YHEM(5):Adding new file#21 to file$(old file#12)
YHEM(5):Successfully created internal service yhem at open
****************************************************************Post plug operations are now complete.Pluggable database YHEM with pdb id - 5 is now marked as NEW.****************************************************************
YHEM(5):Database Characterset for YHEM is AL32UTF8
2016-12-01T03:38:33.998091+08:00
YHEM(5):Opatch validation is skipped for PDB YHEM (con_id=0)
2016-12-01T03:39:01.596335+08:00
YHEM(5):Opening pdb with no Resource Manager plan active
2016-12-01T03:39:12.433441+08:00
Pluggable database YHEM opened read write
Completed: alter pluggable database yhem open
2016-12-01T03:46:45.511090+08:00
Starting control autobackup
Control autobackup written to DISK device
handle '/u01/app/oracle/fast_recovery_area/orcl/PG1/autobackup/2016_12_01/o1_mf_s_929418405_d3yc55s5_.bkp'

这就是Oracle 12.2的重要增强之一,关于PDB的持续改进。

Oracle 12c R2 New Feature: Hot Clone A PDB (12.2热克隆)

在12.1版本中Clone一份PDB源库需要打开在read only只读模式, 在12.2版本中引入了local undo mode, 源PDB在read/write 读写模式也可以Clone.  这样可以在复制一份测试环境时对源库影响降到最低, 同时local undo mode也是ORACLE推荐的.

12.1 源PDB在read/write模式clone是不允许的.以前的 小例子12.1 clone pdb

ORA-65081: database or pluggable database is not open in read only mode

下面会演示一下12.2 的PDB HOT Clone, 开始前先补充一点local undo的知识.

UNDO模式

undo 在12C R1版本中只支持Global Shared Undo模式, 所有container共享一个UNDO表空间, 目前保留这种模式只是为了升级过渡, 在12C R2引入了PDB Local UNDO模式,每个container都有自己的UNDO 表空间, 对于RAC是每个实例每个container都有自己的UNDO表空间, 这也正是推荐的. 无论是Shared undo还是Local undo模式,都是CDB的属性,所以在修改时当前的container都要在cdb$root下. 12.2只要配置了LOCAL undo才支持下面的新特性:Hot Clone,    Refresh PDB,   PDB Relocate,   Flashback PDB

如何检查当前UNDO模式?

SQL> select * from database_properties where property_name='LOCAL_UNDO_ENABLED';
PROPERTY_NAME PROPE DESCRIPTION
-------------------- ----- -----------------------------------
LOCAL_UNDO_ENABLED TRUE true if local undo is enabled

UNDO模式转换

How to convert CDB from Local to Shared Undo Mode

When a CDB is in local undo mode, you can change it to use shared undo mode by issuing an ALTER DATABASE LOCAL UNDO OFF statement and restarting the database.
When it is in shared undo mode, the CDB ignores any local undo tablespaces that were created when it was in local undo mode.
Oracle recommends that you delete these local undo tablespaces.
startup upgrade
ALTER DATABASE LOCAL UNDO off;
shutdown immediate
startup
ALTER PLUGGABLE DATABASE xxx OPEN READ WRITE;
ALTER SESSION SET CONTAINER=xxx;
select a.CON_ID,a.TABLESPACE_NAME,b.FILE_NAME
from cdb_tablespaces a,CDB_DATA_FILES b
where a.TABLESPACE_NAME=b.TABLESPACE_NAME and a.con_id=b.con_id and a.CONTENTS='UNDO';
drop tablespace UNDOTBS1 including contents and datafiles;

How to convert CDB from Shared to Local Undo Mode

startup upgrade
container set cdb$root ,if not :alter session set container=cdb$root;
ALTER DATABASE LOCAL UNDO ON;
shutdown immediate;
startup
-- When a CDB is changed from shared undo mode to local undo mode,
-- Oracle Database creates the required undo tablespaces automatically.alter pluggable database xxx open;

Hot Clone Local PDB

因为我当前的测试环境12.2只有一套,先测试Clone LOCAL Pdb,   环境oracle 12.2.0.1 ee  on OEL 6, HOT Clone的内部原理:

Source PDB remains open for read and write
Read and copy in parallel
On-going operations imply a “dirty read”
Some data changes not included in initial file copy
Ship and apply redo to catch up with source
Apply undo to rollback uncommitted transactions

所以在较长或较大PDB Clone期间要保证REDO 日志存在, 最好源库开起archivelog mode.

[oracle@anbob ~]$ ora
SQL*Plus: Release 12.2.0.1.0 Production on Mon Mar 6 17:11:54 2017
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
Connected to:
Oracle Database 12c EE Extreme Perf Release 12.2.0.1.0 - 64bit Production
SQL> show pdbsCON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------2 PDB$SEED                       READ ONLY  NO3 PDBANBOB                       MOUNTEDSQL> alter pluggable database pdbanbob open;
Pluggable database altered.
SQL> show pdbsCON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------2 PDB$SEED                       READ ONLY  NO3 PDBANBOB                       READ WRITE NOSQL> create pluggable database pdbweejar from pdbanbpb;
create pluggable database pdbweejar from pdbanbpb
ERROR at line 1:
ORA-65016: FILE_NAME_CONVERT must be specified
SQL> alter session set pdb_file_name_convert='anbob','weejar';
Session altered.
-- Multi-threaded based on cpu count by default
-- File copy progress can be monitored in v$session_longops:SQL> create pluggable database pdbweejar from pdbanbob;
Pluggable database created.
SQL> show pdbsCON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------2 PDB$SEED                       READ ONLY  NO3 PDBANBOB                       READ WRITE NO6 PDBWEEJAR                      MOUNTEDSQL> alter pluggable database pdbweejar open;
Pluggable database altered.
SQL> show pdbsCON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------2 PDB$SEED                       READ ONLY  NO3 PDBANBOB                       READ WRITE NO6 PDBWEEJAR                      READ WRITE NOSQL> alter session set container=pdbweejar;
Session altered.
SQL> select * from v$dbfileFILE# NAME                                                                  CON_ID
---------- -------------------------------------------------------------------- ----------14 /u02/app/oracle/oradata/weejar/pdbweejar/system01.dbf                      6         15 /u02/app/oracle/oradata/weejar/pdbweejar/sysaux01.dbf                      6         16 /u02/app/oracle/oradata/weejar/pdbweejar/undotbs01.dbf                     6         17 /u02/app/oracle/oradata/weejar/pdbweejar/users01.dbf                       6         18 /u02/app/oracle/oradata/weejar/pdbweejar/lower01.dbf                       6
SQL> alter session set container=pdbanbob;
Session altered.
SQL> set lines 300
SQL> select * from v$dbfile;FILE# NAME                                                                                 CON_ID
---------- -------------------------------------------------------------------------------- ----------9 /u02/app/oracle/oradata/anbob/pdbanbob/system01.dbf                                       310 /u02/app/oracle/oradata/anbob/pdbanbob/sysaux01.dbf                                       311 /u02/app/oracle/oradata/anbob/pdbanbob/undotbs01.dbf                                      312 /u02/app/oracle/oradata/anbob/pdbanbob/users01.dbf                                        313 /u02/app/oracle/oradata/anbob/pdbanbob/lower01.dbf                                        3SQL> select * from database_properties;
PROPERTY_NAME               PROPERTY_VALUE       DESCRIPTION
--------------------------- -------------------- ------------------------------------------------------------
CON_VSN                     5                    version number for the CDB or the Application Container
DICTIONARY_ENDIAN_TYPE      LITTLE               Endian type of the data dictionary
LOCAL_UNDO_ENABLED          TRUE                 true if local undo is enabled
OLS_OID_STATUS              0                    OLS OID Status used for Label Security
GLOBAL_DB_NAME              ANBOB.COM            Global database name

Hot Clone REMOTE PDB

ENABLE ARCHIVELOG MODE IN CDB$ROOTCDB$ROOT-SQL> startup mountCDB$ROOT-SQL> alter database archivelog;CDB$ROOT-SQL> alter database open;
ENABLE LOCAL UNDO IN CDB$ROOTCDB$ROOT-SQL> startup mountCDB$ROOT-SQL> alter database open upgrade;CDB$ROOT-SQL> alter database local undo on;
CREATE COMMON USER IN CDB$ROOTCDB$ROOT-SQL> create user c##admin identified by <password> container=all;CDB$ROOT-SQL> grant sysoper to c##admin container=all;
CREATE PUBLIC DATABASE LINK IN CDB$ROOTCDB$ROOT-SQL> create public database link cdb1_link connect to c##admin identified by <password> using ‘<tns alias>’;
CREATE PLUGGABLE DATABASE PDB_DEV FROM PDB@DBLINK;

Summary:
12.2引入了local undo解决了12.1时clone pdb时源PDB需要READ-ONLY的前提. 减少了clone pdb时对源库的影响. 12.2 可以在shared undo和local undo之前来回的转换, 事务可以透明的转移, 从LOCAL 转到 SHARED里,第一次打开PDB时会应用local undo接着使用shared undo, 后就不再需要local undo, 但是local undo mode是ORACLE建议的配置. 这样才可以使用HOT CLONE和Refresh PDB及快速的闪回PDB时使用.

References:
Undo Modes in 12.2 Multitenant Databases – Local and Shared Modes (文档 ID 2169828.1)



About Me

........................................................................................................................

● 本文作者:小麦苗,部分内容整理自网络,若有侵权请联系小麦苗删除

● 本文在itpub( http://blog.itpub.net/26736162 )、博客园( http://www.cnblogs.com/lhrbest )和个人weixin公众号( xiaomaimiaolhr )上有同步更新

● 本文itpub地址: http://blog.itpub.net/26736162

● 本文博客园地址: http://www.cnblogs.com/lhrbest

● 本文pdf版、个人简介及小麦苗云盘地址: http://blog.itpub.net/26736162/viewspace-1624453/

● 数据库笔试面试题库及解答: http://blog.itpub.net/26736162/viewspace-2134706/

● DBA宝典今日头条号地址: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

........................................................................................................................

● QQ群号: 230161599 (满) 、618766405

● weixin群:可加我weixin,我拉大家进群,非诚勿扰

● 联系我请加QQ好友 ( 646634621 ) ,注明添加缘由

● 于 2018-11-01 06:00 ~ 2018-11-31 24:00 在魔都完成

● 最新修改时间:2018-11-01 06:00 ~ 2018-11-31 24:00

● 文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

........................................................................................................................

● 小麦苗的微店 : https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

● 小麦苗出版的数据库类丛书 : http://blog.itpub.net/26736162/viewspace-2142121/

● 小麦苗OCP、OCM、高可用网络班 : http://blog.itpub.net/26736162/viewspace-2148098/

● 小麦苗腾讯课堂主页 : https://lhr.ke.qq.com/

........................................................................................................................

使用 weixin客户端 扫描下面的二维码来关注小麦苗的weixin公众号( xiaomaimiaolhr )及QQ群(DBA宝典)、添加小麦苗weixin, 学习最实用的数据库技术。

........................................................................................................................

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26736162/viewspace-2222155/,如需转载,请注明出处,否则将追究法律责任。

Oracle 12.2 新特性:在线PDB数据库克隆(Pluggable Hot Clone)相关推荐

  1. Oracle 12.2 新特性: Online PDB relocate (PDB hot move)

    Oracle 12 . 2 新特性 : Online PDB relocate (PDB hot move) Relocating a PDB 是 Oracle 在 12C 中推出的一种新的数据迁移方 ...

  2. Oracle 12.2 新特性--PDB和CDB的字符集可以不一样

    Oracle 12.2 新特性--PDB和CDB的字符集可以不一样 在 12.1 中, PDB 的字符集与 root 容器必须保持一致,这样无形中造成了 PDB 迁移或者克隆的限制性.从 12.2 开 ...

  3. Oracle 12.2新特性 | 基于权重的节点驱逐

    前言 在Oracle Clusterware需要从集群中逐出特定节点或一组节点的情况时,基于服务器权重的节点驱逐可充当断裂机制,通过服务器上的负载附加信息来识别要驱逐的节点或节点组.其中所有节点被驱逐 ...

  4. oracle exp 00006,Oracle 12.1新特性----使用RMAN从备份中实现recover table

    Oracle 12.1新特性----使用RMAN从备份中实现recover table 发布时间:2020-06-26 19:41:44 来源:51CTO 阅读:4750 作者:hbxztc 在Ora ...

  5. Oracle 12.2 新特性 | PDB不同字符集变更深入解析

    从12c版本12.1开始,就有了新特性--Pluggable Database,相比较之前通过schema的管理方式实现多用户管理,Pluggable Database实现了进一步的隔离,其中包含如下 ...

  6. Oracle 12.2新特性掌上手册 - 第一卷 Availability

    编辑手记:12.2的发布,让很多技术爱好者迫不及待要尝尝鲜了,然而众多的新特性却可能让我们无所适从,为此我们节选12.2中一些重要的新特性,将在接下来的几期晨读中分享给大家,希望大家能够在12.2的应 ...

  7. oracle定义转储目录,Oracle 12.1新特性:在线rename或relocate数据文件

    在Oracle12.1之前的版本中要重命名数据文件或移动数据文件需要关闭数据库或把表空间/数据文件置为offline状态才可以,参考之前总结的 要实现这一功能需要使用ALTERDATABASEMOVE ...

  8. 解读Tom介绍的Oracle Database 12c的12个新特性

    在OOW 2012上Tom kyte介绍了Oracle新一代重量级数据库产品12c 的12个新特性, 目前Open World 2012的主要PDF都可以下载了,传送门在此:Search Conten ...

  9. 五月数据库技术通讯丨Oracle 12c因新特性引发异常Library Cache Lock等待

    每月关注:35页数据库技术干货,汇总一个月数据库行业热点事件.新的产品特性,包括重要数据库产品发布.警报.更新.新版本.补丁等. 亲爱的读者朋友: 为了及时共享行业案例,通知共性问题,达成共享和提前预 ...

最新文章

  1. python3精要(49)-生成器
  2. 8086的两种工作模式_Buck变换器工作原理
  3. 嵌入式linux字符设备驱动
  4. 1688推广工具_全面了解1688数字营销
  5. MYSQL 批量Insert ID顺序生成(仿雪花算法)
  6. Eclipse之Project facet Java version 1.8 is not supported.
  7. 在Windows上编译Spark源码
  8. sql 缓冲池_监视SQL Server中的内存文员和缓冲池分配
  9. 线性代数及其应用 知识整理
  10. 固态硬盘比机械硬盘到底快多少呢
  11. 二阶有源带通滤波器滤波原理
  12. Android应用逆向——最好用的两个无源码调试器
  13. 汇智聚力 平台闪耀 —— CDEC2022中国数字智能生态大会深圳举行
  14. 遂冀机器人_河北省电化教育馆关于举办河北省第五届中小学教育机器人暨创客竞赛活动的通知...
  15. 23种设计模式(15):备忘录模式
  16. LVS的Tun模式(隧道模式)的实现
  17. Flutter开发 - 对于富文本展示的方法封装
  18. 【CSDN 博客管理】Markdown图床以及html 图址处理
  19. 上海星尚传媒主持人刘彦池
  20. 蚂蚁上市,估值超2000亿美元!想数字化转型?先搞清楚这些问题

热门文章

  1. 云计算与云存储,具体是什么关系?
  2. 简单说一linux内核的内存模型(平坦,不连续,稀疏等三种内存模型)
  3. 实现字典树(前缀树、Trie树)并详解其应用
  4. OSChina 周日乱弹 —— 妹子是国家战略资源啊
  5. 633 - Find the Duplicate Number
  6. 对程序员而言,有什么终身受用的底层知识?
  7. 订单中心,究竟是分还是合?
  8. python __getattr__,__setattr__方法的理解
  9. Hifi指北:我是不是需要一台耳放呀?
  10. 六个基础措施可确保企业数据安全