Exadata虚拟机_5

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

注释

还可以在脚本中添加注释。注释以 REMREMARK 或“--”开头,如下所示:

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.

您可能想知道该单元发出的是什么类型的电子邮件。以下是出现硬件故障时单元所发送的电子邮件:

 exadata-commands-p3f1

以下是有关另一故障的电子邮件,此时由于闪存磁盘故障导致了单元磁盘故障。

 exadata-commands-p3f2 

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

输出显示有关为单元配置的闪存缓存的各种重要数据:

  1. 配置成单元磁盘的闪存磁盘,如 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
  2. 总大小是 365.25GB。
  3. 该单元磁盘可用。

还可以将输出放到一行中:

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


展开阅读全文

没有更多推荐了,返回首页