获取latch信息

DEF _lhp_what=”&1″
DEF _lhp_sid=”&2″
DEF _lhp_name=”&3″
DEF _lhp_samples=”&4″

COL name FOR A35 TRUNCATE
COL latchprof_total_ms HEAD “Held ms” FOR 999999.999
COL latchprof_pct_total_samples head “Held %” format 999.99
COL latchprof_avg_ms HEAD “Avg hold ms” FOR 999.999
COL dist_samples HEAD Gets
COL total_samples HEAD Held

BREAK ON lhp_name SKIP 1

DEF _IF_ORA_10_OR_HIGHER=”–”

PROMPT
PROMPT — LatchProf 2.00 by Tanel Poder ( http://www.tanelpoder.com )

COL latchprof_oraversion NOPRINT NEW_VALUE _IF_ORA_10_OR_HIGHER

SET TERMOUT OFF
SELECT DECODE(SUBSTR(BANNER, INSTR(BANNER, ‘Release ‘)+8,1), 1, ”, ‘–‘) latchprof_oraversion
FROM v$version WHERE ROWNUM=1;
SET TERMOUT ON

WITH
t1 AS (SELECT hsecs FROM v$timer),
samples AS (
SELECT /*+ ORDERED USE_NL(l) USE_NL(s) USE_NL(l.gv$latchholder.x$ksuprlat) NO_TRANSFORM_DISTINCT_AGG */
&_lhp_what
&_IF_ORA_10_OR_HIGHER , COUNT(DISTINCT gets) dist_samples
, COUNT(*) total_samples
, COUNT(*) / &_lhp_samples total_samples_pct
FROM
(SELECT /*+ NO_MERGE */ 1 FROM DUAL CONNECT BY LEVEL <= &_lhp_samples) s,
v$latchholder l,
(SELECT
sid indx
, sql_hash_value sqlhash
, sql_address sqladdr
&_IF_ORA_10_OR_HIGHER , sql_child_number sqlchild
&_IF_ORA_10_OR_HIGHER , sql_id sqlid
FROM v$session) s
WHERE
l.sid LIKE ‘&_lhp_sid’
AND (LOWER(l.name) LIKE LOWER(‘%&_lhp_name%’) OR LOWER(RAWTOHEX(l.laddr)) LIKE LOWER(‘%&_lhp_name%’))
AND l.sid = s.indx
GROUP BY
&_lhp_what
ORDER BY
total_samples DESC
),
t2 AS (SELECT hsecs FROM v$timer)
SELECT /*+ ORDERED */
&_lhp_what
, s.total_samples
&_IF_ORA_10_OR_HIGHER , s.dist_samples
— , s.total_samples_pct
, s.total_samples / &_lhp_samples * 100 latchprof_pct_total_samples
, (t2.hsecs – t1.hsecs) * 10 * s.total_samples / &_lhp_samples latchprof_total_ms
— s.dist_events,
&_IF_ORA_10_OR_HIGHER , (t2.hsecs – t1.hsecs) * 10 * s.total_samples / dist_samples / &_lhp_samples latchprof_avg_ms
FROM
t1,
samples s,
t2
WHERE ROWNUM <= 30
/

oracle 11g health monitor健康监控

health monitor健康监控
从oracle 11g开始,oracle数据库包含对数据库运行诊断检查的健康监控框架

health check健康检查是对数据库的各层和组件乾地检查.健康检查会检测文件错误,物理和逻辑块错误,undo和redo错误,数据字典错误等等.健康检查会生成一个检查报告在许多情况下包含了问题解决的建议.健康检查有两种运行方式:
.reactive—故障诊断架构为了响应一个严重错误会自动运行健康检查.

.manual—–作为一个dba,可以使用dbms_hm包或企业管理器接口来手工运行健康检查.

健康检查会存储调查结果,建议并在ADR中存储其它的信息

健康检查能以以下两种方式来运行:
DB-online模式意味着当数据库处于打开状态(open或mount)时可以运行健康检查

DB-offline模式意味着当实例不可用且数据库处于关闭状态(nomount)时也能运行健康检查

所有的健康检查都能在DB-online模式下运行.只有重做日志完整性检查和数据库结构完整检查可以在DB-offline模式下运行.

健康检查的类型
健康监控运行以下检查:
DB Structure Integrity Check(数据库结构完整性检查)–这种检查验证数据文件的完整性,如果这些文件不能访问,文件错误
或者不一致时会报告这些错误信息.如果数据库在mount或者open状态,这种检查会检查控制文件中所列出的重做日志文件和数据文件.如果数据库在nomount状态,只会检查控制文件.

Data Block Integrity Check(数据块完整性检查)–这种检查会检查磁盘镜像块错误比如checksum故障,head/tail mismatch和数据块的逻辑不一致性.大多数的错误可以通过使用block media recovery来进行修复.错误块信息也会被v$database_block_corruption视图所捕获.这种检查不会检测inter-block或inter-segment错误.

Redo Integrity Check(重做完整性检查)–这种检查将会扫描重做日志内容的可访问性和错误信息,也能对归档日志文件进行检查.
这种检查会报告归档日志或重做日志的错误信息.

Undo Segment Integrity Check(回滚段完整性检查)–这种检查会发现逻辑undo错误.在定位一个undo错误之后,这种检查将使用PMON和SMON来尝试恢复这个错误事务.如果恢复失败,health monitor将会存储关于这个错误的信息到v$corrupt_xid_list中.大多数undo错误都可以通过强制提交来解决.

Transaction Interity Check–这种检查与undo segment integrity check是相同的只是它只检查一特定的事务.

Dictionary Integrity Check–这种检查会检查核心字典对象比如tab$或col$的完整性.它将执行以下操作:
.验证每一个字典对象的字典条目内容

.执行cross-row级别的检查.它将对字典中的行强制执行逻辑约束验证

.执行对象的关系检查,它将在字典对象之间强制执行父子关系验证

Dictionary Integrity Check操作会检查以下字典对象:
tab$, clu$, fet$, uet$, seg$, undo$, ts$, file$, obj$, ind$, icol$, col$, user$,
con$, cdef$, ccol$, bootstrap$, objauth$, ugroup$, tsq$, syn$, view$, typed_
view$, superobj$, seq$, lob$, coltype$, subcoltype$, ntab$, refcon$, opqtype$,
dependency$, access$, viewcon$, icoldep$, dual$, sysauth$, objpriv$, defrole$,ecol$.

手工运行health check
健康监控提供了两种方式来手工运行健康检查:
.使用dbms_hm包

.使用企业管理器接口

使用dbms_hm来运行健康检查
dbms_hm包中有一个run_check过程用来运行健康检查.为了调用run_check需要提供检查的名称和运行的名字比如:

SQL> exec dbms_hm.run_check('Dictionary Integrity Check','jy_dict_run');

PL/SQL procedure successfully completed.

为了获得一个健康检查名称列表执行以下查询:

SQL> select name from v$hm_check where internal_check='N';
NAME
----------------------------------------------------------------
DB Structure Integrity Check

CF Block Integrity Check

Data Block Integrity Check

Redo Integrity Check

Transaction Integrity Check

Undo Segment Integrity Check

Dictionary Integrity Check

ASM Allocation Check

大多数的健康检查接受输入参数.可以通过查询v$hm_check_param来查看参数名和描述.一些参数是强制性的其它的是可选的.
如果一个可选参数被忽略将会使用缺省值.下面的查询将会显示所有健康检查的参数信息:

SQL> SELECT c.name check_name, p.name parameter_name, p.type,
  2  p.default_value, p.description
  3  FROM v$hm_check_param p, v$hm_check c
  4  WHERE p.check_id = c.id and c.internal_check = 'N'
  5  ORDER BY c.name;

CHECK_NAME                       PARAMETER_NAME       TYPE                 DEFAULT_VALUE    DESCRIPTION
-------------------------------- -------------------- -------------------- ---------------- ------------------------------
ASM Allocation Check             ASM_DISK_GRP_NAME    DBKH_PARAM_TEXT                       ASM 组名
CF Block Integrity Check         CF_BL_NUM            DBKH_PARAM_UB4                        控制文件块号
Data Block Integrity Check       BLC_DF_NUM           DBKH_PARAM_UB4                        文件号
Data Block Integrity Check       BLC_BL_NUM           DBKH_PARAM_UB4                        块号
Dictionary Integrity Check       CHECK_MASK           DBKH_PARAM_TEXT      ALL              检查掩码
Dictionary Integrity Check       TABLE_NAME           DBKH_PARAM_TEXT      ALL_CORE_TABLES  表名
Redo Integrity Check             SCN_TEXT             DBKH_PARAM_TEXT      0                最新良好重做的 SCN (如果已知)
Transaction Integrity Check      TXN_ID               DBKH_PARAM_TEXT                       事务处理 ID
Undo Segment Integrity Check     USN_NUMBER           DBKH_PARAM_TEXT                       还原段号

输入参数通过input_params参数以name/value对用分号来分隔进行传递.下面的例子用事务ID作为参数进行事务完整性检查:

SQL>BEGIN
DBMS_HM.RUN_CHECK (
check_name => 'Transaction Integrity Check',
run_name => 'my_trans_run',
input_params => 'TXN_ID=8.31.4');
END;
/

PL/SQL procedure successfully completed.

查看检查报告
在一个检查运行完后可以查看它的执行报告.这个可报告包括了调查结果,建议和其它的信息.也可以使用企业管理器,ADRCI工具,或者
dbms_hm包.其中企业管理器查看的报告格式为html,dbms_hm包查看的报告格式为html,xml和text,检查DRCL工个查看报告的格式为XML

检查运行的结果被存储在ADR,但报告不会立即生成.当你请求查看报告时可以使用dbms_hm或企业管理器来生成.如果报告不存在,首先
得用ADR中的检查结果数据来生成并以xml或html格式来存储.如果使用ADRCI工具如果报告文件不存必须首先运行命令来生成报告文件然后运行其它的命令来显示它的内容.

使用dbms_hm来查看检查报告
使用dbms_hm.get_run_report函数可以查看健康检查报告.这个函数可以以html,xml或text格式来显示.缺省格式为text:

SQL> SET LONG 100000
SQL> SET LONGCHUNKSIZE 1000
SQL> SET PAGESIZE 1000
SQL> SET LINESIZE 512
SQL> select dbms_hm.get_run_report('jy_dict_run') from dual;

DBMS_HM.GET_RUN_REPORT('JY_DICT_RUN')
--------------------------------------------------------------------------------
Run Name : JY_DICT_RUN
Run Id : 1061
Check Name : Data Block Integrity Check
Mode : REACTIVE
Status : COMPLETED
Start Time : 2007-05-12 22:11:02.032292 -07:00
End Time : 2007-05-12 22:11:20.835135 -07:00
Error Encountered : 0
Source Incident Id : 7418
Number of Incidents Created : 0
Input Paramters for the Run
BLC_DF_NUM=1
BLC_BL_NUM=64349
Run Findings And Recommendations
Finding
Finding Name : Media Block Corruption
Finding ID : 1065
Type : FAILURE
Status : OPEN
Priority : HIGH
Message : Block 64349 in datafile 1:
'/u01/app/oracle/dbs/t_db1.f' is media corrupt
Message : Object BMRTEST1 owned by SYS might be unavailable
Finding
Finding Name : Media Block Corruption
Finding ID : 1071
Type : FAILURE
Status : OPEN
Priority : HIGH
Message : Block 64351 in datafile 1:
'/u01/app/oracle/dbs/t_db1.f' is media corrupt
Message : Object BMRTEST2 owned by SYS might be unavailable

使用ADRCI工具来查看检查报告
1.确保操作系统环境变量(比如 ORACLE_HOME)已经被设置.并输入以下命令:

[oracle@jyrac1 ~]$ adrci

ADRCI: Release 11.2.0.1.0 - Production on Wed Jun 11 17:18:53 2014

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

ADR base = "/u01/app/oracle"

工具启动后会显示以下提示符
adrci>

可以改变当前的ADR home目录.使用show homes命令可以列出所有的ADR home目录,set homepath命令用来改变当前ADR home目录.

adrci> show homes
ADR Homes:
diag/tnslsnr/jyrac1/listener
diag/rdbms/cs/cs
diag/rdbms/jytest/jytest
diag/rdbms/jy/jy
diag/rdbms/jycs/jycs
adrci> set homepath diag/rdbms/jycs/jycs

2.输入以下命令:
show hm_run
这个命令会列出所有运行过并(存储在v$hm_run)注册到ADR档案库中的检查

adrci> show hm_run

ADR Home = /u01/app/oracle/diag/tnslsnr/jyrac1/listener:
*************************************************************************
0 rows fetched
<adr_relation name="">
<adr_home name="/u01/app/oracle/diag/tnslsnr/jyrac1/listener">

ADR Home = /u01/app/oracle/diag/rdbms/cs/cs:
*************************************************************************
0 rows fetched

<adr_home name="/u01/app/oracle/diag/rdbms/cs/cs">

ADR Home = /u01/app/oracle/diag/rdbms/jytest/jytest:
*************************************************************************
0 rows fetched

<adr_home name="/u01/app/oracle/diag/rdbms/jytest/jytest">

ADR Home = /u01/app/oracle/diag/rdbms/jy/jy:
*************************************************************************
0 rows fetched

<adr_home name="/u01/app/oracle/diag/rdbms/jy/jy">

ADR Home = /u01/app/oracle/diag/rdbms/jycs/jycs:
*************************************************************************

**********************************************************
HM RUN RECORD 1
**********************************************************
   RUN_ID                        1
   RUN_NAME                      HM_RUN_1
   CHECK_NAME                    DB Structure Integrity Check
   NAME_ID                       2
   MODE                          2
   START_TIME                    2014-03-24 13:32:58.872509 +08:00
   RESUME_TIME                   
   END_TIME                      2014-03-24 13:33:01.710518 +08:00
   MODIFIED_TIME                 2014-03-24 13:33:01.710518 +08:00
   TIMEOUT                       0
   FLAGS                         0
   STATUS                        5
   SRC_INCIDENT_ID               0
   NUM_INCIDENTS                 0
   ERR_NUMBER                    0
   REPORT_FILE                   

**********************************************************
HM RUN RECORD 2
**********************************************************
   RUN_ID                        61
   RUN_NAME                      HM_RUN_61
   CHECK_NAME                    DB Structure Integrity Check
   NAME_ID                       2
   MODE                          2
   START_TIME                    2014-04-08 10:22:43.295203 +08:00
   RESUME_TIME                   
   END_TIME                      2014-04-08 10:22:43.723241 +08:00
   MODIFIED_TIME                 2014-04-08 10:22:43.723241 +08:00
   TIMEOUT                       0
   FLAGS                         0
   STATUS                        5
   SRC_INCIDENT_ID               0
   NUM_INCIDENTS                 0
   ERR_NUMBER                    0
   REPORT_FILE                   

**********************************************************
HM RUN RECORD 3
**********************************************************
   RUN_ID                        81
   RUN_NAME                      jy_dict_run
   CHECK_NAME                    Dictionary Integrity Check
   NAME_ID                       24
   MODE                          0
   START_TIME                    2014-06-11 16:42:00.675293 +08:00
   RESUME_TIME                   
   END_TIME                      2014-06-11 16:42:02.950141 +08:00
   MODIFIED_TIME                 2014-06-11 17:14:33.658642 +08:00
   TIMEOUT                       0
   FLAGS                         0
   STATUS                        5
   SRC_INCIDENT_ID               0
   NUM_INCIDENTS                 0
   ERR_NUMBER                    0
   REPORT_FILE                   /u01/app/oracle/diag/rdbms/jycs/jycs/hm/HMREPORT_jy_dict_run.hm

3.定位你要创建报告的检查并注意检查运行的名称.如果检查报告已经存在那么report_file字段就会包含一个文件名比如上面的
/u01/app/oracle/diag/rdbms/jycs/jycs/hm/HMREPORT_jy_dict_run.hm.否则使用下面的命令来生成一个报告.

adrci> create report hm_run jy_dict_run_1
DIA-48448: This command does not support multiple ADR homes

这是因为当前存在多个ADR home目录

adrci> show homes
ADR Homes:
diag/tnslsnr/jyrac1/listener
diag/rdbms/cs/cs
diag/rdbms/jytest/jytest
diag/rdbms/jy/jy
diag/rdbms/jycs/jycs
adrci> set homepath diag/rdbms/jycs/jycs
adrci> create report hm_run jy_dict_run_1

4.执行以下命令来查看报告:

adrci> show report hm_run jy_dict_run_1
< ?xml version="1.0" encoding="US-ASCII"?>HM Report: jy_dict_run_1
    <run_info>
        <check_name>Dictionary Integrity Check
        <run_id>101
        <run_name>jy_dict_run_1
        <run_mode>MANUAL
        <run_status>COMPLETED
        <run_error_num>0
        <source_incident_id>0
        <num_incidents_created>0
        <run_start_time>2014-06-11 17:27:13.477462 +08:00
        <run_end_time>2014-06-11 17:27:14.734166 +08:00
    
    <run_parameters>
        <run_parameter>TABLE_NAME=ALL_CORE_TABLES
        <run_parameter>CHECK_MASK=ALL
    
    

health monitor视图
可以用视图来代替检查报告来查看特定检查的结果.可用的视图有v$hm_run,v$hm_finding,v$hm_recommendation
下面查询v$hm_run来判断运行检查的确良历史信息:

SQL> SELECT run_id, name, check_name, run_mode, src_incident FROM v$hm_run;

    RUN_ID NAME                             CHECK_NAME                       RUN_MODE SRC_INCIDENT
---------- -------------------------------- -------------------------------- -------- ------------
        61 HM_RUN_61                        DB Structure Integrity Check     REACTIVE            0
        81 jy_dict_run                      Dictionary Integrity Check       MANUAL              0
       101 jy_dict_run_1                    Dictionary Integrity Check       MANUAL              0
         1 HM_RUN_1                         DB Structure Integrity Check     REACTIVE            0

下面查询v$hm_finding来获得RUN_ID 61的详细信息:

SELECT type, description FROM v$hm_finding WHERE run_id = 61;
TYPE          DESCRIPTION
------------- -----------------------------------------------------------------------------
FAILURE      Block 64349 in datafile 1: '/u01/app/oracle/dbs/t_db1.f' is media corrupt
FAILURE      Block 64351 in datafile 1: '/u01/app/oracle/dbs/t_db1.f' is media corrupt

health check参数

Table 9–6 Parameters for Data Block Integrity Check
------------------------------------------------------------------------------------------------------------------
Parameter Name                Type                  Default Value           Description
------------------------------------------------------------------------------------------------------------------
BLC_DF_NUM                    Number                (none)                  Block datafile number
BLC_BL_NUM                    Number                (none)                  Data block number
------------------------------------------------------------------------------------------------------------------


Table 9–7 Parameters for Redo Integrity Check
------------------------------------------------------------------------------------------------------------------
Parameter Name                Type                   Default Value          Description
------------------------------------------------------------------------------------------------------------------
SCN_TEXT                      Text                   0                      SCN of the latest good redo (if known)
------------------------------------------------------------------------------------------------------------------


Table 9–8 Parameters for Undo Segment Integrity Check
------------------------------------------------------------------------------------------------------------------
Parameter Name                Type                   Default Value          Description
------------------------------------------------------------------------------------------------------------------
USN_NUMBER                    Text                   (none)                 Undo segment number
------------------------------------------------------------------------------------------------------------------


Table 9–9 Parameters for Transaction Integrity Check
------------------------------------------------------------------------------------------------------------------
Parameter Name                Type                   Default Value          Description
------------------------------------------------------------------------------------------------------------------              
TXN_ID                        Text                   (none)                 Transaction ID
------------------------------------------------------------------------------------------------------------------

Table 9–10 Parameters for Dictionary Integrity Check
------------------------------------------------------------------------------------------------------------------
Parameter Name                Type                   Default Value          Description
------------------------------------------------------------------------------------------------------------------
CHECK_MASK                    Text                   ALL                    Possible values are:
                                                                            COLUMN_CHECKS—Run column
                                                                            checks only. Verify column-level
                                                                            constraints in the core tables.

                                                                            ROW_CHECKS—Run row checks only.
                                                                            Verify row-level constraints in the
                                                                            core tables.

                                                                            REFERENTIAL_CHECKS—Run
                                                                            referential checks only. Verify
                                                                            referential constraints in the core
                                                                            tables.
                       
                                                                            ALL—Run all checks.

TABLE_NAME                    Text                   ALL_CORE_TABLES        Name of a single core table to check. If
                                                                            omitted, all core tables are checked.
------------------------------------------------------------------------------------------------------------------

oracle 11g中的 oracle restart特性

oracle restart性特
在oracle 11g r2 以前对于单实例一般都是写脚本为自动启动oracle,在oracle 11g r2中使用oracle restart功能来配置在硬件或软件出现故障或者数据库所在主机重启之后自动重新启动数据库,监听和其它oracle组件对于非集群环境,只需要安装OracleGrid Infrastructure,在安装的时候选择“仅安装网格基础结构软件”,然后运行如下脚本
来安装Oracle Restart:$GRID_HOME/crs/install/roothas.pl

[root@jyrac1 install]# ./roothas.pl
2014-05-28 12:11:54: Checking for super user privileges
2014-05-28 12:11:54: User has super user privileges
2014-05-28 12:11:54: Parsing the host name
Using configuration parameter file: ./crsconfig_params
Creating trace directory
LOCAL ADD MODE
Creating OCR keys for user 'grid', privgrp 'oinstall'..
Operation successful.
CRS-4664: Node jyrac1 successfully pinned.
Adding daemon to inittab
CRS-4123: Oracle High Availability Services has been started.
ohasd is starting

jyrac1     2014/05/28 12:12:47     /grid/11.2.0/grid/cdata/jyrac1/backup_20140528_121247.olr
Successfully configured Oracle Grid Infrastructure for a Standalone Server
[root@jyrac1 install]# srvctl
-bash: srvctl: command not found
[root@jyrac1 install]# su - grid
[grid@jyrac1 ~]$ srvctl
Usage: srvctl   []
    commands: enable|disable|start|stop|status|add|remove|modify|getenv|setenv|unsetenv|config
    objects: database|service|asm|diskgroup|listener|home|ons|eons
For detailed help on each command and object and its options use:
  srvctl  -h or
  srvctl   -h

oracel restart提高了数据库的可用性.当你安装oracle restart之后在硬件或软件出现故障或者数据库所在主机重启之后各种
oracle组件能够自动重启.
表: 通过oracle restart自动重启的oracle组件

------------------------------------------------------------------------------------------------------------
组件                           说明
------------------------------------------------------------------------------------------------------------
实例                           oracle restart能够用于单主机上的多个数据库实例

监听程序

数据库服务                     不包括默认创建的缺省服务因为它是由oracle数据库来管理的且不包括在数据库创建时
                               所创建的缺省服务

oracle asm实例

oracle asm磁盘组               重新启动磁盘组并加载磁盘组

oracle ONS通知服务             在单独的环境中,ONS在data guard安装中被用来在主库和备库之间通过
                               fast application notification(fan)来自动进行故障切换.ONS是一个服务用来发送
                               FAN事件被集成到客户端的故障转移功能中.

-------------------------------------------------------------------------------------------------------------

oracle restart会定期运行检查操作来监控这些组件的健康.如果对一个组件的检查操作失败,那么这个组件会被关闭然后再重新启动.

oracle restart只能用于独立的服务器环境(非集群).对于oracle rac来说是由oracle clusterware来提供自动重启组件的功能.

oracle restart是在oracle grid 架构目录之外的目录运行的它的安装目录是与oracle数据库的home目录分开的.

关于启动的依赖性
oracle restart能确保oracle组件根据组件之间的依赖性以合适的顺序被启动.例如,如果数据文件被存储在oracle asm磁盘组中,那么在启动数据库实例之前,oracle restart会确保oracle asm实例被启动且被要求的磁盘组会被加载.同样的如果一个组件必须被关闭,oracle restart会确保依赖组件首先会被关闭.

oracle restart也管理数据库实例和oracle监听之间的弱依赖:当一个数据库实例被启动时,oracle restart会试图启动监听.如果监听启动失败,数据库仍然处于启动状态.如果监听后启动失败,oracle restart不会关闭实例然后再重启实例.

并于使用oracle restart启动和停止组件
当有需要时oracle restart会自动重启各种oracle组件,当你手动关闭你的操作系统时oracle restart会以合理的顺序来停止oracle组件.可能有时候你想手动启动或者停止单个的oracle组件.oracle restart包括服务控制工具(srvctl)可以用它来手动启动和停止由oracle restart管理的组件.当使用oracle restart时,oracle强烈建议使用srvctl来手动启动和停止组件.

在你使用srvctl停止一个组件,如果出现故障oracle restart不会自动重启这个组件.如果你使用srvctl启动这个组件,那么这个组件对于自动重启又再次可以使用.

oracle工具象SQL*Plus,监听控制工具(LSNRCTL)和ASMCMD都被集成到oracle restart中.如果使用SQL*Plus关闭数据库,oracle restart不会把数据库看作是故障不会试图重新启动数据库.类似地如果你使用SQL*Plus或ASMCMD关闭oracle asm实例,oracle restart不会试图重启它.

使用srvctl启动一个组件和使用SQL*Plus(或者其它工具)启动有以下重要的不同:
.当你使用srvctl启动一个组件时,这个组件所依赖的任何组件都会首先以合理的顺序自动启动.

.当你使用SQL*Plus(或其它工具)启动一个组件该组件所依赖的其它组件是不会自动启动的,你必须确保它所依赖的组件已经被启动.

另外通过在指定的oracle home目录中oracle restart使用单个命令能够让你启动和停止所有的组件.这个oracle home目录可以是一个数据库home目录或者oracle grid infrastructure home目录.这个功能在打补丁时是非常有用的.

关于启动和停止oracle restart
crsctl工具用来启动和停止oracle restart.也可以使用crsctl工具来启用或禁用oracle高可用服务.oracle restart使用高可用服务来自动启动和停止由oracle restart管理的组件.例如,oracle高可用服务守护进程会自动启动数据库,监听和oracle asm实例.当oracle高可用服务被禁用时,当一个节点被重启时不会有通过oracle restart来管理的组件被自动启动.

通常来说在oracle安装时当要停止所有运行的oracle软件时可以使用crsctl工具.例如,录正在打补丁或者执行操作系统维护操作时可能需要停止oracle restart.当维护操作完成后可以使用crsctl工具启动oracle restart.

oracle restart配置
oracle restart维护了一个由它管理的所有oracle组件的一个组件列表和每一个组件的配置信息.所有这些配置信息是一个集合被称作oracle restart配置.当oracle restart启动一个组件时它将根据这个组件的配置信息来启动这个组件.例如,oracle restart配置包含数据库的一个本地服务器参数文件(spfile)和监听程序的监听端口.

如果你先安装oracle restart然后再使用DBCA创建数据库那么DBCA会自动将数据库添加到oracle restart配置中.当DBCA启动 数据库时,在数据库和其它组件之间要求的依赖关系(例如存储数据的磁盘组)会被创建,oracle restart将开始管理数据库.

可以使用srvctl命令来向oracle restart配置中手动增加或删除组件.例如,如果你在运行数据库的主机上安装了oracle restart 可以使用srvctl来向oracle restart配置增加一个数据库.当你手动向oracle restart配置中增加一个组件后可以使用srvctl 来启动它.oracle restart就会开始管理这个组件当有需要时重启这个组件.

注意:向oracle restart配置增加一个组件也可以称作使用oracle restart注册一个组件

其它的srvctl命令可以用来查看oracle restart管理组件的状态和配置信息,如临时禁用和重新启用组件管理等等.

当安装oracle restart后许多创建oracle组件的操作会自动将组件增加到oracle restart配置中.

表:创建操作和oracle restart配置

---------------------------------------------------------------------------------------------------------
创建操作                                                     创建组件并自动增加到oracle restart配置中?
---------------------------------------------------------------------------------------------------------
使用OUI或DBCA创建数据库                                          yes

使用create database语句创建数据库                                no

使用OUI,DBCA或ASMCA创建oracle asm实例                            yes

使用任何方法创建磁盘组                                           yes

使用netca添加一个监听                                            yes

使用srvctl创建一个数据库服务                                     yes

通过修改service_name初始化参数创建一个数据库服务                 no

使用dbms_service.create_service创建一个数据库服务                no

创建一个备份数据库                                               no
---------------------------------------------------------------------------------------------------------

下在的表格列出了一些delete/drop/remove操作是否会自动从oracle restart配置中删除组件
表: Delete/Drop/Remove Operations and the Oracle Restart Configuration

---------------------------------------------------------------------------------------------------------
操作                                                                自动从oracle restart配置中删除组件?
---------------------------------------------------------------------------------------------------------
使用DBCA删除一个数据库                                               yes

使用操作系统命令删除数据文件来删除数据库                             no

使用netca删除监听                                                    yes

使用任何方法来删除一个磁盘组                                         yes

使用srvctl删除数据库服务                                             yes

通过其它方法来删除数据库服务                                         no
---------------------------------------------------------------------------------------------------------

配置oracle restart
如果对单机环境通过安装oracle grid infrastructure安装了oracle restart然后再创建数据库,数据库会自动被增加到oracle restart配置中,然后在需要时自动重启.然而如果在创建数据库之后才安装oracle restart,那么就需要手动向oracle restart配置中增加数据库,监听,oracle asm管理实例,和其它要用的组件.

在配置oracle restart来管理数据库后能够做以下事情:
.向oracle restart配置中增加组件

.从oracle restart配置中删除组件

.临时暂停oracle restart对一个或多个组件管理

.对单个组件修改oracle restart的配置选项.

准备运行srvctl
要确保从正确的oracle home目录中运行srvctl,且使用正确的用户登录主机.表4-6列出了使用srvctl能配置的组件列表.对于每一个组件列出了运行srvctl所要求的oracle home目录.

表: 判断从哪个oracle home目录中运行srvctl

-------------------------------------------------------------------------------------------------------------
被配置的组件                                      运行srvctl的oracle home目录
-------------------------------------------------------------------------------------------------------------
database,database service                         database home
oracle asm instance,disk group,                   oracle grid infrastructure home
listener,ONS
-------------------------------------------------------------------------------------------------------------
假设监听不是从oracle grid infrastructure home目录中启动的.如果你对一个存在的数据库安装oracle restart,那么监听可能要从database home目录中启动,在这种情况下从database home目录中运行srvctl

为了运行srvctl
1.判断应该从哪个oracle home目录运行srvctl

2.如果打算运行srvctl命令来修改oracle restart配置(add,remove,enable,disable等等),那么可以按以下步骤来操作:
.在unix和linux中,使用安装你所判断运行srvctl命令的oracle home目录用户登录到数据库所在主机

.在windows上使用管理员登录系统
否则使用任何用户登录到系统

3.打开命令窗口输入要使用的srvctl命令.为了输入命令,要确保在path环境变理中设置了srvctl程序.否则要输入srvctl程序
的完全路径.


获取srvctl帮助
srvctl工具的联机帮助文档是可用的:
为了获取srvctl的帮助:
1.准备运行srvctl

2.输入以下命令:
srvctl

为了获取更详细的帮助输入以下命令:
srvctl -h

为了获取特定命令的帮助输入以下命令:
srvctl command -h

例如为了获取每一个组件类型的不同选项和add命令的帮助信息输入:
srvctl add -h

为了获取特定组件的组件类型的特定命令输入:
srvctl command object -h

为了获取关于增加一个数据库服务的帮助信息输入以下命令:
srvctl add service -h

向oracle restart配置中增加组件
在大多数情况下,在正在运行oracle restart的主机上创建一个oracle组件会自动向oracle restart配置中增加这个组件

下面是你要使用srvctl手动向oracle restart配置增加组件的情况:
.在创建数据库之后才安装oracle restart

.在相同主机上使用create database语句创建另外的数据库.

.使用dbms_service.create_service过程创建一个数据库服务

注意:向oracle restart配置中增加一个组件也叫作使用oracle restart注册一个组件

向oracle restart配置中增加组件后不会启动这个组件.必须使用srvctl start命令来启动它.

你也可以使用oracle企业管理数据库控制台来向oracle restart配置增加一个数据库或监听.

注意:当你手动向oracle restart配置增加一个数据库时,必须将oracle grid infrastructure software的所有者(用户)
加到数据库的osdba组中.这是因为grid infrastructure组件必须能够以sysdba角色连接到数据库启动和停止数据库.

例如,如果安装grid infrastructure软件的用户是grid,数据库的osdba组是dba,那么用户grid必须是dba组的一员.

使用srvctl增加组件
当使用srvctl向oracle restart配置中增加一个组件时,你能对这个组件指定配置选项.
1.准备运行srvctl的环境

2.输入下面的命令:
srvctl add object options
这里的object是一个组件.

增加一个数据库
这个例子使用db_unique_name=jycs来增加一个数据库组件.这个强制的-o选项用来指定oracle home目录的位置
oracle@jyrac1 ~]$ srvctl add database -d jycs -o /u01/app/oracle/11.2.0/db


