Exadata Cell的命令行工具CellCLI

原文链接:http://www.dbaleet.org/exadata_cell_command_line_tool_cellcli/

 

CellCLI也许远远并没有你想象中的那么复杂,它仅仅是一个管理Exadata Cell存储节点的一个命令行工具。这个工具有点类似于Oracle数据库中的sqlplus命令行,它是用户与Exadata Cell交互的一个接口。

 

 

Cell软件使用的是java构建的,天生具有跨平台的能力。也就意味着Exadata从技术上来说, Exadata是可以移植到任何平台的,但是限于市场策略,Oracle的公司绝不会这么做,所以目前仅仅有基于自家Oracle Linux平台和Solaris平台的Exadata。CellCLI使用了部分开源项目,例如其语法分析工具使用的是 BYACC/J, 而其命令行历史信息工具使用的是JLine,这些工具是基于BSD协议的,所以可以用于商业用途并且无需开源。由于其本身完成的工作量有限,所有CellCLI甚至有望移植到其它平台例如windows的客户端。

1. CellCLI的语法

CellCLI在设计之初就考虑到了其语法的移植性,所以CellCLI的语法与sqlplus以及SQL的语法非常类似,具有sqlplus和SQL经验的dba无需经过一个新的语法学习过程就能使用它。以下举例说明CellCLI的语法:

  • CellCLI具有sqlplus中同样的命令:
EXIT/QUIT: 退出CellCLI命令行;
HELP: CellCLI的语法帮助;
SET : 设置CellCLI的环境变量;
SPOOL: 将命令行结果写入到本地一个日志文件;
START/@: 运行CellCLI的脚本
  • CellCLI的语法结果:

CellCLI命令行语法基本结构如下:

 <verb> <object-type>  [ALL |object-name] [<options>]

其中CellCLI verb(动词)包括:ALTER, CREATE, DROP,  LIST 分别代表修改,创建,删除和查看。

CellCLI的object-type(对象类型)一共包括三类:

资源配置相关的对象:
CELL, CELLDISK, GRIDDISK, IORMPLAN, KEY, LUN, PHYSICALDISK,

性能指标相关的对象:
ACTIVEREQUEST, METRICCURRENT, METRICDEFINITION, METRICHISTORY

失败告警相关的对象:
ALERTDEFINITION, ALERTHISTORY,THRESHOLD.

Tips: 以上标黑的属性不可修改或者删除,只能用于查看(list)

以下简单举几常用到的列子:

列举对象类型的属性:describe命令, 但是无法使用Oracle数据库的语法desc:

CellCLI> describe griddisk
        name                    modifiable
        availableTo             modifiable
        cellDisk
        comment                 modifiable
        creationTime
        errorCount
        id
        offset
        size                    modifiable
        status

列举资源对象的名称及状态,直接使用list命令就可以了:

CellCLI> list physicaldisk
         34:0            xxxxxx                  normal
         34:1            xxxxxx                  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:     2012-10-14T18:38:12+08:00
         physicalInterface:      sas
         physicalSerial:         XXXXXX
         physicalSize:           558.9109999993816G
         slotNumber:             0
         status:                 normal
......

如果要列出此资源对象的所有属性,则需要加上关键字all:

CellCLI> list physicaldisk attributes all
         34:0            33              HardDisk        34                      0       0                               false   0_0                     "SEAGATE ST360057SSUN600G"      0805                    2012-10-14T18:38:12+08:00       sas     xxxxxx  558.9109999993816G      0       normal
......

如果只需要列举出部分所需要的属性,则可以使用关键字attributes加上属性名称,多个属性用逗号隔开:

CellCLI> list physicaldisk attributes name, disktype, makemodel, physicalrpm, physicalport, status
         34:0            HardDisk        "SEAGATE ST360057SSUN600G"      normal
......

如果要使用过滤条件,则需要使用关键字where加过滤条件:

list physicaldisk attributes name, physicalInterface, physicalInsertTime  where disktype = 'HardDisk'

         34:0    sas 2012-10-14T18:38:12+08:00
......

Kerry Osborne甚至还总结了其与sqlplus/SQL的相似之处并列举出CellCLI Top 10 List, 参见:

http://kerryosborne.oracle-guy.com/2010/11/cellcli-command-syntax-top-10/

3. CellCLI的解析过程

以下是使用伪代码描述CellCLI解析用户发送的命令行的过程 :

BEGIN
IF command IN ('help', 'describe', 'set', 'spool', 'start')
THEN send to cellcli;
ELSE IF command IN ('alter cell startup services', 'alter cell shutdown services')
THEN send to rs;
ELSE IF command ==  ('calibrate')
THEN send to orion;
ELSE
send to ms;
END

简单的说分为四个步骤:

1. 如果命令行是 ’help’, ‘describe’, ‘set’, ‘spool’, ‘start’,  则将其将给cellcli本身来处理;
2. 如果命令行是启动或者关闭cell服务,则将其发送给rs(Restart Server);
3. 如果命令行是calibrate, 则将其服务发送给orion;
4. 其它情况将其发送给ms(Management Server)。

2. CellCLI命令选项

cellcli可以直接在shell下进行调用,所以进入CELLCLI>命令提示符并不是必须的,这主要是为了方便使用脚本对其进行管理。例如在shell下,我们可以使用cellcli -e “list physicaldisk”, 其产生的结果与在CELLCLI>下运行list physicaldisk效果一样。其中e代表执行(execute)。除了-e选项以外,还有-n代表非交互模式(non-interactive), port-number代表端口号,默认端口为8888, 但是实际这个端口是可以在cellinit中自定义的。

当然cellcli绝对不止这三个选项,还有一些文档没有记录的隐藏选项:例如-d 代表debug模式, -v 代表verbose。

以上

Comment

*

沪ICP备14014813号-2

沪公网安备 31010802001379号