【MOS】手动升级到数据库 12c 版本1(12.1)的完整核对清单 (文档 ID 2047701.1)


手动升级到数据库 12c 版本1(12.1)的完整核对清单 (文档 ID 2047701.1)

Complete Checklist for Manual Upgrades to Oracle Database 12c Release 1 (12.1) (文档 ID 1503653.1)



文档内容


用途

适用范围

详细信息

第1步: 升级到 Oracle 12c 版本1(12.1)的升级路径

第2步:推荐在源库上完成的

第3步:检查源库的一致性

第4步:升级前步骤

4.1 弃用的 CONNECT 角色

4.2 更改 Access Control Lists 和 Network Utility 包

4.3 Network Utility 包的依赖关系

4.4 处理源库带密码的 DBLINK

4.5 检查 TIMESTAMP WITH TIMEZONE 类型的数据

4.6 优化器统计信息

4.7  使用 emdwgrd 工具备份 Database Control 的文件及数据

4.8  在升级数据库前确认所有的物化视图都已经完成了刷新 

4.9 在升级数据库前确认没有数据文件需要介质恢复

4.10 在升级数据库前确认没有数据文件处于备份状态

4.11 在升级前把未决的分布式事务处理掉

4.12 在升级前清空数据库的 Recycle Bin

4.13 同步 standby 数据库

4.14 禁用所有的 cron job

4.15 检查 SYS 和 SYSTEM 用户的默认表空间

4.16 检查数据库是否有外部验证的的 SSL 用户(externally authenticated SSL users)

4.17 记录数据文件,重做日志和控制文件的路径

4.18 删除 Enterprise Manager Database Control repository

4.19 运行 olspreupgrade.sql

4.20 如果源库中存在 Oracle 12c 版本1自带的用户或者 Role,删除它们

4.21 检查并删除不必要的隐藏参数

4.22  检查 XDB ACLs 是否有 start_date and end_date ACE 属性

4.23 如果 JVM 的 Mitigation patch 已应用至源库,那么 Oracle JVM 组件是被禁用的。您会在升级数据库时碰到错误

4.24 修改或者选择数据库字符集

4.25 如果是对10g数据库做升级

4.26 如果从11.2.0.3升级

第5步: 推荐/需要在目标库上完成的

第6步:升级数据库到 12cR1

第7步: 升级后步骤

7.1 环境变量及 oratab文件

7.2 初始化参数文件

7.3 密码文件

7.4 COMPATIBLE 参数

7.5 修改 Oracle 自带用户的密码

7.6   在升级数据库后升级 Recovery Catalog

7.7  在升级数据库后升级 Time Zone文件版本

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

7.9  升级外部验证的的 SSL 用户

7.10  升级后安装 Oracle Text Supplied Knowledge Bases

7.11  更新 Oracle Application Express(APEX)的配置

7.12  对外部网络服务(External Network Services)配置细粒度的访问控制

7.13  启用 Database Vault

7.14  使用 utluiobj 脚本来发现失效对象

7.15  启用之前在第4.14步骤停掉的所有 batch 和 cron job

参考


适用于:

Oracle Database - Enterprise Edition - 版本 10.2.0.5 和更高版本
Oracle Database - Standard Edition - 版本 10.2.0.5 和更高版本
本文档所含信息适用于所有平台

用途

本文档可用作手工将 Oracle 10gR2 (10.2),Oracle 11gR1 (11.1) 或者 Oracle 11gR2(11.2) 版本数据库升级至 Oracle 12c 版本1 (12.1) 数据库的指南与核对表。

适用范围

 数据库管理人员/技术支持

详细信息

第1步: 升级到 Oracle 12c 版本1(12.1)的升级路径

能够直接升级到 Oracle 12c Release 1 的数据库最小版本:

源数据库 目标数据库
10.2.0.5 12.1.x
11.1.0.7 12.1.x
11.2.0.2 或者更高 12.1.x

以下的数据库版本需要间接升级:

源数据库   升级路径   目标数据库
11.2.0.1 ----> 11.2.0.2 或更高 ----> 12.1.x
11.1.0.6 ----> 11.1.0.7 或 11.2.0.2 或更高 ----> 12.1.x
10.2.0.4(或更低) ---->  10.2.0.5 或其它更高的可以直接升级的版本 ----> 12.1.x
10.1.0.5(或更低) ----> 10.2.0.5 或其它更高的可以直接升级的版本 ----> 12.1.x
9.2.0.8(或更低) ---->   9.2.0.8  -->  11.2.0.2 或更高 ----> 12.1.x

比如:

  •  如果源库是 11.2.0.1 或者 11.1.0.6,那么你需要先升级至 11.2.0.2。

  •  如果源库是 10.2.0.2,10.2.0.4 或者 10.1.0.5,需要先升级至 10.2.0.5 或更高。

  •  对于 9.2.0.8 版本的数据库,需要先升级至一个中间版本,比如:9.2.0.8 -> 11.2.0.2 或 11.2.0.3 -> 12.1。

提醒:
参考下面的两个文档来快速得到各个补丁集对应的 patch 号码:

Note 438049.1  : How To Find RDBMS patchsets on My Oracle Support
Note 753736.1  : Quick Reference to Patchset Patch Numbers

第2步:推荐在源库上完成的

  • 对源库做备份,冷备份或热备份都可以(推荐冷备份)。

a) 做冷备份(如果使用的是非归档模式)
            或者
b) 使用 rman 做备份

Connect to RMAN:

rman "target / nocatalog"

