12.1.0.2 单机 升级 19.16 RAC步骤详解

来源:这里教程网 时间:2026-03-03 18:17:56 作者:

集群环境搭建

操作系统规划

节点

系统版本

cpu

内存

节点一

RHEL7.6

>=32

>=256G

节点二

RHEL7.6

>=32

>=256G

备注:两个系统配置需完全一样。以上为最低配置,可以对应增大。系统版本 RHEL7.6 19C 最佳实践版本。

主机文件规划

两个节点:

挂载点

大小

/

100G

/oracle

100G

/swap

32G

/backup

1T+

备注:以上文件系统都必须建立单独的 lv 设备。

主机网卡规划

 

节点

网卡数

用途

节点一

2 张物理网卡或则4张物理网卡

一个网卡用于集群内部的私有通信(私有网卡),另一个网卡用于提供对外服务(公共网卡)

节点二

2 张物理网卡或者4张物理网卡

备注:4张网卡可以两两做bond(冗余)。

规划

节点

IP 规划

用途

节点一

提供2个公网IP

一个为物理IP,一个为VIP

提供1个私网IP(不对外,自行设置)

用于集群之间通信IP

节点二

提供2个公网IP

一个为物理IP,一个为VIP

提供1个私网IP(不对外,自行设置)

用于集群之间通信IP

提供1个SCAN IP

SCAN IP

  备注:客户需要提供 5 个公网 IP 地址,两个私网 IP 地址。

共享存储规划

磁盘名称

大小

OCRVOTE

3 块5G盘

DATA

1.5T+

备注:共享存储需要映射到两台主机,并且主机上看到的磁盘名字对应一致。

安装前准备

    两台主机安装上述配置完成之后,需要将相应介质上传至主机上,如下:

上传节点

上传目录

上传安装包

说明

节点一

/oracle

系统镜像ISO

rhel-server-7.6-x86_64-dvd.iso

集群安装前,系统配置使用

LINUX.X64_193000_db_home.zip

数据库软件安装包

LINUX.X64_193000_grid_home.zip

集群软件安装包

p34130714_190000_Linux-x86-64.zip

p6880880_190000_Linux-x86-64.zip

数据库和集群补丁包

compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm

额外需要操作系统包

目标库数据同步后打开(12.1.0.2单机)

业务停止

    业务停止,确保无新增数据写入。

源库和目标库禁止自动作业任务

alter system set job_queue_processes=0 scope=both sid='*';

源库双节点关闭后,启动一号节点

    源库关闭,重新启动一号节点实例,并确保无业务会话连接至数据库。在一号节点切换归档,数据完全同步后,打开目标库。

srvctl stop database -d XX

一号节点:

startup

切换归档:

alter system swich logfile;

 

目标库打开

 

停止应用归档:  

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE   CANCEL;

将STANDBY数据库切换为PRIMARY数据库: ­

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE   FINISH;

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH   FORCE;

检查状态:

SELECT DATABASE_ROLE FROM V$DATABASE;

打开目标库:

ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;

ALTER DATABASE OPEN;

或者

shutdown immediate;

startup;

 

源库正常关闭

    源库一号节点正常关闭:

shutdown immediate;

    至此,完成源库到目标库数据同步及切换。

和SYSTEM重复对象检查

select object_name, object_type from dba_objects   where (object_name,object_type) in (select object_name,object_type from   dba_objects where owner = 'SYS') and owner = 'SYSTEM';

 

无效对象检查

create table object_2021 as select * from   dba_objects;

select count(*) from object_2021 where status='INVALIED';

 

确认数据文件不需要介质恢复且不处于backup模式

select * from v$recover_file;   SELECT * FROM v$backup WHERE status != 'NOT ACTIVE';

 

密码状态为 EXPIRED 的用户检查

确保业务用户正常:

备注:

在开始升级之前,请确定是否要对密码处于 EXPIRED 状态且其帐户处于 LOCKED 状态的默认 Oracle 数据库帐户使用密码身份验证。

 

在升级到 Oracle Database 19c 之后,默认的 Oracle 账号(没有设置密码并且处于 EXPIRED LOCKED 状态)会被置为   NO AUTHENTICATION 状态。

 

由于此新功能,这些默认账号会变为 schema-only 帐户,并无法使用密码验证。此功能的好处是管理员不再需要定期修改这些 Oracle 默认账号的密码。

 

此功能还可以降低未授权者使用默认密码侵入这些帐户的安全风险。

 

