Skip to content

Oracle 排障配置与调整

新装的oracle 19c grid集群启动报错,日志信息如下:

[root@luda bin]# crsctl start crs
CRS-41053: checking Oracle Grid Infrastructure for file permission issues
PRVH-0112 : Path “/etc/oracle/maps” with permissions “rwxrwxr-x” does not have write permissions for others on node “rac1”.
PRVH-0100 : Restricted deletion flag is not set for path “/etc/oracle/maps” on node “rac1”.
PRVH-0100 : Restricted deletion flag is not set for path “/oracle/19c/grid/crsdata/rac1/shm” on node “rac1”.
PRVG-11960 : Set user ID bit is not set for file “/oracle/19c/19.3.0/grid/bin/jssu” on node “rac1”.
PRVH-0147 : Set group ID bit is not set for file “/oracle/19c/19.3.0/grid/bin/extproc” on node “rac1”.
PRVG-11960 : Set user ID bit is not set for file “/oracle/19c/19.3.0/grid/bin/extjob” on node “rac1”.
PRVG-11960 : Set user ID bit is not set for file “/oracle/19c/19.3.0/grid/bin/oracle” on node “rac1”.
PRVH-0147 : Set group ID bit is not set for file “/oracle/19c/19.3.0/grid/bin/oracle” on node “rac1”.
PRVG-11960 : Set user ID bit is not set for file “/oracle/19c/19.3.0/grid/bin/oradism” on node “rac1”.
CRS-4124: Oracle High Availability Services startup failed.
CRS-4000: Command Start failed, or completed with errors.

 

检查发现权限有问题,通过增加权限解决

 

chmod a+s /oracle/19c/19.3.0/grid/bin/extjob
chmod a+s /oracle/19c/19.3.0/grid/bin/oracle
chmod a+s /oracle/19c/19.3.0/grid/bin/oradism
chmod +t /oracle/19c/grid/crsdata/rac1/shm

Oracle 19c RAC PRVG-11960 0147

19c的重要特性之一DML重定向,原理发送到ADG备库上的DML操作,自动转发到主库执行,然后通过主库日志传递到备库实时应用,在保证了ACID的前提下,增强了备库的功能性

在 18c 中,这个特性是否启用通过隐含参数 _enable_proxy_adg_redirect 控制;

在 19c 中,则由显式参数 ADG_REDIRECT_DML控制;

SQL> show parameter ADG_REDIRECT_DML

NAME TYPE VALUE
———————————— ———– ——————————
adg_redirect_dml boolean FALSE

SQL> alter system set adg_redirect_dml=true scope=both;

System altered.

SQL> create user test identified by test;
create user test identified by test
*
ERROR at line 1:
ORA-16000: database or pluggable database open for read-only access

SQL> create table test(id int,sdate char(20));
create table test(id int,sdate char(20))
*
ERROR at line 1:
ORA-16000: database or pluggable database open for read-only access

SQL> conn luda/luda
Connected.
SQL> show parameter ADG_REDIRECT_DML

NAME TYPE VALUE
———————————— ———– ——————————
adg_redirect_dml boolean TRUE
SQL>
alter session set events ‘10046 trace name context forever ,level 12′;

insert into test values (1, to_char(current_timestamp at time zone dbtimezone,’dd-mon-rr hh:mi:ss’));

alter session set events ‘10046 trace name context off’;

select distinct(m.sid),p.pid,p.tracefile from v$mystat m,v$session s,v$process p where m.sid=s.sid and s.paddr=p.addr;

SID PID
———- ———-
TRACEFILE
——————————————————————————–
223 44
/u01/app/oracle/diag/rdbms/std/orcl/trace/orcl_ora_1768553.trc

格式化输出

tkprof /u01/app/oracle/diag/rdbms/std/orcl/trace/orcl_ora_1768553.trc /home/oracle/orcl_ora_1768553.out

[oracle@oracle19c ~]$ cat orcl_ora_1768553.out

TKPROF: Release 19.0.0.0.0 – Development on Mon Apr 27 07:56:09 2020

Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.

Trace file: /u01/app/oracle/diag/rdbms/std/orcl/trace/orcl_ora_1768553.trc
Sort options: default

********************************************************************************
count = number of times OCI procedure was executed
cpu = cpu time in seconds executing
elapsed = elapsed time in seconds executing
disk = number of physical reads of buffers from disk
query = number of buffers gotten for consistent read
current = number of buffers gotten in current mode (usually for update)
rows = number of rows processed by the fetch or execute call
********************************************************************************

The following statement encountered a error during parse:

insert into test values (1, to_char(current_timestamp at time zone dbtimezone,’dd-mon-rr hh:mi:ss’))

Error encountered: ORA-01157
********************************************************************************

SQL ID: 8r8b2pyy9qjm2 Plan Hash: 0

alter session set events ‘10046 trace name context forever, level 12’

call count cpu elapsed disk query current rows
——- —— ——– ———- ———- ———- ———- ———-
Parse 0 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 0 0.00 0.00 0 0 0 0
——- —— ——– ———- ———- ———- ———- ———-
total 1 0.00 0.00 0 0 0 0

Misses in library cache during parse: 0
Misses in library cache during execute: 1
Optimizer mode: ALL_ROWS
Parsing user id: 106

Elapsed times include waiting on following events:
Event waited on Times Max. Wait Total Waited
—————————————- Waited ———- ————
SQL*Net message to client 3 0.00 0.00
SQL*Net message from client 3 26.12 47.13
SQL*Net break/reset to client 3 0.00 0.00
single-task message 1 0.01 0.01
SQL*Net message from dblink 7 0.01 0.02
SQL*Net message to dblink 6 0.00 0.00
SQL*Net vector data to dblink 1 0.00 0.00
asynch descriptor resize 1 0.00 0.00
Disk file operations I/O 1 0.00 0.00
control file sequential read 8 0.00 0.00
********************************************************************************

SQL ID: 06nvwn223659v Plan Hash: 0

alter session set events ‘10046 trace name context off’

call count cpu elapsed disk query current rows
——- —— ——– ———- ———- ———- ———- ———-
Parse 1 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 0 0.00 0.00 0 0 0 0
——- —— ——– ———- ———- ———- ———- ———-
total 2 0.00 0.00 0 0 0 0

Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 106

********************************************************************************

OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS

call count cpu elapsed disk query current rows
——- —— ——– ———- ———- ———- ———- ———-
Parse 1 0.00 0.00 0 0 0 0
Execute 2 0.00 0.00 0 0 0 0
Fetch 0 0.00 0.00 0 0 0 0
——- —— ——– ———- ———- ———- ———- ———-
total 3 0.00 0.00 0 0 0 0

Misses in library cache during parse: 1
Misses in library cache during execute: 1

Elapsed times include waiting on following events:
Event waited on Times Max. Wait Total Waited
—————————————- Waited ———- ————
SQL*Net message to client 3 0.00 0.00
SQL*Net message from client 3 26.12 47.13
SQL*Net break/reset to client 3 0.00 0.00
single-task message 1 0.01 0.01
SQL*Net message from dblink 7 0.01 0.02
SQL*Net message to dblink 6 0.00 0.00
SQL*Net vector data to dblink 1 0.00 0.00
asynch descriptor resize 1 0.00 0.00
Disk file operations I/O 1 0.00 0.00
control file sequential read 8 0.00 0.00

OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS

call count cpu elapsed disk query current rows
——- —— ——– ———- ———- ———- ———- ———-
Parse 0 0.00 0.00 0 0 0 0
Execute 0 0.00 0.00 0 0 0 0
Fetch 0 0.00 0.00 0 0 0 0
——- —— ——– ———- ———- ———- ———- ———-
total 0 0.00 0.00 0 0 0 0

Misses in library cache during parse: 0

2 user SQL statements in session.
0 internal SQL statements in session.
2 SQL statements in session.
********************************************************************************
Trace file: /u01/app/oracle/diag/rdbms/std/orcl/trace/orcl_ora_1768553.trc
Trace file compatibility: 12.2.0.0
Sort options: default

1 session in tracefile.
2 user SQL statements in trace file.
0 internal SQL statements in trace file.
2 SQL statements in trace file.
2 unique SQL statements in trace file.
88 lines in trace file.
47 elapsed seconds in trace file.

Oracle 19C ADG的自动DML重定向 ADG_REDIRECT_DML

RDA Remote Diagnostic Agent