RUN
{
ALLOCATE CHANNEL chan_name TYPE DISK;
BACKUP DATABASE FORMAT '<db_backup_directory>%U' TAG before_upgrade;
BACKUP CURRENT CONTROLFILE TO '<controlfile_backup_directory>';
}

--> db_backup_directory >> 存放数据库备份的目录。
--> controlfile_backup_directory >> 存放控制文件备份的目录。

  • 在升级前确保所有 oracle 提供的组件和对象都是有效的。

  • 除了下面的对象外,确保在 sys 和 system schema 下没有重复存在的对象。

         下面的对象是允许重复的:

 OBJECT_NAME                         OBJECT_TYPE
---------------------------         ------------------
AQ$_SCHEDULES                          TABLE
AQ$_SCHEDULES_PRIMARY            INDEX
DBMS_REPCAT_AUTH                    PACKAGE
DBMS_REPCAT_AUTH                    PACKAGE BODY 

  •  禁用所有用户自定义的 before/after DDL 类型的触发器,完成升级后再启用它们。

  •  在11g,创建带有 timestamp with timezone 数据类型的 ACL 不会失败,但是在升级到 12c 后就会碰到"ORA-01830: date format picture ends before converting entire input string" 错误而失败,请参照  Note 1958876.1  Upgrade to 12.1 fails with ORA-01830 date format picture ends before converting entire input string ORA-06512: at "SYS.XS_OBJECT_MIGRATION"。

  • 要避免升级后运行datapump碰到ora-7445错误,请参照   Note 2017572.1  ORA-7445 [qcsIsColInFro] Querying After Upgrade to 12c,需要在升级前打这个patch

  •  在升级前, 如果统计信息收集的'concurrent statistics gathering'没有设置为 false,那么必须修改它

    在源库,比如 11.2 上检查当前的设置:

    SQL> SELECT dbms_stats.get_prefs('CONCURRENT') from dual;

    如果 concurrent statistics gathering 没有设置为 false,那么在升级前把它改为 false。

    BEGIN 
    DBMS_STATS.SET_GLOBAL_PREFS('CONCURRENT','FALSE'); 
    END; 
    /


    在 11.2 和 12.1 上,手工或者自动收集统计信息时默认 concurrency 都是关闭的,如果需要启用,那么请在升级后再改回来。

    具体请参照文档    Note 2037154.1  DBMS_STATS.GATHER_DICTIONARY_STATS Fails with "ORA-06502: PL/SQL: numeric or value error: character string buffer too small"

第3步:检查源库的一致性

在升级前从 My Oracle Support 文档下载并运行 dbupgdiag.sql 脚本来检查源库的一致性:

Note 556610.1   Script to Collect DB Upgrade/Migrate Diagnostic Information (dbupgdiag.sql)

如果 dbupgdiag.sql 脚本报告了任何无效对象,则运行 $ORACLE_HOME/rdbms/admin/utlrp.sql(可能需要多次)以使数据库中的无效对象变为有效,直至无效对象数目不发生变化为止:

$ cd $ORACLE_HOME/rdbms/admin
$ sqlplus "/ as sysdba"
SQL> @utlrp.sql

如果有 Oracle 自带的对象仍处于失效状态,建议在 Oracle Community 上发帖或者开一个 SR 来进一步分析为什么这些对象仍然有问题。
使无效对象有效之后,再次在数据库中重新运行 dbupgdiag.sql,确保一切正常。

建议使用 hcheck.sql 脚本对数据库做一个健康检查,请从下面的文档中下载脚本。

Note 136697.1   hcheck.sql" script to check for known problems in Oracle8i, Oracle9i, Oracle10g and Oracle 11g

   

第4步:升级前步骤

  • Pre-Upgrade Information Tool 需要在旧的数据库上执行。

  • 每个步骤都需要执行。

  • 源数据库必须处于正常运行的状态。

如果是 间接升级 ,下载并运行最新版本的 Pre-Upgrade Information Tool,参照下列文档

Note 884522.1  How to Download and Run Oracle's Database Pre-Upgrade Utility

或者

直接运行 Pre-Upgrade Information Tool 来收集安装前需要检查的信息。

 第1步:

    * 使用新 12c 软件的所有者用户登录操作系统。
    * 把 12c 的 $ORACLE_HOME/rdbms/admin 目录中的 Pre-Upgrade Information Tool 工具(即  preupgrd.sql  和  utluppkg.sql  脚本)拷贝到源库的 $ORACLE_HOME/rdbms/admin 目录下。

  第2步:

     * 运行 Pre-Upgrade Information Tool。比如,如果已经把 preupgrd.sql 脚本拷贝到了源库的 $ORACLE_HOME/rdbms/admin 目录下。

SQL> @$ORACLE_HOME/rdbms/admin/preupgrd.sql

preupgrade.log,preupgrade_fixups.sql 和 postupgrade_fixups.sql 文件会创建在源库的 $ORACLE_HOME/cfgtoollogs/$ORACLE_SID/preupgrade/ 目录下。

4.1 弃用的 CONNECT 角色

在数据库从 9.2 版本或 10.1 版本升级到 12.1 版本之后,CONNECT 角色就只包含 CREATE SESSION 权限了;在低版本数据库中赋予 CONNECT 角色的其它权限在升级的过程中都被收回了。要在数据库中找到哪个用户或者角色被赋予 CONNECT 角色,可以使用下面的语句:

