Oracle Restart

如果 Oracle 的 PMON 进程被终止,会发生什么情况?当然,实例终止。同样的结果也适用于任何其他关键进程的终止,如 SMON、LGWR 
等。有些时候,问题本质上是暂时性的,可由自身解决。在这些情况下,如果您重新启动实例,它将恢复正常;但您必须亲自处理检测故障和启动进程这一过程。
之前,使用 Oracle RAC 时,CRS 负责检测和重新启动。如果您没有使用 RAC,则没有这种选择。但是,在此版本的 Oracle Database 中,即使您不使用 RAC,也具有这种能力。Grid Infrastructure 中提供被称作 Oracle Restart 的功能。代理会检查数据库、监听器、ASM 等重要组件的可用性,在这些组件关闭的情况下自动将其启动。该功能是现成可用的,除了基本配置外,无需额外编程。用于检查可用性并重新启动故障组件的组件被称作 HAS(高可用性服务)。

以下是检查 HAS 自身可用性的方法(在 Grid Infrastructure 主目录中):

$ crsctl check has

CRS-4638: Oracle High Availability Services is online


该服务必须联机才能生效。可通过以下命令来检查版本:

$ crsctl query has releaseversion

Oracle High Availability Services release version on the local node is [11.2.0.1.0]

$ crsctl query has softwareversion

Oracle High Availability Services version on the local node is [11.2.0.1.0]


该服务可设置为自动启动。检查该服务是否已配置为自动启动:

$ crsctl config has

CRS-4622: Oracle High Availability Services autostart is enabled.


如果该服务未设置为自动启动,可以通过以下方式进行设置:

$ crsctl enable has

CRS-4622: Oracle High Availability Services autostart is enabled.


将“enable”替换为“disable”将删除 HAS 的自动启动属性。如果未启动,可通过如下方式启动:

$ crsctl start has


类似地,“stop”子句可停止 HAS。Grid Infrastructure 安装将一个名为 ohasd 的可执行文件放在服务器的自动启动目录中,例如,对于 Linux,放在 /etc/init.d 中。这个可执行文件提供 HAS 服务,换言之,它是 HAS 后台程序。在 Linux 中,可通过检查以下进程来进行确认:

$ ps -aef|grep has

root      5185     1  0 Aug10 ?        00:00:00 /bin/sh /etc/init.d/init.ohasd run

oracle    5297     1  0 Aug10 ?        00:05:24 /opt/oracle/product/11.2.0/grid/bin/ohasd.bin reboot


有了 HAS 之后,就可以注册应由 HAS 监视并在需要时进行恢复的组件。这些操作通过 Grid Infrastructure 的 ORACLE_HOME/bin 下的 srvctl 命令完成。您可能熟悉此命令;它用于 RAC 中。在 Oracle Database 11.2 中,也可以在单个实例中使用此命令。

您要添加的第一个组件是 Oracle Database 本身。下面是注册数据库的方式:

--在oracle用户下执行

$ srvctl add database -d D112D2 -o /opt/oracle/product/11.2.0/db1 -y AUTOMATIC -r PRIMARY -s open


以上命令注册了一个在 Oracle 主目录 /opt/oracle/product/11.2.0/db1 中运行、名为 D112D2 的数据库。“-y”选项可命令 HAS 在发生故障时自动重新启动数据库。“-r”选项指明角色,在此例中为 Primary(假定采用 Data Guard 配置)。“-s”选项可命令 HAS 在重新启动时恢复数据库直到打开状态。

完成配置后,可使用如下所示的命令启动数据库:

--在grid用户下

$ srvctl start database -d D112D2


该命令按正确顺序启动组件,即,必须先启动 ASM 实例并挂载磁盘组,然后才能启动数据库。仅在使用 SRVCTL 时才有此要求。如果您使用 SQL*Plus 启动数据库,就不会检查这些依赖性。

检查数据库的状态:

$ srvctl status database -d D112D2

Database is running.


选项“-v”显示数据库中正在运行的服务:

$ srvctl status database -d D112D2 -v

Database D112D2 is running with online services APP


要获取数据库的详细信息,应使用“config”选项

$ srvctl config database -d D112D2 -a

Database unique name: D112D2

Database name: D112D2

Oracle home: /opt/oracle/product/11.2.0/db1

Oracle user: oracle

Spfile: +DATA/D112D2/spfileD112D2.ora

Domain:

Start options: open

Stop options: immediate

Database role: PRIMARY

Management policy: AUTOMATIC

Disk Groups: DATA

Services: APP

Database is enabled


类似地,可以通过如下所示的命令来配置监听器:

$ srvctl config listener -l LISTENER1

Name: LISTENER1

Home: /opt/oracle/product/11.2.0/grid

End points: TCP:1522


完成配置后,就会创建监听器;检查监听器的状态:

$ srvctl status listener -l LISTENER1

Listener LISTENER1 is enabled

Listener LISTENER1 is not running


监听器没有运行。只是创建了监听器;并未启动。启动监听器:

$ srvctl start listener -l LISTENER1


可以用同样的方式检查 ASM 的配置。

$ srvctl config asm -a

ASM home: /opt/oracle/product/11.2.0/grid

ASM listener: LISTENER

Spfile: +DATA/asm/asmparameterfile/registry.253.720043719

ASM diskgroup discovery string: /dev/sdb*

ASM is enabled.


检查 ASM 的状态:

$ srvctl status asm -a

ASM is running on oradba2

ASM is enabled.


也可以对磁盘组以及服务进行配置。下面是创建名为 APP 服务的方法(切记,我们是在单个实例中执行此操作,而非在长久使用这些命令的 RAC 中)。

$ srvctl add service -d D112D2 -s APP


创建 APP 服务后,可以检查该服务的各种属性:

$ srvctl config service -d D112D2 -a

Service name: APP

Service is enabled

Cardinality: SINGLETON

Disconnect: false

Service role: PRIMARY

Management policy: AUTOMATIC

DTP transaction: false

AQ HA notifications: false

Failover type: NONE

Failover method: NONE

TAF failover retries: 0

TAF failover delay: 0

Connection Load Balancing Goal: LONG

Runtime Load Balancing Goal: NONE

TAF policy specification: NONE


服务已创建,但尚未启动。可以检查服务的状态并启动服务:

$ srvctl status service -d D112D2 -s APP

Service APP is not running.

$ srvctl start service -d D112D2 -s APP

$ srvctl status service -d D112D2 -s APP

Service APP is running


也可以对 ASM 中的磁盘组使用这个命令,这些磁盘组也被视为资源。

$ srvctl start diskgroup -g <dg_name>

$ srvctl stop diskgroup -g <dg_name> [-f]


(“-f”选项强制停止磁盘组,即使某个数据库正在使用该磁盘组并且当前正在运行)

$ srvctl status diskgroup -g <dg_name> [-a]


(“-a”选项用于显示所有状态)

$ srvctl enable diskgroup -g <dg_name>

$ srvctl disable diskgroup -g <dg_name>


要修改配置,可以使用“modify”子句:

$ srvctl modify database -d D112D2 –z


在此示例中,我们已配置为删除数据库上磁盘组的依赖性(–z 选项执行该操作)

要从 Oracle Restart 中删除数据库,可以使用

$ srvctl remove database -d D112D2 -v

Remove the database D112D2? (y/[n]) y

Successfully removed database and its dependent services.


这只是从 HAS 服务中删除了数据库。不会删除数据库本身。

您可以在 HAS 所管理的资源运行时获取它们的大量信息。以下命令可执行该操作。代表“详细”输出的“-v”选项可执行该操作。

$ crsctl status resource -v

NAME=ora.DATA.dg

TYPE=ora.diskgroup.type

LAST_SERVER=oradba2

STATE=ONLINE on oradba2

TARGET=ONLINE

CARDINALITY_ID=ONLINE

CREATION_SEED=6

CURRENT_RCOUNT=0

FAILURE_COUNT=0

FAILURE_HISTORY=

ID=ora.DATA.dg oradba2 1

INCARNATION=1

LAST_RESTART=1281465040

STATE_DETAILS=

… 删减了部分输出 …

NAME=ora.diskmon

TYPE=ora.diskmon.type

LAST_SERVER=oradba2

STATE=ONLINE on oradba2

TARGET=ONLINE

CARDINALITY_ID=1

CREATION_SEED=1

CURRENT_RCOUNT=0

FAILURE_COUNT=0

FAILURE_HISTORY=

ID=ora.diskmon 1 1

INCARNATION=1

LAST_RESTART=1281462735

STATE_DETAILS=



尽管有一些详细信息,但是不太便于阅读。可通过以下命令获取更简洁的报告:

$ crsctl status resource -t

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

NAME              TARGET  STATE        SERVER        STATE_DETAILS      

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

Local Resources

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

ora.DATA.dg       ONLINE  ONLINE       oradba2                                      

ora.DG1.dg        ONLINE  ONLINE       oradba2                                     

ora.DG2.dg        OFFLINE OFFLINE      oradba2                                     

ora.LISTENER.lsnr ONLINE  ONLINE       oradba2                                      

ora.asm           ONLINE  ONLINE       oradba2       Started            

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

Cluster Resources

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

ora.cssd 1        ONLINE  ONLINE       oradba2                                     

ora.d112d2.db     ONLINE  ONLINE       oradba2       Open               

ora.diskmon       ONLINE  ONLINE       oradba2            


如果您希望仅获取特定资源的详细输出,该怎么办?通过将该资源命名为参数可实现此目的。(请注意:必须提供完整的资源名称,就像 crsctl 输出中显示的那样。例如,资源 APP 不是完整名称。完整名称为 ora.d112d2.app.svc。)

$ crsctl status resource ora.d112d2.app.svc

NAME=ora.d112d2.app.svc

TYPE=ora.service.type

TARGET=ONLINE

STATE=ONLINE on oradba2


“-v”选项使输出更加详细。

$ crsctl status resource ora.d112d2.app.svc -v

NAME=ora.d112d2.app.svc

TYPE=ora.service.type

LAST_SERVER=oradba2

STATE=ONLINE on oradba2

TARGET=ONLINE

CARDINALITY_ID=1

CREATION_SEED=17

CURRENT_RCOUNT=0

FAILURE_COUNT=0

FAILURE_HISTORY=

ID=ora.d112d2.app.svc 1 1

INCARNATION=1

LAST_RESTART=1293305825

STATE_DETAILS=


可通过以下命令启动所有资源

$ crsctl start resource -all

CRS-5702: Resource 'ora.DG1.dg' is already running on 'oradba2'

CRS-5702: Resource 'ora.LISTENER.lsnr' is already running on 'oradba2'

CRS-5702: Resource 'ora.asm' is already running on 'oradba2'

CRS-5702: Resource 'ora.cssd' is already running on 'oradba2'

CRS-5702: Resource 'ora.d112d2.app.svc' is already running on 'oradba2'

CRS-5702: Resource 'ora.d112d2.db' is already running on 'oradba2'

CRS-5702: Resource 'ora.diskmon' is already running on 'oradba2'

CRS-2672: Attempting to start 'ora.DG2.dg' on 'oradba2'

CRS-2676: Start of 'ora.DG2.dg' on 'oradba2' succeeded

CRS-4000: Command Start failed, or completed with errors.


这是一个有用的命令,可一次启动所有资源,但如果一个命令失败,将在结尾处显示“completed with errors”输出。如果对所有组件启用了自动启动,那么该命令确实没什么必要。在某些情况下,特别是在您尝试诊断环境中的问题时,可能希望禁用自动启动,然后手动启动组件。

要停止在特定 Oracle 主目录中运行的所有资源,可执行以下命令:

$ srvctl stop home -o /opt/oracle/product/11.2.0/db1 -s mystate.txt


文件 mystate.txt 被称作“状态文件”,记录组件关闭时 HAS 组件的状态。该文件如下所示:

$ cat mystate.txt

svc-APP

db-d112d2


类似地,要启动在特定 Oracle 主目录中启动的所有资源,可执行以下命令:

$ srvctl start home -o /opt/oracle/product/11.2.0/db1 -s mystate.txt


需要有状态文件才能启动在关闭时所运行的资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值