RDA Remote Diagnostic Agent远程诊断代理是Oracle Support售后服务使用的标准工具之一,当用户在Metalink上提交SR(TAR)时可能Oracle GCS(Global Customer Service)支持会需要让用户从MOS上下载RDA工具,通过RDA收集丰富的数据库环境信息(如包含OS、DB、CRS等),以便原厂售后直接从RDA report中抓取诊断信息,避免了因诊断信息不足 而反复信息交互所浪费的时间 ; 此外Oracle的一些ACS高级客户服务的现场服务过程中也会利用到RDA,例如当用户要求ACS到现场进行月度或季度巡检是RDA就是标准的检查工具。

 

说具体参考My Oracle Support(metalink)的《Remote Diagnostic Agent (RDA) 4 – Getting Started [ID 314422.1]》专栏中下载到各个平台的最新版RDA。

首先配置就是选择我们要使用的RDA module和一些临时设置,先来认识一下有哪些module:

 

将下载到的rda zip包解压

[oracle@vrh8 ~]$ unzip /tmp/p9079828_418_LINUX.zip 

[oracle@vrh8 ~]$ cd rda

[oracle@vrh8 rda]$ ./rda.sh -h
Usage: rda.pl [-bcdflntvwxy] [-ABCDEHIKLMPQRSTV] [-e list] [-m dir]
              [-s name] [-o out] [-p prof] arg ...
        -A      Authentify user through the setup file
        -B      Start background collection
        -C      Collect diagnostic information
        -D      Delete specified modules from the setup
        -E      Explain specified error numbers
        -H      Halt background collection
        -I      Regenerate the index
        -K      Kill background collection
        -L      List the modules available
        -M      Display the related manual pages
        -O      Render output specifications from STDIN
        -P      Package the reports (tar or zip)
        -Q      Display the related setup questions
        -R      Generate specified reports
        -S      Setup specified modules
        -T      Execute test modules
        -V      Display component version numbers
        -b      Don't backup setup file before saving
        -c      Check the RDA installation and exit
        -d      Set debug mode
        -e list Specify a list of alternate setting definitions (var=val,...)
        -f      Set force mode
        -h      Display the command usage and exit
        -l      Use a lock file to prevent concurrent usage of a setup file
        -m dir  Specify the module directory ('modules' by default)
        -n      Start a new data collection
        -o out  Specify the file for background collection output redirection
        -p prof Specify the setup profile ('Default' by default)
        -q      Set quiet mode
        -s name Specify the setup name ('setup' by default)
        -t      Set trace mode
        -v      Set verbose mode
        -w      Wait as long as the background collection daemon is active
        -x      Produce module cross reference
        -y      Accept all defaults and skip all pauses

列出所有可用module

[oracle@vrh8 rda]$ ./rda.sh -L Module

Available data collection modules are:
  ACFS     Collects ASM Cluster File System Information
  ACT      Collects Oracle E-Business Suite Application Information
  ADBA     Collects ACS Oracle Database Assessment
  ADX      Collects AutoConfig and Rapid Clone Information
  AGT      Collects Enterprise Manager Agent Information
  APEX     Collects APEX Information
  ASAP     Collects Oracle Communications ASAP Information
  ASBR     Collects Application Server Backup and Recovery Information
  ASG      Collects Application Server Guard Information
  ASIT     Collects Oracle Application Server Installation Information
  ASM      Collects Automatic Storage Management Information
  B2B      Collects Oracle Business to Business Information
  BAM      Collects Business Activity Monitoring Information
  BEE      Collects Beehive Information
  BI       Collects Oracle Business Intelligence Enterprise Edition Info.
  BPEL     Collects Oracle BPEL Process Manager Information
  BR       Collects Database Backup and Recovery Information
  BRM      Collects Oracle Communications BRM Information
  CCR      Collects OCM Diagnostic Information
  CFG      Collects Key Configuration Information
  COHR     Collects Oracle Coherence Information
  CONT     Collects Oracle Content Services Information
  CRID     Collects Oracle Access Manager (COREid) Information
  D2PC     Collects Distributed Transaction Information
  DB       Controls RDBMS Data Collection
  DBA      Collects RDBMS Information
  DBC      Collects Database Control Information
  DBM      Collects RDBMS Memory Information
  DEV      Collects Oracle Developer Information
  DG       Collects Data Guard Information
  DNFS     Collects Direct NFS Information
  DSCS     Collects Discussions Information
  DSCV     Collects Oracle Discoverer Information
  ECM      Controls Oracle Enterprise Content Management 11g Data Collection
  EM       Collects Enterprise Manager OMS and Repository Info (Obsolete)
  END      Finalizes the Data Collection
  EPMA     Collects Enterprise Performance Management Architect Information
  ESB      Collects Enterprise Service Bus Information
  ESS      Collects Oracle Essbase Information
  ESSO     Collects Oracle Enterprise Single Sign-On Information
  EXA      Collects Exadata Information
  FLTR     Controls Report Content Filtering
  GRDN     Collects Oracle Guardian Information
  GRID     Controls Grid Control Data Collection
  GTW      Collects Transparent/Procedural Gateway Information
  HFM      Collects Oracle Hyperion Financial Management information
  HPL      Collects Oracle Hyperion Planning Information
  IA       Collects Intelligent Agent Information
  IAS      Collects Web Server Information
  IFS      Collects iFS (iFS, CMSDK, Files) Information
  INI      Initializes the Data Collection
  INST     Collects the Oracle Installation Information
  IPSA     Collects Oracle Communications IP Service Activator Information
  J2EE     Collects J2EE/OC4J Information
  JDBC     Collects Oracle Java DB Connectivity (JDBC) Information
  JDEV     Collects Oracle JDeveloper Information
  JIVE     Collects Jive Information
  LANG     Collects Oracle Language Information
  LOAD     Produces the External Collection Reports
  LOG      Collects Database Trace and Log Files
  MAIL     Collects Oracle Collaboration Suite Mail Information
  MSLG     Collects Microsoft Languages Information
  ND       Collects Oracle Communications Network Discovery Information
  NET      Collects Network Information
  NM       Collects Oracle Communications Network Mediation Information
  NPRF     Samples Performance Information (root not required)
  OCAL     Collects Oracle Calendar Information
  OCFS     Collects Oracle Cluster File System Information
  OCM      Setting up Configuration Manager Interface
  OCS      Controls Oracle Collaboration Suite Data Collection
  ODI      Collects Oracle Data Integrator Information
  ODM      Collects Oracle Data Mining Information
  OES      Collects Oracle Express Server Information
  OID      Collects Oracle Internet Directory Information
  OIM      Collects Oracle Identity Manager Information
  OLAP     Collects OLAP Information
  OMM      Collects Oracle Multimedia or Oracle interMedia Information
  OMS      Collects Oracle Management Server Information (obsolete)
  ONET     Collects Oracle Net Information
  OS       Collects the Operating System Information
  OVD      Collects Oracle Virtual Directory Information
  OVMM     Collects Oracle VM Manager Information
  OVMS     Collects Oracle VM Server Information
  OWB      Collects Oracle Warehouse Builder Information
  OWSM     Collects Oracle Web Services Manager Information
  PDA      Collects Oracle Portal Information
  PDBA     Collects PeopleSoft Information from an Oracle Database
  PERF     Collects Performance Information
  PLNC     Collects Oracle PL/SQL Native Compilation Information
  PROF     Collects the User Profile
  PS       Collects Oracle Communications Policy Services Information
  PWEB     Collects PeopleSoft Information from Web Application Server
  RAC      Collects Cluster Information
  RACD     Performs a Database Hang Analysis
  RDSP     Produces the Remote Data Collection Reports
  RET      Collects Oracle Retail Information
  REXE     Performs the Remote Data Collections
  RPRF     Samples Performance Information (root privileges required)
  RSRC     Collects Database Resource Manager Information
  RTC      Collects Real Time Communication Information
  SEBL     Collects Siebel Information
  SES      Collects Oracle Secure Enterprise Search Information
  SMPL     Controls Sampling
  SOA      Collects Oracle SOA Suite Information
  SP       Collects SQL*Plus/iSQL*Plus Information
  SSO      Collects Single Sign-On Information
  STC      Collects Streams Configuration Information
  STM      Collects Streams Monitoring Information
  TOPL     Collects Oracle TopLink Information
  TTEN     Collects Oracle TimesTen In-Memory Database Information
  UCM      Collects Oracle Universal Content Management Information
  UOA      Collects Oracle Universal Online Archive 11g Information
  WAC      Collects Web Access Client Information
  WCI      Collects Oracle WebCenter Information
  WEBC     Collects Oracle Web Cache Information
  WKSP     Collects Workspaces Information
  WLS      Collects Oracle WebLogic Server Information
  WMC      Collects Webmail Client Information
  WRLS     Collects Wireless Information
  XDB      Collects XDB Information
  XSMP     Samples User Defined Data
  XTRA     Collects User Defined Data

 

 

