当前位置:首页 > 时尚

oracle linux 11.2.0.4 单实例升级到upgrade 19c(single instance)

oracle linux 11.2.0.4 单实例升级到upgrade 19c(single instance)

背景:

由于现上的单到rds数据库需要在2021年1月1日之前,从oracle 11.2.0.4升级到19c,实例升级现在需要我测试升级后业务兼容不,所以,单到需要我把准生产linux 11.2.0.4的实例升级oracle升级到19c 

文章参考资料来自support文档 ID 2548962.1,Doc ID 2577572.1

oracle升级到19C有直接和间接升级,单到11.2.0.4以下的实例升级版本需要先升级到11.2.0.4然后再升级到19c;11.2.0.4以上版本可以直接升级。而我的单到版本是11.2.0.4,所以升级成非CDB的实例升级数据库。

 

 19c升级步骤

升级环境
服务器os linux7.5 内存256G cpu 32核
oracle 版本 11.2.0.4 数据量240G
oracle 19c软件静默安装时间约5-10分钟
oracle 11.2.0.4升级到19c升级时间 约60分钟

1.备份

这个可以逻辑的单到或RMAN的备份

2.安装19软件的步骤

把新建的ORACLE_HOME目录(我的是/u01/app/oracle/product/19c/dbhome_1)建好,解压下载的实例升级19软件(修改解压文件的权限)

oracle用户:

mkdir -p /u01/app/oracle/product/19c/dbhome_1 (root用户需要修改权限)

cd /u01/app/oracle/product/19c/dbhome_1/

静默安装的话:

设置好

新的ORACLE_HOME,ORACLE_BASE
对应的单到参数按照实际需要进行修改

https://www.cnblogs.com/hmwh/p/runInstaller -ignorePrereq -waitforcompletion -silent
-responseFile ${ ORACLE_HOME}/install/response/db_install.rsp
oracle.install.option=INSTALL_DB_SWONLY
ORACLE_HOSTNAME=${ ORACLE_HOSTNAME}
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=${ ORA_INVENTORY}
SELECTED_LANGUAGES=en,en_GB
ORACLE_HOME=${ ORACLE_HOME}
ORACLE_BASE=${ ORACLE_BASE}
oracle.install.db.InstallEdition=EE
oracle.install.db.OSDBA_GROUP=dba
oracle.install.db.OSBACKUPDBA_GROUP=dba
oracle.install.db.OSDGDBA_GROUP=dba
oracle.install.db.OSKMDBA_GROUP=dba
oracle.install.db.OSRACDBA_GROUP=dba
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false
DECLINE_SECURITY_UPDATES=true

 

图形界面安装:

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.进行升级前检查

清空回收站
检查 SYS 及 SYSTEM 用户的失效对象
检查 SYS 及 SYSTEM 用户下的重复对象
检查失效的、必需的实例升级、废弃的单到组件

 

检查所有的物化视图的状态,刷新所有没有刷新的实例升级物化视图。
检查物化视图日志的单到大小,如果物化视图日志的行数非零,那么刷新物化视图。
检查 direct loader 日志以及 PMOP 日志(分区维护操作日志),如果 direct loader log 或者 PMOP 日志非空,那么刷新日志显示的物化视图。升级数据库前,必须确保所有的物化视图都已经刷新完毕。

执行下面的 SQL 查询:

 

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

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

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

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

 

3.4复制 Transparent Encryption Oracle 钱包

如果使用了带 Oracle 钱包的 Transparent Data Encryption (TDE),那么拷贝 thesqlnet.ora 和 wallet 文件到新的Oracle home。在升级前需要手工拷贝 sqlnet.ora 和 wallet 文件。

  1. 以授权用户身份登录。
  2. 手工拷贝 sqlnet.ora,wallet 文件以及 ewallet.p12,到新的 Oracle home。

打开数据库 wallet。

例如:

从 Oracle Database 12c release 2 (12.2) 开始,默认的基于密码验证的协议排除了大小写不敏感的 10g 版本的密码。默认的SQLNET.ORA文件中参数SQLNET.ALLOWED_LOGON_VERSION_SERVER被设置成了 12 (排他模式)。