SQL> SELECT grantee FROM dba_role_privs
WHERE granted_role = 'CONNECT' and
grantee NOT IN (
'SYS', 'OUTLN', 'SYSTEM', 'CTXSYS', 'DBSNMP',
'LOGSTDBY_ADMINISTRATOR', 'ORDSYS',
'ORDPLUGINS', 'OEM_MONITOR', 'WKSYS', 'WKPROXY',
'WK_TEST', 'WKUSER', 'MDSYS', 'LBACSYS', 'DMSYS',
'WMSYS', 'EXFSYS', 'SYSMAN', 'MDDATA',
'SI_INFORMTN_SCHEMA', 'XDB', 'ODM');

如果这些用户或者角色需要除了 CREATE SESSION 以外其它的权限,可以在升级前显式的赋予这些权限。升级的脚本会自动调整 ORACLE 自带的用户的相关权限。

在 9.2.x 和 10.1.x 数据库中, CONNECT 角色包含下面的权限:

SQL> 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

从 ORACLE 数据库 10.2 开始,CONNECT 角色就只包含 CREATE SESSION 权限了。

4.2 更改 Access Control Lists 和 Network Utility 包

从 12c 开始,UTL 包(UTL_TCP,UTL_SMTP,UTL_MAIL,UTL_HTTP,和 UTL_INADDR)的访问控制由 Oracle Database Real Application Security 来实现,不再依赖 Oracle XML DB 功能。

 参照   Update Access Control Lists and Network Utility Packages

4.3 Network Utility 包的依赖关系

执行下面的语句:

