• Oracle 10.2.0.5升级至11.2.0.4


    参照MOS 官方文档
    Complete Checklist for Manual Upgrade to Oracle Database 11gR2 (11.2) (Doc ID 837570.1)
    一、升级前的准备
    1、复制utlu112i.sql脚本
    从11G数据库复制$ORACLE_HOME/rdbms/admin/utlu112i.sql 脚本至10g 数据库临时目录,准备执行
    如果不在10g数据库运行utlu112i.sql脚本,则执行升级脚本catupgrd.sql 时会报以下错误:
    SQL> SELECT TO_NUMBER('MUST_BE_SAME_TIMEZONE_FILE_VERSION')
    2 FROM registry$database
    3 WHERE tz_version != (SELECT version from v$timezone_file);
    SELECT TO_NUMBER('MUST_BE_SAME_TIMEZONE_FILE_VERSION')
    *
    ERROR at line 1:
    ORA-01722: invalid number


    2、在10g数据库执行utlu112i.sql脚本
    使用 SYSDBA权限执行utlu112i.sql脚本
    $ sqlplus '/ as sysdba'
    SQL> spool upgrade_info.log
    SQL> @utlu112i.sql
    SQL> spool off
    SQL>
    输出样例见附件《utlu112i.log》

    3、检查10g数据库完整性

    执行检查脚本dbupgdiag.sql <===== 脚本在本文件夹
    $ sqlplus / as sysdba
    sql> alter session set nls_language='American';
    sql> @dbupgdiag.sql
    sql> exit
    输出样例见附件《db_upg_diag_orcl_07_Dec_2018_0954.log》

    执行编译失效包脚本utlrp.sql <--脚本在10g数据库$ORACLE_HOME/rdbms/admin目录
    $ cd $ORACLE_HOME/rdbms/admin
    $ sqlplus "/ as sysdba"
    SQL> @utlrp.sql

    执行健康检查脚本hcheck.sql <===== 脚本在本文件夹
    SQL> spool hcheck.log
    SQL> @hcheck.sql
    SQL> spool off
    输出样例见附件《hcheck.log》

    4、检查CONNECT 角色权限 <===== xx银行为10.2.x数据库,此步骤可以略过
    数据库9i和10.1.x以下的版本 connect角色权限较多有如下权限
    SELECT GRANTEE,PRIVILEGE
    FROM DBA_SYS_PRIVS
    WHERE GRANTEE ='CONNECT'

    GRANTEE PRIVILEGE
    ------- ----------------------
    CONNECT CREATE VIEW
    CONNECT CREATE TABLE
    CONNECT ALTER SESSION
    CONNECT CREATE CLUSTER
    CONNECT CREATE SESSION
    CONNECT CREATE SYNONYM
    CONNECT CREATE SEQUENCE
    CONNECT CREATE DATABASE LINK

    数据库11g和10.2以上版本 connect角色权限较少有如下权限
    SQL> SELECT GRANTEE,PRIVILEGE
    2 FROM DBA_SYS_PRIVS
    3 WHERE GRANTEE ='CONNECT';

    GRANTEE PRIVILEGE
    ------------------------------ ----------------------------------------
    CONNECT CREATE SESSION

    5、重建DBLINK <-- XX银行为10.2.x数据库,此步骤可以略过

    数据库9i和10.1.x以下的版本,dblink需要删除重建,在更新后
    SELECT 'CREATE '||DECODE(U.NAME,'PUBLIC','public ')||'DATABASE LINK '||CHR(10)
    ||DECODE(U.NAME,'PUBLIC',Null, 'SYS','',U.NAME||'.')|| L.NAME||chr(10)
    ||'CONNECT TO ' || L.USERID || ' IDENTIFIED BY "'||L.PASSWORD||'" USING
    '''||L.HOST||''''
    ||chr(10)||';' TEXT
    FROM SYS.LINK$ L, SYS.USER$ U
    WHERE L.OWNER# = U.USER#;

    6、更新 TIMESTAMP WITH TIMEZONE <===== XX银行为10.2.x数据库,此步骤可以略过
    更新 11.2.0.4. 不需要应用任何 DST 补丁包在 10.2.0.2 , 10.2.0.3 , 10.2.0.4 or 10.2.0.5 . 可以跳过DST相互更新说明.
    The 11.2.0.4 RDBMS DST version after the upgrade to 11.2.0.4 will be the same DST version as used in 10.2.0.2 , 10.2.0.3 , 10.2.0.4 or 10.2.0.5.
    SQL>SELECT version FROM v$timezone_file;

    VERSION
    ----------
    4


    7、检查NLS_NCHAR_CHARACTERSET 为UTF8 or AL16UTF16.
    SQL> select value from NLS_DATABASE_PARAMETERS where parameter = 'NLS_NCHAR_CHARACTERSET';
    VALUE
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------
    AL16UTF16
    如果是UTF8 or AL16UTF16.,则不需要做任何事情
    如果不是UTF8 or AL16UTF16.,则按照文档Note 225912.1操作

    8、检查用户陈旧的统计信息
    可以运行脚本检查陈旧统计信息check_stale_stats.sql <=====脚本在本文件夹
    或者可以回顾脚本utlu112i.sql的输出内容

    SQL> SQL> @check_stale_stats.sql
    -- There are no stale statistics in EXFSYS schema.
    -- There are no stale statistics in ORDSYS schema.
    -------------------------------------------------------------------------------------------------------
    -- SYS schema contains stale statistics use the following to gather the statistics --
    -----------------------------------------------------------------------------------------------------
    EXEC DBMS_STATS.GATHER_DICTIONARY_STATS('SYS',OPTIONS=>'GATHER STALE', ESTIMATE_PERCENT => DBMS_STATS.AUTO_SAMPLE_SIZE, METHOD_OPT => 'FOR ALL COLUMNS SIZE AUTO', CASCADE => TRUE);
    -- There are no stale statistics in WMSYS schema.
    -- There are no stale statistics in XDB schema.

    9、禁用Oracle Database Vault
    升级前先禁用,升级后再开启
    SQL> SELECT * FROM V$OPTION WHERE PARAMETER = 'Oracle Database Vault';
    PARAMETER VALUE
    ---------------------------------------------------------------- ----------------------------------------------------------------
    Oracle Database Vault
    启动方法自行百度

    10、备份Enterprise Manager Database Control Data

    11、配置Network ACL's
    应用如果使用了Oracle XMLDB中 UTL_TCP, UTL_SMTP, UTL_MAIL, UTL_HTTP, or UTL_INADDR 这些包

    12、检查sys用户逻辑坏块
    执行检查脚本@$ORACLE_HOME/rdbms/admin/utlvalid.sql <===== 脚本Oracle Home目录
    执行检查脚本analyze.sql <===== 脚本在本文件夹
    analyze.sq 应该输出没有任何错误.

    13、检查是否有正在运行的物化视图
    select distinct(trunc(last_refresh)) from dba_snapshot_refresh_times;
    select s.obj#,o.obj#,s.containerobj#,lastrefreshdate,pflags,xpflags,o.name,o.owner#, bitand(s.mflags, 8) from obj$ o, sum$ s where o.obj# = s.obj# and o.type# = 42 AND bitand(s.mflags, 8) = 8;
    如果第二个查询有输出 参照Note 1442457.1

    14、确保没有需要recovery 的数据文件和没有backup 的数据文件
    SELECT * FROM v$recover_file;
    SELECT * FROM v$backup WHERE status != 'NOT ACTIVE';

    15、检查有密码保护的角色
    --检查是否有角色指定了密码
    break on "Password protected Role"
    select r.ROLE "Password protected Role",
    p.grantee "Assigned by default to user"
    from dba_roles r, dba_role_privs p
    where r.PASSWORD_REQUIRED = 'YES' and p.GRANTED_ROLE = r.role
    and p.default_role = 'YES'
    and p.grantee <> 'SYS' and r.role not in
    (select role from dba_application_roles);

    --One can easily turn these password enabled roles into standard roles by running the script resulting from:
    select distinct 'alter role '||role||' not identified;' "-- Statements"
    from dba_roles r, dba_role_privs p
    where r.PASSWORD_REQUIRED = 'YES' and p.GRANTED_ROLE = r.role
    and p.default_role = 'YES'
    and p.grantee <> 'SYS' and r.role not in
    (select role from dba_application_roles);

    16、解决分布式事务
    SQL> select * from dba_2pc_pending;
    如果上一行有输出,则执行如下
    SQL> SELECT local_tran_id
    FROM dba_2pc_pending;
    SQL> EXECUTE dbms_transaction.purge_lost_db_entry('');
    SQL> COMMIT;

    17、检查是否有备库存在
    SELECT SUBSTR(value,INSTR(value,'=',INSTR(UPPER(value),'SERVICE'))+1)
    FROM v$parameter
    WHERE name LIKE 'log_archive_dest%' AND UPPER(value) LIKE 'SERVICE%';


    18、禁用所有批处理JOB和定时任务
    DBMS_JOB, DBMS_SCHEDULER
    SQL> execute dbms_scheduler.disable('AUTO_SPACE_ADVISOR_JOB');
    SQL> execute dbms_scheduler.disable('job1, job2, sys.jobclass1');
    Note 404238.1 : How to Disable an Entry from DBMS_SCHEDULER
    Note 1335741.1 : How To Stop A Running Job Using DBMS_JOB
    Note 67695.1 : PROCEDURE DBMS_JOB.BROKEN Specification

    19、确保SYS 和SYSTEM 使用SYSTEM表空间
    SQL> SELECT username, default_tablespace
    FROM dba_users
    WHERE username in ('SYS','SYSTEM');

    SQL> ALTER user SYS default tablespace SYSTEM;
    SQL> ALTER user SYSTEM default tablespace SYSTEM;

    20、检查 aud$ 是否存在SYS 和SYSTEM 用户,并且在SYSTEM表空间
    SQL> SELECT owner,tablespace_name
    FROM dba_tables
    WHERE table_name='AUD$';
    如果不在则迁移至SYS用户

    21、检查数据库是否有其他的SSL 外部用户
    SQL> SELECT name FROM sys.user$
    WHERE ext_username IS NOT NULL
    AND password = 'GLOBAL';
    如果SSL用户有,则在升级完成后,执行 步骤33

    22、记录数据文件,日志文件,控制文件位置,并备份 listener.ora, tnsnames.ora文件
    SQL> SELECT name FROM v$controlfile;
    SQL> SELECT file_name FROM dba_data_files;
    SQL> SELECT group#, member FROM v$logfile;.

    23、Listener配置
    如果是集群则不需要此步骤,因为在集群配置是更新
    停监听$ lsnrctl stop

    24、备份数据库
    对数据库做一个冷备份或者rman备份

    25、参数文件配置
    复制initialization.ora文件至<target 11GR2 home>/dbs目录
    推荐去掉参数文件中的隐含参数
    使用DIAGNOSTIC_DEST代替USER_DUMP_DEST, BACKGROUND_DUMP_DEST
    集群把CLUSTER_DATABASE=FALSE,升级完成后再改为true

    26、Win操作系统执行如下
    。。。。。。。。。。。

    27、Linux 系统验证以下配置
    --11g数据库环境变量
    - ORACLE_BASE
    - ORACLE_HOME
    - PATH, LD_LIBRARY_PATH , SHLIB_PATH and LIBPATH ( for AIX )

    --修改oratab
    Sample /etc/oratab
    #orcl:/opt/oracle/product/10.2/db_1:N
    orcl:/opt/oracle/product/11.2/db_1:N

    --如果是从10g升级至11g,验证一下信息
    SQL> select DBMS_STATS.GET_PARAM('METHOD_OPT') from dual;

    DBMS_STATS.GET_PARAM('METHOD_OPT')
    -------------------------------------------------------------
    FOR COLUMNS ID SIZE 1

    如果是FOR COLUMNS ID SIZE 1,在升级时会出现问题
    SQL>exec DBMS_STATS.SET_PARAM('METHOD_OPT','FOR ALL COLUMNS SIZE AUTO');

    二、升级数据库到11G R2
    XX银行是异机升级,需要先进行数据库还原 <===============
    28、在11g数据库执行如下升级脚本
    --执行catupgrd.sql升级脚本
    $ sqlplus "/ as sysdba"
    SQL> startup UPGRADE
    SQL> set echo on
    SQL> SPOOL upgrade.log
    SQL> @?/rdbms/admin/catupgrd.sql
    SQL> spool off
    --如果有陈旧的参数,可以在此时去掉,并将pfile转换为spfile

    --执行catupgrd.sql
    $ sqlplus "/as sysdba"
    SQL> STARTUP
    SQL> @?/rdbms/admin/utlu112s.sql

    --执行catuppst.sql
    SQL> @?/rdbms/admin/catuppst.sql

    --执行utlrp.sql
    SQL> @?/rdbms/admin/utlrp.sql

    --执行dbupgdiag.sql <===== 检查脚本,脚本在本文件夹
    SQL> @dbupgdiag.sql

    三、升级之后的操作
    29、验证 listener.ora文件
    lsnrctl start

    30、系统环境变量
    --确保环境变量指向11g
    - ORACLE_BASE
    - ORACLE_HOME
    - PATH, LD_LIBRARY_PATH, SHLIB_PATH and LIBPATH ( for AIX )

    --修改 /etc/oratab <====== XX银行集群应该不用操作
    SID:ORACLE_HOME:Y
    For Instance,
    orcl:/opt/oracle/product/11.2/db_1:Y

    31、检查DST,与升级前步骤 6 应该一样
    SQL>SELECT version FROM v$timezone_file;

    VERSION
    ----------
    4

    32、更新DBMS_STATS 包
    如果使用DBMS_STATS.CREATE_STAT_TABLE创建过表
    则使用EXECUTE DBMS_STATS.UPGRADE_STAT_TABLE('SYS','dictstattab');

    33、更新 SSL 用户
    If you are upgrading from 10.2.0.x (or higher), then you are not required to run this command.

    34、启用Database Vault

    35、使用UTL 类似包,则执行此步骤

    36、编辑init.ora
    --如果修改CLUSTER_DATABASE ,则改为true
    SQL> create spfile from pfile;

    37、锁定Oracle 自带用户
    SQL> SELECT username, account_status FROM dba_users ORDER BY username;
    ALTER USER username PASSWORD EXPIRE ACCOUNT LOCK;

    38、更新 Oracle Text
    This is only needed if Oracle Text is in use.

    39、更新集群信息 <=========

    40、配置EM
    如果没有可跳过

    41、配置
    TDE (Transparent Data Encryption)
    如果没有可跳过

    42、Gather Fixed Object Statistics
    在升级后两周 执行下面命令修复
    SQL>EXECUTE DBMS_STATS.GATHER_FIXED_OBJECTS_STATS;

    43、compatible参数修复
    参照 Note 1537496.1
    --1.修改集群参数cluster_database=false
    --2.修复compatible,确保在 11.0.0.0 之上
    --3.更新模式打开数据库 SQL> startup upgrade
    --4.执行 SQL> @?/rdbms/admin/c1102000.sql
    --5.关闭数据库
    --6.修改集群参数cluster_database=true
    --7.正常模式 SQL> startup

    作者:bicewow —— bicewow

    出处:http://www.cnblogs.com/bicewow/

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    CAN总线布线规范
    使用make_ext4fs时报错,No such file or directory
    安装arm-2009q3交叉编译器后,执行No such file....
    Busybox下make menconfig报错处理!
    解决Markdown转为PDF后,尖括号不能正确显示问题。
    开发板与PC直连 交叉、直连网线做法
    BusyBox tftp使用
    STM32的flash数据页转存过程分析!
    c语言中log函数的使用!
    POJ 3667 Hotel
  • 原文地址:https://www.cnblogs.com/bicewow/p/10082931.html
Copyright © 2020-2023  润新知