如以上列表中RAC模块用来Collects Cluster Information收集集群信息, 而RACD模块则负责收集RAC数据库挂起的相关信息Performs a Database Hang Analysis。

 

我们在配置RDA的时可以直接执行./rda.sh, 脚本会提示我们需要选择启用哪些Module,但是因为Module过多,整个配置过程就会浪费很多时间。

 

为了避免每配置一套新环境都要大费周章确认那么多模块, 所以在RDA中定义了很多典型场景使用的profile, 这些profile已经配好了固定的一些Module , 下面我们来看一下RDA profile:

 

 

列出所有目前可用的profile

[oracle@vrh8 rda]$ ./rda.sh -L profiles
Available profiles are:
  9iAS               Oracle Application Server 9i problems
  AS10g              Oracle Application Server 10g problems
  AS10g_Identity     Oracle Identity Management 10g problems
  AS10g_MidTier      Oracle Application Server 10g Middle Tier problems
  AS10g_Repository   Oracle Application Server 10g metadata repository problems
  AS10g_WebTier      Oracle Application Server 10g WebTier problems
  AS_BackupRecovery  Oracle Application Server backup/recovery problems
  Act                Oracle Application Overview
  AppsCheck          Equivalent to AppsCheck
  AsmFileSystem      Oracle ASM Cluster File System problems
  Bam                Business Activity Monitoring problems
  Beehive            Oracle Beehive problems
  DB10g              Oracle Database 10g problems
  DB11g              Oracle Database 11g problems
  DB8i               Oracle Database 8i problems
  DB9i               Oracle Database 9i problems
  DB_Assessment      Oracle Database assessment collections
  DB_BackupRecovery  Oracle Database backup and recovery problems
  DB_Perf            Oracle Database performance problems
  DataGuard          Data Guard problems
  DirectNFS          Direct NFS problems
  Discoverer10g      Oracle Discoverer 10g problems
  Discoverer11g      Oracle Discoverer 11g problems
  EnterpriseSearch   Oracle Secure Enterprise Search problems
  Essbase            Oracle Essbase problems
  FM11g_Bi           Business Intelligence Enterprise Edition 11g problems
  FM11g_Ecm          Oracle Enterprise Content Management 11g problems
  FM11g_Forms        Oracle Forms 11g problems
  FM11g_Identity     Oracle Identity Management 11g problems
  FM11g_Odi          Oracle Data Integrator Standalone 11g problems
  FM11g_Portal       Oracle Portal 11g problems
  FM11g_Reports      Oracle Reports 11g problems
  FM11g_Soa          Oracle SOA Suite 11g problems
  FM11g_WebTier      Oracle Fusion Middleware 11g Web Tier problems
  FM11g_WlsBi        Business Intelligence Enterprise Edition 11g with WLS
  FM11g_WlsForms     Oracle Forms 11g with WLS problems
  FM11g_WlsIdentity  Oracle Identity Management 11g with WLS problems
  FM11g_WlsOdi       Oracle Data Integrator Suite 11g with WLS problems
  FM11g_WlsPortal    Oracle Portal 11g with WLS problems
  FM11g_WlsReports   Oracle Reports 11g with WLS problems
  FM11g_WlsWebTier   Oracle Fusion Middleware 11g Web Tier with WLS problems
  FinManagement      Oracle Hyperion Financial Management problems
  GridControl        Grid Control problems
  InterMedia         Oracle interMedia problems
  Linux              Linux problems
  LinuxPerf          Linux performance problems
  Maa_Assessment     Maximum Availability Architecture assessment collections
  Multimedia         Oracle Multimedia problems
  OSMonitor          Operating System performance sampling
  OVMManager         Oracle VM Manager problems
  Pda10g             Portal 10g problems
  Pda11g             Portal 11g problems
  Pda9i              Portal 9i problems
  PeopleSoft_DB      PeopleSoft Oracle Database tier assessment collections
  PeopleSoft_Web     PeopleSoft Web application server assessment collections
  Rac                Real Application Cluster problems
  Rac_AdvancedAsm    Cluster with ASM problems (ASM advanced mode)
  Rac_Asm            Cluster with ASM problems
  Rac_Assessment     Real Application Cluster assessment collections
  Rac_Perf           Cluster performance problems
  Retail             Oracle Retail problems
  Security           Filter sensitive information from the reports
  SupportInformer70  Oracle Communication BRM 7.0 problems
  SupportInformer72  Oracle Communication BRM 7.2 problems
  SupportInformer73  Oracle Communication BRM 7.3 problems
  SupportInformer74  Oracle Communication BRM 7.4 problems
  TimesTen           Oracle TimesTen problems
  TopLink10g         Oracle TopLink 10g problems
  WebCenter10g       Oracle WebCenter 10g problems
  WebCenter11g       Oracle WebCenter 11g problems
  WebCenterCont10g   Oracle WebCenter 10g with Oracle Content Services problems
  WebLogicServer     Oracle WebLogic Server problems

 

 

上例列出了该版本RDA默认就有的Profile , 如DB11g这个profile是用来收集11g Database数据库的诊断信息的, 而DB10g 是收集10g Database诊断信息的, DB_Perf是收集数据库性能诊断信息的。

可以具体了解 这些profile 预设了哪些Module:

 

 

[oracle@vrh8 rda]$ ./rda.sh -M -p DB11g
NAME
    Profile DB11g - Oracle Database 11g problems

MODULES
    The DB11g profile uses the following modules:
      OS        Collects the Operating System Information
      PROF      Collects the User Profile
      PERF      Collects Performance Information
      NET       Collects Network Information
      ONET      Collects Oracle Net Information
      INST      Collects the Oracle Installation Information
      DB        Controls RDBMS Data Collection
      DBA       Collects RDBMS Information
      DBM       Collects RDBMS Memory Information
      LOG       Collects Database Trace and Log Files
      DNFS      Collects Direct NFS Information
      SP        Collects SQL*Plus/iSQL*Plus Information
      GRID      Controls Grid Control Data Collection
      AGT       Collects Enterprise Manager Agent Information
      DBC       Collects Database Control Information

[oracle@vrh8 rda]$ ./rda.sh -M -p DB10g
NAME
    Profile DB10g - Oracle Database 10g problems

MODULES
    The DB10g profile uses the following modules:
      OS        Collects the Operating System Information
      PROF      Collects the User Profile
      PERF      Collects Performance Information
      NET       Collects Network Information
      ONET      Collects Oracle Net Information
      INST      Collects the Oracle Installation Information
      DB        Controls RDBMS Data Collection
      DBA       Collects RDBMS Information
      DBM       Collects RDBMS Memory Information
      LOG       Collects Database Trace and Log Files
      SP        Collects SQL*Plus/iSQL*Plus Information
      GRID      Controls Grid Control Data Collection
      AGT       Collects Enterprise Manager Agent Information
      DBC       Collects Database Control Information

 

 

除了module之外profile可能还定义了一些临时变量如force_onet_tests 是否强制做oracle net网络测试等, 可以用-f( Set force mode)选项来列出这些temporary settings:

 

 

[oracle@vrh8 rda]$ ./rda.sh -fM -p DB10g
NAME
    Profile DB10g - Oracle Database 10g problems

MODULES
    The DB10g profile uses the following modules:
      OS        Collects the Operating System Information
      PROF      Collects the User Profile
      PERF      Collects Performance Information
      NET       Collects Network Information
      ONET      Collects Oracle Net Information
      INST      Collects the Oracle Installation Information
      DB        Controls RDBMS Data Collection
      DBA       Collects RDBMS Information
      DBM       Collects RDBMS Memory Information
      LOG       Collects Database Trace and Log Files
      SP        Collects SQL*Plus/iSQL*Plus Information
      GRID      Controls Grid Control Data Collection
      AGT       Collects Enterprise Manager Agent Information
      DBC       Collects Database Control Information

SETTINGS
    The DB10g profile sets the following temporary settings:
      force_db_tests=1
      force_dba_tests=1
      force_dbm_tests=1
      force_log_tests=1
      force_onet_tests=1

 

 

也可以列出全部预定义的profile的Module信息:

 

 

[oracle@vrh8 rda]$ ./rda.sh -xv profiles
Treating profiles ...
Profile Cross Reference

