首页  >  文章  >  数据库  >  Oracle RAC 之维护工具和命令

Oracle RAC 之维护工具和命令

WBOY
WBOY原创
2016-06-07 15:31:411037浏览

Oracle 的管理可以通过 OEM 或者命令行接口。 Oracle Clusterware 的命令集可以分为以下 4 种: 节点层: osnodes 网络层: oifcfg 集群层: crsctl, ocrcheck,ocrdump,ocrconfig 应用层: srvctl,onsctl,crs_stat 下面分别来介绍这些命令。 一. 节点层 只

Oracle 的管理可以通过OEM或者命令行接口。 Oracle Clusterware的命令集可以分为以下4种:

节点层:osnodes

网络层:oifcfg

集群层:crsctl, ocrcheck,ocrdump,ocrconfig

应用层:srvctl,onsctl,crs_stat

下面分别来介绍这些命令。

一. 节点层

只有一个命令: olsnodes, 这个命令用来显示集群点列表,可用的参数如下,这些参数可以混合使用。

[root@raw1 bin]# ./olsnodes --help

Usage: olsnodes [-n] [-p] [-i] [ | -l] [-g] [-v]

where

-n print node number with the node name

-p print private interconnect name with the node name

-i print virtual IP name with the node name

print information for the specified node

-l print information for the local node

-g turn on logging

-v run in verbose mode

[root@raw1 bin]# ./olsnodes -n -p -i

raw1 1 raw1-priv raw1-vip

raw2 2 raw2-priv raw2-vip

二. 网络层

网络层由各个节点的网络组件组成,包括2个物理网卡和3IP 地址。 也只有一个命令:oifcfg.

Oifctg 命令用来定义和修改Oracle 集群需要的网卡属性,这些属性包括网卡的网段地址,子网掩码,接口类型等。 要想正确的使用这个命令, 必须先知道Oracle 是如何定义网络接口的,Oracle的每个网络接口包括名称,网段地址,接口类型3个属性。

Oifcfg 命令的格式如下: interface_name/subnet:interface_type

这些属性中没有IP地址,但接口类型有两种,publicprivate,前者说明接口用于外部通信,用于Oracle NetVIP 地址,而后者说明接口用于Interconnect

接口的配置方式分为两类: global node-specific。 前者说明集群所有节点的配置信息相同,也就是说所有节点的配置是对称的;而后者意味着这个节点的配置和其他节点配置不同,是非对称的。

Iflist:显示网口列表

Getif: 获得单个网口信息

Setif:配置单个网口

Delif:删除网口

[root@raw1 bin]# ./oifcfg --help

PRIF-9: incorrect usage

Name:

oifcfg - Oracle Interface Configuration Tool.

Usage: oifcfg iflist [-p [-n]]

oifcfg setif {-node | -global} {/:}...

oifcfg getif [-node | -global] [ -if [/] [-type ] ]

oifcfg delif [-node | -global] [[/]]

oifcfg [-help]

- name of the host, as known to a communications network

- name by which the interface is configured in the system

- subnet address of the interface

; - 接口类型 { cluster_interconnect |公共|存储 }

[root@raw1 bin]# ./oifcfg iflist

eth0 10.85.10.0

eth1 192.168.1.0

[root@raw1 bin]# ./oifcfg getif

eth0 10.85.10.119 全球公共

eth0 10.85.10.121 全球公共

eth0 10.85.10.0 全球公共

eth1 192.168.1.119 全局 cluster_interconnect

eth1 192.168.1.121 全局 cluster_interconnect

eth1 192.168.1.0 全局 cluster_interconnect

-- 查看public 类型的计费

[root@raw1 bin]# ./oifcfg getif -type public

eth0 10.85.10.119 全球公共

eth0 10.85.10.121 全球公共

eth0 10.85.10.0 全球公共

-- 删除接口配置

[root@raw1 bin]# ./oifcfg delif -global

-- 添加接口配置

[root@raw1 bin]# ./oifcfg setif -global eth0/192.168.1.119:public

[root@raw1 bin]# ./oifcfg setif -global eth1/10.85.10.119:cluster_interconnect

三. 集群层

集群层是指由集群件组成的核心集群,该层负责维护集群内的共享设备,并为应用集群提供完整的集群状态视图,应用集群依赖此视图本层共有4个命令: crsctl, ocrcheck、ocrdump、ocrconfig。 后三个是针对OCR 光盘的。

3.1 CRSCTL

Crsctl 可以用于检查CRS 进程栈,每个crs 进程状态,管理 Votedisk,跟踪CRS进程功能。

[root@raw1 bin]# ./crsctl

用法:crsctl check crs - 检查 CRS 堆栈的可行性

crsctl check cssd - 检查 CSS 的可行性

crsctl check crsd - 检查 CRS 的可行性

crsctl check evmd - 检查 EVM 的可行性

crsctl 设置 css ; - 设置参数覆盖

crsctl 获取 css ; - 获取 CSS 参数的值

crsctl 取消设置 css ; - 将 CSS 参数设置为默认值

crsctl query css votedisk - 列出 CSS 使用的投票盘

crsctl add css votedisk ; - 添加新的投票盘

crsctl 删除 css votedisk ; - 删除投票盘

crsctl enable crs - 启用所有 CRS 守护进程的启动

crsctl disable crs - 禁用所有 CRS 守护进程的启动

crsctl start crs - 启动所有 CRS 守护进程。