为了安全起见,Oracle建议使用大小写敏感的密码验证。这是默认的设置。但是在升级数据库的时候可以短暂的关闭大小写敏感的密码验证。在升级后,可以再决定是否启用大小写敏感的密码验证。

在升级前,Oracle建议您检查是否新的密码验证会影响您的应用。可以做下面的检查:

  • 检查是否有用户使用了 10g 大小写不敏感的密码验证方式。
  • 检查是否使用了尚未安装 CPUOct2012 补丁的11.2.0.3或者更早版本的客户端,或者应用了这个补丁但尚未启用大小写敏感的密码版本。
  • 确认您并未设置SEC_CASE_SENSITIVE_LOGON成FALSE。设置SEC_CASE_SENSITIVE_LOGON为FALSE就无法启用大小写敏感的密码版本了(11G和12C的密码版本)

 

以 -T 参数使用 Parallel Upgrade Utility 可以在升级时把用户表空间置为只读。 因为数据库可以读取之前版本创建的数据文件 header, 所以在升级时我们不需要做额外的操作。当升级完成后,表空间被置为读写时,文件 header 会自动被更新。如果升级失败,无法把表空间重新 online,那么检查升级日志。日志中包含把表空间重新 online 的语句。可以在数据库中或者每个pdb里手工执行来 online 表空间。

在升级日志文件中找到表空间相关的命令

如果升级失败可以检查升级的日志  (Oracle_base/cfgtoologs/dbua), 并且手工执行日志中的命令来 online 表空间。可以检查如下日志:

    Non-CDB 升级: catupgrd0.log
    PDB 数据库: catupgrdpdbname0.log, 这里 pdbname 是要升级的 pdb 的名字。

在每个日志文件的开始部分,可以找到把表空间置为只读的命令:

而在每个日志文件的结尾部分,可以找到把表空间置为读写的SQL命令:

出于安全考虑,不同的 Windows 账户配置为 Oracle home 不允许共享同一个 Oracle Base。

 

在源库执行 Preupgrade 脚本

升级前在 11.2 数据库上执行 OLS preprocess 脚本:

如果要升级的数据库安装有 Oracle Label Security,那么赋予SYS以DV_PATCH_ADMIN的角色

升级前在 11.2 数据库上执行 OLS preprocess 脚本:

1.    从 19c 的 Oracle Home 下拷贝以下脚本到源库的 Oracle Home(11.2) 下。


2.    启动 SQL*Plus 并以 DVOWNER 登录到要升级的数据库。

3.    执行下面的SQL:


4.    使用 SYS as SYSDBA 登陆数据库:


5.    执行 Data Vault preprocess 脚本:


6.    执行完毕后,以 DVOWNER 登陆数据库

7.    执行下面的SQL:

对于Database Vault,赋予SYS以DV_PATCH_ADMIN的角色

如果启用了Database Vault,那么也需要做对应的检查,检查步骤需要执行下面的SQL脚本 - olspreupgrade.sql, emremove.sql, catnoamd.sql

以 DVOWNER 登陆要升级的数据库

执行下面的SQL:

关闭 DB control

 

 从系统中手工删除ORACLE_HOME/HOSTNAME_SID/ 和 ORACLE_HOME/oc4j/j2ee/OC4J_DBConsole_HOSTNAME_SID 目录
如果是 windows 系统则删除 DB Console 的系统服务 OracleDBConsoleSID

执行下面的语句:

要清空回收站,执行下面的语句:

保存性能相关指标
检查网络性能
收集优化器统计信息

收集统计信息可以减少停机时间,Oracle建议使用  DBMS_STATS.GATHER_DICTIONARY_STATS 来收集这些统计信息,比如:

源库的 time zone 文件版本应该小于或者等于目标库的 time zone 文件版本。如果源库的 time zone 文件版本更高,那么需要升级目标库的 time zone 文件版本来对应源库的 time zone 文件。

 

在 11g 数据库上定义的 Data security roles 不能自动转换成 ORAS。所以在升级前,需要删除所有在 11g 数据库上定义的 data security roles。升级后可以使用新版本的 Analytic Workspace Manager 重新定义 data security roles。