Defined Profiles:
  9iAS               S100OS, S105PROF, S110PERF, S120NET, S130INST, S300IAS,
                     S305ASBR, S306ASG, S310J2EE, S330SSO, S340OID, S350WEBC
  AS10g              S100OS, S105PROF, S110PERF, S120NET, S130INST, S300IAS,
                     S305ASBR, S306ASG, S310J2EE, S330SSO, S340OID, S350WEBC
  AS10g_Identity     S100OS, S105PROF, S110PERF, S120NET, S130INST, S300IAS,
                     S305ASBR, S306ASG, S310J2EE, S330SSO, S340OID, S342OVD
  AS10g_MidTier      S100OS, S105PROF, S110PERF, S120NET, S130INST, S249WRLS,
                     S290DEV, S300IAS, S310J2EE, S325PDA, S350WEBC, S390DSCV
  AS10g_Repository   S100OS, S105PROF, S110PERF, S120NET, S130INST, S300IAS,
                     S305ASBR, S306ASG, S310J2EE
  AS10g_WebTier      S100OS, S105PROF, S110PERF, S120NET, S130INST, S300IAS,
                     S310J2EE, S350WEBC, S410GRID
  AS_BackupRecovery  S100OS, S300IAS, S305ASBR
  Act                S100OS, S105PROF, S110PERF, S130INST, S500ACT
  AppsCheck          S100OS, S105PROF, S110PERF, S130INST, S500ACT
  AsmFileSystem      S100OS, S105PROF, S120NET, S122ONET, S130INST, S402ASM,
                     S403ACFS
  Bam                S100OS, S105PROF, S110PERF, S120NET, S374BAM
..........

 

 

 

使用-Q 选项可以更详细地列出profile相关的问题:

 

 

[oracle@vrh8 rda]$ ./rda.sh -Q -p DB11g

NAME
    S120NET - Collects Network Information

SETTING DESCRIPTION
  NETWORK_PING_TESTS
    "Do you want RDA to perform the network ping tests (Y/N)?"

  LOCAL_NODE
    "Enter the name of the node the script is running on (used for ping
    tests)"

  WAN_NODE
    "Enter a remote node connecting to this server (used for ping tests)"

  RDBMS_NODE
    "Enter the node hosting the database instance (used for ping tests)"

  WEB_NODE
    "Enter the node where the Web Server/Forms server is on (used for ping
    tests)"

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

 

 

通过继承profile的定义可以快速配置RDA,例如我们尝试使用DB11g这个profile:

 

 

[oracle@vrh8 rda]$ ./rda.sh -S -p DB11g

使用profile后RDA问你的问题明显减少了哦

之后在运行rda.sh就会收集信息了

[oracle@vrh8 rda]$ ./rda.sh
-------------------------------------------------------------------------------
RDA Data Collection Started 06-Feb-2012 01:23:22
-------------------------------------------------------------------------------
Processing Initialization module ...
Enter the password for 'SYSTEM':
Please re-enter it to confirm:
Processing OCM module ...
Processing PERF module ...
Processing CFG module ...
Processing OS module ..

 

 

可能你还是觉得麻烦:”我使用oracle操作系统用户登录的,为啥每次还要输密码呢?直接sysdba不行吗?” 对于有些内部视图X$ View的查询也确实需要sysdba权限, 我们可以如下设置来使用sysdba身份:

 

[oracle@vrh8 rda]$ ./rda.sh -Sy -e SQL_SYSDBA=1,SQL_LOGIN=/ -p DB11g

[oracle@vrh8 rda]$ ./rda.sh
-------------------------------------------------------------------------------
RDA Data Collection Started 06-Feb-2012 01:27:37
-------------------------------------------------------------------------------
Processing Initialization module ...
Processing OCM module ...
Processing PERF module ...
Processing CFG module ...
Processing OS module ...

 

 

除了单独使用某个profile外,我们还可以组合使用多个profile,使用-p profile1-profile2这样的语法即可,如:

 

[oracle@vrh8 rda]$ ./rda.sh -Sy -e SQL_SYSDBA=1,SQL_LOGIN=/ -p DB11g-DataGuard

使用-p profile1-profile2这样的模式即可

 

 

RDA经过配置后会默认将配置信息写到其目录下的setup.cfg文件中,之后再使用rda.sh收集信息即会沿用该cfg文件:

 

 

cat setup.cfg

# Oracle Remote Diagnostic Agent - Setup Information
###############################################################################

#------------------------------------------------------------------------------
# Data Collection Overview
#------------------------------------------------------------------------------
# S000INI=pending
# S010CFG=pending
# S020SMPL=pending
# S090OCM=pending
# S100OS=pending
# S105PROF=pending
# S110PERF=pending
# S120NET=pending
# S122ONET=pending
# S130INST=pending
# S200DB=skip
# S201DBA=pending
# S203DBM=pending
# S204LOG=pending
# S205BR=pending
# S212DNFS=skip
# S213SP=skip
# S400RAC=pending
# S400RACD=skip
# S401OCFS=skip
# S405DG=pending
# S410GRID=skip
# S420AGT=skip
# S430DBC=skip
# S909RDSP=skip
# S919LOAD=pending
# S990FLTR=skip
www.askmaclean.com
www.askmaclean.com
# S999END=pending
.................

 

 

除了最常见的DB11g 、 DB10g外还有一些很有用的profile可以加速我们对问题的诊断, 在这里分享一下:

 

 

For 11g

./rda.sh -Sy -e SQL_SYSDBA=1,SQL_LOGIN=/ -p DB11g

./rda.sh -Sy -e SQL_SYSDBA=1,SQL_LOGIN=/,ALERT_TEXT=1 -p DB11g
--收集alert文本

./rda.sh -Sy -e SQL_SYSDBA=1,SQL_LOGIN=/,ALERT_TEXT=1,DBCONTROL_SERVER_IN_USE=1 -p DB11g
--收集DBcontrol信息

./rda.sh -vSCRPfy -e SQL_SYSDBA=1,SQL_LOGIN=/,ALERT_TEXT=1 -p DB11g
--收集诊断信息并打包

DB10g 

./rda.sh -S -p DB10g

./rda.sh -Sy -e SQL_SYSDBA=1,SQL_LOGIN=/ -p DB10g

./rda.sh -Sy -e SQL_SYSDBA=1,SQL_LOGIN=/,DBCONTROL_SERVER_IN_USE=1 -p DB10g

DB9i

./rda.sh -S -p DB9i

./rda.sh -Sy -e SQL_SYSDBA=1,SQL_LOGIN=/ -p DB9i

DB_BackupRecovery 收集备份恢复信息

./rda.sh -S -p DB_BackupRecovery

./rda.sh -Sy -e SQL_SYSDBA=1,SQL_LOGIN=/,RMAN_IN_USE=0 -p DB_BackupRecovery
--不使用RMAN备份

./rda.sh -Sy -e SQL_SYSDBA=1,SQL_LOGIN=/,RMAN_IN_USE=1,RMAN_CATALOG=0 -p DB_BackupRecovery
--使用RMAN但不使用CATALOG恢复目录

./rda.sh -Sy -e SQL_SYSDBA=1,SQL_LOGIN=/,RMAN_IN_USE=1,RMAN_CATALOG=1,RMAN_SCHEMA=rman,RMAN_EXPORT_USER=rman@catlogdb -p DB_BackupRecovery

DB_Perf 收集数据库性能信息

./rda.sh -S -p DB_Perf

./rda.sh -Sy -e SQL_SYSDBA=1,SQL_LOGIN=/ -p DB_Perf

./rda.sh -Sy -e SQL_SYSDBA=1,SQL_LOGIN=/,PERF_START_TIME=11-Mar-2010_12:00,PERF_END_TIME=11-Mar-2010_13:00 -p DB_Perf
--指定收集性能信息的时间段 

DataGuard 收集dg 信息

./rda.sh -S -p DataGuard

./rda.sh -Sy -e SQL_SYSDBA=1,SQL_LOGIN=/ -p DataGuard

./rda.sh -Sy -e SQL_SYSDBA=1,SQL_LOGIN=/,ONET_IN_USE=1,ALERT_TEXT=1 -p DataGuard
--同时也收集Oracle Net Services信息

RAC 收集Real Application Cluster CRS信息

./rda.sh -S -p Rac

./rda.sh -Sy -e SQL_SYSDBA=1,SQL_LOGIN=/ -p Rac

RAC ASM   收集 Rac + Clusterware + Asm 信息

./rda.sh -S -p Rac_Asm

./rda.sh -Sy -e SQL_SYSDBA=1,SQL_LOGIN=/,ASM_ORACLE_SID=+ASM1 -p Rac_Asm

Rac_AdvancedAsm 收集更详细的Rac + Clusterware + Asm 信息

./rda.sh -S -p Rac_AdvancedAsm

./rda.sh -Sy -e SQL_SYSDBA=1,SQL_LOGIN=/,ASM_ORACLE_SID=+ASM1 -p Rac_AdvancedAsm