crsctl stop crs - 停止所有 CRS 守护进程。在集群情况下停止 CRS 资源。

crsctl start resources - 启动 CRS 资源。

crsctl stop resources - 停止 CRS 资源。

crsctl debug statedump evm - 转储 evm 对象的状态信息

crsctl debug statedump crs - 转储 crs 对象的状态信息

crsctl debug statedump css - 转储 css 对象的状态信息

crsctl 调试日志 css [module:level]{,module:level} ...

- 打开 CSS 调试

crsctl debug trace css - 转储内存中的 CSS 跟踪缓存

crsctl 调试日志 crs [module:level]{,module:level} ...

- 打开 CRS 调试

crsctl 调试跟踪 crs - 转储 CRS 内存中跟踪缓存

crsctl 调试日志 evm [模块:级别]{,模块:级别} ...

- 打开 EVM 调试

crsctl debug trace evm - 转储 EVM 内存中跟踪缓存

crsctl 调试日志 res 打开资源调试

crsctl query crs softwareversion [] - 列出已安装的 CRS 软件版本

crsctl query crs activeversion - 列出CRS软件运行版本

crsctl lsmodules css - 列出可用于调试的 CSS 模块

crsctl lsmodules crs - 列出可用于调试的 CRS 模块

crsctl lsmodules evm - 列出可用于调试的 EVM 模块

如果需要,可以通过

运行附加跟踪来运行这些命令中的任何一个

在最前面添加一个“trace”参数。

示例:crsctl 跟踪检查 css

3.1.1 检查CRS 状态

[root@raw1 bin]# ./crsctl 检查 crs

CSS 看起来很健康

CRS 看起来很健康

EVM 看起来很健康

-- 检查单个状态

[root@raw1 bin]# ./crsctl 检查 cssd

CSS 看起来很健康

[root@raw1 bin]# ./crsctl 检查 crsd

CRS 看起来很健康

[root@raw1 bin]# ./crsctl 检查 evmd

EVM 看起来很健康

3.1.2 配置CRS 栈是否自启动

CRS 进程栈默认随着操作系统的启动而自启动,有时是为了维护目的需要关闭这个功能,可以用root 用户执行下面命令。

[root@raw1 bin]# ./crsctl 禁用 crs

[root@raw1 bin]# ./crsctl 启用 crs

这个命令实际上是修改了/etc/oracle/scls_scr/raw/root/crsstart 这个文件里的内容。

3.1.3 启动,停止CRS 堆栈。

Oracle 10.1时,必须通过重新启动系统重启集群件,但是从甲骨文 10.2 开始,可以通过命令来启动和停止CRS.

-- 启动CRS

[root@raw1 bin]# ./crsctl start crs

尝试启动 CRS 堆栈

CRS 堆栈即将启动

-- 关闭CRS

[root@raw1 bin]# ./crsctl stop crs

停止资源。

成功停止CRS资源

停止CSSD。

关闭 CSS 守护进程。

关闭请求已成功发出。

3.1.4 查看Votedisk 磁盘仓库

[root@raw1 bin]# ./crsctl 查询 css votedisk

0。 0 /dev/raw/raw2

找到 1 个投票盘。

3.1.5 查看和修改CRS 参数

-- 查看参数:用get

[root@raw1 bin]# ./crsctl 获取 css misscount

60

-- 修改参数:使用设置,但是这个功能要慎用

[root@raw1 bin]# ./crsctl 设置 css 错误计数 60

3.1.6 跟踪CRS 模块,提供辅助功能

CRSCRSCSSEVM 三个服务组成,每个服务又由一系列模块组成,crsctl 允许对模块进行跟踪,并将跟踪内容记录到日志中。

[root@raw1 bin]# ./crsctl lsmodules css

以下是CSS模块::

CSSD

COMMCRS

通讯

[root@raw1 bin]# ./crsctl lsmodules crs

以下是CRS模块::

CRSUI

CRCOMM

CRSRTI

CRSMAIN

CRSPLACE

CRSAPP

CRSRES

CRCOMM

CRSOCR

CRSTIMER

CRSEVT

CRSD

CLUCLS

CSSCLNT

COMMCRS

通讯

[root@raw1 bin]# ./crsctl lsmodules evm

以下是 EVM 模块 ::

EVMD

EVMDMAIN

EVMCOMM

EVMEVT

EVMAPP

EVMAGENT

CRSOCR

CLUCLS

CSSCLNT

COMMCRS

COMMNS

--跟踪CSSD模块,需要root 用户执行:

[root@raw1 bin]# ./crsctl debug log css "CSSD:1"

Configuration parameter trace is now set to 1.

Set CRSD Debug Module: CSSD Level: 1

-- 查看跟踪日志

[root@raw1 cssd]# pwd

/u01/app/oracle/product/crs/log/raw1/cssd

[root@raw1 cssd]# more ocssd.log

...

[ CSSD]2010-03-08 00:19:27.160 [36244384] >TRACE: clssscSetDebugLevel: The logging level is set to 1 ,the cache level is set to 2

[ CSSD]2010-03-08 00:19:52.139 [119085984] >TRACE: clssgmClientConnectMsg: Connect from con(0x834fd18) proc(0x8354c70) pid() proto(10:2:1:1)

...

3.1.7 维护Votedisk

以图新方式安装Clusterware的过程中,在配置Votedisk时,如果选择External Redundancy策略。则只能填写一个Votedisk。但是即使使用External Redundancy作为冗余策略,也可以添加多个Vodedisk,只是必须通过crsctl 命令来添加,添加多个Votedisk后,这些Votedisk 互为镜像,可以防止Votedisk的单点故障。