如果从 11g 升级到 12c 之前未删除 data security roles,那么所有的 data security policies 以及 data security role 都会在新版本上失效。

 

5.升级具体步骤

19c linux7需要安装的yum包:

yum install -y bc    yum install -y binutilsyum install -y compat-libcap1yum install -y compat-libstdc++-33#yum install -y dtrace-modules#yum install -y dtrace-modules-headers#yum install -y dtrace-modules-provider-headersyum install -y dtrace-utilsyum install -y elfutils-libelfyum install -y elfutils-libelf-develyum install -y fontconfig-develyum install -y glibcyum install -y glibc-develyum install -y kshyum install -y libaioyum install -y libaio-develyum install -y libdtrace-ctf-develyum install -y libXrenderyum install -y libXrender-develyum install -y libX11yum install -y libXauyum install -y libXiyum install -y libXtstyum install -y libgccyum install -y librdmacm-develyum install -y libstdc++yum install -y libstdc++-develyum install -y libxcbyum install -y makeyum install -y net-tools # Clusterwareyum install -y nfs-utils # ACFSyum install -y python # ACFSyum install -y python-configshell # ACFSyum install -y python-rtslib # ACFSyum install -y python-six # ACFSyum install -y targetcli # ACFSyum install -y smartmontoolsyum install -y sysstat# Added by me.yum install -y unixODBC

linux 8需要安装的包:
dnf install -y bc    dnf install -y binutils#dnf install -y compat-libcap1dnf install -y compat-libstdc++-33#dnf install -y dtrace-modules#dnf install -y dtrace-modules-headers#dnf install -y dtrace-modules-provider-headers#dnf install -y dtrace-utilsdnf install -y elfutils-libelfdnf install -y elfutils-libelf-develdnf install -y fontconfig-develdnf install -y glibcdnf install -y glibc-develdnf install -y kshdnf install -y libaiodnf install -y libaio-devel#dnf install -y libdtrace-ctf-develdnf install -y libXrenderdnf install -y libXrender-develdnf install -y libX11dnf install -y libXaudnf install -y libXidnf install -y libXtstdnf install -y libgccdnf install -y librdmacm-develdnf install -y libstdc++dnf install -y libstdc++-develdnf install -y libxcbdnf install -y makednf install -y net-tools # Clusterwarednf install -y nfs-utils # ACFSdnf install -y python # ACFSdnf install -y python-configshell # ACFSdnf install -y python-rtslib # ACFSdnf install -y python-six # ACFSdnf install -y targetcli # ACFSdnf install -y smartmontoolsdnf install -y sysstat# Added by me.dnf install -y unixODBC# New for OL8dnf install -y libnsldnf install -y libnsl.i686dnf install -y libnsl2dnf install -y libnsl2.i686
启动预检查:

export ORACLE_HOME=/u01/app/oracle/product/11.2.0.4

/u01/app/oracle/product/11.2.0/dbhome_1/jdk/bin/java -jar /u01/app/oracle/product/19c/dbhome_1/rdbms/admin/preupgrade.jar FILE TEXT DIR /u01/app/oracle/precheck
查看生成的
/u01/app/oracle/precheck下的日志
如果有问题的,执行 postupgrade_fixups.sql 

安装19软件--这一步已经安装了。

db_recovery_file_dest string /u01/app/oracle/fast_recovery_area
db_recovery_file_dest_size big integer 80G   这个是、我是设置的很大。

5.1关闭数据库

PURGE DBA_RECYCLEBIN;

lsnrctl stop;

SHUTDOWN IMMEDIATE;

 

  • 从要升级的数据库 Home 拷贝配置文件到新的版本的Oracle Home中。
  • 如果您有一个 password 文件,那么把它从旧的 Oracle home 拷贝到新的 Oracle home。推荐重建 password 文件以利用 orapwd 的新功能,如果有的话。
  • 从参数文件中删除所有废弃的参数。在新的版本的数据库里有一些参数已经被废弃。从要启动新版本的数据库的参数文件中删除所有被废弃的参数,否则会在启动时产生错误。同时,修改那些在新版本里格式已经被改变的参数。
  • 如果要升级的是集群数据库,那么需要在升级前修改参数 CLUSTER_DATABASE 为 FALSE。

 