Rac_Perf  收集RAC数据库性能信息

./rda.sh -S -p Rac_Perf

./rda.sh -Sy -e SQL_SYSDBA=1,SQL_LOGIN=/ -p Rac_Perf

./rda.sh -Sy -e SQL_SYSDBA=1,SQL_LOGIN=/,PERF_START_TIME=11-Mar-2010_12:00,PERF_END_TIME=11-Mar-2010_13:00 -p Rac_Perf

DirectNFS 

./rda.sh -S -p DirectNFS

./rda.sh -Sy -e SQL_SYSDBA=1,SQL_LOGIN=/ -p DirectNFS

AsmFileSystem

./rda.sh -S -p AsmFileSystem

./rda.sh -Sy -e SQL_SYSDBA=1,SQL_LOGIN=/ -p AsmFileSystem

DB_Assessment 

./rda.sh -S -p Rac_Assessment

./rda.sh -Sy -e SQL_SYSDBA=1,SQL_LOGIN=/ -p Rac_Assessment

 Rac_Assessment

./rda.sh -S -p Rac_Assessment

./rda.sh -Sy -e SQL_SYSDBA=1,SQL_LOGIN=/ -p Rac_Assessment

./rda.sh -Sy -e SQL_SYSDBA=1,SQL_LOGIN=/,ASM_ORACLE_SID=+ASM1 -p Rac_Assessment

 Maa_Assessment

./rda.sh -S -p Maa_Assessment

./rda.sh -Sy -e SQL_SYSDBA=1,SQL_LOGIN=/ -p Maa_Assessment

./rda.sh -Sy -e SQL_SYSDBA=1,SQL_LOGIN=/,ASM_ORACLE_SID=+ASM1 -p Maa_Assessment

Exadata_Assessment

./rda.sh -S -p Exadata_Assessment

./rda.sh -Sy -e SQL_SYSDBA=1,SQL_LOGIN=/,ALERT_TEXT=1 -p Exadata_Assessment

 ./rda.sh -vSCRPfy -e SQL_SYSDBA=1,SQL_LOGIN=/,ALERT_TEXT=1,EXA_COLLECT_CELL=0 -p Exadata_Assessment

 ./rda.sh -vSCRPfy -e SQL_SYSDBA=1,SQL_LOGIN=/,ALERT_TEXT=1 -p Exadata_Assessment

Maa_Exa_Assessment

./rda.sh -S -p Maa_Exa_Assessment

./rda.sh -Sy -e SQL_SYSDBA=1,SQL_LOGIN=/,ALERT_TEXT=1 -p Maa_Exa_Assessment

./rda.sh -Sy -e SQL_SYSDBA=1,SQL_LOGIN=/,ALERT_TEXT=1,EXA_COLLECT_CELL=0 -p Maa_Exa_Assessment

./rda.sh -vSCRPfy -e SQL_SYSDBA=1,SQL_LOGIN=/,ALERT_TEXT=1 -p Maa_Exa_Assessment

 

 

 

还可以利用rda对OS做数据库软件安装前的预检查,如将需要安装11.2g,则执行 ./rda.sh -T hcve:

 

 

[oracle@vrh8 rda]$ ./rda.sh -T hcve
Processing HCVE tests ...
Available Pre-Installation Rule Sets:
1. Oracle Database 10g R1 (10.1.0) Preinstall (Linux-x86)
2. Oracle Database 10g R1 (10.1.0) Preinstall (Linux AMD64)
3. Oracle Database 10g R1 (10.1.0) Preinstall (IA-64 Linux)
4. Oracle Database 10g R2 (10.2.0) Preinstall (Linux AMD64)
5. Oracle Database 10g R2 (10.2.0) Preinstall (IA-64 Linux)
6. Oracle Database 10g R2 (10.2.0) Preinstall (Linux-x86)
7. Oracle Database 11g R1 (11.1.0) Preinstall (Linux AMD64)
8. Oracle Database 11g R1 (11.1.0) Preinstall (Linux-x86)
9. Oracle Database 11g R2 (11.2.0) Preinstall (Linux-x86)
ID     NAME                 RESULT  VALUE
====== ==================== ======= ==========================================
A00010 OS Certified?        PASSED  Adequate
A00050 Enter ORACLE_HOME    RECORD  /s01/oracle/product/10.2.0/db_1
A00060 ORACLE_HOME Valid?   PASSED  OHexists
A00070 O_H Permissions OK?  PASSED  CorrectPerms
A00080 oraInventory Permiss PASSED  oraInventoryOK
A00090 Got ld,nm,ar,make?   PASSED  ld_nm_ar_make_found
A00100 Umask Set to 022?    PASSED  UmaskOK
A00120 Limit Processes      PASSED  Adequate
A00130 Limit Descriptors    PASSED  Adequate
A00140 LDLIBRARYPATH Unset? PASSED  UnSet
A00180 JAVA_HOME Unset?     PASSED  UnSet
A00190 Enter JDK Home       RECORD
A00200 JDK Version          FAILED  JDK home is missing
A00210 Other O_Hs in PATH?  FAILED  OratabEntryInPath
A00220 Other OUI Up?        PASSED  NoOtherOUI
A00230 /tmp Adequate?       PASSED  TempSpaceOK
A00240 Disk Space OK?       PASSED  DiskSpaceOK
A00250 Swap (in MB)         RECORD  5951
A00260 RAM (in MB)          PASSED  3955
A00270 Swap OK?             PASSED  SwapToRAMOK
A00280 Network              PASSED  Connected
A00290 IP Address           RECORD  192.168.1.191
A00300 Domain Name          RECORD  oracle.com
A00310 DNS Lookup           FAILED  nslookup host.domain
A00320 /etc/hosts Format    FAILED  Missing host.domain
A00330 Kernel Parameters OK PASSED  KernelOK
A00380 Tainted Kernel?      PASSED  NotVerifiable
A00400 ip_local_port_range  PASSED  RangeOK
A00480 EL4 RPMs OK?         SKIPPED NotEL4
A00490 EL5 RPMs OK?         FAILED  [kernel-headers(i386)] not installed ..>
A00530 RHEL4 RPMs OK?       SKIPPED NotRedHat
A00540 RHEL5 RPMs OK?       SKIPPED NotRedHat
A00570 SUSE SLES10 RPMs OK? SKIPPED NotSuSE
A00580 SUSE SLES11 RPMs OK? SKIPPED NotSuSE
Result file: /home/oracle/rda/output/RDA_HCVE_A200DB11R2_lnx_res.htm

 

 

上例对OS做了Oracle Database 11g R2 (11.2.0) Preinstall的预安装检查 ,并给出了检查结果。

 

 

 

还可以使用./rda.sh命令对现有的RDA软件做完整性检测,保证RDA没有被修改过:

 

 

[oracle@vrh8 rda]$ ./rda.sh -cv
Loading the file list ...
Checking the directory '.' ...
Checking the directory 'RDA' ...
Checking the directory 'RDA/Handle' ...
Checking the directory 'RDA/Library' ...
Checking the directory 'RDA/Library/Remote' ...
Checking the directory 'RDA/Local' ...
Checking the directory 'RDA/Object' ...
Checking the directory 'RDA/Operator' ...
Checking the directory 'RDA/Value' ...
Checking the directory 'hcve' ...
Checking the directory 'modules' ...
No issues found
Oracle RDA Remote Diagnostic Agent 使用

手动升级到 Non-CDB Oracle Database 12c(12.2)的核对清单

手动升级到 Non-CDB Oracle Database 12c Release 2(12.2)的核对清单

步骤1:升级到数据库 12.2 的升级路径

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

 

源数据库 目标数据库
11.2.0.3 / 11.2.0.4 12.2.x
12.1.0.1 / 12.1.0.2 12.2.x

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

源数据库 升级路径 目标数据库
11.2.0.1 / 11.2.0.2 –> 11.2.0.4 –> 12.2.x
11.1.0.6 / 11.1.0.7 –> 11.2.0.4 –> 12.2.x
10.2.0.2/10.2.0.3/10.2.0.4/10.2.0.5 –> 11.2.0.4 / 12.1.0.2 –> 12.2.x
10.1.0.5 –> 11.2.0.4 / 12.1.0.2 –> 12.2.x
9.2.0.8 –> 11.2.0.3 / 11.2.0.4 –> 12.2.x

 

比如

  • 如果源库是 11.2.0.2 或者 11.1.0.7,那么你需要先升级至 11.2.0.4。
  • 如果源库是 10.2.0.2,10.2.0.3,10.2.0.4,10.2.0.5 或者 10.1.0.5,需要先升级至 11.2.0.4 或者 12.1.0.2。
  • 对于 9.2.0.8 版本的数据库,需要先升级至一个中间版本,比如:9.2.0.8 -> 11.2.0.3 或者 11.2.0.4 -> 12.1。