SQL> SELECT * FROM DBA_DEPENDENCIES
WHERE referenced_name IN ('UTL_TCP','UTL_SMTP','UTL_MAIL','UTL_HTTP','UTL_
INADDR','DBMS_LDAP')
AND owner NOT IN ('SYS','PUBLIC','ORDPLUGINS');

具体的步骤参照安装后步骤 7.12,因为需要使用的包 DBMS_NETWORK_ACL_ADMIN 是在升级后才有的,升级前没有。

4.4 处理源库带密码的 DBLINK

为 DBLINKs 创建脚本(如果这个库稍后还要被降级)。

在数据库升级到 12c 版本时,所有 dblink 的密码会被加密。
在需要降级数据库到之前版本的时候, 所有拥有加密的密码的 dblink 都需要在降级前被删除掉,因此降级后的数据库中就没有 dblink 了。
如果有预感这个数据库还要被降级到之前的版本,那么从 SYS.LINK$ 表保存受到影响的 dblink 的信息,这样在降级后可以重建这些 dblink:

SQL> 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#;

4.5 检查 TIMESTAMP WITH TIMEZONE 类型的数据

数据库 12c 版本1的默认 time zone 文件版本是 18。

要检查是否需要更新 DST 文件,请检查如下文档:

Note 1665676.1  Actions For DST Updates When Upgrading To Or Applying The 12.1.0.2 Patchset
或者
Note 1522719.1  Actions For DST Updates When Upgrading To 12.1.0.1 Base Release

 

4.6 优化器统计信息

Oracle 推荐在升级前夜收集统计信息来减少升级时间。

为了减少在升级过程中收集统计信息所花的时间,Oracle 推荐在真正升级数据库前收集统计信息。
如果要升级的库是 10.1,Oracle 推荐使用 DBMS_STATS.GATHER_DICTIONARY_STATS 来收集统计信息,比如:

$ sqlplus "/as sysdba"
SQL> EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;

4.7  使用 emdwgrd 工具备份 Database Control 的文件及数据

如果在升级数据库到 12c 版本后,有需要把 Oracle Enterprise Manager Database Control 降级,那么我们必须在升级前备份 Database Control 的文件才可以。
emdwgrd 可以用来在升级前保存 Database Control 的数据,这个工具存在于 12c 版本的数据库的 ORACLE_HOME/bin 目录下。

1. 设置 ORACLE_HOME 到旧的数据库版本
2. 设置 ORACLE_SID 为要升级的数据库 SID
3. 设置 PATH, LD_LIBRARY_PATH 和 SHLIB_PATH 到旧的 ORACLE_HOME 相关的目录下
4. 切换目录到 12c 数据库软件的 ORACLE_HOME/bin
5. 运行 emdwgrd 命令
   a. 对于单数据库实例 (非 RAC) 运行下面的命令:

$ emdwgrd -save -sid old_SID -path save_directory

old_SID 是要升级的那个数据库的 SID, save_directory 是用来存放 Database Control 文件和数据的目录。

 b. 对于 RAC 数据库,需要跨节点远程拷贝。定义一个环境变量来指向远程拷贝的命令。如 setenv EM_REMCP /usr/bin/scp

$ emdwgrd -save -cluster -sid old_SID -path save_directory

注意,如果 10g 数据库的 ORACLE_HOME 是放在共享存储上的,那么上面的命令还需要指定 -shared 参数。

上面的命令可能会在 HPUX 上失败,这是一个已知问题,请参照下面的文档:

Note 562980.1  - emdwgrd core dumps : emdwgrd[228]: 10366 Memory fault(coredump)

6. 输入 SYS 用户的密码。
注意:在 RAC 数据库上,还需要在每个节点上执行'/tmp/racdwgrd_dbctl.sh' 。

4.8  在升级数据库前确认所有的物化视图都已经完成了刷新 

在升级数据库前,我们需要确认所有的物化视图都已经完成了刷新,并且复制已经停止。
用下面的语句检查当前是否有物化视图正在刷新:

SQL> 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  : During 11g Upgrade, Mview refresh warning 来操作。

4.9 在升级数据库前确认没有数据文件需要介质恢复

确保没有数据文件需要介质恢复

SQL> SELECT * FROM v$recover_file;

4.10 在升级数据库前确认没有数据文件处于备份状态

执行下面的语句确保没有数据文件处于备份状态

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

4.11 在升级前把未决的分布式事务处理掉

要处理未决的分布式事务:
1. 执行下面的语句:

SQL> SELECT * FROM dba_2pc_pending;

2. 如果它有返回行,那么用下面的命令处理掉未决的分布式事务:

SQL> SELECT local_tran_id FROM dba_2pc_pending;
SQL> EXECUTE dbms_transaction.purge_lost_db_entry('');
SQL> COMMIT;

4.12 在升级前清空数据库的 Recycle Bin

要清空数据库的 Recycle Bin,使用下面的命令:

SQL> PURGE DBA_RECYCLEBIN

注意: 必须要清空数据库的 recycle bin 来避免可能的 ora-600 错误及减少升级时间。

4.13 同步 standby 数据库

检查是否配置了 standby 数据库:
1. 执行下面的命令

SQL> SELECT SUBSTR(value,INSTR(value,'=',INSTR(UPPER(value),'SERVICE'))+1)
FROM v$parameter
WHERE name LIKE 'log_archive_dest%' AND UPPER(value) LIKE 'SERVICE%';

2. 如果上面的语句有返回行,那么把相应的 standby 数据库与主库进行同步。

  •  确保最后一次 log switch 之后的所有日志都已经传输到 standby 库中。

  •  在 standby 库中,使用 NODELAY 的选项来恢复 standby 库。

4.14 禁用所有的 cron job

对于 Oracle 数据库的 job,可以使用 DBMS_JOB,DBMS_SCHEDULER 去停掉它们。
对于 cron job(由 OS 控制的 job), 需要您的系统管理员来帮忙禁掉它们。

以下文档可以参考:
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

4.15 检查 SYS 和 SYSTEM 用户的默认表空间

确保 sys 和 system 用户的默认 tablespace 是 SYSTEM。
必须确保 system tablespace 里有足够的空间或者设置成 extents 无限制。

SQL> SELECT username, default_tablespace
     FROM dba_users
     WHERE username in ('SYS','SYSTEM');

default_tablespace 的值应该是 SYSTEM, 如果不是的话,可以用下面命令纠正:

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

4.16 检查数据库是否有外部验证的的 SSL 用户(externally authenticated SSL users)

执行下面的语句

SQL> SELECT name FROM sys.user$
     WHERE ext_username IS NOT NULL
     AND password = 'GLOBAL';

If any SSL users are found then Step 7.9 has to be followed after the upgrade.

4.17 记录数据文件,重做日志和控制文件的路径

记下数据文件,重做日志和控制文件的路径,并且备份所有的配置文件,如 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;

4.18 删除 Enterprise Manager Database Control repository

Enterprise Manager Database Control 在 12c 里被 Oracle Enterprise Manager Express 所替代。

     因此我们不再需要 Database Control repository。

     使用下面的方式手工删除 Database Control  repository。

     注意:你可以从 Oracle 12c 的 Home 里找到 emremove.sql 脚本。

    从 12c 的 $ORACLE_HOME/rdbms/admin 下拷贝 emremove.sql 脚本到源库的 $ORACLE_HOME/rdbms/admin 下并在升级前在源库执行下面的命令:

$emctl stop dbcontrol

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

  如果 EM repository 未被删除,那么在升级后执行 catuppst.sql 时会被自动删除。

  也可以参照文档 Is it Possible to Validate Invalid Objects related to DBControl Configuration in a Database Upgraded to 12c? (Doc ID 2118740.1)

  注意:如果数据库中存在EM组件,这步才是需要的。并且如果使用了Cloud Control,但是EM不存在,那么这步就不需要了。

4.19 运行 olspreupgrade.sql

如果在升级数据库前 OLS(Lable Security)或者 DV(Database Vault)已经安装在数据库中了,那么在升级前执行下面的步骤。

注意:你可以从 Oracle 12c 的 Home 里找到 olspreupgrde.sql 脚本。

从 12c 的 $ORACLE_HOME/rdbms/admin 下拷贝 olspreupgrde.sql 脚本到源库的 $ORACLE_HOME/rdbms/admin 下并于升级前在源库执行下面的命令:

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

   - 它会把 AUD$ 从 SYSTEM 用户迁移到 SYS 用户下。

   - 它会处理 audit 的记录来减少停机时间。

   - 它会把记录移动到另一个临时表中。

关于更多信息,请参照   Requirements for Upgrading Databases That Use Oracle Label Security and Oracle Database Vault

4.20 如果源库中存在 Oracle 12c 版本1自带的用户或者 Role,删除它们

在 Oracle 12.1 存在一些新的自带的用户和 Role,如果同名的用户或者 Role 已经在源库存在,那么升级前必须删除它们。

运行 preupgrade tool 检查源库中是否有和 12.1 自带的用户和 Role 同名的用户及 Role。

注意: 如果这样的用户存在,那么在删除这些用户前,可以把它所拥有的数据先移动到另一个用户下。

必须清理这样的用户,否则升级会碰到"ORA-01722: invalid number"并失败。

4.21 检查并删除不必要的隐藏参数

在升级前请检查并删除不必要的隐藏参数,除非应用提供商或者 Oracle 技术支持特意要求,Oracle 推荐删除隐藏参数。

要检查数据库中已设置的隐藏参数,可以使用 AS SYSDBA 权限执行下面的命令:


SQL> SELECT name, value from SYS.V$PARAMETER WHERE name LIKE '\_%' ESCAPE '\' order by name;

 

4.22  检查 XDB ACLs 是否有 start_date and end_date ACE 属性

在升级至 12c 前,使用 SYS 用户执行下面的查询:
 

SQL> select aclid, start_date, end_date from xds_ace where start_date is not null;   

如果查询有返回数据,那么按照文档  Note 1958876.1  Upgrade to 12.1 fails with ORA-01830 date format picture ends before converting entire input string ORA-06512: at "SYS.XS_OBJECT_MIGRATION"  操作来避免 XDB 升级失败。

4.23 如果 JVM 的 Mitigation patch 已应用至源库,那么 Oracle JVM 组件是被禁用的。您会在升级数据库时碰到错误

注意:此步骤仅适用于源库已经打了Mitigation patch的情况

在升级数据库前启用 JVM 组件:

使用 sysdba 用户连接到数据库
  SQL> exec dbms_java_dev.enable;

 

请参照文档  Note 1985725.1  Database Upgrade failed with Errors “ORA-02290: check constraint (SYS.JAVA_DEV_DISABLED) violated” & “ORA-04045: SYS.DBMS_ISCHED”。

 

4.24 修改或者选择数据库字符集

在12c数据库多租户架构下,同一个CDB内的所有的PDB的

字符集(NLS_CHARACTERSET)必须是一致的,或者NLS_CHARACTERSET必须是CDB NLS_CHARACTERSET的子集(可兼容插入的)
国家字符集(NLS_NCHAR_CHARACTERSET)必须和CDB的一致

  如果pdb要使用Unicode的字符集,那么推荐CDB的字符集为AL32UTF8。请注意我们无法使用DMU来迁移CDB的字符集

请参照 
Note 1968706.1  12c Multitenant Container Databases (CDB) and Pluggable Databases (PDB) Character set restrictions / ORA-65116/65119: incompatible database/national character set ( Character set mismatch: PDB character set CDB character set )
Note ID 225912.1  [Section E] Changing Or Choosing the Database Character Set ( NLS_CHARACTERSET )

 

 

4.25 如果是对10g数据库做升级

如果是对10g数据库做升级,确认下面的信息

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');

参照非公开BUG 22454765 - CARRYING METHOD_OPT = "FOR COLUMNS ID SIZE 1" FROM 10G WILL BREAK UPGRADE


 

4.26 如果从11.2.0.3升级

建议在12.1.0.2的ORACLE_HOME中打  patch 21550777  ,来解决升级前与物化视图有关的问题。

第5步: 推荐/需要在目标库上完成的

  •      在下载安装 12cR1 软件之前,需要先检查软件版本与您的硬件平台/操作系统是否兼容。您可以通过  My Oracle Support (MOS) Certify  网站来确认这一点。

  •      下载安装 Oracle 12c 版本1 软件到一个新的 ORACLE_HOME 并确认没有编译错误。

  •      如果有的话,安装最新的补丁集(PatchSet)。

  •      如果有的话,安装最新的 OPatch(要安装跟操作系统平台及数据库版本一致的 OPatch)。

  •      如果有的话,安装最新的 Critical Patch Update。

  •      请参照文档: Things to Consider to Avoid Poor Performance or Wrong Results on 12.1.0.2 (Doc ID  2034610.1 )来获知 12.1.0.2 上的和性能相关的问题。

  •     把如下配置文件从源库的 $ORACLE_HOME 下拷贝至 12c 软件的 $ORACLE_HOME 下

          - 参数文件(spfile 或者 pfile)
          - 密码(orapwsid)

  •   删除或者注释掉被废弃的参数

            注释掉被废弃的参数并且修改所有不推荐的参数( Deprecated and Desupported Parameters ).

            SEC_CASE_SENSITIVE_LOGON  在 12.1 已经不推荐使用,请参照  Behaviour Change

  •   DIAGNOSTIC_DEST  初始化参数替换掉了 USER_DUMP_DEST,BACKGROUND_DUMP_DEST 两个初始化参数。

            根据  Bug 8937877 ,CORE_DUMP_DEST 并没有被废弃。

          要理解 11g 的目录结构和 DIAGNOSTIC_DEST 参数,请参考下面的文档:

             Note 454442.1  11g Install : Understanding about Oracle Base, Oracle Home and Oracle Inventory locations

  • 如果升级的是 RAC 数据库,那么在升级前把  CLUSTER_DATABASE  设置成 false 并在升级后改回成 true。
    如果源库是 RAC 数据库,那么两个节点的 init<SID>.ora 文件需要一致。

  • 确保参数文件中的路径名是完整正确的,参数文件中的路径名不能是相对路径。

  •  停掉数据库的 listener。

$ lsnrctl stop

  • 创建一个 12.1 的 listener

之前版本的 listener 不能用在 12c 的数据库上,但是 12c 的 listener 可以用在之前版本的数据库上。
如果是从 10.2.0.5 升级或者手工升级,那么需要在升级 RAC 数据库之前运行 netca。

它包含两个步骤:
 需要先运行旧的 Oracle_home 里的 netca 删除当前的 listener。
- 运行 Netca
- 选择配置 => 选择 Listener Configuration
- 选择删除选项 => Delete 
- 选择要删除的 listener 来删除它

 然后在新的 12cR1 ORACLE_HOME 里运行 netca 来添加新 listener。
- 运行 Netca
- 选择配置 => 选择 Listener Configuration
- 选择添加选项 => Add
- 提供详细信息来添加 listener

必须在添加新 listener 之前删掉旧的,如果新 listener 和旧 listener 用到了相同的名字或者端口号,netca 会返回错误。

注意:如果要手工升级 RAC 数据库,那么这一步是必须要做的。

  • 停掉其它的相关程序,如 dbconsole, isqlplus 等。

$ emctl stop dbconsole
$ isqlplusctl stop

  •  停掉数据库。

$ sqlplus "/as sysdba"
SQL> shutdown immediate;

  • 对于 Windows 操作系统,创建一个新的 SID(这一步仅适用于 Windows)

         如果你的操作系统是 Windows,那么需要做这一步,如果不是那么可以忽略掉这一步。

         设置相应的环境变量对应到源库上(10.2/11.1)

         停掉要升级的那个数据库的服务 OracleServiceSID, SID 是 instance 的名字。比如,如果 SID 是 ORCL,那么执行下面的命令:
       
 a). 停掉数据库服务。

C:\> NET STOP OracleServiceORCL

b). 使用 ORADIM 命令删掉源库的服务:

C:\> ORADIM -DELETE -SID ORCL

c). 用新库的 ORADIM 工具创建一个 12c 版本1 的数据库 servicese:

C:\> ORADIM -NEW -SID SID -INTPWD PASSWORD  -STARTMODE AUTO -PFILE %ORACLE_HOME%\DATABASE\INIT<SID>.ORA

比如:

C:\> ORADIM -NEW -SID ORCL -INTPWD <PASSWORD> -STARTMODE AUTO -PFILE %ORACLE_HOME%\DATABASE\INIT<SID>.ORA

  • 确认下面的环境变量指向了新版本数据库的目录:

               - ORACLE_BASE
               - ORACLE_HOME
               - PATH, LD_LIBRARY_PATH and SHLIB_PATH

$ export ORACLE_HOME=<location of Oracle 12.1>
$ export PATH=$ORACLE_HOME/bin:$PATH
$ export ORACLE_BASE=<Oracle_Base set during installation>

注意: 如果不知道 ORACLE_BASE, 在 PATH 变量包含了 12cR1 的 Oracle Home 之后,执行 'orabase' 会提示 ORACLE_BASE 的值。

$ orabase
/uo1/app/oracle

  • 更改 /etc/oratab 文件,让 ORCL 指向新的 ORACLE_HOME 并且禁用自动启动。

Sample : cat /etc/oratab

            #orcl:/opt/oracle/product/11.2/db_1:N
            orcl:/opt/oracle/product/12.1/db_1:N

注意:在改掉 /etc/oratab 之后可以使用 oraenv(/usr/local/bin/oraenv)来设置新的环境变量,需要输入 /etc/oratab 中的指向 12cR1 的那个 SID。
比如:

[oracle@localhost ~]$ . oraenv
ORACLE_SID = [orcl] ? orcl
The Oracle base for ORACLE_HOME=/opt/oracle/product/12.1/db_1 is /u01/app/oracle
[oracle@localhost ~]$

第6步:升级数据库到 12cR1

在 OS 里,进入 12cR1 的 $ORACLE_HOME/rdbms/admin 里:

$ cd $ORACLE_HOME/rdbms/admin
$ sqlplus "/ as sysdba"
SQL> startup UPGRADE
SQL> exit

在新的 Oracle Home 下运行 catctl.pl 脚本。
在这个版本下,新的升级工具 catctl.pl 替代了catupgrd.sql。

在 Linux 下运行 catctl.pl:

例子: 当并行度为 6 ( n=6)

 cd $ORACLE_HOME/rdbms/admin
 $ORACLE_HOME/perl/bin/perl catctl.pl -n  6 -l $ORACLE_HOME/diagnostics catupgrd.sql

在 Windows 下运行 catctl.pl:

例子: 当并行度为 6 ( n=6)
                                                             
cd %ORACLE_HOME%\rdbms\admin
%ORACLE_HOME%\perl\bin\perl catctl.pl -n  6 -l %ORACLE_HOME%\diagnostics catupgrd.sql

关于catctl.pl的更多选项,请参照Oracle Database 12c Release 1 (12.1) Upgrade New Features  Note 1515747.1

执行 Post-Upgrade Status Tool $ORACLE_HOME/rdbms/admin/utlu121s.sql 它会提供一个关于升级的总结。
它会显示升级后各个数据库组件的状态和各个组件升级花费的时间。任何在升级中碰到的错误也会被列出,这些错误必须得到妥善的处理。

$ sqlplus "/as sysdba"
SQL> STARTUP
SQL> @utlu121s.sql

重要:catuppst.sql 脚本会作为升级过程的一部分而运行,除非这个过程碰到错误而终止。检查升级的日志中是否包含"BEGIN catuppst.sql"来验证是否这个脚本 catuppst.sql 已运行。
如果 catuppst.sql 并没有得到执行,那么按照下面的步骤运行它。如果 catuppst.sql 并未得到执行,那么 catctl.pl 也会报错。

运行 $ORACLE_HOME/rdbms/admin 目录下的 catuppst.sql,完成不需要在数据库处于 UPGRADE 模式下操作的其它升级的动作:

SQL> @catuppst.sql

这个脚本可以和 utlrp.sql 并行运行。在另一个 session 里运行 utlrp.sql 来重新编译剩下的 PL/SQL 和 Java 代码:

SQL> @utlrp.sql

运行从下面文档中得到的 dbupgdiag.sql 来检查升级后数据库的完整性。

Note 556610.1   Script to Collect DB Upgrade/Migrate Diagnostic Information (dbupgdiag.sql)

如果 dbupgdiag.sql 发现了一些失效对象,那么多次执行 $ORACLE_HOME/rdbms/admin/utlrp.sql 来重新编译这些失效对象,直到失效对象的数目不再变化。

在重新编译这些失效对象之后,再次运行 dbupgdiag.sql 确认一切都是正常的。

退出 SQL*Plus。

如果升级的是版本 10.2,11.1 或者 11.2 的 RAC 数据库,那么在集群软件中更新数据库的配置:

$ srvctl upgrade database -d db-unique-name -o oraclehome

这里 db-unique-name 是数据库的名字(不是实例名字),oraclehome 是数据库的 ORACLE_HOME 路径。

第7步: 升级后步骤

7.1 环境变量及 oratab文件
  • 确认下面的环境变量指向了新的 Oracle 12c Release 1 (12.1) 目录            

               - ORACLE_BASE
               - ORACLE_HOME
               - PATH, LD_LIBRARY_PATH and SHLIB_PATH

  • 并且检查 oratab 文件和其它的客户端脚本,确认是指向了正确的 12c 的路径。

7.2 初始化参数文件

编辑 init.ora

  • 如果在升级前改动过 CLUSTER_DATABASE,那么需要再把它改回来。

  • 把 pfile 文件改回到 spfile。

从 pfile 创建 spfile:

SQL> create spfile from pfile;

它会根据 $ORACLE_HOME/dbs(UNIX)或者 %ORACLE_HOME%\database (Windows)目录下的 pfile 产生一个新的 spfile。

7.3 密码文件

a) 如果 REMOTE_LOGIN_PASSWORDFILE 参数设置为 exclusive 或者 shared,使用 ORAPWD 创建密码文件。

b) 参照下面的文档来避免在执行post upgrade时碰到ORA-28017错误

ORA-28017: The password file is in the legacy format (Doc ID 2112456.1)

7.4 COMPATIBLE 参数

COMPATIBLE 参数控制了数据库的兼容版本(compatibility level)。
如果你确定不会再降级数据库到之前的版本

  • 那么在加大COMPATIBLE参数之前备份数据库( 可选项 )。

  • 如果使用的是 spfile,那么执行下面的步骤:

              a. 更改 spfile 来设置或者改变 COMPATIBLE 参数的值
                 比如,设置 COMPATIBLE 参数为 12.0.0,执行下面的命令:

SQL> ALTER SYSTEM SET COMPATIBLE = '12.0.0' SCOPE=SPFILE;

              b. 关闭并重新启动实例。

  • 如果使用的是 pfile,那么执行下面的步骤:

              a. 如果实例正在运行,那么关闭它:

SQL> SHUTDOWN IMMEDIATE

              b. 更改 pfile 来设置或者改变 COMPATIBLE 参数的值。
                 比如,设置 COMPATIBLE 参数为 12.1.0,修改下面的参数:
                 COMPATIBLE = 12.1.0
              c. 使用 STARTUP 命令启动数据库。

7.5 修改 Oracle 自带用户的密码

根据升级前数据库的版本,可能会存在一些 Oracle 自带的用户。Oracle 推荐把除了 SYS 和 SYSTEM 之外的这样的用户都锁住并让它们的密码过期。
这样再把这些用户解锁的时候就会提示重新设置新密码。

可以用下面的命令检查所有帐号的状态:

SQL> SELECT username, account_status FROM dba_users ORDER BY username;

使用下面的命令锁定用户并让它的密码过期:

SQL> ALTER USER username PASSWORD EXPIRE ACCOUNT LOCK;

7.6   在升级数据库后升级 Recovery Catalog

可以通过命令 UPGRADE CATALOG 来升级 Recovery catalog。

关于具体的步骤信息,请参照  Upgrading the Recovery Catalog

7.7  在升级数据库后升级 Time Zone文件版本

如果 Pre-Upgrade Information Tool 要求我们在升级数据库后升级 time zone 文件,那么使用 DBMS_DST PL/SQL package 来升级 RDBMS DST(timezone)版本
( Note 1585343.1  : Scripts to automatically update the RDBMS DST (timezone) version in an 11gR2 or 12cR1 database . )

注意:即使升级了 DST 版本,在运行 postupgrade_fixups.sql 后仍然可以看到下面的错误:

******************************************************************************************
Check Tag:     OLD_TIME_ZONES_EXIST
Check Summary: Check for use of older timezone data file
Fix Summary:   Update the timezone using the DBMS_DST package after upgrade is complete.
*******************************************************************************************

   
请直接忽略这个错误,它是由于一个已知的 bug 导致的:  Bug 17303129  : UPGRADE DATABASE FROM 11.1.0.7 TO 12.1.0.1, "OLDER TIMEZONE IN USE" OCCURRED

如果这些错误出现了,那么执行下面的语句:

SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME LIKE 'DST_%' ORDER BY PROPERTY_NAME; 

如果返回的不是 DSTv18,此时请升级 DST 版本;否则就是因为 bug 17303129 导致的,可以忽略这些错误。

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

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

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

在上面的例子里, 'SYS' 是统计信息表的 owner, 'dictstattab' 是统计信息表的表名。对每个统计信息表都要执行一遍上面的命令。

7.9  升级外部验证的的 SSL 用户

如果数据库是从 9.2.0.x 或 10.1.0.x 升级上来的并且之前使用了外部验证的的 SSL 用户,那么需要执行下面的命令来升级这些用户:

ORACLE_HOME/rdbms/bin/extusrupgrade --dbconnectstring
<hostname:port_no:sid> --dbuser <db admin> --dbuserpassword
<password> -a

如果是从 10.2.0.x(或更高)升级上来的,那么这个步骤可以忽略。

7.10  升级后安装 Oracle Text Supplied Knowledge Bases

Oracle Text-supplied knowledge bases 是 12c 的 companion products 的一部分,并且不会在升级后立刻可用。
升级后所有依赖 supplied knowledge bases 的 Oracle Text 特性都不能正常工作。
要启用这些特性,必须安装 Oracle Text supplied knowledge bases。

升级后,Oracle Text supplied knowledge bases 相关的用户扩展都必须重新生成。这个问题影响 $ORACLE_HOME 下所有的数据库。

7.11  更新 Oracle Application Express(APEX)的配置

如果源库安装的的 APEX 是版本 3.2 或更高,那么 需要额外的配置。

如果源库安装的 APEX 低于 3.2,那么在升级的过程中会自动安装最新版本的 APEX。
要在新的 Oracle 12c 里运行 APEX,必须完成一系列的安装后步骤来配置 APEX。

7.12  对外部网络服务(External Network Services)配置细粒度的访问控制

为了避免在执行和网络相关的 UTL 程序包的时候引发 "ORA-24247: network access denied by access control list (ACL)"的错误,访问权限需要赋给使用这些程序包的用户。

下面的例子先查找当前已经分配给 host_name 的访问控制列表(ACL), 如果发现了就赋给 user_name CONNECT 的权限(如果它没有的话)。
如果没有访问控制列表(ACL)存在,就创建叫做 ACL_name 的访问控制列表(ACL),并且把 CONNECT 权限赋给 user_name,然后把这个 ACL 分配给 host_name。

DECLARE
acl_path VARCHAR2(4000);
BEGIN
SELECT acl INTO acl_path FROM dba_network_acls
WHERE host = 'host_name' AND lower_port IS NULL AND upper_port IS NULL;
IF DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE(acl_path,'principal','privilege') IS NULL THEN
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(acl_path,'principal', is_grant, 'privilege');
END IF;
EXCEPTION
WHEN no_data_found THEN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL('ACL_name.xml','ACL description', 'principal', is_grant, 'privilege');
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL('ACL_name.xml','host_name');
END;

COMMIT;

acl_name.xml => 指定访问控制列表的 XML 文件的名字,
ACL description => '文件的描述',
principal => '用户或者角色',
is_grant => TRUE|FALSE,
privilege => 'connect|resolve',
host_name => 主机名

关于如何使用 DBMS_NETWORK_ACL_ADMIN 程序包并避免 ORA-24247 : network access denied by access control list (ACL)。

请参照下面的文档:

Note 453786.1  ORA-24247 When Executing UTL_HTTP UTL_INADDR Packages

7.13  启用 Database Vault

如果数据库之前使用了 Database Vault,那么参考下面的文档来启用 Database Value

Note 453903.1  - Enabling and Disabling Oracle Database Vault in UNIX
Note 453902.1  - Enabling and Disabling Oracle Database Vault in WINDOWS

7.14  使用 utluiobj 脚本来发现失效对象

升级前,Pre-Upgrade Information Tool 工具会把所有失效的 SYS/SYSTEM 对象写入 registry$sys_inv_objs,把所有失效的非 SYS/SYSTEM 对象写入 registry$nonsys_inv_objs。
 
升级后,可以运行 $ORACLE_HOME/rdbms/admin/ 下的 utluiobj.sql 来比较升级导致的新失效对象。

7.15  启用之前在第4.14步骤停掉的所有 batch 和 cron job

参考


NOTE:1585343.1  - Scripts to automatically update the RDBMS DST (timezone) version in an 11gR2 or 12c database .
BUG:17303129  - UPGRADE DATABASE FROM 11.1.0.7 TO 12.1.0.1, "OLDER TIMEZONE IN USE" OCCURRED
NOTE:1565816.1  - Upgrading to a higher release throws ORA-01031: insufficient privileges 




About Me

........................................................................................................................

● 本文作者:小麦苗,部分内容整理自网络,若有侵权请联系小麦苗删除

● 本文在itpub( http://blog.itpub.net/26736162 )、博客园( http://www.cnblogs.com/lhrbest )和个人weixin公众号( xiaomaimiaolhr )上有同步更新

● 本文itpub地址: http://blog.itpub.net/26736162

● 本文博客园地址: http://www.cnblogs.com/lhrbest

● 本文pdf版、个人简介及小麦苗云盘地址: http://blog.itpub.net/26736162/viewspace-1624453/

● 数据库笔试面试题库及解答: http://blog.itpub.net/26736162/viewspace-2134706/

● DBA宝典今日头条号地址: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

........................................................................................................................

● QQ群号: 230161599 (满) 、618766405

● weixin群:可加我weixin,我拉大家进群,非诚勿扰

● 联系我请加QQ好友 646634621 ,注明添加缘由

● 于 2018-10-01 06:00 ~ 2018-10-31 24:00 在魔都完成

● 最新修改时间:2018-10-01 06:00 ~ 2018-10-31 24:00

● 文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

........................................................................................................................

小麦苗的微店 https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

小麦苗出版的数据库类丛书 http://blog.itpub.net/26736162/viewspace-2142121/

小麦苗OCP、OCM、高可用网络班 http://blog.itpub.net/26736162/viewspace-2148098/

小麦苗腾讯课堂主页 https://lhr.ke.qq.com/

........................................................................................................................

使用 weixin客户端 扫描下面的二维码来关注小麦苗的weixin公众号( xiaomaimiaolhr )及QQ群(DBA宝典)、添加小麦苗weixin, 学习最实用的数据库技术。

........................................................................................................................

欢迎与我联系

 

 



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26736162/viewspace-2217879/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26736162/viewspace-2217879/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值