如果要在升级期间阻止将这些 Oracle 帐户设置为仅 schema-only 帐户,则必须在开始升级之前为该帐户设置有效的强密码,或者在升级后为这些帐户设置有效的强密码,   或者在升级前解锁帐户。

 

升级后,管理员还可以为仅 schema-only 启用密码身份验证。 但是,为了更好的安全性, Oracle 建议您将这些帐户保留为 schema-only 账号。

 

处理分布式事务

SQL>

 

IF THIS RETURNS ROWS YOU SHOULD DO THE FOLLOWING:

SQL> SELECT LOCAL_TRAN_ID FROM DBA_2PC_PENDING;

SQL> EXECUTE   DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('');

SQL> COMMIT;

 

 

检查

    如果安装了 Oracle Multimedia 或者 Oracle Spatial ,在安装前检查 PUBLIC synonym AREA 。它应当被定义为 OGC_AREA 的同义词,否则会导致升级后一些 DB 组件是失效的状态

SQL> select owner, synonym_name, table_owner,   table_name from dba_synonyms where synonym_name = 'AREA';

 

OWNER           SYNONYM_NAME TABLE_OWNER TABLE_NAME

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

PUBLIC           AREA                      MDSYS            OGC_AREA

 

 

禁用所有自定义的 before/after DDL 类型的触发器

SQL> SELECT   TRIGGER_NAME,TRIGGER_TYPE,STATUS,ACTION_TYPE FROM all_triggers where trigger_name   like '%DDL%';

 

SQL> SELECT   TRIGGER_NAME,TRIGGER_TYPE,STATUS,ACTION_TYPE FROM all_triggers where   TRIGGERING_EVENT like '%DDL%';

 

ALTER TRIGGER   GGS_DDL_TRIGGER_BEFORE DISABLE;

 

 

收集数据字典统计信息

EXEC   DBMS_STATS.GATHER_DICTIONARY_STATS;

 

执行preupgrade.jar升级预检

    19c preupgrade.jar 替换了 utlu112i.sql 来执行预检工作,这个 java 程序会生成两个 sql 脚本文件来修复一些简单的问题,比如提前收集字典统计信息之类,但是很多仍然需要手工操作

preupgrade.jar 语法如下

 

$Earlier_release_Oracle_home/jdk/bin/java -jar $New_release_Oracle_home/rdbms/admin/preupgrade.jar [FILE|TERMINAL] [TEXT|XML] [DIR output_dir]

FILE|TERMINAL  指定检查结果输出到终端还是文件,默认是文件

TEXT|XML       指定结果格式是文本还是 XML ,默认是文本

DIR -            指定日志输出到 <output_dir> 目录 .

如果没有指定 output_dir 目录,则优先到 $ORACLE_BASE/cfgtoollogs/<dbname>/preupgrade/ 目录,如果没有 ORACLE_BASE 环境变量则到 $ORACLE_HOME/cfgtoollogs/<db_name>/preupgrade/

 

~

export   ORACLE_BASE=/u01/app/oracle     #### 注意要用 12c jdk 来执行

export   ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1

export ORACLE_SID=XX

 

$ORACLE_HOME/jdk/bin/java -jar /oracle/product/19.3.0/dbhome_1/rdbms/admin/preupgrade.jar   file text dir ./precheck.log

 

==================

PREUPGRADE SUMMARY

==================

  /home/oracle/precheck.log/preupgrade.log

    /home/oracle/precheck.log/preupgrade_fixups.sql

    /home/oracle/precheck.log/postupgrade_fixups.sql

 

Execute fixup scripts   as indicated below:

 

Before upgrade:

 

Log into the database   and execute the preupgrade fixups

@/home/oracle/precheck.log/preupgrade_fixups.sql

 

After the upgrade:

 

Log into the database   and execute the postupgrade fixups

@/home/oracle/precheck.log/postupgrade_fixups.sql

 

 

日志显示:

more preupgrade.log

Report generated by   Oracle Database Pre-Upgrade Information Tool Version

19.0.0.0.0 Build: 1 on   2021-01-05T16:47:28

.........

.........

  ORACLE GENERATED FIXUP SCRIPT

  =============================

  All of the issues in database XX

  which are identified above as AFTER UPGRADE   "(AUTOFIXUP)" can be resolved by

  executing the following

 

      SQL>@/home/oracle/precheck.log/postupgrade_fixups.sql

 

 

执行:

@/home/oracle/precheck.log/preupgrade_fixups.sql 

 

