资讯专栏INFORMATION COLUMN

迁移数据库时,什么才是真正的Oracle环境保持一致

IT那活儿 / 600人阅读
迁移数据库时,什么才是真正的Oracle环境保持一致

点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!

故障背景

最近在客户现场打一个CDB环境的oracle PSU补丁时,到了最后一步要执行datapatch -verbose时,遇到了如下报错:
Error reading descriptor from registry: Couldnt open encmap gbk.enc:
No such file or directory
at /u01/app/oracle/product/19.0.0/dbhome_1/perl/lib/site_perl/5.28.1/x86_64-linux-thread-multi/XML/Parser.pm line 187.
XML::Simple called at /u01/app/oracle/product/19.0.0/dbhome_1/sqlpatch/sqlpatch.pm line 7780.
最终排查出来的原因是这个CDB库里的一个pdb是从其它库克隆过来的,虽然克隆前版本是一致的,但补丁升级路径不一致。导致在执行最后一步datapatch -verbose时执行SQL时找不到相关补丁。以前的11G版本的Oracle是没有这个问题的。解决方案也很简单,从源CDB的db ORACLE_HOME/sqlpatch目录下拷贝一份与目标CDB不一样的补丁号文件夹至目标CDB的每个节点相同目录下。

那我们今天就来探讨一下在做数据库迁移、搭建ADG时什么才是真正的Oracle源环境与目标环境保持一致。

源环境与目标环境保持一致

1. 检查是否都启用LOCAL UNDO

查看数据库是否开启 local undo ,如果 PROPERTY_VALUE 为 true 表示已经开启。只推荐源、目标库都使用LOCAL UNDO,在迁移PDB前都转换为LOCAL UNDO后再进行迁移。
alter session set container=PDB_NAME;
col PROPERTY_NAME for a25;
col PROPERTY_VALUE for a25;
select PROPERTY_NAME,PROPERTY_VALUE from database_properties where property_name=LOCAL_UNDO_ENABLED;

2. 检查源、目标CDB的组件是否一致

源CDB的组件数量与目标CDB的组件一致或少,特别是要注意OJVM组件与RAC组件。
OJVM组件需要源、目标CDB都安装或都不安装。
RAC组件由RAC迁移到单机时,在pdb执行如下命令关闭RAC组件。
exec dbms_registry.OPTION_OFF(RAC);
column comp_id format a20
column comp_name format a30
column version format a20
column status format a15
set pagesize 500
set linesize 150
SELECT COMP_ID,SUBSTR(comp_name, 1, 30) comp_name, SUBSTR(version, 1, 20) version, status
 FROM dba_registry
ORDER BY comp_name;

set linesize 170
set pagesize 5000
col con_id for 99
col con_name for a10
col comp_id for a15
col comp_name for a40
col status for a10
col version for a15;
SELECT a.con_id,
      decode(a.con_id, 1, cdb$root, b.name) AS con_name,
      comp_id,
      comp_name,
      status,
      version
 FROM cdb_registry a, v$pdbs b
WHERE a.con_id = b.con_id(+)
ORDER BY 1, 3;

3. 补丁更新的当前版本与补丁更新路径是否一致

1)请尽量保持PDB迁移的源、目标CDB的补丁版本一致。
2)如遇到补丁更新的当前版本一致,但补丁更新的路径不一致,比如:当前源、目标CDB的当前补丁版本均为19.10,但源CDB的补丁升级路径为19.3-->19.4-->19.10。而目标CDB的补丁升级路径为19.3-->19.10,此时源、目标CDB的补丁更新路径为不一致。
当然只是PDB迁移,此时补丁更新的路径不一致并不影响。补丁更新的路径不一致影响的是目标CDB再次进行补丁更新的datapatch -verbose。此时会遇到如下报错:
Error reading descriptor from registry: Couldnt open encmap gbk.enc:
No such file or directory
at /u01/app/oracle/product/19.0.0/dbhome_1/perl/lib/site_perl/5.28.1/x86_64-linux-thread-multi/XML/Parser.pm line 187.
XML::Simple called at /u01/app/oracle/product/19.0.0/dbhome_1/sqlpatch/sqlpatch.pm line 7780.
解决方案:从源CDB的db ORACLE_HOME/sqlpatch目录下拷贝一份与目标CDB不一样的补丁号文件夹至目标CDB的每个节点相同目录下。
set line 200
col action_time for a40
col status for a20
col description for a100
select patch_id,patch_type,action,status,action_time,description from dba_registry_sqlpatch;

4. oracle软件版本是否一致

目标CDB的软件版本要比源CDB的软件高或一致。

5. 源、目标CDB所在的操作系统endianness是否一致

源、目标CDB:
set line 300
set pagesize 100
COL PLATFORM_NAME FOR a40
COL ENDIAN_FORMAT for a14
SELECT PLATFORM_ID, PLATFORM_NAME, ENDIAN_FORMAT
 FROM V$TRANSPORTABLE_PLATFORM
 3    ORDER BY PLATFORM_ID;

PLATFORM_ID PLATFORM_NAME ENDIAN_FORMAT

----------- ---------------------------------------- --------------

 1 Solaris[tm] OE (32-bit) Big
 2 Solaris[tm] OE (64-bit) Big
 3 HP-UX (64-bit) Big
 4 HP-UX IA (64-bit) Big
 5 HP Tru64 UNIX Little
 6 AIX-Based Systems (64-bit) Big
 7 Microsoft Windows IA (32-bit) Little
 8 Microsoft Windows IA (64-bit) Little
 9 IBM zSeries Based Linux Big
10 Linux IA (32-bit) Little
11 Linux IA (64-bit) Little
12 Microsoft Windows x86 64-bit Little
13 Linux x86 64-bit Little
15 HP Open VMS Little
16 Apple Mac OS Big
17 Solaris Operating System (x86) Little
18 IBM Power Based Linux Big
19 HP IA Open VMS Little
20 Solaris Operating System (x86-64) Little
21 Apple Mac OS (x86-64) Little
22 Linux OS (S64) Big

21 rows selected.

6. 源、目标CDB库的数据库字符集、国家字符集是否一致

特别要注意NLS_NCHAR_CHARACTERSETNLS_CHARACTERSET这两个参数。

  • NLS_CHARACTERSET这个参数,目标CDB的值应该与源CDB一致,或是源CDB的超集。
  • NLS_NCHAR_CHARACTERSET这个参数,目标CDB的值应该与源CDB保持一致。
set linesize 300 pagesize 100
col parameter for a40
col value for a50
select * from nls_database_parameters;

7. 源、目标CDB的db_block_size 参数是否一致

1)克隆PDB时,注意检查源、目标CDB库的db_block_size是否一致。
2)注意检查源PDB的表空间是否有与db_block_size不一致的情况。
解决方案:克隆时设置涉及block size相关的参数。比如:
alter system set DB_16k_CACHE_SIZE=100M scope=both;

8. 其它方面

SGA_TARGET
CPU_COUNT
PGA_AGGREGATE_TARGET
PGA_AGGREGATE_LIMIT
SESSIONS
JOB_QUEUE_PROCESSES
还有操作系统的内核参数和资源限制等等也要保持一致。


本文作者:聂文峰(上海新炬王翦团队)

本文来源:“IT那活儿”公众号

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129190.html

相关文章

  • 凌晨1点突发致命生产事故,人工多线程来破局!

    摘要:留下几个人监控数据,其他人就散了,等迁移完成后再进行后续工作。突发事故凌晨的夜晚比较困,当我点起第三根烟的时候,负责迁移的这位程序员,急匆匆的跑过来找我了。这个事可大了如果在上午之前不搞定这个事情,那就完全是重大事故了。 有一个读者问我:你认为一个程序员具备什么样的能力,才算得上是厉害的程序员? 我答:拥有解决问题的能力的程序员。 这个回答貌似有点抽象,不要紧看下面的文章你会慢慢有所了...

    dendoink 评论0 收藏0
  • 什么是最好云策略?

    摘要:在公司的调查中,大约的组织如今使用私有云和公共云来承担相同的工作量,另有的受访者表示他们使用一种类型的云计算进行生产,而采用另一种类型进行测试开发备份或分析,这也被认为是一种混合云策略。混合云的定义根据企业的要求而有所不同,但它总是涉及使用私有云和公共云,而企业需要一种策略。如果让一些IT领导人定义混合云是什么,他们的答案可能会多样化,并将会在混合云定义中描述公共云和企业数据中心中混合应用程...

    big_cat 评论0 收藏0
  • 跨云迁移过程中数据同步及一致性校验实践(一)

    摘要:通过对一些客户的跨云迁移过程进行总结,发现普遍存在的挑战有三点数据完整性和一致性挑战。简而言之,跨云迁移过程中的数据一致性主要就集中在存量数据的迁移如何保证一致。前言随着互联网业务发展对容灾以及对访问加速、多供应商成本控制等需求的产生,互联网公司的多云部署和跨云迁移逐渐成为刚需,而在此过程中,最困扰运维和研发人员的就是数据的迁移和同步。俗语说 上屋搬下屋,搬洒一箩谷 ,在业务的迁移过程中一旦...

    Tecode 评论0 收藏0
  • Oracle APEX 系列文章6:Oracle APEX 到底适不适合企业环境

    摘要:很多人对是否真的适合企业环境还心存顾虑,所以我觉得有必要做个解释。架构或技术本身并没有绝对的好坏之分,只有适不适合。没有一个企业或应用系统可以完美地解决所有的业务需要。 showImg(https://segmentfault.com/img/remote/1460000014841889?w=2269&h=1500); 本文是钢哥的Oracle APEX系列文章中的第六篇,完整 Or...

    Cruise_Chan 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<