需要注意的是,Votedisk使用的是一种“多数可用算法”,如果有多个Votedisk,,则必须一半以上的Votedisk同时使用,Clusterware才能正常使用。 比如配置了4Votedisk,坏一个Votedisk,集群可以正常工作,如果坏了2个,则不能满足半数以上,集群会立即宕掉,所有节点立即重启,所以如果添加Votedisk,尽量不要只添加一个,而应该添加2个。这点和OCR 不一样。OCR 只需配置一个。

添加和删除Votedisk的操作比较危险,必须停止数据库,停止ASM,停止CRS Stack后操作,并且操作时必须使用-force参数。

1) 查看当前配置

[root@raw1 bin]# ./crsctl query css votedisk

2) 停止所有节点的CRS

[root@raw1 bin]# ./crsctl stop crs

3) 添加Votedisk

[root@raw1 bin]# ./crsctl add css votedisk /dev/raw/raw1 -force

注意:即使在CRS 关闭后,也必须通过-force 参数来添加和删除Votedisk,并且-force 参数只有在CRS关闭的场合下使用才安全。 否则会报:Cluter is not a ready state for online disk addition.

4) 确认添加后的情况:

[root@raw1 bin]# ./crsctl query css votedisk

5) 启动CRS

[root@raw1 bin]# ./crsctl start crs

3.2 OCR命令系列

Oracle Clusterware把整个集群的配置信息放在共享存储上,这个存储就是OCR Disk. 在整个集群中,只有一个节点能对OCR Disk 进行读写操作,这个节点叫作Master Node,所有节点都会在内存中保留一份OCR的拷贝,同时哟一个OCR Process 从这个内存中读取内容。 OCR 内容发生改变时,由Master NodeOCR Process负责同步到其他节点的OCR Process

因为OCR的内容如此重要,Oracle 4个小时对其做一次备份,并且保留最后的3个备份,以及前一天,前一周的最后一个备份。 这个备份由Master Node CRSD进程完成,备份的默认位置是$CRS_HOMEcrscdata目录下。 每次备份后,备份文件名自动更改,以反应备份时间顺序,最近一次的备份叫作backup00.ocr。这些备份文件除了保存在本地,DBA还应该在其他存储设备上保留一份,以防止意外的存储故障。

3.2.1 ocrdump

该命令能以ASCII的方式打印出OCR的内容,但是这个命令不能用作OCR的备份恢复,也就是说产生的文件只能用作阅读,而不能用于恢复。

命令格式: ocrdump [-stdout] [filename] [-keyname name] [-xml]

参数说明:

-stdout: 把内容打印输出到屏幕上

Filename:内容输出到文件中

-keyname:只打印某个键及其子健内容

-xml:以xml格式打印输出

示例:把system.css键的内容以.xml格式打印输出到屏幕

[root@raw1 bin]# ./ocrdump -stdout -keyname system.css -xml|more

03/08/2010 04:28:41

/dev/raw/raw1

./ocrdump.bin -stdout -keyname system.css -xml

......

这个命令在执行过程中,会在$CRS_HOMElogclient 目录下产生日志文件,文件名ocrdump_.log,如果命令执行出现问题,可以从这个日志查看问题原因。

3.2.2 ocrcheck

Ocrcheck 命令用于检查OCR内容的一致性,命令执行过程会在$CRS_HOMElognodenameclient 目录下产生ocrcheck_pid.log 日志文件。 这个命令不需要参数。

[root@raw1 bin]# ./ocrcheck

Status of Oracle Cluster Registry is as follows :

Version : 2

Total space (kbytes) : 147352

Used space (kbytes) : 4360

Available space (kbytes) : 142992

ID : 1599790592

Device/File Name : /dev/raw/raw1

Device/File integrity check succeeded

Device/File not configured

Cluster registry integrity check succeeded

3.2.3 ocrconfig

该命令用于维护OCR 磁盘,安装clusterware过程中,如果选择External Redundancy冗余方式,则只能输入一个OCR磁盘位置。 但是Oracle允许配置两个OCR 磁盘互为镜像,以防止OCR 磁盘的单点故障。 OCR 磁盘和Votedisk磁盘不一样,OCR磁盘最多只能有两个,一个Primary OCR 和一个Mirror OCR

[root@raw1 bin]# ./ocrconfig --help

Name:

ocrconfig - Configuration tool for Oracle Cluster Registry.

Synopsis:

ocrconfig [option]

option:

-export [-s online]

- Export cluster register contents to a file

-import - Import cluster registry contents from a file

-upgrade [ []]

- Upgrade cluster registry from previous version

-降级 [-version ]

- 将集群注册表降级到指定版本

-backuploc ; - 配置定期备份位置

-showbackup - 显示备份信息

-恢复; - 从物理备份恢复

-替换 ocr|ocrmirror [] - 添加/替换/删除 OCR 设备/文件

-overwrite - 覆盖磁盘上的 OCR 配置

-修复 ocr|ocrmirror ; - 修复本地 OCR 配置

-help - 打印此帮助信息

注意:

将在

中创建日志文件

$ORACLE_HOME/log//client/ocrconfig_.log。请确保

您之前在上述目录中有文件创建权限

运行此工具。

-- 查看服务备份

[root@raw1 bin]# ./ocrconfig -showbackup