正式升级数据库 ,刷数据字典升级数据库

  把参数文件从 12C $ORACLE_HOME/dbs 下复制到 19C $ORACLE_HOME/dbs 下。

    19c 软件启动

source .profile19c

echo $ORACLE_HOME

SQL> startup upgrade

 

cd / oracle /product/19.3.0/dbhome_1/bin

nohup ./dbupgrade &

 

复制tnsnames.ora和密码文件到19c环境

$ cp $ORACLE_HOME/network/admin/tnsnames.ora   .

$ cp   $ORACLE_HOME/dbs/orapwXX .

 

备注:

如果 REMOTE_LOGIN_PASSWORDFILE 初始化参数设置为 EXCLUSIVE ,则使用 ORAPWD 创建或迁移密码文件。   Oracle Database 12c 及更高版本为 ORAPWD 提供了一个新选项,用于从现有数据库迁移密码文件。

 

对于 Oracle   Database 12c 2 版( 12.2 )及更高版本,如果 REMOTE_LOGIN_PASSWORDFILE 设置为 SHARED ,则会收到升级前检查验证警告。 您可以选择以下选项之一来解决此问题:

 

    通过设置 REMOTE_LOGIN_PASSWORDFILE = NONE 完全禁用基于密码文件的身份验证

 

    通过设置 REMOTE_LOGIN_PASSWORD = EXCLUSIVE 限制基于密码文件的身份验证

 

重新打开数据库刷无效对象

sqlplus / as sysdba

SQL>

SQL> startup

 

组件状态检查:

SQL>col COMP_NAME   for a55;

SQL> set pages 400;

SQL> select   comp_name,version,status from dba_registry;

 

修复无效对象:

$ sqlplus "/ AS SYSDBA" SQL> @

 

    此时 dba_registry 内所有组件状态从 UPGRADED 变为 VALID

    如果组件 Oracle Real Application Clusters 的状态为 OPTION OFF ,则 当转换为RAC后,再 对该组件进行重新编译。

 

执行 Post-Upgrade Status 工具, utlusts.sql 并且检查升级的日志

$ sqlplus "/as sysdba"

SQL> STARTUP

SQL> @?/rdbms/admin/utlusts.sql

 

    注意 : 之前版本的 utluNNNs.sql 19c 上被替换为 utlusts.sql

    注意 : 如果执行 utlusts.sql 时碰到错误 "ORA-06502: PL/SQL: numeric or value error: character string buffer too small" ,那么执行

$ sqlplus "/as sysdba"

SQL> STARTUP

SQL> @?ORACLE_HOME/rdbms/admin/utlusts.sql   TEXT

 

 

数据库升级后 ,无效对象比对

对比之前的无效对象进行确认

select   owner,object_name from dba_objects where status<>'VALID' and   object_name not in (select object_name from object_2021 where   status<>'VALID');

 

执行预检生成的修复脚本

SQL>@/home/oracle/precheck.log/postupgrade_fixups.sql

 

重新收集统计信息

 

升级那些使用 DBMS_STATS 创建的统计信息表(Statistics Tables)

如果我们使用 DBMS_STATS.CREATE_STAT_TABLE 手工创建了一些统计信息表( statistics tables ),那么执行下面的命令来升级这些表(如果没有创建过统计信息表,那这一步骤可以忽略)。例如:

 

EXECUTE   DBMS_STATS.UPGRADE_STAT_TABLE('SYS', 'dictstattab');

对每个统计信息表都要执行一遍上面的命令。

 

 

修改RAC参数文件

mv /oracle/app/product/19.3.0/db_1/dbs/initXX1.ora /oracle/app/product/19.3.0/db_1/dbs/initXX1.ora.bak

 

vi /oracle/app/product/19.3.0/db_1/dbs/initXX1.ora

*.audit_file_dest=xxx

*.compatible=xxx

*.control_files=xxx

*.db_block_size=8192

*.db_create_file_dest='+DATA'

*.db_domain=''

*.db_file_multiblock_read_count=16

*.db_name='XX'

*.db_recovery_file_dest='+DATA'

*.db_recovery_file_dest_size=429496729600

*.dispatchers='(PROTOCOL=TCP) (SERVICE=XXXDB)'

*.job_queue_processes=0

*.log_archive_dest_1='LOCATION=+DATA'

*.log_archive_format='%t_%s_%r.dbf'

*.open_cursors=300

*.pga_aggregate_target=21474800000

*.processes=3000

*.remote_login_passwordfile='exclusive'

*.sessions=3305

*.sga_max_size=85899300000

*.sga_target=80899300000