增加一个数据库服务
对于db_unique_name=jycs的数据库创建一个新的数据库服务名jytest并将这个数据库服务增加到oracle restart配置中
[oracle@jyrac1 ~]$ srvctl add service -d jycs -s jytest

增加缺省的监听程序
向oracle restart配置中增加一个缺省的监听程序:(注意增加监听程序时要使用grid_home目录
那么在添加监听的时候应该指定GI_HOME,而非ORACLE_HOME)
[grid@jyrac1 ~]$ srvctl add listener -o /grid/11.2.0/grid/

现在来验证数据库会不会在主机重启时自动启动

[root@jyrac1 ~]# reboot
Broadcast message from root (pts/2) (Wed Jun  4 10:30:32 2014):

The system is going down for reboot NOW!

在主机重启之后通过下面的命令来检查发现数据库和监听程序也自动启动了
[root@jyrac1 ~]# ps -ef | grep pmon
oracle    3451     1  0 10:32 ?        00:00:00 ora_pmon_jycs
root      3563  3530  0 10:32 pts/1    00:00:00 grep pmon
[root@jyrac1 ~]# ps -ef | grep tns
grid      3438     1  0 10:32 ?        00:00:00 /grid/11.2.0/grid/bin/tnslsnr LISTENER -inherit
root      3565  3530  0 10:33 pts/1    00:00:00 grep tns

[grid@jyrac1 ~]$ crs_stat -t
Name           Type           Target    State     Host
------------------------------------------------------------
ora....ER.lsnr ora....er.type ONLINE    ONLINE    jyrac1
ora.cssd       ora.cssd.type  OFFLINE   OFFLINE
ora.diskmon    ora....on.type OFFLINE   OFFLINE
ora.jycs.db    ora....se.type ONLINE    ONLINE    jyrac1

从oracle restart配置中删除组件
当使用oracle推荐的方法来删除一个组件时这个组件会自动从oracle restart配置中删除.例如,如果使用DBCA来删除一个数据库,
DBCA会从oracle restart配置中删除数据库.同样的如果使用netca来删除监听,netca会从oracle restart配置中删除监听.

如果使用非建议的或手动删除方法来删除组件,必须首先使用srvctl从oracle restart配置中删除组件.不这样做可能会出现错误

从oracle restart配置中删除一个组件:
srvctl remove object [options]

例如下面删除一个db_unique_name为dbcrm的数据库
srvctl remove database -d dbcrm

对一个组件禁用或启用oracle restart配置
可以临时对一个组件禁用oracle restart配置.一种原因就是当对组件执行维护任务时.例如,如果一个组件必须被修复,那么可能想让它在出现故障或者主机重启时不自动启动.

当维护任务完成后可以重新对组件启用管理

当禁用一个组件时:
.它将不再自动重启
.通过依赖组件它将不再自动启动
.使用srvctl不能启动
.任何依赖于这个资源的组件不再自动启动或者自动重启

禁用或启动一个组件的自动重启执行以下操作之一:
.禁用一个组件输入以下命令:
srvctl disable object [options]

启动一个组件输入以下命令:
srvctl enable object [options]

例如:对一个db_unique_name为dbcrm的数据库禁用自动重启
srvctl disable database -d dbcrm

对一个asm磁盘组名为recovery的磁盘组禁用自动重启
srvctl disable diskgroup -g recovery

查看组件状态
可以使用srvctl来查看任命由oracle restart管理的组件的运行状态.对于有些组件还会显示额外的信息.

查看组件的状态:
srvctl status object [options]

例如查看db_unique_name为jycs的数据库的状态
[oracle@jyrac1 ~]$ srvctl status database -d jycs
Database is running.

查看一个组件的oracle restart配置信息
可以使用srvctl来查看任何组件的oracle restart配置.oracle restart对于每种组件类型维护不同的配置信息.使用srvctl 命令
可以获得由oracle restart所管理的组件列表.

查看组件配置:
srvctl config object options

例如:查看由oracle restart所管理的所有数据库列表
[oracle@jyrac1 ~]$ srvctl config database
jycs

查看一个特定数据库的配置信息:
下面的例子查看db_unique_name为jycs的数据库的配置:
[oracle@jyrac1 ~]$ srvctl config database -d jycs
Database unique name: jycs
Database name:
Oracle home: /u01/app/oracle/11.2.0/db
Oracle user: grid
Spfile:
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Disk Groups:
Services:

修改组件的oracle restart配置
可以使用srvctl来修改组件的oracle restart配置.例如可以修改当oracle重启动时的监听程序的监听端口或者在启动数据库时oracle restart所指示的服务器参数文件(SPFILE)

修改组件的oracle restart配置
srvctl modify object options

例如:对于db_unique_name为dbcrm的数据库使用下面的命令将管理策略修改为manual启动选项修改为nomount:
srvctl modify database -d dbcrm -y manual -s nomount

使用manual管理策略,当数据库主机重启时数据库不会自动重启.然而,oracle restart将会继续监控数据库如果出现故障将会重启.

[oracle@jyrac1 ~]$ srvctl modify database -h

Modifies the configuration for the database.

Usage: srvctl modify database -d [-n ] [-o ] [-u ] [-m ] [-p ] [-r {PRIMARY | PHYSICAL_STANDBY | LOGICAL_STANDBY | SNAPSHOT_STANDBY}] [-s ] [-t ] [-y {AUTOMATIC | MANUAL}] [-a ““|-z]
-d Unique name for the database
-n Database name (DB_NAME), if different from the unique name given by the -d option
-o ORACLE_HOME path
-u Oracle user
-m Domain for database. Must be set if database has DB_DOMAIN set.
-p Server parameter file path
-r Role of the database (primary, physical_standby, logical_standby, snapshot_standby)
-s Startup options for the database. Examples of startup options are open, mount, or nomount.
-t Stop options for the database. Examples of shutdown options are normal, transactional, immediate, or abort.
-y Management policy for the database (AUTOMATIC or MANUAL)
-a “” Comma separated list of disk groups
-z To remove database’s dependency upon disk groups
-h Print usage