在备份情况下,OCR自动备份在$CRS_HOMECRSCDATAcluster_name 目录下,可以通过ocrconfig -backuploc ; 命令修改到新的目录

3.2.4 使用导出,导入进行导入和恢复

Oracle 推荐在对集群做调整时,比如增加,删除之前的节点,应该对OCR做一个备份,可以使用导出备份到指定文件,如果做了替换或者恢复等操作, Oracle 建议使用cluvfy comp ocr -n all 命令进行一次全面的检查。该命令位于集群件的安装软件里。

1)首先关闭所有节点的CRS

[root@raw1 bin]# ./crsctl stop crs

停止资源。

成功停止CRS资源

停止CSSD。

关闭 CSS 守护进程。

关闭请求已成功发出。

2)使用root用户导出OCR内容

[root@raw1 bin]# ./ocrconfig -export /u01/ocr.exp

3)重启CRS

[root@raw1 bin]# ./crsctl start crs

尝试启动 CRS 堆栈

CRS 堆栈即将启动

4)检查CRS 状态

[root@raw1 bin]# ./crsctl 检查 crs

CSS 看起来很健康

CRS 看起来很健康

EVM 看起来很健康

5)破坏OCR内容

[root@raw1 bin]# dd if=/dev/zero of=/dev/raw/raw1 bs=1024 count=102400

102400+0 条记录

已输出 102400+0 条记录

6) 检查OCR一致性

[root@raw1 bin]# ./ocrcheck

PROT-601:无法初始化 ocrcheck

7)使用cluvfy 工具检查一致性

[root@raw1 cluvfy]# ./runcluvfy.sh comp ocr -n all

验证 OCR 完整性

无法从 Oracle 集群件检索节点列表。

验证无法进行。

8) 使用导入恢复OCR 内容

[root@raw1 bin]# ./ocrconfig -import /u01/ocr.exp

9)再次检查OCR

[root@raw1 bin]# ./ocrcheck

Oracle集群注册表的状态如下:

版本:2

总空间(千字节):147352

已用空间(千字节):4364

可用空间(千字节):142988

ID:610419116

设备/文件名:/dev/raw/raw1

设备/文件完整性检查成功

设备/文件未配置

集群注册表完整性检查成功

10)使用cluvfy工具检查

[root@raw1 cluvfy]# ./runcluvfy.sh comp ocr -n all

Verifying OCR integrity

WARNING:

These nodes cannot be reached:

raw2

Verification will proceed with nodes:

raw1

ERROR:

User equivalence unavailable on all the nodes.

Verification cannot proceed.

Verification of OCR integrity was unsuccessful on all the nodes.

注:此处不成功是因为我的机器卡,故raw2节点没有启动

3.2.5 移动OCR 文件位置

实例演示将OCR/dev/raw/raw1 移动到/dev/raw/raw3上。

1) 查看是否有OCR备份

[root@raw1 bin]# ./ocrconfig -showbackup

如果没有备份,可以立即执行一次导出作为备份:

[root@raw1 bin]# ./ocrconfig -export /u01/ocrbackup -s online

2) 查看当前OCR配置

[root@raw1 bin]# ./ocrcheck

Status of Oracle Cluster Registry is as follows :

Version : 2

Total space (kbytes) : 147352

Used space (kbytes) : 4364

Available space (kbytes) : 142988

ID : 610419116

Device/File Name : /dev/raw/raw1

Device/File integrity check succeeded

Device/File not configured

Cluster registry integrity check succeeded

输出显示当前只有一个Primary OCR,在/dev/raw/raw1。 没有Mirror OCR。 因为现在只有一个OCR文件,所以不能直接改变这个OCR的位置,必须先添加镜像后在修改,否则会报:Failed to initialize ocrconfig.

3) 添加一个Mirror OCR

[root@raw1 bin]# ./ocrconfig -replace ocrmirror /dev/raw/raw4

4) 确认添加成功

[root@raw1 bin]# ./ocrcheck

5)改变primary OCR 位置

[root@raw1 bin]# ./ocrconfig -replace ocr /dev/raw/raw3

确认修改成功:

[root@raw1 bin]# ./ocrcheck

6)使用ocrconfig命令修改后,所有RAC节点上的/etc/oracle/ocr.loc 文件内容也会自动同步了,如果没有自动同步,可以手工的改成以下内容。

[root@raw1 bin]# more /etc/oracle/ocr.loc

ocrconfig_loc=/dev/raw/raw1

Ocrmirrorconfig_loc=/dev/raw/raw3

local_only=FALSE

四. 应用层

应用层就是指RAC数据库了,这一层有若干资源组成,每个资源都是一个进程或者一组进程组成的完整服务,这一层的管理和维护都是围绕这些资源进行的。 有如下命令srvctl, onsctl, crs_stat 三个命令。

4.1 crs_stat

Crs_stat 这个命令用于查看CRS维护的所有资源的运行状态,如果不带任何参数时,显示所有资源的概要信息。每个资源显示是各个属性:资源名称,类型,目录,资源运行状态等。

[root@raw1 bin]# ./crs_stat

NAME=ora.raw.db

TYPE=application

TARGET=ONLINE

STATE=OFFLINE

......

也可以指定资源名,查看指定资源的状态,并可以使用-V -P 选项,以查看详细信息,其中-p 参数显示的内容比-V 更详细。

1) 查看制定资源状态

[root@raw1 bin]# ./crs_stat ora.raw2.vip

