数据和云 关注
手机版
  1. 云栖社区>
  2. 数据和云>
  3. 博客>
  4. 正文

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

技术小能手 2017-12-07 14:31:49 浏览1754 评论0 发表于: 数据和云

云栖社区 Oracle 数据库 配置 容器 测试 open 字符集 database

摘要: 从12c版本12.1开始,就有了新特性——Pluggable Database,相比较之前通过schema的管理方式实现多用户管理,Pluggable Database实现了进一步的隔离,其中包含如下特点: 将业务用户元数据和数据库本身的元数据进行分离,减少核心数据字典的性能衰减,增加管理便捷性。

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

  1. 将业务用户元数据和数据库本身的元数据进行分离,减少核心数据字典的性能衰减,增加管理便捷性。
  2. sga统一分配,各PDB通过各自的标识进行空间管理。

在12.1中,PDB的字符集与root容器必须保持一致,这样无形中造成了PDB迁移或者克隆的限制性。从12.2开始,同一个cdb中的各个PDB字符集可以不相同。

对于最新版本12.2.0.1,在新创建PDB时并没有办法指定PDB 的字符集,因此只能和root容器字符集相同,而不同PDB可以使用hot clone,或Relocate PDB online 方式直接plug-in,还可使用internal_use进行转换

测试环境

环境:Oracle 12.2.0.1 (REL 6.9 x86-64)

目标端数据库使用dbca创建容器数据库,默认cdb默认字符集是AL32UTF8:

6f1dc40fc552dd4f01c12b4a20ddce9c2b9f574f

PDB字符集:

836052eeb6e581b69320a58044641cbcccbc928d

源端数据库使用dbca创建容器数据库,默认CDB默认字符集是ZHS16GBK,同时自带ZHS16GBK的PDB,测试通过HOTCLONE PDB 和RELOCATE PDB插入到原字符集为AL32UTF8的CDB。

5137b60e07494e69a2ad4cad5b2f8d691c322223

测试条件确认

1.源环境与目标环境平台有相同的字节序(endianness)

12f47e9b65f1b383e4bbc9b936845168173573c8

2.目标库是AL32UTF8,源库能为任意字符集(见环境准备)

3.对于options可选组件,源库安装的必须是目标库的子集或相同

4.源库和目标库都为归档模式 

b2fab72fd6e8c28f70239dbdb0e0abf1bb3a260c

5.源库和目标库都使用LOCAL UNDO

3807e5598165dc192b7ea4e1304775b47b35bd9f

6、步骤5满足源端PDB在read write 状态下进行克隆或relocate

注:如一开始并未使用LOCAL UNDO和归档模式,则通过如下方式开启

确认当前操作会话为cdb,或者进行切换

0afed82e06332fbe2c51afcb9cb1667b9ed297a4

热克隆验证

1.源库CDB$ROOT创建common user

64be0cc0e89f43e154be6ea8714b95bdd3ebd0f6

2.创建public dblink,连接到源库


3.目标库测试dblink

22a290a3569067f43a4a50afa8a17e644dfedf45

4.修改FILE_NAME_CONVERT

32fa0e05ca8a251e0c1fb34d9bb76a4ae4b64f0b

5.通过dblink克隆PDB


6.检查克隆PDB

ec88030d04f4809868097b8dc8b7f7c51d36941a

此时仍然是mount状态,open打开PDB

9b8ce32380f7b4357bc9987b1541c43ed6ce56e8

relocate原理


  • 热克隆+redo应用
  • 准备条件同热克隆
  • 克隆时源库可处于read write状态
  • 目标库Create PDB完成,源库dml事务仍可继续
  • 目标PDB open时源库中止会话并同步redo(或归档数据)
  • 源端应用undo数据回滚
  • 源库PDB会话自动切换到目标端
  • 克隆语句使用AVALIABLITY选项nomal|high|max(见测试过程)

如有条件,还可以验证应用连接自动切换到relocate目标端。

relocate测试

使用PDB relocate(PDB hot move),条件、步骤基本与hot clone相同,且都可沿用Hot Clone的保留配置。

1.目标库参数转换


2.relocate

bdf67748f1df2fc4cd24a53ef85f943ddc234fe8

#在relocate过程中,理论上连接原库PDBGBK的dml事务并不中断。

3.relocate操作完成

179fd1ea84e22ab28b1b5026f7ed2a90a864b6e8

4.此时源库库状态(仍然承载连接和应用):

17adb5446dfe7bdc08a5d05b7413c483db6419ae

通过v$diag_info视图获取12c alert日志的位置:

7c500202046fb0e35f42dcdb5b86091c3d65e453

其中从Diag Trace的位置中能够找到alert里记录关于relocate的操作内容:

cbf3481406a74fdcbbf87cb9d1dc16ff709d1b0d

5.目标CDB中打开PDB,切换PDB

SQL> alter pluggable database PDBGBK open;
Pluggable database altered.

当目标库PDBGBK打开,如应用连接配置没有到目标库,则直接连接原来源库的连接会断开且dml事务直接中断。如有条件配置应用连接可以尝试配置并验证源库和目标端的记录条数和目标端。

另外注意监听里已经注册上了pdbgbk的服务(instance属于目标库)

open过程中记录操作:

ac98cd719fe4350f7cda78f9fe3b80158847eed9

目标库中,relocate过来的库状态正常:

cb1fb187e15d6e2b5cbbfa0b58802631bfa57a53

在目标库的PDB open时候,源库的alert记录relocate结束,源PDB删除操作:

3fbb36adf9058657dec0574f5bcbd465cc835a17

内部转换字符集

使用internal_use:

1824c9e2a18e7f99747ef15da874bd7c3578254f

直接修改字符集报错,说明新设字符集必须是老字符集的超集

0646d535185551af3e53c4712bde65eae7335edb

使用INTERNAL_USE:

df586141bbfc2191f5de2797844a981778320368

需要变更为限制会话模式再进行修改:

b73a3567573e130d84a52e4d58b0886d758e3eb0


原文发布时间为:2017-12-7

本文作者:谭龙

本文来自云栖社区合作伙伴“数据和云”,了解相关信息可以关注“数据和云”微信公众号

如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:yqgroup@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

用云栖社区APP,舒服~

【云栖快讯】2017互联网超级工程阿里双11完美落幕,交易额突破1682亿,但阿里工程师如何玩转“超级工程”,背后黑科技又是如何?12月13-14日,12位大咖直播分享揭秘1682亿背后技术实践,马上预约  详情请点击

网友评论

HTTPDNS是面向移动开发者推出的一款域名解析产品,具有域名防劫持、精准调度的特性。

为企业和开发者提供稳定、安全、智能的把网站域名或应用资源转换为计算机用于互连的数字 IP地址,从而将最终用户的访...

操作审计(ActionTrail)会记录您的云账户资源操作,提供操作记录查询,并可以将记录文件保存到您指定的OS...

为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效率,降低 IT 成本...