步骤2:推荐/需要在源库上完成的

 

  • 对源库做备份,冷备份或热备份都可以。
  • 禁用所有自定义的 before/after DDL 类型的触发器,完成升级后再启用它们。
  • 在 11g 数据库上定义的 Data security roles 不能自动转换成 ORAS。所以在升级前,需要删除所有在 11g 数据库上定义的 data security roles。升级后可以使用 Analytic Workspace Manager 12c 重新定义 data security roles。
  • 如果从 11g 升级到 12c 之前未删除 data security roles,那么所有的 data security policies 以及 data security role 都会在 12c 上失效。
  • Timezone 版本应当小于等于目标数据库的 Timezone 版本。
  • 如果源库上已经安装了 APEX 组件,那么升级数据库前需要先在源库上升级 APEX 组件。

步骤3:推荐/需要在目标库上完成的

 

  • 需要先检查您的硬件平台/操作系统是否兼容 12.2。点击此处来确定兼容性。
  • 安装数据库软件 12.2.0.1,并确保没有安装方面的问题。
  • 如果有的话,下载并应用最新的 PSU。
  • 从源库的 ORACLE_HOME/dbs 下拷贝 spfile 或者 pfile 到目标 ORACLE_HOME/dbs。
  • 从参数文件中删除所有废弃的参数。
  • 注意升级到 12.2 需要的最低的参数 COMPATIBLE 值为”11.2.0”,确保参数 COMPATIBLE 值设置为 11.2.0 或者更高。
  • 查看文档 “Patches to apply before upgrading Oracle GI and DB to 12.2.0.1 (Doc ID 2180188.1)” 给出的推荐补丁

步骤 4:检查源库的健康状况

 

  • 执行 dbupgdiag.sql(可以从 note 556610.1 下载这个脚本),并且确认是否有 SYS/SYSTEM 用户下的失效对象或者失效组件。如果存在的话,那么需要在升级前解决这些问题。你可以多次执行 utlrp.sql 来解决问题。如果在这样做之后仍然存在失效对象,那么开一个 SR 来解决这个问题。
  • 多次执行脚本 utlrp.sql 确认数据库中没有失效对象。

 

步骤5:升级前检查

 

清理数据库

 

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

 

检查物化视图

 

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

 

1. 执行下面的 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; 

性能方面

 

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

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

 

SQL> EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;

检查时区设置

 

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

 

备份数据库

 

备份数据库,创建 guaranteed flashback restore point。
在升级数据库窗口前应最少测试一下回滚策略。确保回滚策略不仅考虑到升级中,同时也要考虑到升级后的失败。

1)连接到 RMAN

rman “target / nocatalog”
2)执行 RMAN 脚本来备份
RUN
{
ALLOCATE CHANNEL chan_name TYPE DISK;
BACKUP DATABASE FORMAT ‘some_backup_directory%U’ TAG before_upgrade;
BACKUP CURRENT CONTROLFILE FORMAT ‘controlfile location and name’;
}

 

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

 

执行下面的语句:

 

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

 

清空回收站

 

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

SQL> PURGE DBA_RECYCLEBIN

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

 

 

备份 Oracle EM DB Control 配置及数据

 

如果在升级数据库到 12.2 版本后,有需要再降级,那么我们必须在升级前使用 emdwgrd 工具备份 Database Control 的文件,这样在降级后可以恢复这些文件。

 

备份数据的步骤:

 

1. 安装 12.2 的数据库软件。
2. 设置 ORACLE_HOME 到旧的数据库版本。
3. 设置 ORACLE_SID 为要升级的数据库 SID。
4. 设置 PATH, LD_LIBRARY_PATH 和 SHLIB_PATH 到旧的 ORACLE_HOME 相关的目录下。
5. 切换目录到 12c 数据库软件的 ORACLE_HOME/bin。
6. 执行 emdwgrd。

对于单数据库实例 (非 RAC) 运行下面的命令:

 

emdwgrd[sh|bat] -save -sid old_SID -path save_directory

Oracle Real Application Clusters(Oracle RAC)数据库:

需要跨节点远程拷贝。定义一个环境变量 EM_REMCP 来指向远程拷贝的命令,比如:export EM_REMCP /usr/bin/scp

emdwgrd -save -cluster -sid old_SID -path save_directory

7. 输入 SYS 密码。

 

使用 emremove.sql 手工删除 DB control

 

1)关闭 DB control

emctl stop dbconsole

 
2)使用 sysdba 登陆

SQL>SET ECHO ON
SQL>SET SERVEROUTPUT ON
SQL>@emremove.sql >> 脚本位于新的 12c ORACLE_HOME/rdbms/admin

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

 

删除 JSON-Enabled Context search 索引

 

如果源库版本为 12.1.0.2 并且创建了 JSON search index 那么 Oracle 推荐先删除这些索引,在升级后再创建回来。

 

检查使用大小写不敏感密码的用户

 

使用管理用户登录 SQL*Plus,并且执行下面的语句:

 

SELECT USERNAME,PASSWORD_VERSIONS FROM DBA_USERS;

如果存 在10g 版本的用户,建议根据 Oracle 文档解决这个问题,否则升级后用户会被 LOCK。

 

删除 Unified Auditing Schema and Roles

 

注意:如果在 Oracle 12.1 数据库上已经创建了 AUDIT_ADMIN   或者 AUDIT_VIEWER 用户或者 roles,或者数据库是在 12.1 版本上创建(而不是升级上来的),那么不需要删除这些 role 和 AUDSYS 用户。

更多信息请参照 URL

 

https://docs.oracle.com/database/122/UPGRD/unified-auditing-audit_admin-audit_viewer-changes.htm#UPGRD60010

 

使用 SYS 以 SYSDBA 权限登录 SQL*Plus,删除 AUDSYS,如果存在的话。以 migrate 模式启动数据库并删除 AUDSYS 用户

 

SQL> startup migrate pfile=$T_WORK/t_init1.ora
ORACLE instance started.
SQL> drop user audsys cascade;

删除 AUDIT_ADMIN 和 AUDIT_VIEWER roles

DROP ROLE AUDIT_ADMIN;
DROP ROLE AUDIT_VIEWER;

 

在升级过程中把某些 schema 的表空间置于 offline

 

记下所有在升级过程中需要 offline 的表空间,使用 -T 选项指定表空间的名字

 

dbupgrade –T

从 Oracle database 12.2 开始,可以在并行升级时使用 -T 参数来 offline 一些用户表空间。把用户表空间 offline 可以减少升级前的备份工作。并行升级工具(catctl.pl)可以自动选取正确的表空间来设置为只读。这个工具不会把任何包含Oracle 自带的对象的表空间设置为只读。

 

保留降级的能力

 

如果计划把数据库降级到之前的版本,那么需要在源库上打 patch 20898997,否则不能降级。

在源库执行:

$ORACLE_HOME/OPatch/opatch lsinventory -bugs_fixed |grep –i “20898997”

 
如果尚未应用这个补丁,那么从 MOS 下载 patch 20898997 并安装。

 

关于 Audit table 的升级前要求

 

 

如果要升级的数据库版本低于 12.1 并且使用了 Oracle database Vault,Oracle Label Security,那么必须先执行 olspreupgrade.sql。从目标 Oracle_home 拷贝 $ORACLE_HOME/rdbms/admin/olspreupgrade.sql 到源库的ORACLE_HOME,使用 DVOWNER 登陆源库

 

SQL> GRANT DV_PATCH_ADMIN to SYS;

在把 DV_PATCH_ADMIN 权限赋给 SYS 后,使用 SYSDBA 登陆执行 olspreupgrade.sql

 

SQL>ORACLE_HOME/rdbms/admin/olspreupgrade.sql

执行完毕后,以 DVOWNER 登陆数据库并收回 SYS 的 DV_PATCH_ADMIN 权限

 

SQL> REVOKE DV_PATCH_ADMIN from SYS;

 

集群数据库的需要

 

在升级数据库前需要先升级 GI 软件。如果是 RAC,那么需要把参数文件中的 CLUSTER_DATABASE 参数设置为 false。

注意!在升级完毕后需要把CLUSTER_DATABASE再设置回来

 

其它检查

 

1. 确保 ARCHIVE_LOG 以及 FLASHBACK 目录有足够的磁盘空间。

2. 执行下面的查询来检查是否有和SDO_GEOMETRY关联的表

 

