https://www.cnblogs.com/cqdba/p/8bef7c432b87807c0680d6791f427b09.html

在oracle12.1版本中,同一CDB中的所有PDB使用的都是相同的字符集,并且Plug-in时PDB也要和目标CDB相同字符集或者是子集,否则plug-in时会失败在PDB_PLUG_IN_VIOLATIONS视图提示,这样影响了PDB的迁移灵活性,在MOS Note 1968706.1摘录
从 12.2 开始,同一个 cdb 中的各个 PDB 字符集可以不相同。

Per-PDB Character Set的有几个前提条件
1) CDB must be AL32UTF8
2) Application Container requires single character set
3) National character set also supported per PDB
4) Truncation of data can occur in cross-container queries if data conversion to UNICODE causes expansion

对于最新版本 12.2.0.1 ,在新创建 PDB 时并没有办法指定 PDB 的字符集,因此只能和 root 容器字符集相同。目前没有提供创建PDB指定字符集的选项。

可以通过以下方式实现:

a. 而不同 PDB 可以使用 hot clone,
b. Relocate PDB online 方式直接 plug-in
c. 可使用内部转换字符集( internal_use) 进行转换
d. 使用12 DMU 工具

下面将对前面种方式进行演示:

A. 热克隆
a. 目标端数据库使用dbca创建容器数据库,默认cdb默认字符集是AL32UTF8,源库能为任意字符集
b.源环境与目标环境平台有相同的字节序(endianness)
c.源库和目标库都为归档模式 ; archive log list ;
d.源库和目标库都使用LOCAL UNDO ; select * from database_properties where property_name='LOCAL_UNDO_ENABLED';

alter session set container=cdb$root;
shu immediate ;
startup mount ;
alter database archivelog ; #改归档
startup upgrade ;
alter database local undo on ; #改本地UNDO
shu immediate ;
startup ;

1.源库,给SYSTEM 授创建PDB的权限

grant create pluggable database to system ; 

2. 目标库 创建public dblink,连接到源库,并测试

create public database link cdbgbk_link connect to c##adm identified by cloneadmin using 'cdbgbk';

select sysdate from dual@cdbgbk_link ; 

3. 目标库 修改file_name_convert

alter session set pdb_file_name_convert = '/oracle/app/oradata/cdbgbk/pdbgbk','/oracle/app/oradata/cdbgbk/pdb_gbk' ;

4. 目标库 通过dblink 克隆PDB,并检查PDB状态

CREATE PLUGGABLE DATABASE PDB_GBK FROM PDBGBK@cdbgbk_link;
select name ,con_id , open_mode from v$pdbs ;

5 .打开PDB

alter session set container=pdb_gbk ;
alter database open ;
show con_name ;
select value from nls_database_parameters where parameter ='NLS_CHARACTERSET';

B .relocate原理
热克隆+redo应用

准备条件同热克隆

克隆时源库可处于read write状态

目标库Create PDB完成,源库dml事务仍可继续

目标PDB open时源库中止会话并同步redo(或归档数据)

源端应用undo数据回滚

源库PDB会话自动切换到目标端

克隆语句使用AVALIABLITY选项nomal|high|max

1.目标库 修改file_name_convert

alter session set pdb_file_name_convert = '/oracle/app/oradata/cdbgbk/pdbgbk','/oracle/app/oradata/cdbgbk/pdb_gbk' ;

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

CREATE PLUGGABLE DATABASE PDB_GBK FROM PDBGBK@cdbgbk_link relocate availability max;
select pdb_name , status from cdb_pdbs;
select con_id,name ,open_mode from v$pdbs ;

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

1
alter pluggable database PDBGBK open;

  

C. 使用internal_use:
注:oracle并不建议使用INTERNAL_USE来变更数据库的字符集
1.切换到要更改的字符集

select name ,con_id ,open_mode from v$pdbs;
alter session set contailner=pdbutf ;
select value from nls_database_parameters where parameter='NLS_CHARACTERSET' ;

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

alter system enable restricted session ; 

3.更秘诀字符集

alter database character set INTERNAL_USE ZHS16GBK ;
select value from nls_database_parameters where parameter='NLS_CHARACTERSET' ; alter system disable restricted session ;

C2 .RAC 环境:

alter pluggable databse pdbanbob close instances=all;

alter pluggable database pdbanbob open read write restricted;
-- in container pdbanbob
alter database character set internal_use zhs16gbk;
alter pluggable databse pdbanbob close; alter pluggable database pdbanbob open instances=all;

参考:
https://mp.weixin.qq.com/s/XnS6TymaA9Q2XyFBgAfMCg
如何选择或更改数据库字符集 (NLS_CHARACTERSET) (文档 ID 1525394.1)
12c多租户容器数据库(CDB)和可插拔数据库(PDB)字符集限制/ ORA-65116/65119:不兼容的数据库/国家字符集(字符集不匹配:PDB字符集CDB字符集)(文档ID 1968706.1)

[转帖]Oracle 12.2 新特性 | PDB不同字符集变更的更多相关文章

  1. Maclean Liu对Oracle Database 12c新特性研究汇总

    Maclean Liu关于DB 12c新特性的研究文章如下: [Oracle Database 12c新特性] In-Database Archiving数据库内归档 [Oracle Database ...

  2. 【译】 Node.js v0.12的新特性 -- Cluster模式采用Round-Robin负载均衡

    原文:https://strongloop.com/strongblog/whats-new-in-node-js-v0-12-cluster-round-robin-load-balancing 本 ...

  3. Oracle Database 12.2新特性详解

    在2015年旧金山的Oracle OpenWorld大会上,Oracle发布了Database 12.2的Beta版本,虽然Beta版本只对部分用户开放,但是大会上已经公布了12.2的很多重要的新特性 ...

  4. oracle 12C的新特性-CDB和PDB

    1.前言 CDB与PDB是Oracle 12C引入的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插 ...

  5. goldengate 12c 12.2 新特性(updated)

    GoldenGate 12.2已经提供下载,增加了不少新特性 1. 异构配置加强不在需要sourceDefs和AssumeTargetDefs文件,在队列文件中已经包含metadata信息,比如tab ...

  6. Oracle Database 12c 新特性 - Pluggable Database

    在Oracle Database 12c中,可组装式数据库 - Pluggable Database为云计算而生.在12c以前,Oracle数据库是通过Schema来进行用户模式隔离的,现在,可组装式 ...

  7. Oracle 11gR2 RAC 新特性说明

    最近接触了一下Oracle 11g R2 的RAC,发现变化很大. 所以在自己动手做实验之前还是先研究下它的新特性比较好. 一.    官网介绍 先看一下Oracle 的官网文档里对RAC 新特性的一 ...

  8. [转]【Oracle Database 12c新特性】32k varchar2 max_string_size

    本文转自:https://blogs.oracle.com/askmaclean/entry/oracle_database_12c%E6%96%B0%E7%89%B9%E6%80%A7_32k_va ...

  9. 5分钟了解Java 12 八大新特性

    Java 12 终于发布了,我们一起来看一看 Java 12 中的新特性.通过本文可以在5分钟内快速了解 Java 12 新特性. 1 Switch 表达式 使用Java 12,switch不仅可以作 ...

  10. jdk 9 10 11 12 13 新特性

    jdk 9 新特性 1.集合加强 jdk9 为所有集合(List/Set/Map)都增加了 of 和 copyOf 方法,用来创建不可变集合,即一旦创建就无法再执行添加.删除.替换.排序等操作,否则将 ...

随机推荐

  1. Ubuntu 20.04 设置时区、配置NTP同步 timesyncd 代替 ntpd

    本文的服务器环境为 Ubuntu 20.04 系统,一个拥有 sudo 权限的非 root用户,并开启了防火墙. 基本时间命令 要在 Ubuntu 20.04 系统上查看服务器时间,可以使用 date ...

  2. 首次引入大模型!Bert-vits2-Extra中文特化版40秒素材复刻巫师3叶奈法

    Bert-vits2项目又更新了,更新了一个新的分支:中文特化,所谓中文特化,即针对中文音色的特殊优化版本,纯中文底模效果百尺竿头更进一步,同时首次引入了大模型,使用国产IDEA-CCNL/Erlan ...

  3. Windows中开启自动dump的方法

    @echo off echo 正在启用Dump... reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error ...

  4. SHA加密解密

    一.概述 SHA(Secure Hash Algorithm,安全哈希算法)是一类广泛应用于加密领域的算法,主要用于数据完整性校验和加密认证.SHA算法首次出现在1993年,由美国国家安全局(NSA) ...

  5. 一图看懂CodeArts Release三大特性

    本文分享自华为云社区<一图看懂CodeArts Release三大特性,带你玩转发布管理服务>,作者:华为云PaaS服务小智. 华为云发布管理服务Codearts Release,是面向开 ...

  6. Cassandra Gossip协议的二三事儿

    摘要:Gossip协议是Cassandra维护各节点状态的一个重要组件,下面我们以Gossip协议三次握手为线索逐步分析Gossip协议源码. Gossip协议是Cassandra维护各节点状态的一个 ...

  7. 解惑“高深”的Kafka时间轮原理,原来也就这么回事!

    [摘要] Kafka时间轮是Kafka实现高效的延时任务的基础,它模拟了现实生活中的钟表对时间的表示方式,同时,时间轮的方式并不仅限于Kafka,它是一种通用的时间表示方式,本文主要介绍Kafka中的 ...

  8. 分布式缓存服务DCS:企业版性能更强,稳定性更高

    摘要:企业版性能指标达到业界TOP1,行业领先30%,内核态实现真正多线程. 一.背景介绍 近年来,随着各行业业务需求急速增加,数据量和并发访问量呈指数级增长,原来只能依附于关系型数据库的传统&quo ...

  9. GaussDB CN服务异常实例分析

    摘要:先通过OPS确认节点状态是否已经恢复,或登录后台执行cm_ctl query -Cv确认集群是否已经Normal. 本文分享自华为云社区<[实例状态]GaussDB CN服务异常>, ...

  10. 如何使用参数化查询提高Cypher查询的性能

    摘要:在DBMS中,参数化查询被视为一种有效预防SQL注入攻击的手段. 本文分享自华为云社区<使用参数化查询提高Cypher查询的性能:以华为云图引擎GES为例>,作者: 蜉蝣与海. 在D ...