Oracle 数据库云服务器命令参考
第 3 部分:管理存储单元
作者:Arup Nanda
详细说明 CellCLI 和 DCLI 命令及其所有参数和选项,以及如何使用它们管理存储单元
> 返回系列目录
(本指南用于培训:旨在推动从 DBA 到 DMA 的转变,为培训 DMA 提供快速参考。它无意替代 Oracle 提供的官方手册或其他文档。本指南中的信息未经 Oracle 验证,不受 Oracle 支持,您在使用时只能风险自负。)
在前两部分中,您了解了 Oracle 数据库云服务器的工作原理,了解了其各种组件以及适用于每种组件的命令类别。其中一个组件就是管理磁盘的存储单元。对于许多转换为 DMA 角色的 DBA,也许最大的挑战就是适应许多 DBA 以前根本不需要面对的存储操作。
数据库云服务器中的存储单元是通过 CellCLI 和 DCLI 这两个工具来管理的。您已在第 2 部分首次配置数据库云服务器的操作过程中初步了解了 CellCLI 命令。在本部分中,您将了解这些工具的详细命令。在此过程中,您很可能会感到这比您想像的要容易。
基本介绍
cellcli 命令是在存储单元中(而不是在计算节点中)从 Linux 命令行调用的。类似于 SQL*Plus 显示 SQL> 提示符,CellCLI 显示 CellCLI> 提示符,您将在该提示符下输入命令。
# cellcli
CellCLI: Release 11.2.2.2.0 - Production on Fri Apr 01 10:39:58 EDT 2011
Copyright (c) 2007, 2009, Oracle. All rights reserved.
Cell Efficiency Ratio: 372M
这将显示 CellCLI 提示符,等待您在此输入命令。
CellCLI> … enter your commands here …
HELP
您可能希望先输入这么一个命令,它可以让您了解所有其他可用命令。让我们获取一些帮助吧:
CellCLI> help
HELP [topic]
Available Topics:
ALTER
ALTER ALERTHISTORY
ALTER CELL
… output truncated …
如果您想获取有关特定命令的更为上下文相关的帮助:
CellCLI> help list
顺便提一句,您无需在 CellCLI 命令提示符下就可以发出命令。如果您知道想要发出的命令,可以使用 -e 选项直接从 Linux 命令提示符调用该命令。
# cellcli -e help
或者,您可以使用典型的 Linux 类型的命令终止符,如下所示:
[celladmin@prolcel14 ~]# cellcli << EOF
> list cell
> EOF
CellCLI: Release 11.2.2.2.2 - Production on Sat May 14 16:28:43 EDT 2011
Copyright (c) 2007, 2009, Oracle. All rights reserved.
Cell Efficiency Ratio: 160M
CellCLI> list cell
prolcel14 online
[celladmin@prolcel14 ~]#
要从 CellCLI 退出,请使用命令 exit 或 quit。
记录输出
和 SQL*Plus 一样,CellCLI 也有一个 spool 命令用来将输出记录到文件。以下是一个示例,您希望将输出记录到一个名为 mycellcli.txt 的文件
CellCLI> spool mycellcli.txt
要追加到一个已有的文件,请使用 append
CellCLI> spool mycellcli.txt append
要覆盖该文件,请使用 replace
CellCLI> spool mycellcli.txt replace
要停止假脱机输出,只需执行 SPOOL OFF。
若想知道输出正在写入到哪个文件,怎么办?使用 SPOOL,不带任何参数。这将显示该文件的名称。
CellCLI> spool
currently spooling to mycellcli.txt
续行符
在本文中稍后您将了解到,可以在 CellCLI 中执行复杂查询。其中一些查询可能跨多行。由于没有类似于 SQL 中的“;”这样的命令终止符,只要结束一行,CellCLI 就会立即开始解释。要确保 CellCLI 理解该行不只包括当前行,可以使用续行符“-”,就像您在 SQL*Plus 中所做的那样。
CellCLI> spool -
> mycellcli.txt
注意前面的延续提示符“>”。不过与 SQL*Plus 不同的是,CellCLI 不会显示接续行的行号。
编写脚本
若要在 CellCLI 中执行标准命令,可以用命令创建一个脚本文件,然后使用 START 或 @ 命令执行该脚本。例如,要执行一个名为 listdisks.cli 的脚本,可执行以下命令中的一个:
CellCLI> @listdisks.cli
CellCLI> start listdisks.cli
注意,在此对扩展名没有限制。我使用 cli 只是为了方便,它可以是任何其他名称。
您还可以使用常用的 Linux redirection 命令。在以下示例中,您将所有命令放在 mycellci.commands 文件中,并且希望将结果假脱机输出到 mycellci.out。这有益于自动监视系统。
# cellcli <mycellci.commands >mycellci.out
注释
还可以在脚本中添加注释。注释以 REM、REMARK 或“--”开头,如下所示:
REM This is a comment
REMARK This is another comment
-- This is yet another comment
list physicaldisk
环境
您可以定义两个环境设置
- dateformat — 用于显示日期的显示格式。
CellCLI> set dateformat local
Date format was set: Apr 1, 2011 3:35:17 PM.
CellCLI> set dateformat standard
Date format was set: 2011-04-01T15:35:30-04:00.
echo — 用于打开或关闭脚本命令显示。
CellCLI> set echo on
CellCLI> set echo off
我相信您一定能发现,这与您无疑非常熟悉的 SQL*Plus 工具中的控制命令有些类似。学习的过程不会很难。了解基本命令之后,我们来探究一些更高级的命令。
基本结构
CellCLI 命令的基本结构如下所示:
<谓词> <对象> <修饰符> <筛选器>
- 谓词是您希望执行哪种操作,例如显示某些内容。
- 对象是您希望对谁执行操作,例如磁盘。
- 修饰符(可选)显示您希望如何修饰操作,例如所有磁盘或特定磁盘等等。
- 筛选器(可选)与 SQL 语句的 WHERE 谓词类似,使用 WHERE 子句。
您最常用并且需要记忆的只是几个主要谓词。它们是:
- LIST — 显示某些内容,如磁盘、统计信息、资源管理器计划等等
- CREATE — 创建某项内容,如单元磁盘、阈值
- ALTER — 更改某项已建立的内容,如更改磁盘大小
- DROP — 删除某项内容,如删除磁盘
- DESCRIBE — 显示对象的各种属性
还有更多的谓词,但这五个是 CellCLI 命令中最常用的。
让我们看一看它们在常规操作中的使用方法。在下文中,您将了解如何对各种存储组件(如物理磁盘、网格磁盘、LUN 等等)执行各种管理操作(查看、创建、删除和修改)。
物理磁盘操作
存储单元总是与磁盘有关。在前两个部分中您已了解到,每个存储单元有 12 个物理磁盘。要显示此特定单元中的物理磁盘,请执行以下命令:
CellCLI> list physicaldisk
34:0 E1K5JW normal
34:1 E1L9NC normal
… output truncted …
[4:0:2:0] 5080020000f3e16FMOD2 normal
[4:0:3:0] 5080020000f3e16FMOD3 normal
您可能注意到了,此输出上面没有标题,这使我们难以理解这些值的含义。幸运的是,稍后会看到我们能够纠正这一问题。现在,我们要关注其他事情:要了解有关每个磁盘的更多详细信息,可以使用 detail 修饰符。这将显示有关每个磁盘的详细信息。下面是部分输出:
CellCLI> list physicaldisk detail
name: 34:0
deviceId: 33
diskType: HardDisk
enclosureDeviceId: 34
errMediaCount: 0
errOtherCount: 0
foreignState: false
luns: 0_0
makeModel: "SEAGATE ST360057SSUN600G"
physicalFirmware: 0805
physicalInsertTime: 2011-01-21T14:32:35-05:00
physicalInterface: sas
physicalSerial: XXXXXX
physicalSize: 558.9109999993816G
slotNumber: 0
status: normal
name: 34:1
deviceId: 32
diskType: HardDisk
enclosureDeviceId: 34
errMediaCount: 0
errOtherCount: 0
foreignState: false
luns: 0_1
makeModel: "SEAGATE ST360057SSUN600G"
physicalFirmware: 0805
physicalInsertTime: 2011-01-21T14:32:40-05:00
physicalInterface: sas
physicalSerial: XXXXXX
physicalSize: 558.9109999993816G
slotNumber: 1
status: normal
… output truncated …
输出显示每个磁盘的详细信息,这使得内容有些难以辨识。很多时候当您遇到特定磁盘的问题时,您可能希望找到特定磁盘的详细信息。为此,可使用该磁盘的名称作为另一个修饰符。在常规和 detail 这两种类型的命令中都会显示该名称。
CellCLI> list physicaldisk 34:0
CellCLI> list physicaldisk 34:0 detail
Attributes
尽管上面的命令有助于阅读,但仍有一些不足之处。
- 还有许多其他详细信息您没有得到。例如,没有显示出磁盘的 RPM。
- 如果要查看多个磁盘,结果不是以表格格式显示。
要获取这些详细信息,可以在列表中指定命名属性。您可以在修饰符 attributes 之后指定这些属性。在此示例中,这些属性有磁盘类型(硬盘或闪存磁盘)、模型、RPM、端口和状态:
CellCLI> list physicaldisk attributes name, disktype, makemodel, physicalrpm, physicalport, status
34:0 HardDisk "SEAGATE ST360057SSUN600G" normal
34:1 HardDisk "SEAGATE ST360057SSUN600G" normal
… output truncated …
[4:0:2:0] FlashDisk "MARVELL SD88SA02" normal
[4:0:3:0] FlashDisk "MARVELL SD88SA02" normal
这次的输出好多了,它显示了针对每个磁盘的详细信息。这种类型的输出在一些脚本中很有用,例如在一些脚本中,您可能希望提取详细信息并以预先指定的方式对其进行格式化或对其进行分析以便进行进一步的处理。
Describe
尽管您可能很欣赏上面的输出,因为使用属性极大提高了输出的可读性,但您可能还想知道这些属性的有效名称。不同的对象有各不相同的属性名。(例如,diskType 只与磁盘有关,而与单元无关。)
您是否需要记住所有这些属性以及它们的相关上下文?完全不需要。另一个谓词 DESCRIBE 此时就派上用场了;它显示对象的属性,就像 SQL*Plus 命令中的 describe 命令作用于表来显示列一样。下面说明如何显示 physicaldisk 对象的属性。记住,与 SQL*Plus 不同,此命令是 describe;不能将其缩写为 desc。
CellCLI> describe physicaldisk
name
ctrlFirmware
ctrlHwVersion
deviceId
diskType
enclosureDeviceId
errCmdTimeoutCount
errHardReadCount
errHardWriteCount
errMediaCount
errOtherCount
errSeekCount
errorCount
foreignState
hotPlugCount
lastFailureReason
luns
makeModel
notPresentSince
physicalFirmware
physicalInsertTime
physicalInterface
physicalPort
physicalRPM
physicalSerial
physicalSize
physicalUseType
sectorRemapCount
slotNumber
status
如果您希望显示物理磁盘的所有属性而不是少数几个属性,该怎么办?您可以显式列出所有属性名;或者更简单地,可以只使用选项 all,如下所示。
CellCLI> list physicaldisk attributes all
34:0 33 HardDisk 34 0 0 false 0_0 "SEAGATE ST360057SSUN600G" 0805 2011-01-21T14:32:35-05:00 sas E1K5JW 558.9109999993816G 0 normal
34:1 32 HardDisk 34 0 0 false 0_1 "SEAGATE ST360057SSUN600G" 0805 2011-01-21T14:32:40-05:00 sas E1L9NC 558.9109999993816G 1 normal
… output truncated …
[1:0:0:0] FlashDisk 4_0 "MARVELL SD88SA02" D20Y 2011-01-21T14:33:32-05:00 sas 5080020000f21a2FMOD0 22.8880615234375G "PCI Slot: 4; FDOM: 0" normal
[1:0:1:0] FlashDisk 4_1 "MARVELL SD88SA02" D20Y 2011-01-21T14:33:32-05:00 sas 5080020000f21a2FMOD1 22.8880615234375G
… output truncated …
此输出可能不便于阅读,但如果您愿意编写一个脚本对这些详细信息进行分析并采取纠正措施,则它会变得非常有用。但在许多情况下,您可能希望只查看某些属性,而不是所有属性。在上一小节中,您已了解了如何仅选择其中一些属性。
检查错误
我们看一下命名属性子句的实际应用。您可能会不时看到弹出有关磁盘驱动器的错误,这时也许就该更换磁盘驱动器了。要显示与错误有关的属性,可以选择一个脚本来仅选择几个与错误有关的属性,如下所示:
CellCLI> list physicaldisk attributes name,disktype,errCmdTimeoutCount,errHardReadCount,errHardWriteCount
34:0 HardDisk
… output truncated …
34:11 HardDisk
[1:0:0:0] FlashDisk
… output truncated …
[4:0:3:0] FlashDisk
所有这些磁盘上都没有错误;因此您会看到相应字段都保持空白。
筛选
如果您只关注某个类型的磁盘或想要筛选某个属性,该怎么办?可以使用 SQL 式的谓词 WHERE 子句。在此您想查看所有硬盘的某些属性。
CellCLI> list physicaldisk attributes name, physicalInterface, physicalInsertTime -
> where disktype = 'HardDisk'
34:0 sas 2011-01-21T14:32:35-05:00
34:1 sas 2011-01-21T14:32:40-05:00
34:2 sas 2011-01-21T14:32:45-05:00
34:3 sas 2011-01-21T14:32:50-05:00
34:4 sas 2011-01-21T14:32:55-05:00
34:5 sas 2011-01-21T14:33:01-05:00
34:6 sas 2011-01-21T14:33:06-05:00
34:7 sas 2011-01-21T14:33:11-05:00
34:8 sas 2011-01-21T14:33:16-05:00
34:9 sas 2011-01-21T14:33:21-05:00
34:10 sas 2011-01-21T14:33:26-05:00
34:11 sas 2011-01-21T14:33:32-05:00
如果要更改日期和时间的显示方式,可以设置 dateformat 环境变量。
CellCLI> set dateformat local
Date format was set: Apr 1, 2011 4:05:54 PM.
CellCLI> list physicaldisk attributes name, physicalInterface, physicalInsertTime -
> where disktype = 'HardDisk'
34:0 sas Jan 21, 2011 2:32:35 PM
34:1 sas Jan 21, 2011 2:32:40 PM
… output truncated …
还可以为筛选指定非操作符,即 !=。
CellCLI> list physicaldisk where diskType='Flashdisk'
[1:0:0:0] 5080020000f21a2FMOD0 normal
[1:0:1:0] 5080020000f21a2FMOD1 normal
… output truncated …
CellCLI> list physicaldisk where diskType!='Flashdisk'
34:0 E1K5JW normal
34:1 E1L9NC normal
… output truncated …
修改
了解了如何显示对象之后,下面看看如何修改属性。物理磁盘的属性一般不可修改,只有一个例外:服务 LED 的显示。您可以通过执行以下命令打开或关闭磁盘 34:0 和 34:1 的服务 LED。
CellCLI> alter physicaldisk 34:0,34:1 serviceled on
CellCLI> alter physicaldisk 34:0,34:1 serviceled off
要打开该单元中所有硬盘上的服务 LED,请使用以下命令:
CellCLI> alter physicaldisk harddisk serviceled on
在所有磁盘(硬盘和闪存磁盘)上:
CellCLI> alter physicaldisk all serviceled on
创建
没有物理磁盘的创建操作,因为物理磁盘是数据库云服务器自带的。
删除
也没有物理磁盘的删除操作,因为这必须由工程师来执行。
管理 LUN
从前面的部分中,您已了解到物理磁盘划分为一些 LUN。我们来看一看常用的 LUN 管理命令。要显示此单元中的 LUN,请使用以下命令:
CellCLI> list lun
0_0 0_0 normal
0_1 0_1 normal
0_2 0_2 normal
… output truncated …
与物理磁盘中一样,您也可以使用以下命令显示这些 LUN 的详细信息:
CellCLI> list lun detail
name: 0_0
cellDisk: CD_00_cell01
deviceName: /dev/sda
diskType: HardDisk
id: 0_0
isSystemLun: TRUE
lunAutoCreate: FALSE
lunSize: 557.861328125G
lunUID: 0_0
physicalDrives: 34:0
raidLevel: 0
lunWriteCacheMode: "WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU"
status: normal
name: 0_1
cellDisk: CD_01_cell01
… output truncated …
如果要了解特定 LUN 的详细信息,请使用该 LUN 的名称作为修饰符。
CellCLI> list lun 0_0 detail
与前面的情况类似,还可以通过选择所有属性以表格形式显示 LUN:
CellCLI> list lun attributes all
0_0 CD_00_cell01 /dev/sda HardDisk 0_0 TRUE FALSE 557.861328125G 0_0 34:0 0 "WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU" normal
… output truncated …
0_11 CD_11_cell01 /dev/sdl HardDisk 0_11 FALSE FALSE 557.861328125G 0_11 34:11 0 "WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU" normal
1_0 FD_00_cell01 /dev/sdq FlashDisk 1_0 FALSE FALSE 22.8880615234375G 100.0 [2:0:0:0] normal
… output truncated …
5_3 FD_15_cell01 /dev/sdx FlashDisk 5_3 FALSE FALSE 22.8880615234375G 100.0 [3:0:3:0] normal
如果要查看某个 LUN 的可用属性,请使用 describe 命令。
CellCLI> describe LUN
name
cellDisk
deviceName
diskType
errorCount
id
isSystemLun
lunAutoCreate
lunSize
lunUID
overProvisioning
physicalDrives
raidLevel
lunWriteCacheMode
status
您可以使用其中任何属性取代“all”。
CellCLI> list lun attributes name, cellDisk, raidLevel, status
0_0 CD_00_prolcel14 0 normal
0_1 CD_01_prolcel14 0 normal
0_2 CD_02_prolcel14 0 normal
… output truncated …
修改
LUN 的属性一般不可修改,只有一个例外:在发生故障后重新启用 LUN。如果某个 LUN 在故障被修复后不能自动重新启用,您可以通过以下命令手动重新启用它:
CEllCLI> alter lun 0_0 reenable
有时 LUN 可能实际已启用,但显示的却不是这样。要与系统就此事实达成同步,您可能需要强制启用该 LUN。可以使用 force 修饰符。
CEllCLI> alter lun 0_0 reenable force
删除
在 CellCLI 中没有针对 LUN 的删除操作。
创建
类似地,您不会在 CellCLI 中创建 LUN,因此没有 create lun 命令。
管理单元
从前面的部分中,您已了解存储单元(简称“单元”)是磁盘所在的位置,这些单元被提供给数据库节点。数据库云服务器的全机架包含 14 个这样的单元。要显示有关单元的信息,请执行 list cell 命令。
CellCLI> list cell
Cell01 online
输出的内容不多,只列出单元的名称及其是否联机。要显示更多信息,请使用 detail 修饰符。
CellCLI> list cell detail
name: cell01
bmcType: IPMI
cellVersion: OSS_11.2.0.3.0_LINUX.X64_101206.2
cpuCount: 24
fanCount: 12/12
fanStatus: normal
id: XXXXXXXXXX
interconnectCount: 3
interconnect1: bondib0
iormBoost: 0.0
ipaddress1: 172.32.128.9/24
kernelVersion: 2.6.18-194.3.1.0.3.el5
locatorLEDStatus: off
makeModel: SUN MICROSYSTEMS SUN FIRE X4270 M2 SERVER SAS
metricHistoryDays: 7
notificationMethod: mail
notificationPolicy: critical,warning,clear
offloadEfficiency: 372.1M
powerCount: 2/2
powerStatus: normal
smtpFrom: "Proligence Test Database Machine"
smtpFromAddr: oncall.dba@proligence.com
smtpPort: 25
smtpPwd: ******
smtpServer: standardrelay.proligence.com
smtpToAddr: oncall.dba@proligence.com,oncall.unix@proligence.com,oncall.storage@proligence.com
smtpUser:
smtpUseSSL: FALSE
status: online
temperatureReading: 24.0
temperatureStatus: normal
upTime: 32 days, 4:44
cellsrvStatus: running
msStatus: running
rsStatus: running
当您在本节稍后探究单元修改时,您将了解所有这些属性的含义。要在一行中以表格形式显示输出,如同物理磁盘的情况,请使用 attributes 修饰符:
CellCLI> list cell attributes all
cell01 IPMI OSS_11.2.0.3.0_LINUX.X64_101206.2 24 12/12 normal XXXXXXXX 3 bondib0 0.0 172.32.128.9/24 2.6.18-194.3.1.0.3.el5 off SUN MICROSYSTEMS SUN FIRE X4270 M2 SERVER SAS 7 mail critical,warning,clear 372.1M 2/2 normal "Proligence Test Database Machine" oncall.dba@proligence.com 25 ****** standardrelay.proligence.com oncall.dba@proligence.com,oncall.unix@proligence.com,oncall.storage@proligence.com FALSE online 25.0 normal 32 days, 21:52 running running running
输出显示为一行,包含所有属性。当然,和前面一样,您可以使用特定属性。要查看所有可用属性,请使用前面介绍过的 describe 命令。
CellCLI> describe cell
name modifiable
bmcType
cellNumber modifiable
cellVersion
comment modifiable
cpuCount
emailFormat modifiable
events modifiable
fanCount
fanStatus
id
interconnectCount
interconnect1 modifiable
interconnect2 modifiable
interconnect3 modifiable
interconnect4 modifiable
iormBoost
ipBlock modifiable
ipaddress1 modifiable
ipaddress2 modifiable
ipaddress3 modifiable
ipaddress4 modifiable
kernelVersion
locatorLEDStatus
location modifiable
makeModel
metricCollection modifiable
metricHistoryDays modifiable
notificationMethod modifiable
notificationPolicy modifiable
offloadEfficiency
powerCount
powerStatus
realmName modifiable
smtpFrom modifiable
smtpFromAddr modifiable
smtpPort modifiable
smtpPwd modifiable
smtpServer modifiable
smtpToAddr modifiable
smtpUser modifiable
smtpUseSSL modifiable
snmpSubscriber modifiable
status
temperatureReading
temperatureStatus
traceLevel modifiable
upTime
cellsrvStatus
msStatus
rsStatus
修改
上面的可修改一词表示特定属性可以用 ALTER 谓词修改。在这篇短文中不可能给出所有可能的组合,而且并非所有组合都是常用的;因此,我们来看看一些最常用的组合。
一个单元运行多个服务,例如 Restart Server、Management Server 和 Cell Services。要关闭单元,可以通过名称关闭特定服务,也可以关闭整个服务。要只关闭一个服务,例如 Restart Server 服务,请执行:
CellCLI> alter cell shutdown services rs
Stopping RS services...
The SHUTDOWN of RS services was successful.
要重新启动这个特定服务,请使用 restart 修饰符,如下所示:
CellCLI> alter cell restart services rs
Stopping RS services...
CELL-01509: Restart Server (RS) not responding.
Starting the RS services...
Getting the state of RS services...
Running
您可以随时通过检查状态来进行确认:
CellCLI> list cell attributes rsStatus
running
要关闭 Management Server,请执行:
CellCLI> alter cell shutdown services MS
要关闭 Cell Services,请执行:
CellCLI> alter cell shutdown services CELLSRV
如果您想关闭整个单元,怎么办?“all”修饰符是关闭所有服务的快捷方式:
CellCLI> alter cell shutdown services all
Stopping the RS, CELLSRV, and MS services...
The SHUTDOWN of services was successful.
要重新启动所有服务,请执行以下命令:
CellCLI> alter cell restart services all
Starting the RS, CELLSRV, and MS services...
Getting the state of RS services...
running
Starting CELLSRV services...
The STARTUP of CELLSRV services was successful.
Starting MS services...
The STARTUP of MS services was successful.
要打开或关闭单元机框上的 LED,请执行:
CellCLI> alter cell led on
CellCLI> alter cell led off
邮件设置
单元可通过发送电子邮件通知其状态。因此电子邮件的配置对于正确监视单元是至关重要的。在本节,您将了解如何完成这一工作。首先,验证单元中电子邮件配置的状态。
CellCLI> alter cell validate mail
CELL-02578: An error was detected in the SMTP configuration: CELL-05503: An error was detected during notification. The text of the associated internal error is: Could not connect to SMTP host: standardrelay.proligence.com, port: 25, response: 421.
The notification recipient is oncall.dba@proligence.com.
CELL-05503: An error was detected during notification. The text of the associated internal error is: Could not connect to SMTP host: standardrelay.proligence.com, port: 25, response: 421.
The notification recipient is oncall.unix@proligence.com.
CELL-05503: An error was detected during notification. The text of the associated internal error is: Could not connect to SMTP host: standardrelay.proligence.com, port: 25, response: 421.
The notification recipient is oncall.storage@proligence.com.
Please verify your SMTP configuration.
以上输出显示邮件设置不正确,意味着单元将不能准确发送监视所需的邮件。我们来正确配置邮件。
首先,配置发件人(即 Cell 07,本单元)的地址和名称。我们为它指定地址:cell07@proligence.com。在邮件服务器中可能有这个地址,也可能没有这个地址,这并不重要。收到电子邮件时,在发件人处将显示此地址。我们还要为发件人指定一个名称,即“Exadata Cell 07”,这将帮助我们在电子邮件中识别发件人。
CellCLI> alter cell smtpfromaddr='cell07@proligence.com'
Cell cell07 successfully altered
CellCLI> alter cell smtpfrom='Exadata Cell 07'
Cell cell07 successfully altered
然后,我们配置单元应将电子邮件发送到的地址。通常这是待命 DBA 或 DMA。也可以配置多个地址。
CellCLI> alter cell smtptoaddr='arup@proligence.com'
Cell cell07 successfully altered
单元可以使用文本或 html 格式发送邮件,可按如下方式配置发送格式。
CellCLI> alter cell emailFormat='text'
Cell cell07 successfully altered
CellCLI> alter cell emailFormat='html'
Cell cell07 successfully altered
一切准备好后,确认一下电子邮件是否正常工作。可以执行以下命令来验证电子邮件设置:
CellCLI> alter cell validate mail
Cell cell07 successfully altered
如果设置正确,您将从 cell07@proligence.com(您配置为发件人的邮件地址)收到一封邮件。以下是该电子邮件的正文。
This test e-mail message from Oracle Cell cell07 indicates successful configuration of your e-mail address and mail server.
您可能想知道该单元发出的是什么类型的电子邮件。以下是出现硬件故障时单元所发送的电子邮件:
以下是有关另一故障的电子邮件,此时由于闪存磁盘故障导致了单元磁盘故障。
BMC 管理
BMC(基板管理控制器)控制单元的各个组件。BMC 应始终运行。如果需要,可以通过执行以下命令重新启动它。如果 BMC 已在运行之中,该命令仍会重新引导它。
CellCLI> alter cell restart bmc
要确保 BMC 向单元发送警报以便显示出警报,请执行:
CellCLI> alter cell configurebmc
Cell Cell07 BMC configured successfully
单元还可以发送 SNMP 陷阱消息。任何基于 SNMP 陷阱的监视系统都可以接收和处理这些 SNMP 陷阱以显示有关单元的统计信息。要验证 SNMP 配置可用于自动服务请求 (ASR),请使用以下命令:
CellCLI> alter cell validate snmp type=ASR
Cell cell01 successfully altered
要通过 SNMP 启用自动服务请求生成,需要定义一个订阅方。示例如下:
CellCLI> alter cell snmpsubscriber=((host='snmp01.proligence.com,type=ASR'))
Cell cell01 successfully altered
您可能希望随时验证单元的固件,请执行以下命令:
CellCLI> alter cell validate configuration
Cell cell07 successfully altered
最后,若想将单元重置为出厂设置,请使用:
CellCLI> drop cell
如果您已在此单元中定义网格磁盘,则必须先删除这些网格磁盘。不然,可以使用以下命令强制删除它们。
CellCLI> drop cell force
记住,drop cell 命令将删除服务器中与单元相关的属性;它不会实际删除物理服务器。
创建
单元是在项目开始时创建的,通常通过自动安装脚本来完成。之后您不大可能会使用此命令,但为了内容完整起见,在此简要说明此命令。该命令是 create cell。以下是有关该命令的 help:
CellCLI> help create cell
Usage: CREATE CELL [<cellname>] [realmname=<realmvalue>,]
[interconnect1=<ethvalue>,] [interconnect2=<ethvalue>,]
[interconnect3=<ethvalue>,] [interconnect4=<ethvalue>,]
( ( [ipaddress1=<ipvalue>,] [ipaddress2=<ipvalue>,]
[ipaddress3=<ipvalue>,] [ipaddress4=<ipvalue>,] )
| ( [ipblock=<ipblkvalue>, cellnumber=<numvalue>] ) )
Purpose: Configures the cell network and starts services.
Arguments:
<cellname>: Name to be assigned to the cell.
Uses hostname if nothing is specified
<realmvalue>: Name of the realm this cell belongs to.
<ethvalue>: Value of the eth interconnect assigned to this network interconnect.
<ipvalue>: Value of the IP address to be assigned to this network interconnect.
<ipblkvalue>: Value of the IP block to determine IP address for the network.
<numvalue>: Number of the cell in this ip block.
管理单元磁盘
单元中的每个物理磁盘进一步作为单元磁盘提供。要显示此单元中的所有单元磁盘,请使用 list celldisk 命令,如下所示。
CellCLI> list celldisk
CD_00_prolcel14 normal
CD_01_prolcel14 normal
CD_02_prolcel14 normal
… output truncated …
此输出相当简明,没有多少有用的详细信息。可以使用 detail 修饰符来显示有关单元磁盘的更详细的信息。
CellCLI> list celldisk detail
name: CD_00_prolcel14
comment:
creationTime: 2011-04-27T15:11:27-04:00
deviceName: /dev/sda
devicePartition: /dev/sda3
diskType: HardDisk
errorCount: 0
freeSpace: 0
id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
interleaving: none
lun: 0_0
raidLevel: 0
size: 1832.59375G
status: normal
name: CD_01_prolcel14
… output truncated …
此输出一个接一个显示所有单元磁盘,这使得列表很长且可读性差。如果您想以表格格式一个单元磁盘一行地显示详细信息,请使用 attributes all 修饰符,如下所示:
CellCLI> list celldisk attributes all
CD_00_cell01 Mar 1, 2011 6:20:45 PM /dev/sda /dev/sda3 HardDisk 0 0 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx none 0_0 0 528.734375G normal
… output truncated …
FD_00_cell01 Jan 21, 2011 5:07:32 PM /dev/sdq /dev/sdq FlashDisk 0 0 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx none 1_0 22.875G normal
要了解各列,或者说此处显示的各个属性,请使用 describe 命令显示单元磁盘的属性。
CellCLI> describe celldisk
name modifiable
comment modifiable
creationTime
deviceName
devicePartition
diskType
errorCount
freeSpace
freeSpaceMap
id
interleaving
lun
physicalDisk
raidLevel
size
status
输出列按相同的顺序显示。您可以只从此列表选择几个属性,而不是全部属性。例如,可以只查看单元磁盘的名称和相应的 Linux 分区名。
CellCLI> list celldisk attributes name, devicePartition
CD_00_prolcel14 /dev/sda3
CD_01_prolcel14 /dev/sdb3
… output truncated …
同样,还可以使用 attributes 对输出内容进行筛选。在下面的示例中,您想要查看所有大于 23GB 的单元磁盘。
CellCLI> list celldisk attributes name, devicePartition where size>23G
CD_00_prolcel14 /dev/sda3
CD_01_prolcel14 /dev/sdb3
CD_02_prolcel14 /dev/sdc
CD_03_prolcel14 /dev/sdd
CD_04_prolcel14 /dev/sde
CD_05_prolcel14 /dev/sdf
CD_06_prolcel14 /dev/sdg
CD_07_prolcel14 /dev/sdh
CD_08_prolcel14 /dev/sdi
CD_09_prolcel14 /dev/sdj
CD_10_prolcel14 /dev/sdk
CD_11_prolcel14 /dev/sdl
修改
只有两个单元磁盘属性可以更改:comment 和 name。
假定您想向单元磁盘 FD_00_cell01 添加注释“Flash Disk”。您需要执行:
CellCLI> alter celldisk FD_00_cell01 comment='Flash Disk'
如果要更改所有硬盘上的注释,需要执行:
CellCLI> alter celldisk all harddisk comment=’Hard Disk’
CellDisk CD_00_cell01 successfully altered
CellDisk CD_01_cell01 successfully altered
… output truncated …
类似地,如果要更改所有闪存磁盘上的注释:
CellCLI> alter celldisk all flashdisk comment='Flash Disk'
删除
此命令极少使用,但当单元磁盘发生故障,您想删除单元磁盘并重新创建时,可能需要此命令。以下是如何删除名为 CD_00_cell01 的单元磁盘:
CellCLI> drop celldisk CD_00_cell01
如果单元磁盘包含网格磁盘,则 drop 命令将失败。要么删除网格磁盘(将在下一节中介绍),要么使用 force 选项。
CellCLI> drop celldisk CD_00_cell01 force
还可删除某些类型的所有单元磁盘(如硬盘或闪存磁盘)。
CellCLI> drop celldisk harddisk
CellCLI> drop celldisk flashdisk
或者删除全部磁盘:
CellCLI> drop celldisk all
管理网格磁盘
在前面的部分中,您已了解网格磁盘是从单元磁盘划分而来的,并且将网格磁盘作为磁盘提供给 ASM 实例,最终使用这些磁盘构建 ASM 磁盘组。
CellCLI> list griddisk
DBFS_DG_CD_02_prolcel14 active
DBFS_DG_CD_03_prolcel14 active
DBFS_DG_CD_04_prolcel14 active
… output truncated …
或者,可以获取特定网格磁盘的详细信息:
CellCLI> list griddisk DBFS_DG_CD_02_cell01 detail
name: DBFS_DG_CD_02_cell01
availableTo:
cellDisk: CD_02_cell01
comment:
creationTime: 2011-03-01T18:21:41-05:00
diskType: HardDisk
errorCount: 0
id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
offset: 528.734375G
size: 29.125G
status: active
与前面的情况一样,您还可以查看:
CellCLI> describe griddisk
name modifiable
availableTo modifiable
cellDisk
comment modifiable
creationTime
diskType
errorCount
id
offset
size modifiable
status
可以使用这些关键字显示网格磁盘的特定(而非所有)属性。以下是显示磁盘的名称、单元磁盘以及类型的命令:
CellCLI> list griddisk attributes name,cellDisk,diskType
DBFS_DG_CD_02_prolcel14 CD_02_prolcel14 HardDisk
DBFS_DG_CD_03_prolcel14 CD_03_prolcel14 HardDisk
DBFS_DG_CD_04_prolcel14 CD_04_prolcel14 HardDisk
… output truncated …
还可以使用以下命令显示所有属性:
CellCLI> list griddisk attributes all
如果您只想显示特定类型的属性的详细信息,可以在 attributes 修饰符后面使用筛选器。以下命令可显示大小为 476.546875GB 的所有网格磁盘:
CellCLI> list griddisk attributes name,cellDisk,status where size=476.546875G
PRORECO_CD_00_prolcel14 CD_00_prolcel14 active
PRORECO_CD_01_prolcel14 CD_01_prolcel14 active
PRORECO_CD_02_prolcel14 CD_02_prolcel14 active
PRORECO_CD_03_prolcel14 CD_03_prolcel14 active
… output truncated …
ASM 状态
有两个重要属性 describe 命令不会显示:
- ASMModeStatus — 当前 ASM 磁盘组是否在使用此网格磁盘。值 ONLINE 指示正在使用此网格磁盘。
- ASMDeactivationOutcome — 回想一下,可以停用网格磁盘,从而使其有效脱机。由于 ASM 镜像可确保数据位于另一磁盘上,这种磁盘脱机并不会丢失数据。不过,如果镜像脱机,或者不存在,则让此网格磁盘脱机会导致数据丢失。此属性显示是否可以停用网格磁盘而不丢失数据。值“Yes”指示您可以停用此网格磁盘而不会丢失数据。
CellCLI> list griddisk attributes name, ASMDeactivationOutcome, ASMModeStatus
DBFS_DG_CD_02_cell01 Yes ONLINE
DBFS_DG_CD_03_cell01 Yes ONLINE
DBFS_DG_CD_04_cell01 Yes ONLINE
… output truncated …
修改
只有 name、comment、Available To、status 和 size 是可修改的。我们来看看如何更改特定网格磁盘的注释:
CellCLI> alter griddisk PRORECO_CD_11_cell01 comment='Used for Reco';
GridDisk PRORECO_CD_11_cell01 successfully altered
您可以更改特定类型的所有网格磁盘(例如所有硬盘)的注释:
CellCLI> alter griddisk all harddisk comment='Hard Disk';
GridDisk DBFS_DG_CD_02_cell01 successfully altered
GridDisk DBFS_DG_CD_03_cell01 successfully altered
… output truncated …
使一个网格磁盘处于非活动状态将有效地使其相关 ASM 磁盘脱机。
CellCLI> alter griddisk PRORECO_CD_11_cell01 inactive
GridDisk PRORECO_CD_11_cell01 successfully altered
在此过程中,可以使用 force,此选项将强制使 ASM 磁盘脱机,而不管该磁盘上是否有使用中的数据。
CellCLI> alter griddisk PRORECO_CD_11_cell01 inactive force
此命令将等待 ASM 磁盘变成脱机状态。如果您不想等待,希望提示符立即重新出现,可以使用 nowait 子句。
CellCLI> alter griddisk PRORECO_CD_11_cell01 inactive nowait
您可以将其重新激活:
CellCLI> alter griddisk PRORECO_CD_11_cell01 active
GridDisk PRORECO_CD_11_cell01 successfully altered
删除
您很少需要删除网格磁盘,但某些情况下您可能想这么做(例如,如果要交换磁盘)。为此,您可以删除旧的网格磁盘并创建新的网格磁盘。以下是如何删除指定名称的网格磁盘。
CellCLI> drop griddisk DBFS_DG_CD_02_prolcel14
有时,您可能需要删除多个网格磁盘。您可以删除名称中带有特定前缀(如 DBFS)的所有网格磁盘。
CellCLI> drop griddisk prefix=DBFS
或者,您可以删除此单元中的所有网格磁盘:
CellCLI> drop griddisk all
有时,您可能需要只删除特定类型的所有网格磁盘(硬盘或闪存磁盘)。这时,可以执行以下命令之一:
CellCLI> drop griddisk flashdisk
CellCLI> drop griddisk harddisk
如果磁盘处于活动状态,则删除不了。示例如下:
CellCLI> drop griddisk PRORECO_CD_11_cell01;
CELL-02549: Grid disk is in use and FORCE is not specified for the operation.
在这种情况下,您可以使用 force 修饰符强制删除磁盘。
CellCLI> drop griddisk PRORECO_CD_11_cell01 force
GridDisk PRORECO_CD_11_cell01 successfully dropped
创建
您很少需要创建网格磁盘,但有时出于与删除网格磁盘相同的原因,您可能需要创建它们。create griddisk 命令可以完成这一任务。以下示例说明如何从特定单元磁盘创建网格磁盘。
CellCLI> create griddisk PRORECO_CD_11_cell01 celldisk=CD_11_cell01
GridDisk PRORECO_CD_11_cell01 successfully created
如果您需要在每个单元磁盘中创建一个网格磁盘,您可以逐个创建它们,也可以使用以下快捷方式:
CellCLI> create griddisk all prefix PRORECO
这将按照命名规则 <Prefix>_<Cell Disk Name>(通常这是数据库的名称)创建一个网格磁盘。但也可以使用磁盘类型(hard 或 flash)作为前缀代替数据库名称。
CellCLI> create griddisk all flashdisk prefix FLASH
您还可以指定大小(可以小于或等于单元磁盘的大小)。
CellCLI> create griddisk PRORECO_CD_11_cell01 celldisk=CD_11_cell01 size=100M
您可能希望指定较小的大小,以便在磁盘上保存较少的数据。
管理闪存磁盘
您可能还记得,每个储存单元随带了若干闪存磁盘卡,这些闪存磁盘卡作为单元磁盘提供给单元。每个单元只有一个闪存缓存,它由各种作为单元磁盘的闪存磁盘组成。要查看闪存缓存,请使用:
CellCLI> list flashcache
cell01_FLASHCACHE normal
当然,输出很简单,没有告诉我们多少信息。这时 detail 修饰符就可以派上用场,它可以显示许多其他信息:
CellCLI> list flashcache detail
name: cell01_FLASHCACHE
cellDisk: FD_13_cell01,FD_00_cell01,FD_10_cell01,FD_02_cell01,FD_06_cell01,FD_12_cell01,FD_05_cell01,FD_08_cell01,FD_15_cell01,FD_14_cell01,FD_07_cell01,FD_04_cell01,
FD_03_cell01,FD_11_cell01,FD_09_cell01,FD_01_cell01
creationTime: 2011-01-21T17:07:43-05:00
degradedCelldisks:
effectiveCacheSize: 365.25G
id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
size: 365.25G
status: normal
输出显示有关为单元配置的闪存缓存的各种重要数据:
- 配置成单元磁盘的闪存磁盘,如 FD_00_cell01、FD_01_cell01 等。可以通过 list celldisk 命令获取有关这些单元磁盘的信息,如前文所示。以下是另一个示例:
CellCLI> list celldisk FD_00_cell01 detail
name: FD_00_cell01
comment: "Flash Disk"
creationTime: 2011-01-21T17:07:32-05:00
deviceName: /dev/sdq
devicePartition: /dev/sdq
diskType: FlashDisk
errorCount: 0
freeSpace: 0
id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
interleaving: none
lun: 1_0
size: 22.875G
status: normal - 总大小是 365.25GB。
- 该单元磁盘可用。
还可以将输出放到一行中:
CellCLI> list flashcache attributes all
cell01_FLASHCACHE FD_13_cell01,FD_00_cell01,FD_10_cell01,FD_02_cell01,FD_06_cell01,FD_12_cell01,FD_05_cell01,FD_08_cell01,FD_15_cell01,FD_14_cell01,FD_07_cell01,
FD_04_cell01,FD_03_cell01,FD_11_cell01,FD_09_cell01,FD_01_cell01 2011-01-21T17:07:43-05:00 365.25G 686510aa-1f06-4ee7-ab84-743db1ae01d8 365.25G normal
与前面的情况一样,您可以查看闪存缓存有哪些可用属性。
CellCLI> describe flashcache
name
cellDisk
creationTime
degradedCelldisks
effectiveCacheSize
id
size
status
您可以只列出这些属性的一个子集:
CellCLI> list flashcache attributes degradedCelldisks
修改
闪存缓存没有修改操作。
创建
可以使用 create flashcache 命令创建闪存缓存。至少需要指定在闪存磁盘上创建的单元磁盘。
CellCLI> create flashcachecelldisk='FD_13_cell01,FD_00_cell01,FD_10_cell01,FD_02_cell01,FD_06_cell01,FD_12_cell01,FD_05_cell01,FD_08_cell01,FD_15_cell01,FD_14_cell01,FD_07_cell01,
FD_04_cell01,FD_03_cell01,FD_11_cell01,FD_09_cell01,FD_01_cell01'
如果您想使用所有基于闪存的单元磁盘,可以使用:
CellCLI> create flashcache all
Flash cache cell01_FLASHCACHE successfully created
指定特定大小:
CellCLI> create flashcache all size=365.25G
如果您只想使用几个单元磁盘作为闪存缓存,而将其余单元磁盘用作网格磁盘最终供 ASM 磁盘组使用,可以只使用少数单元磁盘。
CellCLI> create flashcache celldisk='FD_00_cell01'
Flash cache cell01_FLASHCACHE successfully created
其余闪存磁盘可以用作网格磁盘,然后用于 ASM 磁盘组。注意闪存缓存大小现在已减少的情况。
CellCLI> list flashcache detail
name: cell01_FLASHCACHE
cellDisk: FD_00_cell01
creationTime: 2011-05-15T15:03:44-04:00
degradedCelldisks:
effectiveCacheSize: 22.828125G
id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
size: 22.828125G
status: normal
删除
通常不需要删除闪存缓存,除了在一种情况下:当您希望使用部分闪存磁盘作为存储而不是作为闪存缓存时,或者根本不使用闪存磁盘作为闪存缓存时。要从单元删除闪存缓存,请使用以下命令。
CellCLI> drop flashcache
Flash cache cell01_FLASHCACHE successfully dropped
之后,可以使用较少的单元磁盘创建闪存缓存,也可以根本不创建。
闪存缓存内容
还记得闪存磁盘的作用吗?我们简要回顾一下,闪存磁盘的作用是提供二级缓存,称为闪存缓存。您已经学习了如何管理闪存缓存,但这带来了一个非常重要的问题:您如何知道闪存缓存已经生效?
简单的检查办法是查看闪存缓存的内容。要显示其内容,请使用以下命令。请注意,在生产系统中,可能要缓存大量数据,此输出可能会非常长。您可以随时按下 Cotrol-C 中断输出。
CellCLI> list flashcachecontent
cachedKeepSize: 0
cachedSize: 81920
dbID: 374480170
dbUniqueName: PROPRD
hitCount: 5
missCount: 0
objectNumber: 131483
tableSpaceNumber: 729
cachedKeepSize: 0
cachedSize: 65536
dbID: 374480170
dbUniqueName: PROPRD
hitCount: 5
missCount: 0
objectNumber: 131484
tableSpaceNumber: 729
… output truncated …
输出显示闪存缓存的所有内容。在上一示例中,显示了一些重要的数据:
- dbID 和 dbUniqueName — 其内容在闪存缓存中的数据库的 DBID 和名称。我们知道,DBM 可能包含多个数据库,因此您应了解有多少是来自哪个数据库。
- objectNumber — 缓存中数据库对象的 DBA_OBJECTS 视图的 DATA_OBJECT_ID(而非 OBJECT_ID)值。
- tableSpaceNumber — 对象存储在数据库中的表空间。
其他数据点的含义显而易见。如果您想查看闪存缓存内容的所有可见属性,可以使用 describe 命令,如下所示。
CellCLI> describe flashcachecontent
cachedKeepSize
cachedSize
dbID
dbUniqueName
hitCount
hoursToExpiration
missCount
objectNumber
tableSpaceNumber
我们来看一个名为 MONTEST1 的示例表。首先需要知道其 data_object_id,大多数情况下这与 object_id 相同,除非段可能不同时,例如在分区表、物化视图和索引的情况下。
SQL> select object_id, data_object_id from user_objects
2 where object_name = 'MONTEST1';
OBJECT_ID DATA_OBJECT_ID
---------- --------------
211409 211409
在此例中,data_object_id 和 object_id 相同,因为这是非分区表。下面,我们将了解此表在闪存缓存中有多少片段:
CellCLI> list flashcachecontent where objectnumber=211409 detail
cachedKeepSize: 0
cachedSize: 1048576
dbID: 374480170
dbUniqueName: PROPRD
hitCount: 48
missCount: 2237
objectNumber: 211409
tableSpaceNumber: 846
… output truncated …
输出显示来自闪存缓存中此段的数据块。您还可以使用同样的方法查找单个表空间在缓存中的对象。您需要知道表空间号,这可以从 SYS 模式的表 TS$ 中获取。在以上输出中,可以看到缓存块来自表空间 846。如果需要查看表空间名,请使用以下查询:
SQL> select name
2 from ts$
3 where ts# = 846;
NAME
------------------------------
USERS_DATA
相反地,可以通过名称获取表空间号,然后用表空间号通过 CellCLI 查看缓存项。
创建
闪存缓存内容没有创建操作。数据在常规操作过程中进入闪存缓存。
修改
没有修改操作;闪存缓存由 Exadata Storage Server 软件管理。
删除
没有删除操作,因为各项由 Exadata Storage Server 软件从缓存中删除。
组命令 — DCLI
以上介绍了所有可通过 CellCLI 执行的命令,CellCLI 适用于您当时登录的单元。如果您想在所有单元上进行某些管理,该怎么办?
例如,假设您想列出数据库云服务器全机架中所有 14 个单元的状态。CellCLI 的 list cell 命令可以立即给出该信息,但只针对当前单元。您可以登录所有其他 13 个单元并执行该命令以获取状态 — 此过程不仅耗时而且对于脚本编写而言可能效果不好,至少不容易编写。为解决此问题,提供了一个名为 DCLI 的新接口,利用这个接口,您只需登录到一个单元上即可对所有其他单元执行命令。
我们来看看原先的问题 — 您登录到 cell01,想查看单元 2 至 8 的状态。于是执行如下所示的 dcli 操作:
[celladmin@prolcel01 ~]# dcli -c prolcel01,prolcel02,prolcel03,prolcel04,prolcel05,prolcel06,prolcel07,prolcel08, prolcel09,prolcel10,prolcel11,prolcel12,prolcel13,prolcel14 -l root "cellcli -e list cell"
prolcel01: cell01 online
prolcel02: cell02 online
prolcel03: cell03 online
prolcel04: cell04 online
… output truncated …
我们来仔细分析一下该命令。
- 该命令的最后一部分 cellcli –e list cell 是我们想在所有其他单元上执行的操作。
- -c 选项指定要对哪些单元执行 cellcli –e list cell 命令
- -l 选项指定以何种用户身份执行该命令。此例中为 root 用户身份。默认为 celadmin。
DCLI 接口不是一个命令,而是一个 Python 脚本,该脚本对其他单元执行命令。此远程执行通过 ssh 命令完成,因此各单元应已具有 ssh 等效性。如果不具有等效性,可以使用 dcli -k 建立它。
注意使用 -c 选项指定所有单元名称的用法。如果您经常要选择单元名称,该怎么办?每次都需要提供单元名称既不方便又容易出错。另一个参数,-g(组)允许定义可作为一个整体来寻址的单元组。首先使用各个单元的主机名创建一个名为 all_cells 的文件,如下所示:
[celladmin@prolcel01 ~]# cat all_cells
prolcel01
prolcel02
prolcel03
prolcel04
prolcel05
prolcel06
prolcel07
prolcel08
prolcel09
prolcel10
prolcel11
prolcel12
prolcel13
prolcel14
准备好此文件后,可以将它传递给 DCLI 的组 (-g) 参数,而不必提供单元名称:
[celladmin@prolcel01 ~]# dcli -g all_cells -l root "cellcli -e list cell"
如果您想查看哪些单元用作执行的目标,可以使用 -t 选项,表示“目标”。将显示对其执行 DCLI 中的命令的单元的主机名。假设您出了差错,未将所有单元放入该 all_cells 文件,而是只放入了 8 个,则该命令会清楚地显示这一错误。
[celladmin@prolcel01 ~]# dcli -g all_cells -t
Target cells: ['prolcel01', 'prolcel02', 'prolcel03', 'prolcel04', 'prolcel05', 'prolcel06', 'prolcel07', 'prolcel08']
最高只显示到第 8 个单元。
但 DCLI 不只是执行 CellCLI 命令。它是一个远程执行工具。任何可以从命令行执行的命令,都可以提供给 DCLI 接口远程执行。
vmstat 就是这样的一个命令。假设您想通过执行 vmstat 2 2 来快速检查所有单元的状况,可以将其传递给 DCLI 接口,如下所示:
[celladmin@prolcel01 ~]# dcli -l root -g all_cells vmstat 2 2
prolcel01: procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
prolcel01: r b swpd free buff cache si so bi bo in cs us sy id wa st
prolcel01: 1 0 0 9077396 381232 1189992 0 0 13 12 0 0 1 0 99 0 0
prolcel01: 0 0 0 9121764 381232 1190032 0 0 260 564 1143 25691 3 1 96 0 0
prolcel02: procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
prolcel02: r b swpd free buff cache si so bi bo in cs us sy id wa st
prolcel02: 1 0 0 9418412 350612 970424 0 0 7 10 0 0 0 0 99 0 0
prolcel02: 1 0 0 9417852 350612 970424 0 0 0 28 1047 23568 3 1 96 0 0
prolcel03: procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
prolcel03: r b swpd free buff cache si so bi bo in cs us sy id wa st
prolcel03: 1 0 0 9312432 354948 1049780 0 0 7 12 0 0 0 0 99 0 0
prolcel03: 0 0 0 9313108 354948 1049892 0 0 0 60 1040 19046 0 0 100 0 0
prolcel04: procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
prolcel04: r b swpd free buff cache si so bi bo in cs us sy id wa st
prolcel04: 0 0 0 9275392 360644 1080236 0 0 21 13 0 0 0 0 99 0 0
prolcel04: 0 0 0 9275788 360644 1080240 0 0 280 68 1093 17136 0 0 100 0 0
prolcel05: procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
prolcel05: r b swpd free buff cache si so bi bo in cs us sy id wa st
prolcel05: 1 0 0 9200652 361064 1058544 0 0 6 12 0 0 0 0 99 0 0
prolcel05: 1 0 0 9200840 361064 1058544 0 0 0 52 1036 18000 0 4 96 0 0
prolcel06: procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
prolcel06: r b swpd free buff cache si so bi bo in cs us sy id wa st
prolcel06: 0 0 0 9280912 354832 1057432 0 0 8 11 0 0 0 0 99 0 0
prolcel06: 0 0 0 9281388 354832 1057440 0 0 32 24 1040 18619 0 0 100 0 0
prolcel07: procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
prolcel07: r b swpd free buff cache si so bi bo in cs us sy id wa st
prolcel07: 0 0 0 9795664 287140 877948 0 0 1 8 0 0 0 0 99 0 0
prolcel07: 0 0 0 9795136 287140 878004 0 0 0 36 1032 21026 0 1 99 0 0
prolcel08: procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
prolcel08: r b swpd free buff cache si so bi bo in cs us sy id wa st
prolcel08: 0 0 0 9295716 320564 1043408 0 0 6 10 0 0 0 0 99 0 0
prolcel08: 0 0 0 9295740 320564 1043412 0 0 0 4 1014 21830 0 0 100 0 0
此输出有很多用处。它不仅使您不必在所有单元上键入命令,还在同一页上显示输出,这样就方便您比较各单元的结果。例如,您可能注意到在输出中各单元的传出块数 (bo) 和传入块数 (bi) 的值各不相同。在 cell01 和 cell04 中的值更高,表示这两个单元中的 IO 活动更繁忙。
以下是另一个示例。假设您想确认所有单元都在运行 OSWatcher。可以使用以下命令进行检查。
[celladmin@prolcel01 ~]# dcli -l root -g all_cells ps -aef|grep OSWatcher
prolcel01: root 557 19331 0 Feb28 ? 00:15:08 /bin/ksh ./OSWatcherFM.sh 168
prolcel01: root 5886 24280 0 21:14 pts/0 00:00:00 grep OSWatcher
prolcel01: root 19331 1 0 Feb28 ? 01:08:33 /bin/ksh ./OSWatcher.sh 15 168 bzip2
prolcel02: root 554 17501 0 Feb28 ? 00:14:47 /bin/ksh ./OSWatcherFM.sh 168
有关远程执行的讨论就要结束,请注意它可以在任何单元上执行,可以不包括当前单元。例如,您在 cell01 上想查看 cell08 上特定物理磁盘的状态,不必登录后者来使用此命令。可以直接从 cell01 单元使用带 -c 选项的 dcli 命令对 cell08 单元执行,如下所示:
[celladmin@prolcel01 ~]# dcli -l root -c prolcel08 cellcli -e "list physicaldisk 20:8 detail"
prolcel08: name: 20:8
prolcel08: deviceId: 11
prolcel08: diskType: HardDisk
prolcel08: enclosureDeviceId: 20
prolcel08: errMediaCount: 0
prolcel08: errOtherCount: 1
prolcel08: foreignState: false
prolcel08: luns: 0_8
prolcel08: makeModel: "SEAGATE ST360057SSUN600G"
prolcel08: physicalFirmware: 0805
prolcel08: physicalInsertTime: 2011-01-21T14:23:57-05:00
prolcel08: physicalInterface: sas
prolcel08: physicalSerial: XXXXXX
prolcel08: physicalSize: 558.9109999993816G
prolcel08: slotNumber: 8
prolcel08: status: normal
修改
除了查看值,DCLI 还可用于一次在许多单元上设置值。例如,假设您的邮件 SMTP 服务器更改了,您需要为各个单元设置另一个 smtServer 值。为此,可以使用 CellCLI 中的 alter cell smtpServer=’…’ 命令;但是需要在所有单元上执行该命令。而使用 DCLI 则可以对作为一个组在文件 all_cells 中指定的所有单元执行这些命令,如下所示。
[celladmin@prolcel01 ~]# dcli -l celladmin -g all_cells cellcli -e "alter cell smtpServer=\'smtp.proligence.com\'"
prolcel01: Cell cell01 successfully altered
prolcel02: Cell cell02 successfully altered
prolcel03: Cell cell03 successfully altered
prolcel04: Cell cell04 successfully altered
prolcel05: Cell cell05 successfully altered
prolcel06: Cell cell06 successfully altered
prolcel07: Cell cell07 successfully altered
prolcel08: Cell cell08 successfully altered
还可以使用相同的方法更新单元的其他 SMTP 参数:
[celladmin@prolcel01 ~]# dcli -l root -g all_cells cellcli -e "alter cell smtpToAddr=\'arup@proligence.com\'"
从一个位置查看所有设置:
[celladmin@prolcel01 ~]# dcli -l root -g all_cells cellcli -e "list cell attributes name,smtpServer,smtpToAddr,smtpFrom,smtpFromAddr,smtpPort"
prolcel01: cell01 STCEXCPMB02.xxxx.xxxx arup@proligence.com "Proligence Test Database Machine" oncall.dba@proligence.com 25
prolcel02: cell02 STCEXCPMB02.xxxx.xxxx arup@proligence.com "Proligence Test Database Machine" oncall.dba@proligence.com 25
prolcel03: cell03 STCEXCPMB02.xxxx.xxxx arup@proligence.com "Proligence Test Database Machine" oncall.dba@proligence.com 25
prolcel04: cell04 STCEXCPMB02.xxxx.xxxx arup@proligence.com "Proligence Test Database Machine" oncall.dba@proligence.com 25
prolcel05: cell05 STCEXCPMB02.xxxx.xxxx arup@proligence.com "Proligence Test Database Machine" oncall.dba@proligence.com 25
prolcel06: cell06 STCEXCPMB02.xxxx.xxxx arup@proligence.com "Proligence Test Database Machine" oncall.dba@proligence.com 25
prolcel07: cell07 STCEXCPMB02.xxxx.xxxx arup@proligence.com "Exadata Cell 07" cell07@proligence.com 25
正确设置所有参数后,您可能想对所有单元运行 alter cell validate 命令以确认邮件设置正确,如下所示。
[celladmin@prolcel01 ~]# dcli -l root -g all_cells cellcli -e "alter cell validate mail"
如果您从这些单元收到电子邮件,则表示已正确配置电子邮件。
缩略输出
您可能看到 DCLI 的输出相当大,因为它显示所有单元的输出。阅读可能有些困难,尤其是要编写脚本时。为解决这一问题,DCLI 提供了另一个参数 -n,它在执行成功后只显示 OK 以及成功执行了命令的各个单元。例如,您可以使用 -n 选项执行前面显示的电子邮件验证命令:
[celladmin@prolcel01 ~]# dcli -l root -g all_cells -n cellcli -e "alter cell validate mail"
OK: ['prolcel01', 'prolcel02', 'prolcel03', 'prolcel04', 'prolcel05', 'prolcel06', 'prolcel07', 'prolcel08']
正则表达式
有时,您希望快速查看,只想看到异常;而不是所有输出。例如,假设您希望找出非活动状态的网格磁盘。以下命令将显示网格磁盘的状态。
[celladmin@prolcel01 ~]# dcli -l root -g all_cells cellcli -e "list griddisk"
但它将列出所有磁盘 — 无论活动的还是非活动的。如果有数百个网格磁盘,输出会令人目不暇接,而用处却不大。您可能希望看到的是非活动的磁盘。-r 选项允许您输入将不会匹配的正则表达式。在此例中,您希望查看不是“active”的字符串。我们可以编写一个类似下面的命令。
[celladmin@prolcel01 ~]# dcli -r '.* active' -l root -g all_cells cellcli -e "list griddisk"
.* active: ['prolcel01', 'prolcel02', 'prolcel03', 'prolcel04', 'prolcel05', 'prolcel06', 'prolcel07', 'prolcel08']
prolcel01: PRORECO_CD_11_cell01 inactive
结果清楚显示出,单元 prolcel01 中的网格磁盘 PRORECO_CD_11_cell01 是非活动的。这是对异常状况的快速检查。
命令脚本
您可以将一些 cellcli 命令放入一个脚本中,然后调用该脚本。假设您希望为 CellCLI 开发一个名为 err.dcl(扩展名 .dcl 并非必要,只是为了方便)的错误检查脚本。此脚本如下所示:
[celladmin@prolcel01 ~]# cat err.dcl
cellcli -e list physicaldisk attributes errCmdTimeoutCount,errHardReadCount,errHardWriteCount,errMediaCount,errOtherCount,errSeekCount,errorCount where disktype='HardDisk'
前面您已看到如何从 CellCLI 执行此脚本。您也可以使用 -x 选项从 DCLI 执行此脚本,如下所示:
[celladmin@prolcel01 ~]# dcli -l root -g all_cells -x err.dcl
prolcel01: 34:0 0 0
prolcel01: 34:1 0 0
prolcel01: 34:2 0 0
prolcel01: 34:3 0 0
… output truncated …
prolcel08: 20:6 0 0
prolcel08: 20:7 0 0
prolcel08: 20:8 0 1
prolcel08: 20:9 0 0
prolcel08: 20:10 0 0
prolcel08: 20:11 0 0
注意在 prolcel08 中显示了错误,但是该错误却淹没在大量其他输出中,使得它难以辨认并且容易被忽视。这时,上一小节中讲过的 -r 选项就可以派上用场了,在上一小节中,它可以删除包含“active”的行。如下所示:
[celladmin@prolcel01 ~]# dcli -l root -g all_cells -r '.* 0' -x err.dcl
.* 0: ['prolcel01', 'prolcel02', 'prolcel03', 'prolcel04', 'prolcel05', 'prolcel06', 'prolcel07', 'prolcel08']
prolcel08: 0 1
输出结果很简短。
汇总
总而言之,dcli 命令允许您对其他单元服务器执行命令(包括 cellcli)。该命令的基本结构为:
# dcli <Option> <Command>
其中命令可以为 CellCLI 命令,例如,cellcli –e list cell,或 Linux 命令,比如,vmstat 2 2。
以下是最常用的选项及其作用。
选项 | 选项后面的期望值 | 示例用法 | 执行的操作 |
-c
| 单元的名称 |
-c dwhcel01,dwhcel02
| 仅对这些单元执行命令。 |
-g
| 列出了各个单元的文件的名称 |
-g all_cells
| 对文件 all_cells 中提到的单元执行命令。 |
-l
| 将要执行命令的操作系统用户 |
-l root
| 默认用户是 celladmin;但您可以使用任何其他用户执行远程 ssh。请确保该用户在所有运行此命令的单元上具有 ssh 等效性 |
-n
| 不适用 |
-n
| 这将显示每次命令执行的缩略输出而不是冗长输出 |
-r
| 正则表达式 |
-r [*. active]
| 禁止匹配正则表达式的输出 |
-t
| 不适用 |
-t
| 显示将要执行命令的单元 |
-x
| 包含可执行命令的脚本 |
-x list.dcl
| 该脚本将在目标单元上执行 |
总结
命令 CellCLI 和 DCLI 用于管理 Exadata Storage Server,它们很可能是作为 DBA 的您唯独不熟悉的命令。在本部分中,您已看到最有用的命令及其示例用法。在下一部分也就是最后一部分中,您将了解如何使用其中一些命令和 Oracle Enterprise Manager Grid Control 检查各种组件并获取详细报告。
http://www.oracle.com/technetwork/cn/articles/oem/exadata-commands-intro-402431-zhs.html