relocate pdb(relocate是什么意思)
mhr18 2024-10-12 04:30 15 浏览 0 评论
Relocating a PDB 是 Oracle 在 12C 中推出的一种新的数据迁移方式,在采用 Relocate 时可以使用最短的停机时间在不同的 CDB 之间直接迁移 PDB 。
Oracle 12.1 中 Relocate 迁移数据时,需要源库处于 read only 状态,但由于 12.2 中 local undo 的推出,可以实现完全在线迁移,源库的 PDB 在 read-write 模式下就可以 Relocate 到远端 CDB 中, 源 PDB 中的 DML 事务不会受到任何影响 ,整个迁移过程中不需要导出导入元数据,其迁移方式比 XTTS 更加简单快捷。
在目标 PDB 执行“ create pluggable database xxx relocate ”完成后,源 CDB 和目标 CDB 会同时存在 2 个 Relocate PDB ,此时目标 CDB 中该 PDB 处于 MOUNT 状态,而源库的 PDB 仍然处于 READ WRITE 状态。当在目标 CDB 中的 PDB 执行 OPEN 时,源 PDB 会停止且 Oracle 会自动 KILL 掉源 PDB 连接的所有会话,并同步且应用源 PDB 的日志到目标 PDB ,同时也会回滚未提交的事务,应用完成后 源 PDB 库的所有数据文件将会自动删除,源库会被删除 ,目标 PDB 可以对外提供服务。
如果在 Relocate 过程中使用 AVAILABILITY 模式进行 Relocate ,新的连接请求 Oracle 会将其发送新 PDB 上,则完全实现 PDB 迁移的零停机
其实 Relocate 的机制就是 Hot Clone+DBlink 的增量恢复。
PDB relocate 的基本实现方式 hot clone 和通过 dblink 的增量 redo apply 。在线 Pdb Relocate 需要在目标 CDB 中创建一个 database link 指向源库的 CDB ,需要 DBLINK 使用的 common 用户有 create pluggable database 的权限, relocate 的 AVAILABILITY (高用选项)有 normal|max|high ,当目标库使用 create pluggable database relocate 选项时,源库会一直在 read-write open 状态,甚至到 create pdb 的命令完成,源 PDB ( READ-WRITE OPEN )上的用户 DML 事务都不会有任何影响。当目标库的 CREATE PDB RELOCATE 完成时,会在源 CDB 和目标 CDB 存在 2 个 relocate 的 PDB ,只不过在目标 CDB 中该 PDB 是 mount 状态,此时源库的 DML 为生成更多的 redo 日志为后期的 PDB 切换, PDB 的切换操作是在目标 CDB 中的 PDB open read-write 时,此时源 PDB 会暂停,并且 KILL 掉源 PDB 库连接的会话,同步并应用源库 PDB 的 redo 到目标 PDB ,并且应用 undo 数据回滚未提交的事务,当应用完成后源 pdb 库的所有数据文件将会自动删除,目标 PDB 事务继续,在这短暂的操作期间如果使用 AVAILABILITY 如果有新的连接请求, Oracle 可以跳过连接到新 PDB 上,实现了移动 PDB 的零停机。
有一些基本的条件如源库和目标库是 archivelog mode, 并且 local undo ,和相同的字节码( endianness ),相同的 options 和字符集或者目标库是源库的子集,如目标库是字符集是 AL32UTF8 ,源库可以是任何字符集,当然这也是 12.2 的另一新特性 ( 同一 CDB 中,不同的 PDB 可以使用不同的字符集,但是其限制是 CDB 必须是 AL32UTF8) 。
源库CDB需要处于本地UNDO模式
col property_name for a30
col property_value for a20
select property_name,property_value from database_properties where property_name='LOCAL_UNDO_ENABLED';
--检查结果
PROPERTY_NAME PROPERTY_VALUE
------------------------------ --------------------
LOCAL_UNDO_ENABLED TRUE
--可以切换到PDB下查看undo表空间是否存在
select name from v$datafile where name like '%undo%';
源库CDB需要保存PDB的状态
--这步操作保证PDB relocate操作完成后自动启动目标库服务
ALTER PLUGGABLE DATABASE ALL SAVE STATE INSTANCES=ALL;
源库CDB必须为归档模式
archive log list;
源库CDB和目标库CDB需要有相同的字节序
--源库、目标库检查,注意:当CDB的字符集是UTF8时,PDB可以是任意的字符集
set lines 120
col platform_name for a20
select db.name,db.platform_id,db.platform_name,os.endian_format from v$database db,v$transportable_platform os where db.platform_id=os.platform_id
--检查结果
NAME PLATFORM_ID PLATFORM_NAME ENDIAN_FORMAT
--------- ----------- -------------------- --------------
ORCL 13 Linux x86 64-bit Little
如果目标CDB是非归档模式,则目标PDB只能是只读模式;如果目标PDB是归档模式,则没有此限制,源库CDB上安装的组件需要和目标CDB相同,或者是其子集
col COMP_NAME for a35
set lines 140
select comp_name, version, status from dba_registry;
三、操作步骤
1.源库创建管理用户
实际测试可以使用SYSTEM用户,官方文档及参考书目中是新创建用户。
--common user默认前缀c##,show parameter common_user_prefix可查看
create user c##test identified by oracle;
--官方文档明确需要sysoper与create pluggable database权限
grant sysoper,create session,resource,create any table,unlimited tablespace,create pluggable database to c##test;
2.创建目标端到源端的DBLINK
create public database link qy connect to c##test identified by oracle using '192.168.10.11:1521/服务名';
--注意:如果配置tns方式创建dblink,rac环境记得两个节点都要修改tnsnames.ora
--测试dblink,有时候tnsping能通,但是测试dblink不成功可以检查下global_names参数是否为false
select * from dual@qy;
3.目标库执行创建pdb命令
--执行下述命令的用户需要具有create pluggable database权限
create pluggable database test01 from test01@qy relocate availability normal;
--如果没有启动OMF,则需要增加FILE_NAME_CONVERT子句
4.检查状态
SELECT a.name,a.open_mode,b.status FROM v$pdbs a,DBA_PDBS b WHERE a.name=b.pdb_name and a.name = 'TEST01';
NAME OPEN_MODE STATUS
------------- ----------- -----------
TEST01 MOUNTED RELOCATING
5.测试同步
此时可以在源库创建表或修改数据,用于目标库OPEN后验证数据是否同步
6.打开目标库PDB完成relocate
到此步,如果顺利open,则relocate完成,正常来说源库的pdb会同步删除,但是在我测试的过程中,是有没有删除的情况。
alter pluggable database TEST01 open instances=all;
四、总结
- 建议查看源库及目标库alert日志,能更好理解迁移的过程;
- 这种方式目标库open后,源端会自动删除pdb,考虑到风险及借鉴某大行的迁移经验,还是放弃了采用这种方式,转为测试使用refresh pdb方式做迁移;
- 另外relocate还能通过dbca静默方式执行,可以参考官方文档的说明
转自《https://www.modb.pro/db/145103》
相关推荐
- 【推荐】一个开源免费、AI 驱动的智能数据管理系统,支持多数据库
-
如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!.前言在当今数据驱动的时代,高效、智能地管理数据已成为企业和个人不可或缺的能力。为了满足这一需求,我们推出了这款开...
- Pure Storage推出统一数据管理云平台及新闪存阵列
-
PureStorage公司今日推出企业数据云(EnterpriseDataCloud),称其为组织在混合环境中存储、管理和使用数据方式的全面架构升级。该公司表示,EDC使组织能够在本地、云端和混...
- 对Java学习的10条建议(对java课程的建议)
-
不少Java的初学者一开始都是信心满满准备迎接挑战,但是经过一段时间的学习之后,多少都会碰到各种挫败,以下北风网就总结一些对于初学者非常有用的建议,希望能够给他们解决现实中的问题。Java编程的准备:...
- SQLShift 重大更新:Oracle→PostgreSQL 存储过程转换功能上线!
-
官网:https://sqlshift.cn/6月,SQLShift迎来重大版本更新!作为国内首个支持Oracle->OceanBase存储过程智能转换的工具,SQLShift在过去一...
- JDK21有没有什么稳定、简单又强势的特性?
-
佳未阿里云开发者2025年03月05日08:30浙江阿里妹导读这篇文章主要介绍了Java虚拟线程的发展及其在AJDK中的实现和优化。阅前声明:本文介绍的内容基于AJDK21.0.5[1]以及以上...
- 「松勤软件测试」网站总出现404 bug?总结8个原因,不信解决不了
-
在进行网站测试的时候,有没有碰到过网站崩溃,打不开,出现404错误等各种现象,如果你碰到了,那么恭喜你,你的网站出问题了,是什么原因导致网站出问题呢,根据松勤软件测试的总结如下:01数据库中的表空间不...
- Java面试题及答案最全总结(2025版)
-
大家好,我是Java面试陪考员最近很多小伙伴在忙着找工作,给大家整理了一份非常全面的Java面试题及答案。涉及的内容非常全面,包含:Spring、MySQL、JVM、Redis、Linux、Sprin...
- 数据库日常运维工作内容(数据库日常运维 工作内容)
-
#数据库日常运维工作包括哪些内容?#数据库日常运维工作是一个涵盖多个层面的综合性任务,以下是详细的分类和内容说明:一、数据库运维核心工作监控与告警性能监控:实时监控CPU、内存、I/O、连接数、锁等待...
- 分布式之系统底层原理(上)(底层分布式技术)
-
作者:allanpan,腾讯IEG高级后台工程师导言分布式事务是分布式系统必不可少的组成部分,基本上只要实现一个分布式系统就逃不开对分布式事务的支持。本文从分布式事务这个概念切入,尝试对分布式事务...
- oracle 死锁了怎么办?kill 进程 直接上干货
-
1、查看死锁是否存在selectusername,lockwait,status,machine,programfromv$sessionwheresidin(selectsession...
- SpringBoot 各种分页查询方式详解(全网最全)
-
一、分页查询基础概念与原理1.1什么是分页查询分页查询是指将大量数据分割成多个小块(页)进行展示的技术,它是现代Web应用中必不可少的功能。想象一下你去图书馆找书,如果所有书都堆在一张桌子上,你很难...
- 《战场兄弟》全事件攻略 一般事件合同事件红装及隐藏职业攻略
-
《战场兄弟》全事件攻略,一般事件合同事件红装及隐藏职业攻略。《战场兄弟》事件奖励,事件条件。《战场兄弟》是OverhypeStudios制作发行的一款由xcom和桌游为灵感来源,以中世纪、低魔奇幻为...
- LoadRunner(loadrunner录制不到脚本)
-
一、核心组件与工作流程LoadRunner性能测试工具-并发测试-正版软件下载-使用教程-价格-官方代理商的架构围绕三大核心组件构建,形成完整测试闭环:VirtualUserGenerator(...
- Redis数据类型介绍(redis 数据类型)
-
介绍Redis支持五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)及Zset(sortedset:有序集合)。1、字符串类型概述1.1、数据类型Redis支持...
- RMAN备份监控及优化总结(rman备份原理)
-
今天主要介绍一下如何对RMAN备份监控及优化,这里就不讲rman备份的一些原理了,仅供参考。一、监控RMAN备份1、确定备份源与备份设备的最大速度从磁盘读的速度和磁带写的带度、备份的速度不可能超出这两...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle位图索引 (63)
- oracle批量插入数据 (62)
- oracle事务隔离级别 (53)
- oracle 空为0 (50)
- oracle主从同步 (55)
- oracle 乐观锁 (51)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)