博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle 12.2 新特性 | PDB不同字符集变更深入解析
阅读量:6549 次
发布时间:2019-06-24

本文共 1883 字,大约阅读时间需要 6 分钟。

从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

本文作者:谭龙

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

转载地址:http://xtgdo.baihongyu.com/

你可能感兴趣的文章
Java程序员从笨鸟到菜鸟之(三十四)大话设计模式(五)创建者模式和原型模式...
查看>>
eclipse构建maven的web项目
查看>>
Ubuntu去掉命令行前用户名和主机名步骤
查看>>
java实现断点续传
查看>>
Linux中sendmail启动速度慢的解决方法
查看>>
如何在Eclipse中查看Android API源码以及support包源码
查看>>
android SharedPreferences apply和commit的区别
查看>>
实现Bootstrap导航条可点击和鼠标悬停显示下拉菜单
查看>>
MongoDB入门3——更新文档和修改器1
查看>>
《现代操作系统》读书笔记之——进程间通信2
查看>>
面对高考
查看>>
php-excel-reader - 简单的excel 读取类
查看>>
ubuntu 在lnmp中php安装GD库
查看>>
Python学习笔记 1
查看>>
mysql 优化方案
查看>>
appium的坑
查看>>
500 Lines or Less
查看>>
函数与指针
查看>>
有关ubuntu的c++开发环境配置
查看>>
【spring】1.spring ioc原理和demo
查看>>