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
<pre>
[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 <command /> <object> [<options>]
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 <command /> -h or
srvctl <command /> <object> -h
</object></options></object></pre>
oracel restart提高了数据库的可用性.当你安装oracle restart之后在硬件或软件出现故障或者数据库所在主机重启之后各种
oracle组件能够自动重启.
表: 通过oracle restart自动重启的oracle组件
<pre>
------------------------------------------------------------------------------------------------------------
组件 说明
------------------------------------------------------------------------------------------------------------
实例 oracle restart能够用于单主机上的多个数据库实例
监听程序
数据库服务 不包括默认创建的缺省服务因为它是由oracle数据库来管理的且不包括在数据库创建时
所创建的缺省服务
oracle asm实例
oracle asm磁盘组 重新启动磁盘组并加载磁盘组
oracle ONS通知服务 在单独的环境中,ONS在data guard安装中被用来在主库和备库之间通过
fast application notification(fan)来自动进行故障切换.ONS是一个服务用来发送
FAN事件被集成到客户端的故障转移功能中.
-------------------------------------------------------------------------------------------------------------
</pre>
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配置
<pre>
---------------------------------------------------------------------------------------------------------
创建操作 创建组件并自动增加到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
---------------------------------------------------------------------------------------------------------
</pre>
下在的表格列出了一些delete/drop/remove操作是否会自动从oracle restart配置中删除组件
表: Delete/Drop/Remove Operations and the Oracle Restart Configuration
<pre>
---------------------------------------------------------------------------------------------------------
操作 自动从oracle restart配置中删除组件?
---------------------------------------------------------------------------------------------------------
使用DBCA删除一个数据库 yes
使用操作系统命令删除数据文件来删除数据库 no
使用netca删除监听 yes
使用任何方法来删除一个磁盘组 yes
使用srvctl删除数据库服务 yes
通过其它方法来删除数据库服务 no
---------------------------------------------------------------------------------------------------------
</pre>
配置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
<pre>
-------------------------------------------------------------------------------------------------------------
被配置的组件 运行srvctl的oracle home目录
-------------------------------------------------------------------------------------------------------------
database,database service database home
oracle asm instance,disk group, oracle grid infrastructure home
listener,ONS
-------------------------------------------------------------------------------------------------------------
</pre><pre>
假设监听不是从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!
在主机重启之后通过下面的命令来检查发现数据库和监听程序也自动启动了
</pre><pre>
[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
</pre>
从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 <db_unique_name> [-n <db_name>] [-o <oracle_home>] [-u <oracle_user>] [-m <domain>] [-p <spfile>] [-r {PRIMARY | PHYSICAL_STANDBY | LOGICAL_STANDBY | SNAPSHOT_STANDBY}] [-s <start_options>] [-t <stop_options>] [-y {AUTOMATIC | MANUAL}] [-a "<diskgroup_list>"|-z]
-d <db_unique_name> Unique name for the database
-n <db_name> Database name (DB_NAME), if different from the unique name given by the -d option
-o <oracle_home> ORACLE_HOME path
-u <oracle_user> Oracle user
-m <domain> Domain for database. Must be set if database has DB_DOMAIN set.
-p <spfile> Server parameter file path
-r <role> Role of the database (primary, physical_standby, logical_standby, snapshot_standby)
-s <start_options> Startup options for the database. Examples of startup options are open, mount, or nomount.
-t <stop_options> Stop options for the database. Examples of shutdown options are normal, transactional, immediate, or abort.
-y <dbpolicy> Management policy for the database (AUTOMATIC or MANUAL)
-a "<diskgroup_list>" 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与写脚本来启动也没有什么优势</diskgroup_list></dbpolicy></stop_options></start_options></role></spfile></domain></oracle_user></oracle_home></db_name></db_unique_name></diskgroup_list></stop_options></start_options></spfile></domain></oracle_user></oracle_home></db_name></db_unique_name>