前段时间遇到大量PDB需要迁移的场景,就研究了下怎么迁移,本篇介绍的PDB relocate是其中一种手段。
PDB relocate是Oracle在12c版本推出的新特性,是创建PDB的方式之一,可以用于不同CDB下的PDB迁移。
本文参考了以下文档:
1.19c Database Administrator’s Guide 对该功能的说明
2.《Oracle 18c必须掌握的新特性管理与实战-戴明明 臧强磊》
一、简单说明
PDB relocate是在目标库执行create pluggable database通过dblink将源库的PDB copy到目标库(将数据块,undo块和redo一同传输过去)。迁移过程中,源库可正常读写。迁移完成的PDB在目标库为mounted状态,当第一次open目标库PDB的时候,会应用源库redo,追平数据,同时源库PDB会自动关闭并删除。
Oracle 18c引入了更加通用的数据库会话中断机制,利用计时器来断开活动会话。当计时器过期后,Oracle会中断所有的活动会话,并将这些会话重新连接到迁移后的PDB上。在默认情况下,该特性支持数据库服务和PDB级别上调用的所有维护操作,如停止服务、迁移服务、迁移PDB和停止PDB。
二、前置条件
- 源库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静默方式执行,可以参考官方文档的说明
最后修改时间:2021-10-26 11:36:35
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
文章被以下合辑收录
评论
一个命令搞定数据库迁移,简直不要太轻松。😄
3年前

评论