原文链接: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