管理oracle restart配置中的环境变量.
在oracle restart配置中可以存储环境变量的名值对.如果你通常在启动数据库之前设置环境变量(除了oracle_home和oracle_sid
之外),你可以在oracle restart配置中设置其它的环境变量.可以在下面的组件的单个配置中存储任何数量的环境变量.
.database实例
.监听
.oracle asm实例

当oracle restart启动一个组件时它首先会使用存储在组件配置中的的值来设置组件的环境变量.尽管可以通过oracle组件这种方式
来设置环境变量,这个功能主要是倾向于设置操作系统环境变量.

设置和取消环境变量
使用srvctl来对oracle restart配置中的组件来进行设置或者取消环境变量.

对组件设置或取消环境变量:
.为了设置环境变理使用以下命令:
srvctl setenv {asm|database|listener} options

从配置中删除环境变量输入以下命令:
srvctl unsetenv {asm|database|listener} options

例如设置数据库环境变量
对db_unique_name为dbcrm的数据库在oracle restart配置中设置NLS_LANG和AIX AIXTHREAD_SCOPE环境变量:
srvctl setenv database -d dbcrm -t “NLS_LANG=AMERICAN_AMERICA.AL32UTF8,AIXTHREAD_SCOPE=S”

查看环境变量
使用srvctl来查看oracle restart配置中组件的环境变量.
查看环境变量的配置:
srvctl getenv {database|listener|asm} options

例如查看数据库的所有环境变量
查看db_unique_name为dbcrm的数据库在oracle restart配置中的环境变量:
srvctl getenv database -d dbcrm
dbcrm:
NLS_LANG=AMERICAN_AMERICA
AIXTHREAD_SCOPE=S
GCONF_LOCAL_LOCKS=1

例如查看数据库的特定环境变量
查看数据库的NLS_LANG和AIXTHREAD_SCOPE环境变量:
srvctl getenv database -d dbcrm -t “NLS_LANG,AIXTHREAD_SCOPE”
dbcrm:
NLS_LANG=AMERICAN_AMERICA
AIXTHREAD_SCOPE=S

使用srvctl来创建和删除数据库服务
当使用oracle restart来管理数据库时,oracle建议使用srvctl来创建来删除数据库服务.当使用srvctl来增加一个数据库服务时,
这个服务会自动增加到oracle restart配置中,而且在服务与数据库之间的依赖关系会被建立.因此如果启动服务当数据库没有
启动时oracle restart首先会启动数据库.

当使用srvctl删除一个数据库服务时这个服务也会从oracle restart配置中删除

使用srvctl来创建一个数据库服务:
srvctl add service -d db_unique_name -s service_name [options]

例如创建一个数据库服务

对db_unique_name为dbcrm的数据库创建一个名叫crmbatch的数据库服务名