col owner format a15
col table_name format a30
col column_name format a30
SELECT owner,table_name,column_name FROM dba_tab_columns WHERE data_type = ‘SDO_GEOMETRY’ AND owner != ‘MDSYS’ ORDER BY 1,2,3;

如果有返回行数,那么在升级前需要往12.2的ORACLE HOME上打补丁 patch 25293022

 

步骤6:Preupgrade 步骤

 

在源库执行 Preupgrade 脚本

 

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

 

FILE – 使用这个参数把输出写入输出文件
TEXT – 使用这个参数指定日志格式为 TEXT 模式(如果不指定的话则为 XML 格式)
DIR – 日志会创建在<output_dir>指定的这个目录中

 

建议执行 pre-upgrade 的 fixup 脚本,如果发现的问题是可以使用这个脚本修复的话。

 

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

 

在升级测试中,确保使用新的访问控制。在升级后确保这些包是可用的,在升级后,根据源库的使用情况赋予正确的权限。

 

检查 Time zone 文件版本

 

检查目标数据库的 time zone 文件版本是否低于源库的 time zone 文件版本,如果是的话,需要升级目标数据库的 time zone 文件版本。数据库 DST 补丁可以从 Note 412160.1 下载。

 

步骤7:升级数据库到 12.2

 

设置环境变量指向目标 ORACLE_HOME

 

export ORACLE_HOME=<Oracle 12.2的目录>
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_BASE=<安装时指定的Oracle_Base目录>

 

使用目标 ORACLE_HOME(设置 ORACLE_HOME 为目标 ORACLE_HOME)启动数据库到 upgrade 模式

 

CONNECT / AS SYSDBA
SQL> startup upgrade;
SQL> exit

在 Linux/Unix 上

cd $ORACLE_HOME/bin
./dbupgrade 

在 Windows 上

cd %ORACLE_HOME%\bin
dbupgrade

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

 

$ sqlplus “/as sysdba”
SQL> STARTUP
SQL> @utlu122s.sql

 

检查升级日志看是否脚本 catuppst.sql 已被执行。如果尚未执行,那么在新的 ORACLE_HOME 里手工执行。这个脚本被放置在 $ORACLE_HOME/rdbms/admin 目录。

SQL> @catuppst.sql

在另一个 session 里执行 utlrp.sql 来编译 stored PL/SQL 和 Java 代码。

SQL> @utlrp.sql

检查诊断升级/迁移相关的状态的 Oracle 数据字典。dbupgdiag.sql 脚本可以收集和升级迁移诊断信息有关的数据字典的信息,可以在升级的数据库上以 SYS 用户来执行它,关于更多信息,请参考文档 Note 556610.1 Script to Collect DB Upgrade/Migrate Diagnostic Information (dbupgdiag.sql)

如果脚本 dbupgdiag.sql 发现了失效对象,执行 $ORACLE_HOME/rdbms/admin/utlrp.sql (多次) 来使它们生效,直到失效对象的个数不再改变。之后重新执行 dbupgdiag.sql 并确保没有任何问题。

如果使用了集群,那么必须升级这个数据库的 Oracle Clusterware keys,运行 srvctl 来完成,比如:

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

 

步骤8:升级后步骤

 

在 Linux 和 Unix 上设置环境变量

 

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

ORACLE_HOME
PATH

 

更新 oratab 文件

 

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

 

Post-upgrade fixup 脚本

 

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

 

升级依赖 Oracle-Maintained 类型的表

 

从 Oracle 12.2 开始,必须手工升级依赖 Oracle-Maintained 类型的用户表。

在数据库升级后确认需要升级的用户表,使用 SYSDBA 连接到数据库并执行下面的语句来列出这些表:

 

COLUMN owner FORMAT A30
COLUMN table_name FORMAT A30
SELECT DISTINCT owner, table_name
FROM dba_tab_cols
WHERE data_upgraded = ‘NO’
ORDER BY 1,2;

使用 sysdba 权限的用户,或者有权限 alter 所有这些表的用户执行脚本 utluptabdata.sql:

 

SET SERVEROUTPUT ON
@utluptabdata.sql

 

启用新的 Extended Data Type 功能(并不是必须的)

 

启用 extended data types 需要一些特定的操作。

Oracle 数据库 12c 引入了扩展 VARCHAR2,NVARCHAR2,以及 RAW 数据类型的大小的功能。设置 MAX_STRING_SIZE = EXTENDED 可以扩展这些数据类型最大限制到32767字节。

要实现这个功能,初始化参数 COMPATIBLE 要设置为 12.0.0.0 或者更高。 关于更多信息,请参考Note 1570297.1

 

升级 Recovery Catalog

 

如果 recovery catalog schema 比要备份的数据库版本低,那么必须升级它。可以使用 UPGRADE CATALOG 命令来升级。

请参 照Oracle 文档的”Upgrading the Recovery Catalog” 部分来得到更多信息。

 

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

 

如果 Pre-Upgrade Information 工具要求在升级数据库后升级 time zone 文件版本,那么需要使用 DBMS_DST PL/SQL 包来更新 RDBMS DST (timezone) 版本。

参照 Oracle 文档的”Steps to Upgrade Time Zone File and Timestamp with Time Zone Data” 部分以及 Note 1509653.1 “Updating the RDBMS DST version in 12c Release 1 (12.1.0.1 and up) using DBMS_DST”

 

升级统计信息表

 

如果之前使用 DBMS_STATS.CREATE_STAT_TABLE 创建了一些统计信息表,那么使用 DBMS_STATS.UPGRADE_STAT_TABLE 来升级这些表。在下面的例子里,统计信息表的名字是’dictstattab’,而 SYS 是这个表的 owner。

EXECUTE DBMS_STATS.UPGRADE_STAT_TABLE(‘SYS’, ‘dictstattab’);

对所有的统计信息表都执行类似上面的语句。

 

升级外部验证的 SSL 用户

 

如果是从 9.2 或者 10.1 的数据库升级上来的,并且使用了外部验证的 SSL 用户,那么需要执行 SSL external users conversion (extusrupgrade) 脚本来升级这些用户。

ORACLE_HOME/rdbms/bin/extusrupgrade –dbconnectstring hostname:port_no:sid –dbuser db_admin –dbuserpassword password -a

 

在升级数据库后安装 Oracle Text Supplied Knowledge Bases

 

Oracle Text-supplied knowledge bases 是数据库 12c 的扩展产品的一部分,并不会在升级后立刻可用。所有依赖这个产品的 Oracle Text 功能在升级后都会不可用。如需重新启用这些功能,需要从安装介质安装 Oracle Text supplied knowledge bases。

 

升级数据库后更新 Oracle Application Express Configuration

 

如果要升级的数据库包含了 Oracle Application Express release 3.2 或更高版本,那么不需要做任何额外的操作。但是如果 Oracle Application Express 存在 registry里,那么 Oracle Application Express 是从低版本升级而来,那么需要设置open_cursors 参数最小为200。

 

对额外的 Network Services 配置访问控制列表(ACLs)

 

如果应用程序使用了 UTL_TCP, UTL_SMTP, UTL_MAIL, UTL_HTTP, 或者 UTL_INADDR 包,那么升级后需要配置这些包的网络访问控制列表 (ACLs)来让它们像之前版本一样正常工作。如果没有正确配置访问控制列表 (ACLs),应用程序会碰到错误”ORA-24247: network access denied by access control list (ACL).”

 

检查参数 SQLNET.ALLOWED_LOGON_VERSION

 

10g 之前的客户端连接到 12c 数据库会碰到 ORA-28040: No matching authentication protocol 错误,请参考 Oracle 文档来解决 ORA-28040: No matching authentication protocol 问题。

Oracle 12c 升级失败的降级步骤

Oracle 12c 升级失败的降级步骤

 

降级前步骤
– XML DB 组件在 12c 中是必需的。
在升级到 12c 期间,将安装 XML DB 组件(如果未安装)。
从 12c 降级将删除安装的 XDB 组件

- Enterprise Manager 不支持降级。在降级之前,请重新配置 Oracle EM 控件。请参阅
Oracle Database Upgrade Guide 12c Release 1 (12.1) E17642-10
6 Downgrading Oracle Database to an Earlier Release
6.6.5 Restoring Oracle Enterprise Manager after Downgrading Oracle Database

- 升级到 12c 期间,将删除 Database Control 资料档案库。降级之后,需重新配置 DB Control。