从旧的Oracle home下拷贝 SPFILE.ORA 或者 INIT.ORA到目标Oracle home,PURGE DBA_RECYCLEBIN然后把

使用目标 ORACLE_HOME(设置 ORACLE_HOME 为目标 ORACLE_HOME)启动数据库到 upgrade 模式(后续需要把sqlnet.ora,tnsnames.ora,listerner.ora复制到新的目录)

cp /u01/app/oracle/product/11.2.0/dbhome_1/dbs/spfiletest19c.ora /u01/app/oracle/product/19c/dbhome_1/dbs/

cp /u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwtest19c /u01/app/oracle/product/19c/dbhome_1/dbs/

startup upgrade;

 

 cd $ORACLE_HOME/bin

 https://www.cnblogs.com/hmwh/p/dbupgrade

 耐心等待约1个小时结束如下:

 

 

执行 Post-Upgrade Status 工具, utlusts.sql 并且检查升级的日志。在新的版本下执行 Post-Upgrade Status 工具。

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

 

如果使用了Oracle Clusterware,设置了 CLUSTER_DATABASE=TRUE 那么你必须升级数据库对应的 Oracle Clusterware keys。在19c上运行 srvctl 来做这件事,比如:

执行 dbupgdiag.sql 并检查日志。可以从 Note 556610.1 下载这个脚本。

执行 utlrp.sql (多次) 来使它们生效,直到失效对象的个数不再改变。

 

 

 

在 Linux 和 Unix 上设置环境变量

确保下面的环境变量指向了新的 ORACLE_HOME 对应的目录:

ORACLE_HOME
PATH

修改 /etc/oratab 文件对应的条目指向新的 ORACLE_HOME 目录

修改 /etc/oratab 文件

Post-upgrade fixup 脚本

执行 pre-upgrade 产生的 post-upgrade fixup 脚本

 后续把tns,监听文件,以及sqlnet.ora拷贝到到指定的新目录中,入股是11G升到19C,需要在sqlnet.ora中加入:

SQLNET.ALLOWED_LOGON_VERSION_SERVER=8

SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8

 

执行 Post-Upgrade Status 工具, utlusts.sql 并且检查升级的日志。在新的版本下执行 Post-Upgrade Status 工具。

$ sqlplus "/as sysdba"

SQL> STARTUP

SQL> @?ORACLE_HOME/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> @?/rdbms/admin/utlusts.sql  

 

如果使用了Oracle Clusterware,设置了 CLUSTER_DATABASE=TRUE 那么你必须升级数据库对应的 Oracle Clusterware keys。在19c上运行 srvctl 来做这件事,比如:

 

$ORACLE_HOME/bin/srvctl upgrade database -db name -o ORACLE_HOME

检查升级状态

执行 dbupgdiag.sql 并检查日志。可以从 Note 556610.1 下载这个脚本。

 

编译失效对象

执行 utlrp.sql (多次) 来使它们生效,直到失效对象的个数不再改变。

 

$ sqlplus "/ AS SYSDBA"

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

 

SQLNET.ALLOWED_LOGON_VERSION_SERVER=8

SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8

SQLNET.ALLOWED_LOGON_VERSION_SERVER:控制可以连接到12c数据库的客户端版本(client -->12c server )

SQLNET.ALLOWED_LOGON_VERSION_CLIENT:控制12c数据库可以连到哪些版本的数据库(12c server  -->其它版本dbserver),例如:控制通过DB LINK可连接到哪些版本的oracle库。

查看升级的组件:

set lin 200 pages 200
 col COMP_NAME for a60
 select substr(comp_id,1,15) comp_id,substr(comp_name,1,30)
comp_name,substr(version,1,10) version,status
from dba_registry order by modified;

 

 

select * from dba_registry_history;

 

 

 后续还需要、修改时区以及兼容版本参数:

  $ORACLE_HOME/rdbms/admin/utltz_countstar.sql

 

 

alter system set compatible='19.0.0' scope=spfile; 并进行重启。

分享到: