zoukankan      html  css  js  c++  java
  • 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
    对应的参数按照实际需要进行修改

    ./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

    图形界面安装:

    ./runInstaller -ignoreInternalDriverError

     

     

     

     

     

     

     

     

    3.进行升级前检查

    3.1清理数据库

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

    3.2 检查所有的物化视图

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

    执行下面的 SQL 查询:

    SQL> SELECT o.name FROM sys.obj$ o, sys.user$ u, sys.sum$ s WHERE o.type# = 42 AND bitand(s.mflags, 8) =8; 

    3.3Schema-Only 的用户以及升级密码状态为 EXPIRED 的用户

    在开始升级之前,请确定是否要对密码处于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。

    例如:

          SQL> STARTUP MOUNT;
          SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN 

    3.5理解密码大小写敏感

    从 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的密码版本)

     

    3.6对只读表空间升级

    以 -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> ALTER TABLESPACE <Tablespace Name> READ ONLY;
    Tablespace altered.

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

    SQL> ALTER TABLESPACE <Tablespace Name> READ WRITE;
    Tablespace altered.
     
    虽然以上检查个人觉得有点花里胡哨的,默认的11G密码大小写敏感,但是要知道,如果以上条件不通过,就会失败或者12c需要降级后升级。
     

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

    步骤 4: Preupgrade 步骤

    在源库执行 Preupgrade 脚本

    $Earlier_release_Oracle_home/jdk/bin/java -jar $New_release_Oracle_home/rdbms/admin/preupgrade.jar FILE TEXT DIR output_dir

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

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

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

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

            ORACLE_HOME/rdbms/admin/olspreupgrade.sql
            ORACLE_HOME/rdbms/admin/emremove.sql
            ORACLE_HOME/olap/admin/catnoamd.sql


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

    3.    执行下面的SQL:

        SQL> GRANT DV_PATCH_ADMIN to SYS;


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

        CONNECT SYS AS SYSDBA


    5.    执行 Data Vault preprocess 脚本:

        ORACLE_HOME/rdbms/admin/olspreupgrade.sql
        ORACLE_HOME/rdbms/admin/emremove.sql
        ORACLE_HOME/olap/admin/catnoamd.sql


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

    7.    执行下面的SQL:

        SQL> REVOKE DV_PATCH_ADMIN from SYS;

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

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

    以 DVOWNER 登陆要升级的数据库

    执行下面的SQL:

        SQL> GRANT DV_PATCH_ADMIN to SYS;

    使用 emremove.sql 手工删除 DB control

    关闭 DB control

    emctl stop dbconsole

      
    使用 sysdba 登陆

    SQL>SET ECHO ON
    SQL>SET SERVEROUTPUT ON
    SQL>@emremove.sql >> Script located in new 12c ORACLE_HOME/rdbms/admin

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

    确保升级前所有的文件都没有处于备份模式

    执行下面的语句:

    SQL> SELECT * FROM v$backup WHERE status != 'NOT ACTIVE'; 

    清空回收站

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

    SQL> PURGE DBA_RECYCLEBIN

    注意: 升级前务必清空回收站来避免 ORA-00600 错误并且减少升级时间。

    性能方面

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

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

    SQL> EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;

    检查时区设置

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

    关于升级 Oracle OLAP Data Security Policies

    在 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 binutils
    yum install -y compat-libcap1
    yum install -y compat-libstdc++-33
    #yum install -y dtrace-modules
    #yum install -y dtrace-modules-headers
    #yum install -y dtrace-modules-provider-headers
    yum install -y dtrace-utils
    yum install -y elfutils-libelf
    yum install -y elfutils-libelf-devel
    yum install -y fontconfig-devel
    yum install -y glibc
    yum install -y glibc-devel
    yum install -y ksh
    yum install -y libaio
    yum install -y libaio-devel
    yum install -y libdtrace-ctf-devel
    yum install -y libXrender
    yum install -y libXrender-devel
    yum install -y libX11
    yum install -y libXau
    yum install -y libXi
    yum install -y libXtst
    yum install -y libgcc
    yum install -y librdmacm-devel
    yum install -y libstdc++
    yum install -y libstdc++-devel
    yum install -y libxcb
    yum install -y make
    yum install -y net-tools # Clusterware
    yum install -y nfs-utils # ACFS
    yum install -y python # ACFS
    yum install -y python-configshell # ACFS
    yum install -y python-rtslib # ACFS
    yum install -y python-six # ACFS
    yum install -y targetcli # ACFS
    yum install -y smartmontools
    yum install -y sysstat
    
    # Added by me.
    yum install -y unixODBC

    linux 8需要安装的包:
    dnf install -y bc    
    dnf install -y binutils
    #dnf install -y compat-libcap1
    dnf 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-utils
    dnf install -y elfutils-libelf
    dnf install -y elfutils-libelf-devel
    dnf install -y fontconfig-devel
    dnf install -y glibc
    dnf install -y glibc-devel
    dnf install -y ksh
    dnf install -y libaio
    dnf install -y libaio-devel
    #dnf install -y libdtrace-ctf-devel
    dnf install -y libXrender
    dnf install -y libXrender-devel
    dnf install -y libX11
    dnf install -y libXau
    dnf install -y libXi
    dnf install -y libXtst
    dnf install -y libgcc
    dnf install -y librdmacm-devel
    dnf install -y libstdc++
    dnf install -y libstdc++-devel
    dnf install -y libxcb
    dnf install -y make
    dnf install -y net-tools # Clusterware
    dnf install -y nfs-utils # ACFS
    dnf install -y python # ACFS
    dnf install -y python-configshell # ACFS
    dnf install -y python-rtslib # ACFS
    dnf install -y python-six # ACFS
    dnf install -y targetcli # ACFS
    dnf install -y smartmontools
    dnf install -y sysstat
    
    # Added by me.
    dnf install -y unixODBC
    
    # New for OL8
    dnf install -y libnsl
    dnf install -y libnsl.i686
    dnf install -y libnsl2
    dnf 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;

    为升级新的Oracle Home做准备

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

    设置环境变量指向目标 ORACLE_HOME

    新的ORACLE_HOME为

    export ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1
    export PATH=$ORACLE_HOME/bin:$PATH
    export ORACLE_BASE=/u01/app/oracle   --我的还是之前那个base目录

    从旧的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

     ./dbupgrade

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

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

    $ 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> @?/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

    步骤6: 升级后步骤

    在 Linux 和 Unix 上设置环境变量

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

    ORACLE_HOME
    PATH

    更新 oratab 文件

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

    修改 /etc/oratab 文件

    Post-upgrade fixup 脚本

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

    SQL> @postupgrade_fixups.sql
     

     后续把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; 并进行重启。

  • 相关阅读:
    C语言指向指针的指针
    C语言注意事项
    C语言指针
    C语言字符串
    C语言数组
    C语言交换两个数的值
    C语言位运算符
    C语言各种进制输出
    C语言中各种进制的表示
    C 语言sizeof运算符
  • 原文地址:https://www.cnblogs.com/hmwh/p/13604044.html
Copyright © 2011-2022 走看看