srvctl add service -d dbcrm -s crmbatch

例如创建一个基于角色的数据库服务
创建一个名叫crmbatch的数据库服务并指定它的data guard角色为physical_standby.只有dbcrm数据库的当前角色为物理备库时
这个服务才会自动启动.

srvctl add service -d dbcrm -s crmbatch -l PHYSICAL_STANDBY

使用srvctl删除数据库服务:
srvctl remove service -d db_unique_name -s service_name [-f]

数据库服务将会从oracle restart配置中被删除掉.如果-f强制标示出现即使服务正在运行也会被删除.如果没有-f标示如果服务
正在运行会报错.

与oracle restart相关的crsctl命令

crsctl命令的语法如下:
crsctl command has
这里command是start,stop或enable,disable等命令的简称.而has对象是指示oracle高可用服务.

check显示oracle restart的状态.
[grid@jyrac1 ~]$ crsctl check has
CRS-4638: Oracle High Availability Services is online

config显示oracle restart配置
CRS-4622: Oracle High Availability Services autostart is enabled.

disable禁用oracle restart的自动重启
[grid@jyrac1 ~]$crsctl disable has

enable启用oracle restart的自动重启
[grid@jyrac1 ~]$crsctl enable has

start启动oracle restart
[grid@jyrac1 ~]$crsctl start has

stop停止oracle restart
[grid@jyrac1 ~]$crsctl stop has [-f]

-f选项:如果任何由oracle restart管理的资源仍然在运行.然后试图停止这些资源.如果资源不能被停止那么试图强制停止.

个人觉得对于单个实例使用oracle restart与写脚本来启动也没有什么优势