NAME=ora.raw2.vip

TYPE=application

TARGET=ONLINE

STATE=OFFLINE

2) 使用-v 选项,查看详细内容,这时输出多出4项内容,分别是允许重启次数,已执行重启次数,失败阀值,失败次数。

[root@raw1 bin]# ./crs_stat -v ora.raw2.vip

NAME=ora.raw2.vip

TYPE=application

RESTART_ATTEMPTS=0

RESTART_COUNT=0

FAILURE_THRESHOLD=0

FAILURE_COUNT=0

TARGET=ONLINE

STATE=OFFLINE

3) 使用-p 选项查看更详细内容

[root@raw1 bin]# ./crs_stat -p ora.raw2.vip

NAME=ora.raw2.vip

TYPE=application

ACTION_SCRIPT=/u01/app/oracle/product/crs/bin/racgwrap

ACTIVE_PLACEMENT=1

AUTO_START=1

CHECK_INTERVAL=60

DESCRIPTION=CRS application for VIP on a node

FAILOVER_DELAY=0

FAILURE_INTERVAL=0

FAILURE_THRESHOLD=0

HOSTING_MEMBERS=raw2

OPTIONAL_RESOURCES=

PLACEMENT=favored

REQUIRED_RESOURCES=

RESTART_ATTEMPTS=0

SCRIPT_TIMEOUT=60

START_TIMEOUT=0

STOP_TIMEOUT=0

UPTIME_THRESHOLD=7d

USR_ORA_ALERT_NAME=

USR_ORA_CHECK_TIMEOUT=0

USR_ORA_CONNECT_STR=/ as sysdba

USR_ORA_DEBUG=0

USR_ORA_DISCONNECT=false

USR_ORA_FLAGS=

USR_ORA_IF=eth0

USR_ORA_INST_NOT_SHUTDOWN=

USR_ORA_LANG=

USR_ORA_NETMASK=255.255.255.0

USR_ORA_OPEN_MODE=

USR_ORA_OPI=false

USR_ORA_PFILE=

USR_ORA_PRECONNECT=none

USR_ORA_SRV=

USR_ORA_START_TIMEOUT=0

USR_ORA_STOP_MODE=immediate

USR_ORA_STOP_TIMEOUT=0

USR_ORA_VIP=10.85.10.123

这些字段是所有资源共有的,但是根据资源类型不同,某些字段可以空值。

4) 使用-ls 选项,可以查看每个资源的权限定义,权限定义格式和Linux 一样。

[root@raw1 bin]# ./crs_stat -ls

Name Owner Primary PrivGrp Permission

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

ora.raw.db oracle oinstall rwxrwxr--

ora.raw.dmm.cs oracle oinstall rwxrwxr--

ora....aw2.srv oracle oinstall rwxrwxr--

ora....w1.inst oracle oinstall rwxrwxr--

ora....w2.inst oracle oinstall rwxrwxr--

ora....SM1.asm oracle oinstall rwxrwxr--

ora....W1.lsnr oracle oinstall rwxrwxr--

ora.raw1.gsd oracle oinstall rwxr-xr--

ora.raw1.ons oracle oinstall rwxr-xr--

ora.raw1.vip root oinstall rwxr-xr--

ora....SM2.asm oracle oinstall rwxrwxr--

ora....W2.lsnr oracle oinstall rwxrwxr--

ora.raw2.gsd oracle oinstall rwxr-xr--

ora.raw2.ons oracle oinstall rwxr-xr--

ora.raw2.vip root oinstall rwxr-xr--

4.2 onsctl

这个命令用于管理配置ONS(Oracle Notification Service). ONS Oracle Clusterware 实现FAN Event Push模型的基础。

在传统模型中,客户端需要定期检查服务器来判断服务端状态,本质上是一个pull模型,Oracle 10g 引入了一个全新的PUSH 机制--FAN(Fast Application Notification),当服务端发生某些事件时,服务器会主动的通知客户端这种变化,这样客户端就能尽早得知服务端的变化。 而引入这种机制就是依赖ONS实现, 在使用onsctl命令之前,需要先配置ONS服务。

4.2.1 ONS 配置内容

RAC 环境中,需要使用$CRS_HOME下的ONS,而不是$ORACLE_HOME下面的ONS, 这点需要注意。 配置文件在$CRS_HOMEopmnconfons.config.

[root@raw1 conf]# pwd

/u01/app/oracle/product/crs/opmn/conf

[root@raw1 conf]# more ons.config

localport=6100

remoteport=6200

loglevel=3

useocr=on

参数说明:

Localport: 这个参数代表本地监听端口,这里本地特指:127.0.0.1 这个回环地址,用来和运行在本地的客户端进行通信

Remoteport:这个参数代表的是远程监听端口,也就是除了127.0.0.1 以外的所有本地IP地址,用来和远程的客户端进行通信。

Loglevel: Oracle 允许跟踪ONS进程的运行,并把日志记录到本地文件中,这个参数用来定义ONS进程要记录的日志级别,从1-9,缺省值是3.

Logfile: 这个参数和loglevel参数一起使用,用于定义ONS进程日志文件的位置,缺省值是$CRS_HOMEopmnlogsopmn.log

nodesuseocr: 这两个参数共同决定饿了本地的ONS daemon要和哪些远程节点上的ONS daemon进行通信。

Nodes 参数值格式如下:Hostname/IP:port[hostname/ip:port]

如:useoce=off