Note 870877.1 How To Save Oracle Enterprise Manager Database Control Data Before Upgrading The Single Instance Database To Other Release ?
Note 876353.1 How To Restore The Oracle Enterprise Manager Data To Downgrade The Single Instance Database To Previous/Source Release ?
- compatible 参数不能已经更改到 12.1.0。
- 禁用 Data Vault(如果已启用)。
Note 803948.1  How To Uninstall Or Reinstall Database Vault in 11g (UNIX)
Note 453902.1 Enabling and Disabling Oracle Database Vault in WINDOWS
- 如果数据库使用 Oracle Label Security,则在新 Oracle Database 12c Oracle 主目录中运行 Oracle Label Security (OLS) 预处理降级 olspredowngrade.sql 脚本(在 $ORACLE_HOME/rdbms/admin 上提供)。注意!此步骤仅在需要降级到12c之前的版本时才需要
- 时区版本应相同。假设升级数据库的过程中时区版本也被升级了,那么要在升级前在源库打patch。例如11.2.0.4已经升级到12.1.0.2.0,时区作为升级的一部分也升级到了18,那么在降级到11.2.0.4.0之前,在11.2.0.4.0的home上打时区patch 18。
- 取消设置并指向 12c 主目录的 ORA_TZFILE(如果已设置)。
- 如果数据库上有 Oracle Application Express,则必须将 apxrelod.sql 文件从 Oracle Database 12c $ORACLE_HOME/apex/ 目录复制到 Oracle 主目录之外的目录,例如系统上的临时目录以稍后执行。
- 如果基于固定对象创建了对象,则删除这些对象以避免可能的 ORA-00600 错误。您可以在降级之后重新创建这些对象。
- 如果降级集群数据库,则彻底关闭实例并将 CLUSTER_DATABASE 初始化参数更改为 FALSE。降级之后,必须将此参数设置回 TRUE。
- 假设在升级之后你已经在升级的数据库打了patch,那么在降级之前,在数据库级别使用datapatch回滚这些patch。

满足以上先决条件之后,可以继续进行降级。

数据库的降级步骤

1) 确保所有数据库组件有效。只能从成功升级的数据库执行降级。要验证数据库组件状态,请执行以下查询

以 SYS 用户身份连接到数据库

col comp_id format a10
col comp_name format a30
col version format a10
col status format a8

select substr(comp_id,1,15) comp_id,substr(comp_name,1,30) comp_name,substr(version,1,10) version,status from dba_registry

2) 验证没有属于 sys/system 的无效对象

select owner, count(object_name) "Invalid object count" from dba_objects where status!='VALID' and owner in ('SYS','SYSTEM') group by owner;

如果计数为零,则可以继续降级。

如果有无效对象,则执行 utlrp.sql 多次,如果对象无法解析为有效状态,则不能继续降级。建立 SR 或在 DBA 社区上发帖以寻求帮助。

或者,对于 1 和 2,运行以下脚本:

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

3) 关闭数据库

Shutdown immediate

4)  对 12c 数据库做备份

5)  以降级模式启动数据库

Startup downgrade;

6)  执行降级脚本

Sql> Spool downgrade.log

Sql> @$ORACLE_HOME/rdbms/admin/catdwgrd.sql

注:
$ORACLE_HOME 应指向 12c 主目录

catdwgrd.sql 脚本将数据库中的所有组件降级到支持的主版本或补丁集版本(您最初升级时的版本)

Sql> spool off

Sql> shutdown immediate

Exit SQL Plus

Sql> exit;

7) 如果操作系统为 LINUX/UNIX:

将以下环境变量更改为要降级到的源数据库:

ORACLE_HOME

PATH

编辑 /etc/oratab or /var/opt/oracle/oratab 以更改

将数据库映射到源数据库 Oracle 主目录

如果操作系统是 Windows,则完成以下步骤:


a. 停止所有 Oracle 服务,包括 Oracle Database 12c 数据库的 OracleServiceSID Oracle 服务,其中 SID 是实例名称。

例如,如果 SID 为 ORCL,则在命令行提示符中输入以下内容:

C:\> NET STOP OracleServiceORCL
b. 在命令提示符下,通过运行 ORADIM 命令删除 Oracle 服务。如果出现提示,则输入此 Windows 系统上活动标准用户帐户的口令。

例如,如果 SID 为 ORCL,则输入以下命令:

C:\> ORADIM -DELETE -SID ORCL
c. 在命令提示符下,使用 ORADIM 命令创建要降级的数据库的 Oracle 服务。

C:\> ORADIM -NEW -SID SID -INTPWD PASSWORD -MAXUSERS USERS

-STARTMODE AUTO -PFILE ORACLE_HOME\DATABASE\INITSID.ORA

8) 还原配置文件

将配置文件(口令文件、参数文件等)还原到降级版本的 ORACLE_HOME。

9) 如果这是 Oracle RAC 数据库,则执行以下命令以将数据库修改为单实例模式:

SET CLUSTER_DATABASE=FALSE

10) 从降级版本 $ORACLE_HOME/rdbms/admin 目录执行 catrelod 脚本。

启动 sqlplus,以具有 sysdba 权限的用户 SYS 身份连接到数据库实例,然后以升级模式启动数据库:

: cd $ORACLE_HOME/rdbms/admin

: sqlplus

sql> connect sys as sysdba

sql> startup upgrade

sql> spool catrelod.log

sql> @?/rdbms/admin/catrelod.sql

sql> spool off

catrelod.sql 脚本在降级的数据库中重新加载各个数据库组件的合适版本。

11) 运行 utlrp.sql 脚本:

SQL> @utlrp.sql

Sql> exit;

utlrp.sql 脚本重新编译先前处于 INVALID 状态的所有现有 PL/SQL 模块,例如 package、procedure、type 等。

12) 检查已降级数据库的状态:

Note 556610.1  Script to Collect DB Upgrade/Migrate Diagnostic Information (dbupgdiag.sql)
此 sql 脚本是一组查询语句,用在升级前后诊断数据库的状态。脚本将创建名为 db_upg_diag__<时间戳>.log 的文件。

13) 降级之后,可能在 sys 用户下发现无效的 QT 视图。这是因为视图已从基表中选择了错误的列。需要重新创建这些视图。

请参阅说明:

Note 1520209.1 QT_*BUFER Views Invalid after downgrade from 12C

降级后步骤:
1)如果是降级到 Oracle Database 11g 版本 1 (11.1.0.7) 并且数据库中有 Oracle Application Express,则将 apxrelod.sql 脚本复制到的目录(在降级前步骤中)。
运行 apxrelod.sql 脚本以手动重新加载 Oracle Application Express:

SQL> @apxrelod.sql

运行 apxrelod.sql 脚本以避免程序包 APEX_030200.WWV_FLOW_HELP 由于以下错误而成为 INVALID 状态:

PLS-00201: identifier ‘CTX_DDL’ must be declared
2) 如果数据库中启用了 Oracle Label Security,则执行以下脚本

a. 从 Oracle Database 12c 的 Oracle 主目录下将 olstrig.sql 脚本复制到要将数据库降级到的版本的 Oracle 主目录。

b. 从降级到的版本的 Oracle 主目录,运行 olstrig.sql 以在表上使用 Oracle Label Security 策略重新创建 DML 触发器:

SQL> @olstrig.sql

3) 如果降级集群数据库,则必须运行以下命令以降级 Oracle Clusterware database 配置:

$ srvctl downgrade database -d db-unique-name -o oraclehome -t to_version
其中 db-unique-name 是数据库名称(而非实例名称),oraclehome 是已降级数据库的旧 Oracle 主目录的位置,to_version 是数据库所降级到的数据库版本

因为代码的改变,现在-to_version对应的值如下:

RDBMS Version -to_version Value
9.2.0.*              9.2.0.0.0
10.1.0.*            10.0.0.0.0
10.2.0.*            10.2.0.0.0
11.1.0.*            11.0.0.0.0
11.2.0.1            11.2.0.1.0
11.2.0.2            11.2.0.2.0
11.2.0.3            11.2.0.3.0
11.2.0.4            11.2.0.4.0

4) 如果发现失效的SYS/SYETEM的对象,那么可以使用下面的方法来编译这些失效对象

$ sqlplus "/ as sysdba"
SQL> startup upgrade
SQL> spool catout.log
SQL> @?/rdbms/admin/catproc.sql
SQL> @?/rdbms/admin/utlrp.sql
SQL> spool off
SQL> shutdown immediate

5) 如果数据库从11.2.0.4升级到12.1.0.2之前没有安装XDB,那么在降级回11.2.0.4的时候,XDB的对象需要被移除。然而,我们还是可以发现无效的XDB对象残留在数据库中。这已经被记录为一个bug 22854967,patch已经可以下载了。

Invalid XDB-related Objects After Downgrading To 11.2.0.4 (Doc ID 2163596.1)