*.undo_management='AUTO'

*.undo_retention=86400

*.undo_tablespace='UNDOTBS1'

*.diagnostic_dest='/oracle/app'

*.cluster_database=true

*.db_files=500

*.remote_listener='rac-scanip:1521'

XX1.instance_number=1

XX2.instance_number=2

XX2.thread=2

XX1.thread=1

XX2.undo_tablespace='UNDOTBS2'

XX1.undo_tablespace='UNDOTBS1'

 

使用ORACLE_SID=XX1

startup nomount 创建:

create spfile='+data' from pfile;

 

修改双节点$ORACLE_HOME/dbs 目录下参数文件,指向asm中的spfile路径

一节点:

vi $ORACLE_HOME/dbs/initXX1.ora

SPFILE='+data/XX/PARAMETERFILE/spfile.434.989222673'

 

二节点:

vi $ORACLE_HOME/dbs/initXX2.ora

SPFILE='+data/XX/PARAMETERFILE/spfile.434.989222673'

 

注意:如果实例从单机的名称变成rac的名称,那么两个节点的密码文件名字都需要作出相应的更改。

 

添加二节点资源

shutdown immediate;

export ORACLE_SID=XX1

startup;

创建二节点undo (如果undotbs2已经拷贝过来,这步忽略)

create undo tablespace undotbs2 datafile   '+DATA/XX/datafile/undotbs02.dbf' size 1G autoextend on;

 

创建二节点日志文件

alter database add logfile thread 2 group 8 '+DATA/XX//ONLINELOG/redo2_01'   size 800m;

alter database add logfile thread 2 group 9   '+DATA/XX/ONLINELOG/redo2_02' size 800m;

 

 

激活2节点redo

alter database enable thread 2;

 

重置temp文件

SQL> select file_name from dba_temp_files; 

 

create temporary tablespace temp1 tempfile '+DATA' size 1G autoextend on;  

alter database default temporary tablespace temp1;

drop tablespace temp including contents and datafiles;

create temporary tablespace temp tempfile '+DATA' size 1G autoextend on;

alter database default temporary tablespace temp;

drop tablespace temp1 including contents and datafiles;

 

( 删除临时表空间hang,尝试推出当前会话,重新登陆后删除。)

 

 

刷新RAC组件

SQL>spool on

SQL>spool catclust.txt

SQL>@?/rdbms/admin/catclust.sql

SQL>spool off

 

刷新完成后,重新编译无效对象

SQL>@?/rdbms/admin/utlrp.sql

 

将数据库及实例加入集群管理

二节点:

检查二节点是否存在目录 :*.audit_file_dest='/oracle/app/admin/XX/adump'

 

一节点:

手工关闭正在运行的实例

shutdown immediate;

 

su - oracle

srvctl add database -d XX -o '/oracle/app/product/19.3.0/db_1' -p   '+data/XX/PARAMETERFILE/spfile.434.989222673'

srvctl add instance -d XX -i XX1 -n rac1

srvctl add instance -d XX -i XX2 -n rac2

 

srvctl start instance -d XX -n rac1

srvctl start instance -d XX -n rac2

srvctl status database -d XX

 

    查看磁盘组版本:

select name,state,type,total_mb,compatibility,database_compatibility from   v$asm_diskgroup;

 

    修改磁盘组版本:

ALTER DISKGROUP data SET ATTRIBUTE 'compatible.asm' = '19.0.0.0.0';

ALTER DISKGROUP data SET ATTRIBUTE 'compatible.rdbms' = '19.0.0.0.0';

 

    磁盘组的属性只能增大,不能减小,如果增大过程出现错误,那么只能通过重建磁盘组来调整兼容性属性值。

 

    重启两节点验证有没有报错

srvctl stop database -d XX

srvctl start database -d XX

su – gird

crs_stat –t

 

    启动之前的DDL触发器:

SQL> SELECT TRIGGER_NAME,TRIGGER_TYPE,STATUS,ACTION_TYPE FROM   all_triggers where trigger_name like '%DDL%';

TRIGGER_NAME                     TRIGGER_TYPE     STATUS   ACTION_TYPE

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

GGS_DDL_TRIGGER_BEFORE           BEFORE EVENT     ENABLED  PL/SQL

NO_VM_DDL                        BEFORE EVENT     DISABLED PL/SQL

 

ALTER TRIGGER GGS_DDL_TRIGGER_BEFORE ENABLE;

   

    开启自动任务:

alter system set job_queue_processes=1000 scope=both sid='*';

 

相关推荐