Nodes=rac1:6200,rac2:6200

useocr 参数值为on/off, 如果useocr ON, 说明信息保存在OCR中,如果是OFF,说明信息取nodes中的配置。对于单实例而言,要把useocr设置为off

4.2.2 配置ONS

可以直接编译ONS的配置文件来修改配置,如果使用了OCR,则可以通过racgons命令进行配置,但必须以root用户来执行,如果用oracle 用户来执行,不会提示任何错误,但也不会更改任何配置。

若要添加配置,可以使用下面命令:

Racgons add_config rac1:6200 rac2:6200

若要删除配置,可以用下面命令:

Racgons remove_config rac1:6200 rac2:6200

4.2.3 onsctl 命令

使用onsctl命令可以启动,停止,调试ONS,并重新载入配置文件,其命令格式如下:

[root@raw1 bin]# ./onsctl

usage: ./onsctl start|stop|ping|reconfig|debug

start - Start opmn only.

stop - Stop ons daemon

ping - Test to see if ons daemon is running

debug - Display debug information for the ons daemon

reconfig - Reload the ons configuration

help - Print a short syntax description (this).

detailed - Print a verbose syntax description.

ONS 进程运行,并不一定代表ONS 正常工作,需要使用ping命令来确认。

1) 在OS级别查看进程状态。

[root@raw1 bin]# ps -aef|grep ons

root 1924 6953 0 03:17 pts/1 00:00:00 grep ons

oracle 30723 1 0 Mar08 ? 00:00:00 /u01/app/oracle/product/crs/opmn/bin/ons -d

oracle 30724 30723 0 Mar08 ? 00:00:04 /u01/app/oracle/product/crs/opmn/bin/ons -d

2) 确认ONS服务的状态

[root@raw1 bin]# ./onsctl ping

Number of onsconfiguration retrieved, numcfg = 2

onscfg[0]

{node = raw1, port = 6200}

Adding remote host raw1:6200

onscfg[1]

{node = raw2, port = 6200}

Adding remote host raw2:6200

ons is running ...

3) 启动ONS服务

[root@raw1 bin]# ./onsctl start

4) 使用debug 选项,可以查看详细信息,其中最有意义的就是能显示所有连接。

[root@raw1 bin]# ./onsctl debug

Number of onsconfiguration retrieved, numcfg = 2

onscfg[0]

{node = raw1, port = 6200}

Adding remote host raw1:6200

onscfg[1]

{node = raw2, port = 6200}

Adding remote host raw2:6200

HTTP/1.1 200 OK

Content-Length: 1357

Content-Type: text/html

Response:

======== ONS ========

Listeners:

NAME BIND ADDRESS PORT FLAGS SOCKET

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

Local 127.000.000.001 6100 00000142 7

Remote 010.085.010.119 6200 00000101 8

Request No listener

Server connections:

ID IP PORT FLAGS SENDQ WORKER BUSY SUBS

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

1 010.085.010.121 6200 00104205 0 1 0

Client connections:

ID IP PORT FLAGS SENDQ WORKER BUSY SUBS

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

3 127.000.000.001 6100 0001001a 0 1 0

4 127.000.000.001 6100 0001001a 0 1 1

Pending connections:

ID IP PORT FLAGS SENDQ WORKER BUSY SUBS

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

0 127.000.000.001 6100 00020812 0 1 0

Worker Ticket: 3/3, Idle: 180

THREAD FLAGS

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

17faba0 00000012

67f6ba0 00000012

32d6ba0 00000012

Resources:

Notifications:

Received: 1, in Receive Q: 0, Processed: 1, in Process Q: 0

Pools:

Message: 24/25 (1), Link: 25/25 (1), Subscription: 24/25 (1)

[root@raw1 bin]#

4.3 srvctl

该命令是RAC维护中最常用的命令,也是最复杂的命令。 这个工具可以操作下面的几种资源:DatabaseInstanceASMServiceListener 和 Node Application,其中Node application又包括GSDONSVIP。 这些资源除了使用srvctl工具统一管理外,某些资源还有自己独立的管理工具,比如ONS可以使用onsctl命令进行管理;Listener 可以通过lsnrctl 管理。

[root@raw1 bin]# ./srvctl --help

Usage: srvctl []

command: enable|disable|start|stop|relocate|status|add|remove|modify|getenv|setenv|unsetenv|config

objects: database|instance|service|nodeapps|asm|listener

For detailed help on each command and object and its options use:

srvctl -h

4.3.1 使用config查看配置

1)查看数据库配置

-- 不带任何参数时,显示OCR中注册的所有数据库

[root@raw1 bin]# ./srvctl config database

raw

-- 使用-d 选项,查看某个数据库配置

[root@raw1 bin]# ./srvctl config database -d raw

raw1 raw1 /u01/app/oracle/product/10.2.0/db_1

raw2 raw2 /u01/app/oracle/product/10.2.0/db_1

注: 该输出结果显示数据库raw2个节点组成,各自实例名交raw1raw2. 两个实例的$ORACLE_HOME/u01/app/oracle/product/10.2.0/db_1

-- 使用-a 选项查看配置的详细信息

[root@raw1 bin]# ./srvctl config database -d raw

raw1 raw1 /u01/app/oracle/product/10.2.0/db_1

raw2 raw2 /u01/app/oracle/product/10.2.0/db_1

[root@raw1 bin]# ./srvctl config database -d raw -a

raw1 raw1 /u01/app/oracle/product/10.2.0/db_1

raw2 raw2 /u01/app/oracle/product/10.2.0/db_1

DB_NAME: raw

ORACLE_HOME: /u01/app/oracle/product/10.2.0/db_1

SPFILE: +DATA/raw/spfileraw.ora

DOMAIN: null

DB_ROLE: null

START_OPTIONS: null

POLICY: AUTOMATIC

ENABLE FLAG: DB ENABLED

2)查看Node Application的配置

-- 不带任何参数,返回节点名,实例名和$ORACLE_HOME

[root@raw1 bin]# ./srvctl config nodeapps -n raw1

raw1 raw1 /u01/app/oracle/product/10.2.0/db_1

-- 使用-a 选项,查看VIP 配置

[root@raw1 bin]# ./srvctl config nodeapps -n raw1 -a

VIP exists.: /raw1-vip/10.85.10.122/255.255.255.0/eth0

-- 使用-g 选项, 查看GSD

[root@raw1 bin]# ./srvctl config nodeapps -n raw1 -g

GSD exists.

-- 使用-s 选项,查看ONS:

[root@raw1 bin]# ./srvctl config nodeapps -n raw1 -s

ONS daemon exists.

-- 使用-l 选项,查看Listener:

[root@raw1 bin]# ./srvctl config nodeapps -n raw1 -l

Listener exists.

3) 查看 Listener.

[root@raw1 bin]# ./srvctl config listener -n raw1

raw1 LISTENER_RAW1

[root@raw1 bin]# ./srvctl config listener -n raw2

raw2 LISTENER_RAW2

4) 查看ASM

[root@raw1 bin]# ./srvctl config asm -n raw1

+ASM1 /u01/app/oracle/product/10.2.0/db_1

[root@raw1 bin]# ./srvctl config asm -n raw2

+ASM2 /u01/app/oracle/product/10.2.0/db_1

5) 查看Service

-- 查看数据库所有service配置

[root@raw1 bin]# ./srvctl config service -d raw -a

dmm PREF: raw2 AVAIL: raw1 TAF: basic

-- 查看某个Service 配置

[root@raw1 bin]# ./srvctl config service -d raw -s dmm

dmm PREF: raw2 AVAIL: raw1

-- 使用-a 选项,查看TAF 策略

[root@raw1 bin]# ./srvctl config service -d raw -s dmm -a

dmm PREF: raw2 AVAIL: raw1 TAF: basic

4.3.2 使用add 添加对象

一般情况下,应用层资源都是在图形界面的帮助下注册到OCR中的,比如VIPONS实在安装最后阶段创建的,而数据库,ASM是执行DBCA的过程中自动注册到OCR中的,Listener是通过netca工具。 但是有些时候需要手工把资源注册到OCR中。 这时候就需要add 命令了。

1) 添加数据库

[root@raw1 bin]# ./srvctl add database -d dmm -o $ORACLE_HOME

2) 添加实例

[root@raw1 bin]# ./srvctl add instance -d dmm -n rac1 -i dmm1

[root@raw1 bin]# ./srvctl add instance -d dmm -n rac2 -i dmm2

3) 添加服务,需要使用4个参数

-s : 服务名

-r:首选实例名

-a:备选实例名

-PTAF策略,可选值为None(缺省值),Basicpreconnect

[root@raw1 bin]# ./srvctl add service -d dmm -s dmmservice -r rac1 -a rac2 -P BASIC

4) 确认添加成功

[root@raw1 bin]# ./srvctl config service -d dmm -s dmmservice -a

4.3.3 使用enable/disable 启动,禁用对象

缺省情况下数据库,实例,服务,ASM都是随着CRS的启动而自启动的,有时候由于维护的需要,可以先关闭这个特性。

1) 配置数据库随CRS的启动而自动启动

-- 启用数据库的自启动:

[root@raw1 bin]# ./srvctl enable database -d raw

--查看配置

[root@raw1 bin]# ./srvctl config database -d raw -a

raw1 raw1 /u01/app/oracle/product/10.2.0/db_1

raw2 raw2 /u01/app/oracle/product/10.2.0/db_1

DB_NAME: raw

ORACLE_HOME: /u01/app/oracle/product/10.2.0/db_1

SPFILE: +DATA/raw/spfileraw.ora

DOMAIN: null

DB_ROLE: null

START_OPTIONS: null

POLICY: AUTOMATIC

ENABLE FLAG: DB ENABLED

-- 禁止数据库在CRS启动后自启动,这时需要手动启动

[root@raw1 bin]# ./srvctl disable database -d raw

2) 关闭某个实例的自动启动

[root@raw1 bin]# ./srvctl disable instance -d raw -i raw1

[root@raw1 bin]# ./srvctl enable instance -d raw -i raw1

-- 查看信息

[root@raw1 bin]# ./srvctl config database -d raw -a

raw1 raw1 /u01/app/oracle/product/10.2.0/db_1

raw2 raw2 /u01/app/oracle/product/10.2.0/db_1

DB_NAME: raw

ORACLE_HOME: /u01/app/oracle/product/10.2.0/db_1

SPFILE: +DATA/raw/spfileraw.ora

DOMAIN: null

DB_ROLE: null

START_OPTIONS: null

POLICY: AUTOMATIC

ENABLE FLAG: DB ENABLED

3) 禁止某个服务在实例上运行

[root@raw1 bin]# ./srvctl enable service -d raw -s rawservice -i raw1

