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. Shell脚本实践总结

    对比大小 符号用法:(必须使用双括号) < 小于     (( "$a" < "$b" ))  <= 小于等于   (( "$a&q ...

  2. (Dnc系列)借助Dnc.Events.InMemory在三分钟实现一个内存级别的事件驱动处理模型

    前言 Dnc.Events是在借鉴领域驱动设计大佬daxnet的博客基础上做的基于内存级别的EDA处理模型,不清楚EDA的童鞋请自行百度. 第一分钟 安装Nuget Dnc.Events.InMemo ...

  3. 用IoT放羊养牛,不出门也能知道它们的动向

    摘要:羊圈里几只小羊羔有点无精打采,"叮",牧民拉索划开手机,第一时间得知了这个情况.草场上有只牛一直到天黑都没回来,拉索再次通过手机软件,很快定位到那只独自流落在外的牛儿-- 本 ...

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

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

  5. iOS App 上架流程图文教学

    在上架 App 之前必须先准备好开发者帐号,但申请开发者帐号因法兰克早在之前已经申请好了,故就跳过此步骤,直接从产生凭证到上传 App 开始讲起.首先,要将自己辛苦写好的 App 送审的话,则要依序做 ...

  6. 火山引擎VeDI落地消费行业数据飞轮,提出“四更”新主张

    7月6日,火山引擎数智平台(VeDI)<全链路增长:数据飞轮转动消费新生力>主题活动在北京举办,会上分享了行业.企业.产品视角下的数据飞轮实践,并针对消费行业提出业务应用"四更& ...

  7. QA: Solon 出现中文乱码怎么办?

    有些服务器可能会出现中文乱码,有些又不会.也是挺晕的. 可以用 jvm 启动参数试一下: java -Dfile.encoding=utf-8 -jar demoapp.jar

  8. Kubernetes(K8S) 常用命令

    Docker 常用命令 Docker 常用命令 # 查看API版本 [root@k8smaster ~]# kubectl api-versions # 重启 K8S [root@k8smaster ...

  9. MB51选择屏幕与报表增强

    1.文档说明 如之前文档<MIGO新增页签增强>,在MIGO中增强自定义字段,那么在查询MB51时,想通过自定义字段进行筛选,并将数据展示到报表中,就需要对MB51进行增强. 此处需要说明 ...

  10. 开源项目因支持乌克兰遭issue刷屏,网友:别用Nginx,别用元素周期表

    大家好,我是DD. 昨天,两条科技界的新闻炸了,一条是关于GitHub发文封锁俄罗斯,一条是关于Oracle暂停俄罗斯所有业务.一个是全球最大的开源软件社区,一个是全球最大的数据库软件厂商.似乎巨头的 ...