[root@raw1 bin]# ./srvctl disable service -d raw -s rawservice -i raw1

-- 查看

[root@raw1 bin]# ./srvctl config service -d raw -a

dmm PREF: raw2 AVAIL: raw1 TAF: basic

4.3.4 使用remove 删除对象

使用remove命令删除的是对象在OCR中的定义信息,对象本省比如数据库的数据文件等不会被删除,以后随时可以使用add命令重新添加到OCR中。

1) 删除Service,在删除之前,命令会给出确定提示

[root@raw1 bin]# ./srvctl remove service -d raw -s rawservice

2)删除实例,删除之前同样会给出提示

[root@raw1 bin]# ./srvctl remove instance -d raw -i raw1

3)删除数据库

[root@raw1 bin]# ./srvctl remove database -d raw

4.3.5 启动,停止对象与查看对象

RAC 环境下启动,关闭数据库虽然仍然可以使用SQL/PLUS方法,但是更推荐使用srvctl命令来做这些工作,这可以保证即使更新CRS中运行信息,可以使用start/stop 命令启动,停止对象,然后使用status 命令查看对象状态。

1) 启动数据库,默认启动到open状态

[root@raw1 bin]# ./srvctl start database -d raw

2) 指定启动状态

[root@raw1 bin]# ./srvctl start database -d raw -i raw1 -o mount

[root@raw1 bin]# ./srvctl start database -d raw -i raw1 -o nomount

3) 关闭对象,并指定关闭方式

[root@raw1 bin]# ./srvctl stop instance -d raw -i raw1 -o immediate

[root@raw1 bin]# ./srvctl stop instance -d raw -i raw1 -o abort

4) 在指定实例上启动服务:

[root@raw1 bin]# ./srvctl start service -d raw -s rawservice -i raw1

-- 查看服务状态

[root@raw1 bin]# ./srvctl status service -d raw -v

5) 关闭指定实例上的服务

[root@raw1 bin]# ./srvctl stop service -d raw -s rawservice -i raw1

-- 查看服务状态

[root@raw1 bin]# ./srvctl status service -d raw -v

4.3.6 跟踪srvctl

Oracle 10g中要跟踪srvctl 非常简单,只要设置srvm_trace=true 这个OS环境变量即可,这个命令的所有函数调用都会输出到屏幕上,可以帮助用户进行诊断。

[root@raw1 bin]# export SRVM_TRACE=TRUE

[root@raw1 bin]# ./srvctl config database -d raw

/u01/app/oracle/product/crs/jdk/jre/bin/java -classpath /u01/app/oracle/product/crs/jlib/netcfg.jar:/u01/app/oracle/product/crs/jdk/jre/lib/rt.jar:/u01/app/oracle/product/crs/jdk/jre/lib/i18n.jar:/u01/app/oracle/product/crs/jlib/srvm.jar:/u01/app/oracle/product/crs/jlib/srvmhas.jar:/u01/app/oracle/product/crs/jlib/srvmasm.jar:/u01/app/oracle/product/crs/srvm/jlib/srvctl.jar -DTRACING.ENABLED=true -DTRACING.LEVEL=2 oracle.ops.opsctl.OPSCTLDriver config database -d raw

[main] [6:58:44:858] [OPSCTLDriver.setInternalDebugLevel:165] tracing is true at level 2 to file null

[main] [6:58:44:911] [OPSCTLDriver.:95] Security manager is set

[main] [6:58:44:955] [CommandLineParser.parse:173] parsing cmdline args

[main] [6:58:44:959] [CommandLineParser.parse2WordCommandOptions:940] parsing 2-word cmdline

[main] [6:58:44:961] [OPSCTLDriver.execute:174] executing srvctl command

[main] [6:58:44:963] [OPSCTLDriver.execute:199] executing 2-word command verb=10 noun=101

[main] [6:58:44:995] [Action.getOPSConfig:162] get db config for: raw

[main] [6:58:45:2] [CommandLineParser.obtainOPSConfig:1410] srvctl: get db config for: raw

[main] [6:58:45:47] [GetActiveNodes.create:213] Going into GetActiveNodes constructor...

... ...

4.4 恢复

假设OCR磁盘和Votedisk磁盘全部破坏,并且都没有备份,该如何恢复, 这时最简单的方法就是重新初始话OCRVotedisk, 具体操作如下:

4.4.1 停止所有节点的Clusterware Stack

Crsctl stop crs;

4.4.2 分别在每个节点用root用户执行$CRS_HOMEinstallrootdelete.sh脚本

4.4.3 在任意一个节点上用root用户执行$CRS_HOMEinstallrootinstall.sh 脚本

4.4.4 在和上一步同一个节点上用root执行$CRS_HOMEroot.sh脚本

4.4.5 在其他节点用root执行行$CRS_HOMEroot.sh脚本

4.4.6 netca 命令重新配置监听,确认注册到Clusterware

#crs_stat -t -v

到目前为止,只有ListenerONS,GSD,VIP 注册到OCR中,还需要把ASM, 数据库都注册到OCR中。

4.4.7 OCR中添加ASM

#srvctl add asm -n rac1 -i +ASM1 -o /u01/app/product/database

#srvctl add asm -n rac2 -i +ASM2 -o /u01/app/product/database

4.4.8 启动ASM

#srvctl start asm -n rac1

#srvctl start asm -n rac2

若在启动时报ORA-27550错误。是因为RAC无法确定使用哪个网卡作为Private Interconnect,解决方法:

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn