Exadata上的多主机管理工具——dcli

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

上篇文章中, 介绍group文件的用途的时候曾经提到过一个叫做dcli的工具,但也只是一笔带过,这篇文章主要介绍dcli的用途及用法。

随着云计算的越来越盛行,未来可预见集群的规模会变得越来越大, 而在大型的数据中心,一个系统管理员/数据库管理员有可能同时需要管理几十上百的主机。例如要进行一些常规性的维护或者配置工作,如果还使用原始的方式进行管理,这几乎是碟中谍(Mission Impossible)了。

科技的发展从来都是靠聪明的懒人来驱动的,人类不想打猎,于是就学会了驯养家畜;不想采摘,于是发明了种植;不想洗衣服,于是发明了洗衣机。不想步行,于是发明了机动车等等。虽然这个过程所付出的艰辛往往不是外人三言两语能说清道明的。当然“要有光, 于是便有了光”那就只能靠神明的力量了。同样,集群节点的成倍增长, 配置管理系统的诞生便是一件理所当然的事情了。

很多有经验的系统管理员一定听过其中大名鼎鼎的Puppet , 这个工具非常强大,并且现在被广泛的应用在各大型的IT企业,例如Dell, Twitter, Oracle, Citrix, Google, Wikipedia等。例如Google就曾经用它来管理几千台Mac桌面电脑。今天提到的DCLI(全称分布式命令行 Distributed command line interface)也是类似的工具,不过远比puppet简单,无需系统的学习就能迅速的掌握。Exadata的节点数众多,要是纯粹通过手工来管理则过于繁琐,并且无法达到整齐划一的配置,而如果使用Puppet这样的神器又给人以用牛刀杀鸡的感觉。

来看一下DCLI有多简单, 以下是一台半配的Exadata用来获取各节点的系统时间:

[root@dm01db01 ~]# /usr/local/bin/dcli -g /opt/oracle.SupportTools/onecommand/all_group -l root "date"
 dm01db01: Sat Jun  2 16:59:47 CST 2012
 dm01db02: Sat Jun  2 16:58:32 CST 2012
 dm01db03: Sat Jun  2 17:00:00 CST 2012
 dm01db04: Sat Jun  2 17:05:11 CST 2012
 dm01cel01: Sat Jun  2 16:59:48 CST 2012
 dm01cel02: Sat Jun  2 17:04:43 CST 2012
 dm01cel03: Sat Jun  2 17:03:08 CST 2012
 dm01cel04: Sat Jun  2 17:04:29 CST 2012
 dm01cel05: Sat Jun  2 17:04:23 CST 2012
 dm01cel06: Sat Jun  2 17:00:31 CST 2012
 dm01cel07: Sat Jun  2 17:04:11 CST 2012

但是执行这个命令却有一些简单的前提条件:

1. 需要预先配置各节点用户等效性,例如这里使用root用户执行,那么所有节点root用户都需要配置ssh用户等效性。

2. 需要存在一个group文件,例如在上面这条指令中就是/opt/oracle.SupportTools/onecommand/all_group, 这个文件中保存了需要执行这条命令节点的主机名或者ip地址。当然前面也提到过,这些文件可以由dbm configurator或者exaconf自动生成。

3. 需要安装dcli这个工具。在Exadata, Exalogic, Exalytics系统都自带这个工具。但是这个工具并不局限于用于Oracle的这些工程机系统,拷贝到其它Linux上就能直接使用。

下面再来简单的看下这个工具的构成:

[root@dm01db01 ~]# file /usr/local/bin/dcli
/usr/local/bin/dcli: a python script text executable

可以看到这个文件其实就是一个python脚本。然后打开这个文本文件,里面就提到了一些简单的用法以及其依赖关系——需要安装python 2.3以上的运行环境。

再来看一下其帮助的语法:

[root@dm01db01 ~]# dcli -h

Distributed Shell for Oracle Storage

This script executes commands on multiple cells in parallel threads.
The cells are referenced by their domain name or ip address.
Local files can be copied to cells and executed on cells.
This tool does not support interactive sessions with host applications.
Use of this tool assumes ssh is running on local host and cells.
The -k option should be used initially to perform key exchange with
cells.  User may be prompted to acknowledge cell authenticity, and
may be prompted for the remote user password.  This -k step is serialized
to prevent overlayed prompts.  After -k option is used once, then
subsequent commands to the same cells do not require -k and will not require
passwords for that user from the host.
Command output (stdout and stderr) is collected and displayed after the
copy and command execution has finished on all cells.
Options allow this command output to be abbreviated.

Return values:
 0 -- file or command was copied and executed successfully on all cells
 1 -- one or more cells could not be reached or remote execution
      returned non-zero status.
 2 -- An error prevented any command execution

Examples:
 dcli -g mycells -k
 dcli -c stsd2s2,stsd2s3 vmstat
 dcli -g mycells cellcli -e alter iormplan active
 dcli -g mycells -x reConfig.scl

usage: dcli [options] [command]

options:
  --version           show program's version number and exit
  -c CELLS            comma-separated list of cells
  -d DESTFILE         destination directory or file
  -f FILE             file to be copied
  -g GROUPFILE        file containing list of cells
  -h, --help          show help message and exit
  -k                  push ssh key to cell's authorized_keys file
  -l USERID           user to login as on remote cells (default: celladmin)
  -n                  abbreviate non-error output
  -r REGEXP           abbreviate output lines matching a regular expression
  -s SSHOPTIONS       string of options passed through to ssh
  --scp=SCPOPTIONS    string of options passed through to scp if different
                      from sshoptions
  -t                  list target cells
  -v                  print extra messages to stdout
  --vmstat=VMSTATOPS  vmstat command options
  -x EXECFILE         file to be copied and executed

常用到的选项有-g -l -x -r几个选项。-g后面解的是group文件, -l跟执行的用户, -x表示执行这个文本文件; -r表示使用正则表达式排除某个关键字。

以下简单举几个例子说明:

1. 查看所有DB节点数据库的PSU版本:

[root@dm01db01 ~]# dcli -g /opt/oracle.SupportTools/onecommand/all_group -l oracle \
 "/u01/app/oracle/11.2.0.3/dbhome_1/Opatch/opatch lsinventory -bugs_fixed | grep -i 'DATABASE PSU' ”

2. 查看所有cell节点的不属于RECO磁盘组的grid disk:

[root@dm01db01 ~]# dcli -g /opt/oracle.SupportTools/onecommand/cell_group -l root -r "reco" "cellcli -e list griddisk"

3.  部署一个脚本/usr/local/monitoring/script.sh到所有的DB节点执行:

[root@dm01db01 ~]# dcli -g /opt/oracle.SupportTools/onecommand/dbs_group -l root-x /usr/local/monitoring/script.sh

4. 使用vmstat查看所有cell节点的内存使用状况,采样频率为5秒一次,一共采样5次:

[root@dm01db01 ~]# dcli -g /opt/oracle.SupportTools/onecommand/cell_group  --vmstat="-a 5 5"

以上的例子只是用于简单介绍dcli的用法,如果嫌这个命令行太长,甚至可以使用linux的alias将其简化。

总之dcli还是非常强大的,Exadata用户几乎可以只在DB节点一就能完成大量平时需要频繁切换节点的重复无聊的工作。如果能用好dcli,无疑可以大大减轻Exadata管理员的工作。但是需要注意的是这种命令因为是在多节点分布式执行,其影响的范围是非常广的,所以如果要做的工作是非检查性的工作,需要特别的谨慎。如果您用dcli在所有节点执行了一个rm -rf /的操作,那么估计也离下岗不远了。

我曾经就遇到某个客户执行了一条这样的语句(这条命令危害非常大,我这里只是举一个例子说明,且不可放到生产环境中执行!),结果导致数据库无法启动,最后只能重装GI和rdbms了。

[root@dm01db01 ~]# dcli -g /opt/oracle.SupportTools/onecommand/dbs_group  -g root "chown -R  oracle:oinstall  /u01/app"
[root@dm01db01 ~]# dcli -g /opt/oracle.SupportTools/onecommand/dbs_group  -g root "chomod -R 775 /u01/app"

我个人建议,在进行信息获取或者检查工作的时候可以大量使用dcli来减轻重复性劳动,但做真正变更之前需要额外谨慎反复检查确认其命令是否正确可行。做复杂而重要的变更的时候,最好不要使用dcli,宁愿多花一些时间,以防止万一。

目前这个dcli无法下载到,我会上传这个工具到本文的回复中。此工具在Linux下无需安装,直接可以执行, 读者有多节点集群测试环境可以自行挖掘其更多的功能。

以上

Exadata的配置工具——dbm configurator(下)

http://www.dbaleet.org/exadata_configuration_tools_dbm-configurator_2/

 

上一篇说到了如何填写dbm configurator,本篇则着重介绍点击generator以后dbm configurator的输出对象。

最明显的变化就是在dbm configurator 这个工作簿的右侧会自动生成一张Installation template的工作表,里面记录了安装的详细信息。通常可以将这一部分内容输出成pdf,发送给客户或者打印出来进行逐一核对。

这些文件分为几类:

1. group文件

这类文件记录了Exadata各节点的主机名,主要用于onecommand内部调用dcli命令,当然您也可以自己使用dcli来管理方便管理Exadata的节点。dcli是Oracle Linux上用来管理多主机的一个工具。

all_group 记录所有的DB节点和Cell节点的公网主机名;
all_ib_group 记录所有DB节点和Cell节点私网的主机名;
all_nodelist_group 记录DB节点和Cell节点公网和私网的主机名,为前两者之和;
cell_group 记录所有Cell节点的公网主机名;
cell_ib_group 记录所有Cell私网的主机名;
dbs_group 记录DB节点私网主机名;
dbs_ib_group 记录DB节点私网的主机名
priv_ib_group 记录DB节点和Cell节点私网的ip地址,域名,主机名

2. preconf文件

preconf.csv文件用来辅助修改Exadata DB节点和Cell节点的网络配置信息,例如主机名,域名,节点类型,网络地址,绑定,ntp, 时区, DNS服务器。Exadata在出厂的时候默认设置的是192.168.1.*这个网段, 通过使用 /opt/oracle.Supporttools/firstconf/applyconfig.sh 或者reimage makeImageMedia.sh调用这个文件将DB节点和Cell节点的网络配置信息设置成用户期望的目标。但是这个文件不能修改除DB节点和Cell节点以外的设备,例如KVM, PDU, Cisco交换机, infiniband交换机,这些设备的网络配置需要手工设置。

preconf-11-2-1-1-0.csv, preconf-11-2-1-2-2.csv, preconf-11-2-2-1-0.csv是早期Exadata使用的preconf文件的格式,后面的数字对应Exadata的版本号,从11.2.2.1.0以后,这个文件格式就是当前的preconf.csv。

3. checkip脚本

checkip.sh脚本用来在运行onecommand之前检查ip的配置。checkip.sh调用dbm.dat这个文件内的配置信息进行检查:

例如,在调用applyconfig.sh之前可以使用以下命令进行检查:

./checkip.sh -m pre_applyconfig

在调用applyconfig.sh之后可以使用以下命令进行检查:

./checkip.sh -m post_applyconfig

4. 配置文件

这一部分是onecommand调用的配置文件,包括onecommand.params, em.param, dbMachine_dm01, databasemachine.xml。onecommand.params是onecommand的核心配置文件,em.param是em的配置文件。dbMachine_dm01, databasemachine.xml猜测是早期使用的ip配置文件。

5. hosts文件

hosts.sample是一个hosts文件的样本,如果没有使用DNS ,可以将这个文件替换DB和Cell节点的/etc/hosts文件。如果使用DNS则无需理会。

6. validate.err错误信息

validate.err是dbm configurator的日志文件,在填写完dbm configurator, 点击Generate以后,会自动对填写的信息进行验证,如果填写有错误或者不符合最佳实践,则会生成这个日志文件。Oracle推荐ASM使用High Redundancy 模式,如果选择了Normal,会在这里生成一个警告。

Warning : 'Diskgroup Definition' section
. Recommendation ASM diskgroup redundancy for external back is : DATA = 'HIGH' RECO = 'HIGH'

以上

Exadata的配置工具——dbm configurator(上)

http://www.dbaleet.org/exadata_configuration_tools_dbm-configurator_1/

如果您有看过Exadata的宣传资料,就会发现Oracle宣称Exadata为“开箱即用智能存储服务器网格“。 当然这句话更多是Oracle市场策略的因素在主导,就像Exadata里面提到的n多的类似于”smart“这样的词汇,它们的存在的理由是因为有人喜欢这样的字眼。客户都是抱着减少复杂性,提升工作效率的想法才购买Exadata的。相信没有客户愿意去购买一堆零件然后自己花上一两年的时间去部署一个系统。先不论Exadata是否是真的属于开箱即用,但是对于Exadata这样一个复杂的系统来说,所有的部署工作都可以在一周以内完成已经是相当了不起了。当然能把部署时间控制到这么短,主要还是得益于用来部署Exadata的两个工具“dbm configurator”和“onecommand”。今天就来简单的介绍一下其中之一的“dbm configurator”。

顾名思义, dbm configurator就是数据库一体机的一个配置工具(但不是唯一的配置工具,下一篇我们将会介绍另外一个部署工具)。刚开始看到dbm configurator的时候,很多人甚至不屑一顾。“什么?这不就是一个excel表格吗?哪是什么配置软件!”等到真正使用之后就发现“原来excel也可以这么强大!” 没错!,它就是一个excel表格,但是其复杂程度一点也不比普通的软件或者脚本差,因为其中大量的使用了宏(macro),使得很大内容都可以根据规则自动生成,而且很多选项都是使用下拉框进行选择的。填写完成以后还可以生成一系列的配置文件供安装使用。

下面我将主要的配置表格,分解为几个模块讲解:

1. 命名和规格型号信息(Naming and Sizing information):

这一部分主要配置Exadata的主机名,域名,规格,节点数,时区, 用户名称,磁盘空间。

Oracle Exadata Database Machine Name 是所有节点(包括DB节点和Cell节点的前缀),Database Server Base Name 是DB节点的前缀, Oracle Exadata Storage Servers Base Name :是Cell节点的前缀, Domain Name 是域名,以上信息综合决定了一台机器的主机名和域名,例如上图中的第一个DB节点的主机名是dm01db01, 域名是dm01db01.us.oracle.com, 第一个Cell节点的主机名是dm01cel01, 域名是dm01cel01.us.oracle.com。 这里建议用户将Oracle Exadata Database Machine Name修改为更有意义的名称,例如rpt或者report之类的,但是不要太长,请控制这个字段在10个字母以内。因为主机名参数最好不要大于15个字符。其它的几个参数最好保持默认,不要去修改。Customer Name 填写为用户的实际名称就行,没有太多实际意义。

Region和Time Zone 决定机器的市区,中国一般Region选择Asia, Time Zone选择Shanghai。其它地区可按照实际进行填写。

Oracle Database Machine Model 表示Exadata的规格型号,例如如果这里选择Full,Database Server Nodes就是默认就是8, 而 Oracle Exadata Storage Server Nodes默认就是14,这是标准的满配的规格,具体节点数请参看Exadata Datasheet。另外这里Database Server Nodes和Oracle Exadata Storage Server Nodes并不是写死的,也就是说,用户并不一定要按照规格下单。例如用户可以买一个1/4配置,然后再单独买2个 exadata storage expansion rack , 也就是多买2个Cell节点,那么这里可以就将Cell修改为5,其它以此类推。

操作系统一般选择Linux,及特殊的情况下选择Solaris,参考我前面的文章Exadata FAQ: 如何选择Exadata的OS?Solaris还是Linux? Flashcache保持默认选择Enable。 Cell Disk Size 有三个选项600G的高性能盘(HP disks),2T或者3T的高容量盘(HC disks),注意2T盘已经停产,根据实际的情况进行选择。

 2. 通用的网络信息 (General Network Information):

这里主要包括网络配置的概况,主要包括DNS服务器,NTP服务器, 管理网地址,生产网地址,备份网络地址,私网地址,绑定情况。

Name Server是DNS的地址,如果要使用DNS请务必使用两个DNS服务器,防止单点故障。如果没有两台DNS服务器,那么则不要使用DNS ,保持这里留空。NTP Server是时间同步服务器,这里NTP没有特殊的要求,如果有NTP服务器,请填写其域名或者ip地址。如果没有专门的NTP服务器,可以使用第一个DB节点或者Exadata自身的思科交换机作为时间服务器。

First Management/ILOM IP Address [Admin] 是管理网地址,在Exadata中,需要专门划一个网段用作管理网,用以和生产网段分离, Exadata的维护工作都在这个网段来完成。First Client Access IP Address [Client]就是生产网段的地址了,应用连接都是走这个网段的地址。First Additional Network 3 Address [Backup] 是备份网段的地址,这个为可选,接入到用户专门的以太网备份网络。First Private InfiniBand IP Address [Infiniband] 为私网地址,这个网段是独立的用于RAC心跳以及DB节点和Cell节点之间的交互或者是级联多个Exa设备,一般保持默认的192.168网段。

默认对生产网的1Gbps以太网卡进行绑定,当然10Gbps网口是存在的,但是没有光纤模块,需要用户额外购置SFP+ 适配器模块。另外还可以从右侧看到一共需要多少ip地址,供用户提前申请。

这里需要特别注意的是管理网段和生产网段需要是两个独立的子网,例如通过子网掩码进行分割。

3. 特定的网络信息(Specific Network Information)

这一部分地址是根据上面通用网络信息提供的内容自动生成的,用户可对这些区间进行微调。但是这里分配的ip地址在Start IP Address和End IP Address之间连续的,如果需要不连续的,需要到后面的配置表进行更改。默认网关使用的是生产网段,但并不意味着管理网段发送数据包会先尝试走生产网段(早期的版本确实有这个问题),这个问题以后的blog会描述。

4. 用户和Home定义(User and Home Definition)

这一部分描述的内容很简单,包括操作系统用户验证模式,是标准的单用户认证模式(只有一个oracle用户) 还是角色分离用户认证模式(有oracle和grid两个用户,gird用户管理GI, oracle用户管理rdbms), 在11.2以后,Oracle通常推荐使用后者,这样权限和职责更加清晰。另外这里包括了用户名称,用户id,用户组,各种home的路径,以及默认的数据库密码welcome1,这里建议统统保持默认。

5. 杂项(Miscellaneous)

杂项是我自己取的名字,主要是包括smtp, snmp, OEM, ASR和OCM的配置。smtp用户发送cell告警的邮件, snmp则是网络管理工具的接口,例如可以集成到用户已有的网管工具之中,例如ibm tivoli, HP openview。ASR是Exadata专有的,automatic service request的简称,如果用户的Exadata发生了特定的故障,并且能够有办法连接到公网,就可以通过连接到公网的ASR服务器自动在MOS上创建SR。OCM也是类似的东西,可以自动对数据库进行健康检查和补丁服务。多数用户的数据库与公网做了物理隔离,出于安全因素也不允许连接外网,所以ASR和OCM基本没有客户在使用,但是这两项功能,Oracle至今也一直不懈地在进行推广。OEM是安装OEM agent可以在Exadata上部署一个OEM的agent,然后与grid control 12c集成,然后使用gc 12c进行监控Exadata。

杂项中的信息都是不是必须配置的,即使由于当前条件不具备,安装的时候没有选择配置,也可以后期在需要的时候再进行添加。建议通常情况下可以考虑smtp和OEM。

5. ASM磁盘组和数据库信息(Diskgroup and Database Details)

通常onecommand会默认建立三个ASM磁盘组,Data, Reco和DBFS。其中Data磁盘组的用于存放数据,Reco磁盘组用于存放归档和Flash Recovery Area, DBFS用于存放OCR和vote disk以及可以建立DBFS文件系统。其中Data磁盘组大约占所有空间的80%, Reco大约占20%。这里Data和Reco磁盘组的名称都在后面加上了一个主机名前缀,用户可以去掉这部分,仅仅保留DATA和RECO,磁盘组的冗余级别默认都是High,即三路冗余,可以自行修改为Normal,双路冗余。但是选择Normal的时候再最后一步生成配置文件的时候会给出一个警告。

默认不创建数据库,这里可以在Number of Databases选择创建数据库的数量,这里通常选择1个,主要是为了验证Exadata已经正常安装。默认这个数据库实例名为dbm,块大小为8k, 类型为OLTP,会选择Exadata的数据库模板进行安装。这个数据库不能选择字符集,默认使用UTF8字符集,中国大多数用户使用的是GBK字符集,所以这个库是不符合要求的。Oracle也是一再说明这个数据库只是用于证明Exadata正确的安装完成,可以交接给用户。如果不符合用户的要求,用户可以使用dbca自己删除,然后重建符合自己需求的数据库。

以上填写完成以后就可以点击右侧的”Generate”按钮了,这个时候在这个表格的下面就会生成一个主机名ip地址的列表,之前说过在特定的网络信息一栏中分配的ip地址是连续的,如果要求不连续,就可以在这里修改单个节点对应的ip信息了。确认无误以后点击“Create Config Files”生成配置文件,如果有报错,则更正报错信息,一般类似于ASM Normal冗余的警告可以忽略。然后会弹出一个对话框告诉你配置文件在哪个目录。

今天就dbm configurator的介绍到这里,欲知后事如何,请听下回分解。

使用RDA收集Exadata的诊断信息

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

RDA是Remote Diagnostic Agent的简称,是Oracle开发的用于收集Oracle公司全系列产品诊断信息的工具,是Oracle售后工程师和技术专家标准工具之一。在向MOS(support.oracle.com)开一个服务请求(SR)的时候,可能会经常遇到Oracle Support要求收集当前系统的RDA以诊断某些疑难问题。另外由于RDA覆盖面非常广, Oracle售后工程师在进行数据库健康检查的时候也是使用RDA作为的原始素材的收集工具的。
既然RDA是Oracle全系列产品标准诊断信息的收集工具,那么必然它也可以用于Exadata。本文并不对RDA进行通用性的介绍,而仅仅提供一些Exadata下常用的rda选项以供诊断Exadata问题之用:

1. module

RDA提供了一个Exadata专用模块,如果要对Exadata的信息进行收集只需带入Exadata模块专用的参数就能收集所有与Exadata相关的信息。

./rda.sh -vC EXA
2. profile

如果module适用于对Exadata整体性能的收集,那么profile则主要偏重于诊断Exadata某个特定组建的问题。以下列出了所有的Exadata功能组件:

profile COLLECTION MODULES 收集的模块(中文描述)
Exadata_Assessment Oracle Exadata assessment collections Exadata配置评估相关
Exadata_CellBrownout Oracle Exadata long brownout due to cell failure-related problems Exadata Cell掉电相关
Exadata_CellFailure Oracle Exadata cell failure-related problems Exadata Cell故障相关
Exadata_DatabaseCrash Oracle Exadata database crash-related problems Exadata数据库崩溃相关
Exadata_DatabaseHang Oracle Exadata database hang-related problems Exadata数据库挂起相关
Exadata_FailedDrives Oracle Exadata failed drives-related problems Exadata磁盘故障相关
Exadata_FlashDrives Oracle Exadata flash drives-related problems Exadata Flash故障相关
Exadata_IbSwitch Oracle Exadata InfiniBand switch-related problems Exadata Infiniband交换机故障相关
Exadata_Ilom Oracle Exadata Integrated Lights Out Manager-related problems Exadata Ilom故障相关
Exadata_ListenerHang Oracle Exadata listener hang-related problems Exadata监听挂起故障相关
Exadata_Network Oracle Exadata general network-related problems Exadata通用网络故障相关
Exadata_NetworkCable Oracle Exadata network cabling-related problems Exadata网线问题相关
Exadata_RacInstance Oracle Exadata RAC instance-related problems Exadata RAC实例故障相关
Exadata_SickCell Oracle Exadata sick cell-related problems Exadata Cell性能故障相关
Maa_Exa_Assessment Maximum Availability Architecture with Exadata Exadata 最大可用性架构(可以理解为最佳实践)相关

profile的使用非常简单,假如我需要检查Exadata的接线是否存在问题那么就可以运行一下命令进行诊断:

./rda.sh -vp Exadata_NetworkCabling

这条命令就可以将所有与Exadata网络接线相关的信息收集起来。

3. cell

这里使用cell看上去十分令人困惑,实际上它仅仅只是用于Exadata cell的连通性测试。

用户可以使用以下命令输入用户,然后测试连接到远程的cell节点:

./rda.sh  -vT cell

也可以在命令行中指定用户的userid进行连通性测试:

./rda.sh -vT cell:userid

这条指令主要从/etc/oracle/cell/network-config/cellip.ora文件内抽取cell节点的访问信息,主要包括以下步骤:

1. 测试which命令在当前的环境变量PATH中是否可用;
2. 检查用户的home目录下的 .ssh是否存在以及其权限是否正确;
3. 检查.ssh下的DSA或者 RSA密钥文件是否存在以及其权限是否正确;
4. 此时验证代理(authentication agent)是否配置,如果可能,检查其身份是否已被添加;
5. 测试哪些driver从远程可连;
6. 检查是否可以访问/etc/oracle/cell/network-config/cellip.ora文件
7. 检查可用的driver中哪个的连通性最佳。

综上,RDA收集信息的方式非常灵活,不仅仅可以针对Exadata,更可以针对Exadata的某一具体的组件收集诊断信息,适合于Exadata专家诊断发现问题以及Exadata健康检查。之所以说RDA适合于专家使用主要是因为RDA仅仅只是收集必需的信息,而只有Exadata专家才能利用这些原始的信息迅速的分析出问题的根源。另外一个Exadata的健康检查工具Exachk不仅仅收集信息,并且给出问题产生原因以及分析建议和解决方案,适合于绝大多数用户使用,Oracle推荐使用Exachk对Exadata进行健康检查,但是不代表RDA就毫无用武之地,就我看来,RDA本身的针对性和灵活性远比Exachk要强。

思考EXADATA我之见

原文地址:http://www.dbaleet.org/a_bit_thought_of_exadata_from_a_technical_point_of_view/

本文是针对IBM系统架构师王文杰先生(valen_won@hotmail.com)在其博客园的置顶博文思考EXADATA(链接原文地址: http://www.cnblogs.com/wenjiewang/archive/2012/10/07/2714406.html)中提到的一些关于Exadata观点,从技术角度给出我个人的一些不同的见解,当然本人水平有限,难免出现疏漏甚至错误,请诸位读者不吝赐教,同时也欢迎王文杰先生和广大读者提出不同的看法。您可以在Maclean Liu的qq群(23549328)中与我一起探讨与Oracle Exadata有关的技术。

以下简要总结一下文杰先生博文中提到关于Exadata的观点:

1. 数据仓库(Data Warehouse)类型的应用无法充分利用smart scan的特性,尤其是对于数据仓库中常见的星型转换(star transformation), Exadata无法优化;
2. Exadata Bug众多,某些新特性名存实亡,并举例说明其在布隆过滤器的使用过程中遭遇到的bug。
3. Oracle数据库Bug众多,使用Exadata对于业务逻辑复杂,数据正确性非常敏感的金融行业存在很大的风险;
4. 维护成本高,要使用Exadata,DBA需要重新学习大量的主机,存储,网络方面的知识,否则无法胜任一体机管理员的工作;
5. 对于动辄单表上百个字段的数据仓库而言,Exadata 的Storage Index形同鸡肋,因为对于每个表只能自动维护8个列,与杯水车薪无异;
6. Exadata还是RAC, RAC的share everything架构导致存在大量的cache fusion争用,与OLTP应用格格不入。
7. RAC对ERP支持不好,导致很多ERP用户不使用RAC,Exadata只提供RAC的模式。
8. Exadata磁盘容量太大,对于OLTP而言这简直就是浪费;
9. Exadata不提供任何虚拟化技术,不能充分利用其硬件资源,而它的竞争对手确提供非常成熟的虚拟化解决方案;
10.  (这年头,要凑不齐十条出门都不好意思跟人打招呼)Exadata的价格十分昂贵,普通的用户根本无法承受。

以下是我个人的回应,不代表Oracle公司的官方立场。Oracle的salary还没到我想做Oracle公司5毛的冲动。 如果您爱看软文,那么您可以请移步LoveunixAIXchina,因为那里比较多。很多技术细节三言两语很难解释清楚的,限于篇幅,这里力求简介或者一笔带过。

1. 实际上smart scan可谓是Exadata所有技术的核心,离开了smart scan,Exadata就没有了灵魂。而Exadata的smart scan的条件过于苛刻,一直以来备受竞争对手的诟病,这个也是事实。 但是文中提到的 “如果我们的报表如果不是走FULL TABLE SCAN,则无法利用到这一特性。复杂的查询,诸如Joins, sorts, group-bys, aggregation都很可能无法利用到智能扫描。” 这一说法是不准确的。我这里不厌其烦的列举一下目前smart scan的条件:(虽然这是一个错误的“真理”)

  • Full scans——Table, Partition, Materialized View,  Index (FAST FULL SCAN Only)
  • Direct Path Reads
  • Exadata Storage

对于较复杂的排序,聚合类的操作,storage index就有它的用武之地了。至于星形转换,作者说的恐怕也不是事实, 这篇文章这篇文章详细介绍了在data warehouse中, Oracle内部是如何对星型转换进行优化的一些细节。

2. 布隆过滤器是一种处理大量数据的哈希算法, 具体算法可以参考wikipedia条目 Bloom Filter, 或者参考google的吴军先生的《数学之美》一书。当然这里提到的bug也是不准确的, 这里提到的两个bug:9124206和bug: 8361126, 实际上是同一个bug即base bug为8361126。

 

 

 

文章中另外提到的bloom filter的bug应该是Bug:12637294了,但是这个bug在11.2.0.3 BP11已经修复。

另外很有意思的是smart scan内部也是使用Bloom Filter的算法进行数据过滤的。

3. Oracle Bug多是众所周知的事实, 从每次的Patchset Release/PSU的bug list可以看出,很多bug的危害也非常大。 甚至作者说的wrong result也完全是事实,但是这并非是无缘无故会出现的,这些bug大都是在一些极端的情况下触发。如果应用经过了充分的测试,那么则很少会遇到wrong results。 触发wrong results bug比较常见的一些情况是并行, 复杂的表连接等操作。MOS有一篇文档详细的介绍了如何诊断和分析此类问题: Wrong Results Issues – Recommended Actions [ID 150895.1]。顺便说一句: 越来越多金融行业客户把Oracle数据库当作核心了。

4. 维护成本的问题。维护没有作者说的那么严重。主机是PC server,硬件没有什么特殊之处。操作系统是Linux X86_64,很多SA/DBA都已经非常熟悉了。 网络维护也并不需要额外的知识,只需要了解一些常用的infiniband/cisco交换机的操作。 Exadata上的数据库维护与普通的RAC数据库并没有两样。唯一需要重新学习的是存储端的知识, 而这一部分内容很多都能从互联网上获取到。(万一实在无法胜任,Oracle公司推出了一站式白金服务,用户可以将管理“外包”给Oracle公司,笑,请进入自动忽略广告模式)

5. Storage Index每个表只能自动维护8个列这是事实,但是这并非是什么技术上的限制, Storage Index和Netezza的Zone Maps技术原理上是不一样的。Storage Index一个重要的概念就是只对排序字段起作用,对于无序的字段是无法用到它的, 所以Storage Index每个表超过8列对性能上没有多少帮助,因为一个表核心并且需要用于排序的字段并不多。

6. 这个问题实际上还是share disk和share nothing的架构之争,老掉牙的话题了,没有太多实际意义。

7. 目前运行在Oracle DB上的SAP ERP远比运行在DB2上的ERP要多,有兴趣可以查看gartner的统计数据。

8. 现在硬盘白菜价了,单块盘就2-3T了,谁还在意这么一点空间? 况且OLTP应用数据量在1T以上的也不在少数。

9. 这一条说的是事实,但是

  • vmware这样的虚拟化平台目前没有通过Oracle认证;
  • IBM LPAR不属于严格意义上的虚拟化技术;
  • Exadata上可以通过像IORM/instance cage/cgroups这样的方式来实现资源隔离;
  • 未来应该会考虑使用Oracle自己的OVM。

10. 相比高端主机+高端存储动辄几百上千万, Exadata性价比不算差吧?现在Exadata X3推出了1/8配,开始抢自家小兄弟ODA的饭碗了。。。

以上 

Exadata infiniband 是如何接线?

http://www.dbaleet.org/how_to_cable_ib_switches/

这个问题看似没有什么讨论的必要,因为接线从来就不是什么技术活。但是令人遗憾的是我对此并不熟悉,经过一番请教,基本上明白了其中的原理。

以下是一台1/4配Exadata infiniband内部是如何进行连接的:

 

 

1/4配的Exadata2台db节点和3台cell节点,另外还有2台叶子节点ib交换机。上图的理解如下:

Exadata的每台服务器都提供了一个双口的QDR infinband HCA卡, 采用在操作系统中Active-Standby的模式进行连接,Exadata就是据此来实现节点之间互连的高可用的。所以上图中有两个port,其中port1为Active, port2为Standby。默认情况下,db01, db02, cel01, cel02, cel03同时连接到两台ib叶子节点交换机上,只是在ib1为active状态,ib2为standby状态。如果db01需要访问cel01, cel02, cel03上数据有ib1就可以搞定了,并不需要通过ib2。如果ib1发生故障,这个时候ib2会自动接管,对前段的数据库的正常运行无影响。
另外两个ib叶子节点之间还有使用了7根线进行互联,这里问题来了,为什么是7根线,而不是2根或者8根?从以上图片中很难找到答案。

 

这个图是一台1/1的Exadata,但是只是用了2太ib叶子交换机。port1为primary,port2为standby。如果db01需要访问的数据位于cel01-cel07, 那么则无需使用ib2, 但是如果db01需要访问的数据位于cel08-cel14, 因为cel08-cel14再ib1上处于standby状态,并不会进行数据传输。所以需要通过两台ib交换机之间内联的7根线去ib2,然后再通过ib2去访问cel08-cel14的数据。如果两台交换机之间互连的数据线低于7根,则无法获取最大的性能,因为处于standby状态的cel节点为7台。高于7根数据线则意义不大。如果使用的是1/4配或者1/2, 虽然部分线是多余的,但是也会使用7根线来实现互联,因为这种接线的方式是出厂预设的。

如果使用第三台主干交换机,则只需要在每一台叶子交换机上分别引一根线到主干交换机。如下所示:

 

 

 

以上。

 

如何调整Exadata DB节点文件系统大小

http://www.dbaleet.org/how_to_resize_exadat_filesystem_on_db_node/

 

此文整理自MOS文档How to Expand Exadata Compute Node File Systems (Doc ID 1357457.1)

虽然是Oracle的一体机,但是操作系统是Oracle Linux 5, 所以跟普通Linux文件调整文件系统大小的方法没有太多不一样,nothing special。

早于11.2.1.3.1版本的DB节点没有使用LVM,以下针对使用LVM的文件系统进行调整。

Exadata DB节点使用了一个大小为600G的VG,大小为什么是600G?,请参看上一篇文章:Exadata X2-2 db节点系统盘的RAID是如何配置的?

首先来看一下根分区的结构:

#df /
Filesystem                   1K-blocks Used     Available Use% Mounted on
/dev/mapper/VGExaDb-LVDbSys1 30963708  21867152 7523692   75%  /

推断根分区是建立在LVDDbSys1之上的, 可以用lvscan进行验证:

#lvm lvscan
ACTIVE '/dev/VGExaDb/LVDbSys1' [30.00 GB] inherit
ACTIVE '/dev/VGExaDb/LVDbSwap1' [24.00 GB] inherit
ACTIVE '/dev/VGExaDb/LVDbOra1' [100.00 GB] inherit

从名字上可知VGExaDB这个VG上一共建立有三个LV:用于系统本身LVDbSys1, 用于swap分区的LVDbSwap1, 用于Oracle二进制文件的LVDbOra1。以下通过lvdisplay来查看LVDbSys1是否是位于VGExaDb:

#lvm lvdisplay /dev/VGExaDb/LVDbSys1
--- Logical volume ---
LV Name               /dev/VGExaDb/LVDbSys1
VG Name               VGExaDb
LV UUID               GScpD7-lKa8-gLg9-oBo2-uWaM-ZZ4W-Keazih
LV Write Access       read/write
LV Status             available
# open                1
LV Size               30.00 GB
Current LE            7680
Segments              1
Allocation            inherit
Read ahead sectors    auto
- currently set to    256
Block device          253:0

确认VGExaDb这个VG是否有空间:

#lvm vgdisplay VGExaDb -s
"VGExaDb" 556.80 GB [154.00 GB used / 402.80 GB free]

好了,需要收集的信息都已经收集完毕,下面就开始正式对根文件系统/和Oracle二进制文件分区/u01进行resize(以下是扩容,其它调整类似)

(一)对/u01文件系统进行调整
1) 停止这个节点的集群软件,emagent, OSW, 以及其它工具例如ogg等。
停用crs:
#/u01/app/11.2.0.3/grid/bin/crsctl stop crs
停用osw:
#/opt/oracle.oswatcher/osw/stopOSW.sh
停用em agent:
#su - oracle
$/u01/app/oracle/product/11.2.0.3/dbhome_1/bin/emctl stop agent

 

2) 使用root用户umount /u01文件系统:

#umount /u01

如果提示忙,则是当前分区还有进程在运行。使用fuser /u01查看其进程的信息,然后关闭这些进程,然后重试。
3) 对LVDbOra1进行检查:

#fsck -f /dev/VGExaDb/LVDbOra1

4) 使用那个lvextend对LVDbOra1这个VG进行扩展:

 #lvm lvextend -L+sizeG --verbose /dev/VGExaDb/LVDbOra1

将实际需要增加的值替换以上size,例如对这个lv扩展10G空间对应的命令为:lvm lvextend -L+10G –verbose /dev/VGExaDb/LVDbOra1。

5) 检查/u01文件系统:
#e2fsck -f /dev/VGExaDb/LVDbOra1

6) 对/u01文件系统进行扩展:

#resize2fs -p /dev/VGExaDb/LVDbOra1

7) 重新mount /u01文件系统:

#mount -t ext3 /dev/VGExaDb/LVDbOra1 /u01

8) 确认调整已经生效:

#df -h /u01

9) 启动集群, osw, emagent等:

启动集群:

#/u01/app/11.2.0.3/grid/bin/crsctl start crs

启动osw:

#/opt/oracle.oswatcher/osw/startOSW.sh

启动em agent:

#su - oracle
$/u01/app/oracle/product/11.2.0.3/dbhome_1/bin/emctl stop agent

(一)对/根文件系统进行调整
众所周知,/跟文件系统无法在线进行调整。 需要先启动到诊断模式(diagnostic mode)

1) 系统启动到诊断模式:

将db节点的/opt/oracle.SupportTools/diagnostics.iso文件拷贝到本地,或者其它任何使用ilom的机器上。打开浏览器输入这台主机的ilom地址,使用root用户登录,找到Remote Control标签->Redirection标签->点击Launch Remote Console, 然后在 Sun ILOM Remote Console中选择Devices目录,选择 CD-ROM Image,在对话框中选择本地的diagnostics.iso,然后选择Open。然后在Remote Control标签页中选择Host Control, 选择CDROM,然后点击保存。这样这台主机就只有下一次启动会从这个虚拟光驱启动。使用shutdown -r -y now重启操作系统,自动进入诊断模式。

2) 在对话选项中输入e表示进入交互的诊断模式shell:

Choose from following by typing letter in '()':
(e)nter interactive diagnostics shell. Must use credentials from Oracle
support to login (reboot or power cycle to exit the shell),
(r)estore system from NFS backup archive,
Select:e

3) 在提示用户名地方输入用户名root, 其对应的密码是sos1exadata:

localhost login: root
Password: *********
-sh-3.1#

4) 将resizefs二进制命令,拷贝到/sbin下:

# cp /mnt/cell/sbin/resize2fs /sbin

5) 然后umount /mnt/cell文件系统:

#cd /
#umount /mnt/cell

6) 查看LV的名称:

#lvm lvscan
ACTIVE '/dev/VGExaDb/LVDbSys1' [30.00 GB] inherit
ACTIVE '/dev/VGExaDb/LVDbSwap1' [24.00 GB] inherit
ACTIVE '/dev/VGExaDb/LVDbOra1' [100.00 GB] inherit

7) 使用lvextend对/dev/VGExaDb/LVDbSys1进行扩展:

#lvm lvextend -L+sizeG --verbose /dev/VGExaDb/LVDbSys1

将实际需要增加的值替换以上size,例如对这个lv扩展10G空间对应的命令为:
lvm lvextend -L+10G –verbose /dev/VGExaDb/LVDbSys1
8) 对/文件系统进行检查:

# e2fsck -f /dev/VGExaDb/LVDbSys1

9) 对/文件系统大小进行调整:

#resize2fs -p /dev/VGExaDb/LVDbSys1

10) 重启操作系统:

#reboot

11) 确认修改已经生效:

#df -h /u01

以上

使用OUT-OF-PLACE的方式应用Exadata的Bundle Patch

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

在之前介绍Oplan这篇文章中,提到了Oplan会根据客户当前系统的实际情况,生成可执行的补丁方案,以下介绍的就是oplan生成的使用clone方式应用Exadata BP的例子。

一般情况下,我们都可以使用rolling的方式应用Exadata的bundle patch,因为这样无需停机窗口。如果允许很小的停机窗口,则可以考虑使用clone的方式来应用Exadata的Bundle Patch,这就是所谓的out-of-place的升级方式(看来out-of-place的方式是大势所趋呀)。out-of-place的方式最大的优势是能将升级/补丁的风险降到最低,一旦升级/补丁失败,则只需切换环境变量就能做到立即回滚。并且OUT-OF-PLACE升级/打补丁前期的准备工作都可以在线完成。相比rolling的方式,其不足之处在于需要停机,即使所需的停机窗口很短。另外需要本地文件系统需要保留足够的空间。

以下为一个Exadata上应用BP10(patch#14662263)的过程:

原始版本 目标版本
GI版本 11.2.0.3 BP3 11.2.0.3 BP10
RDBMS版本 11.2.0.3 BP3 11.2.0.3 BP10
GI ORACLE_HOME /01/app/11.2.0.3/grid /01/app/11.2.0.3/grid_2
RDBMS ORACLE_HOME /u01/app/oracle/product/11.2.0.3/dbhome_1 /u01/app/oracle/product/11.2.0.3/dbhome_2
LISTENER ORACLE_HOME /u01/app/11.2.0.3/grid /u01/app/11.2.0.3/grid_2
1) 开始clone前的一些准备工作:

1. 备份/u01/app/oraInventory目录;
2. 下载BP10的patch 14662263,并使用oracle用户将其上传到/tmp/patches目录下;
3. 将/opt/oracle.SupportTools/onecommand拷贝到/root, /home/grid, /home/oracle目录下;
4. 下载最新opatch(patch# 6880880), 并且更新到所有节点;

[oracle@dm01db01 ~] dcli -g ~/dbs_group -l oracle -f /tmp/patches/p6880880_112000_Linux-x86-64.zip -d /tmp/p6880880_112000_Linux-x86-64.zip
[grid@dm01db01 ~]dcli -g ~/dbs_group -l grid unzip -oqu -d /u01/app/11.2.0.3/grid/Opatch /tmp/p6880880_112000_Linux-x86-64.zip
[oracle@dm01db01 ~]dcli -g ~/dbs_group -l oracle unzip -oqu -d /u01/app/oracle/product/11.2.0.3/dbhome_1/Opatch /tmp/p6880880_112000_Linux-x86-64.zip

5. 将patch分发到所有的DB节点;

[oracle@dm01db01 ~] dcli -g ~/dbs_group -l oracle -f /tmp/patches/p14662263_112030_Linux-x86-64.zip -d /tmp/p14662263_112030_Linux-x86-64.zip
[oracle@dm01db01 ~]dcli -g ~/dbs_group -l oracle unzip -oqu -d /tmp /tmp/p14662263_112030_Linux-x86-64.zip

5.察看当前的patch level;

[oracle@dm01db01 ~]$ export ORACLE_HOME=/u01/app/11.2.0.3/grid
[grid@dm01db01 ~]$ dcli -g ~/dbs_group -l oracle $ORACLE_HOME/OPatch/opatch lsinventory -invPtrLoc $ORACLE_HOME/oraInst.loc -oh $ORACLE_HOME

6. 查看GI和RDBMS二进制文件的占用空间和/u01文件系统的可用空间;

[root@dm01db01 ~]dcli -g ~/dbs_group -l root du -skh /u01/app/11.2.0.3/grid
[root@dm01db01 ~]dcli -g ~/dbs_group -l root du -skh /u01/app/oracle/product/11.2.0.3/dbhome_1
[root@dm01db01 ~]dcli -g ~/dbs_group -l root df -h /u01
2) 对GI进行clone:

1. 创建一个新的GI的ORACLE_HOME, 然后将原始的ORACLE_HOME使用tar打包,然后解压到新的ORACLE_HOME;

[grid@dm01db01 ~]export ORACLE_HOME=/u01/app/11.2.0.3/grid_2
[grid@dm01db01 ~]dcli -g ~/dbs_group -l root mkdir $ORACLE_HOME
[grid@dm01db01 ~]dcli -g ~/dbs_group -l root chown oracle:oinstall $ORACLE_HOME
[grid@dm01db01 ~]dcli -g ~/dbs_group -l root "cd /u01/app/11.2.0.3/grid; tar cfp - . | ( cd $ORACLE_HOME ; tar xf - )"

2. 对新的ORACLE_HOME的GI进行解锁;

[grid@dm01db01 ~]export ORACLE_HOME=/u01/app/11.2.0.3/grid_2
[grid@dm01db01 ~]dcli -g ~/dbs_group -l root /usr/bin/perl $ORACLE_HOME/OPatch/crs/patch112.pl -unlock -desthome=$ORACLE_HOME

3.运行clone.pl脚本进行克隆;

[grid@dm01db01 ~]export ORACLE_HOME=/u01/app/11.2.0.3/grid_2
[grid@dm01db01 ~]/usr/bin/perl $ORACLE_HOME/clone/bin/clone.pl ORACLE_BASE=/u01/app/oracle \
ORACLE_HOME=$ORACLE_HOME ORACLE_HOME_NAME=Ora11g_gridinfrahome1_2 \
INVENTORY_LOCATION=/u01/app/oraInventory -O'"CLUSTER_NODES={dm01db01,dm01db02, dm01db03, dm01db04}"' \
-O'"LOCAL_NODE=dm01db01"' CRS=false -O"SHOW_ROOTSH_CONFIRMATION=false"

4. relink oracle二进制文件使其能使用RDS协议;

[grid@dm01db01 ~]export ORACLE_HOME=/u01/app/11.2.0.3/grid_2
[grid@dm01db01 ~]dcli -g ~/dbs_group -l oracle "cd $ORACLE_HOME/rdbms/lib; ORACLE_HOME=$ORACLE_HOME \
make -f ins_rdbms.mk ipc_rds ioracle"
3) 使用常规的方式对新的GI的ORACLE_HOME应用patch(略)
4) 切换到新的GI ORACLE_HOME

1) 停止资源;

[grid@dm01db01 ~] export ORACLE_HOME=/u01/app/oracle/product/11.2.0.3/dbhome_1
[grid@dm01db01 ~]$ORACLE_HOME/bin/srvctl stop home -o $ORACLE_HOME -n dm01db01 -s /tmp/gi.stat

2) 切换到新的GI ORACLE_HOME;

[root@dm01db01 ~]export ORACLE_HOME=/u01/app/11.2.0.3/grid_2
[root@dm01db01 ~]/usr/bin/perl $ORACLE_HOME/OPatch/crs/patch112.pl -patch -desthome=$ORACLE_HOME

3) 启动所有的资源;

[root@dm01db01 ~]export ORACLE_HOME=/u01/app/oracle/product/11.2.0.3/dbhome_1
[root@dm01db01 ~]$ORACLE_HOME/bin/srvctl start home -o $ORACLE_HOME -n dm01db01 -s /tmp/gi.stat

4) 确认所有的资源都已经启动;

[grid@dm01db01 ~] export ORACLE_HOME=/u01/app/11.2.0.3/grid_2
[grid@dm01db01 ~] $ORACLE_HOME/bin/crsctl stat res -t

5. detach老的GI的ORACLE_HOME;

[grid@dm01db01 ~]export ORACLE_HOME=/u01/app/11.2.0.3/grid
[grid@dm01db01 ~]cd $ORACLE_HOME/oui/bin; ./detachHome.sh -silent -local -invPtrLoc /etc/oraInst.loc
4) 对RDBMS进行clone

1. 创建新的RDBMS的ORACLE_HOME, 将原始的ORACLE_HOME使用tar打包,并解压到新的ORACLE_HOME;

[oracle@dm01db01 ~]export ORACLE_HOME=/u01/app/oracle/product/11.2.0.3/dbhome_2
[oracle@dm01db01 ~]dcli -g ~/dbs_group -l oracle mkdir -p $ORACLE_HOME
dcli -g ~/dbs_group -l oracle "cd /u01/app/oracle/product/11.2.0.3/dbhome_1; \
tar cf - . | ( cd $ORACLE_HOME ; tar xf - )"

2. 运行clone.pl;

[oracle@dm01db01 ~]export ORACLE_HOME=/u01/app/oracle/product/11.2.0.3/dbhome_2
[oracle@dm01db01 ~]dcli -g ~/dbs_group -l oracle "cd $ORACLE_HOME/clone/bin; ./clone.pl ORACLE_HOME=$ORACLE_HOME \
ORACLE_HOME_NAME=OraDB_home2 ORACLE_BASE=/u01/app/oracle"
[oracle@dm01db01 ~]$ORACLE_HOME/oui/bin/runInstaller \
-updateNodeList ORACLE_HOME=$ORACLE_HOME "CLUSTER_NODES={dm01db01,dm01db02,db01db03,dm01db04}"

 

3. relink oracle二进制文件,使其可以使用RDS协议;

[oracle@dm01db01 ~]export ORACLE_HOME=/u01/app/oracle/product/11.2.0.3/dbhome_2
[oracle@dm01db01 ~]dcli -g ~/dbs_group -l oracle "cd $ORACLE_HOME/rdbms/lib; \
ORACLE_HOME=$ORACLE_HOME make -f ins_rdbms.mk ipc_rds ioracle"

4. 在新的ORACLE_HOME运行root.sh;

[root@dm01db01 ~] export ORACLE_HOME=/u01/app/oracle/product/11.2.0.3/dbhome_2
[root@dm01db01 ~]dcli -g ~/dbs_group -l root $ORACLE_HOME/root.sh

5. 完成以后补丁的验证;

[oracle@dm01db01 ~]export ORACLE_HOME=/u01/app/oracle/product/11.2.0.3/dbhome_2
[oracle@dm01db01 ~]dcli -g ~/dbs_group -l oracle "$ORACLE_HOME/OPatch/opatch lsinventory -oh $ORACLE_HOME"

 

5) 对RDBMS应用patch(略)
6) 切换到新的RDBMS ORACLE_HOME

1. 确认当前数据库运行在老的RDBMS ORACLE_HOME(当前运行dbm一个数据库);

 [grid@dm01db01 ~]$ORACLE_HOME/bin/srvctl config database -d dbm -a

2. 将当前数据库切换到新的RDBMS ORACLE_HOME;

[grid@dm01db01 ~]/u01/app/11.2.0.3/grid_2/bin/srvctl modify database -d dbm -o /u01/app/oracle/product/11.2.0.3/dbhome_2

3. 修改oratab到新的RDBMS ORACLE_HOME;

将/etc/oratab中的

dbm:/u01/app/oracle/product/11.2.0.3/dbhome_1:N

修改为:

dbm:/u01/app/oracle/product/11.2.0.3/dbhome_2:N

4. 如果使用了dbfs,则需要对dbfs脚本进行调整;

5. 确认切换已经生效;

[grid@dm01db01]ORACLE_HOME/bin/srvctl config database -d dbm -a
 6. 重启RDBMS;
[grid@dm01db01 ~]$ORACLE_HOME/bin/srvctl stop instance -d dbm -i dbm1
[grid@dm01db01 ~]$ORACLE_HOME/bin/srvctl start instance -d dbm -i dbm1

在其它节点完成同样的操作。

7. 运行post upgrade的SQL脚本;

SQL> @rdbms/admin/catbundle.sql exa apply

8. 验证当前数据库实例的状态;

[grid@dm01db01 ~]$ORACLE_HOME/bin/srvctl status database -d dbm

以上只有切换的过程需要停机,其余步骤都可以在线进行。

注意, 这种OUT-OF-PLACE并不是只能用于Exadata,对于通用的RDBMS也同样是适用的。OUT-OF-PLAC方式因其风险小,停机时间短,回退方案简单预计会在Oracle补丁应用的最佳实践中逐步得到推广。

Exadata的patch辅助工具Oplan

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

首先, 不要误会,oplan并不是在Exadata上替代opatch的补丁工具,目前,它仅仅只是提供一个替代opatch readme的功能。

opatch发展到今天已经算得上非常成熟的补丁工具了,它能在应用任何补丁之前自动检查是否和已存在的patch冲突。绝大多数的补丁都能通过一两条简单的命令直接搞定:例如opatch auto/opatch apply。但是Oracle这种补丁机制也存在一些小问题:例如补丁的readme由于只提供一些通用性的步骤,所以往往缺乏可读性,其中很多补丁的readme都是从别的文档拷贝修改过来的,甚至存在一些错误。由于上述问题,很多dba在打补丁之前甚至都不看readme文件的。下面提到的oplan却能根据客户现有的环境进行前提条件的检查,最后生成一个可执行的命令行的报告,这比原始的readme本身更有意义。

oplan并非Exadata专有的,但是最早用于Exadata平台,作为补丁应用的最佳实践。仅支持linux和solaris平台。

Product Family Product Patch Type Release Platform
Oracle Database Oracle Exadata Database Machine** Recommended Bundle Patches * 11.2.0.2 Linux x86-64, Solaris x86-64
Oracle GI/RAC running on normal clusters GI PSU and DB PSU 11.2.0.2 Linux x86-64, Solaris x86-64,
Solaris SPARC (64 bit)
Oracle Database Oracle Exadata Database Machine** Recommended Bundle Patches 11.2.0.3*** Linux x86-64, Solaris x86-64,
Solaris SPARC (64 bit)
Oracle GI/RAC running on normal clusters GI PSU and DB PSU 11.2.0.3 Linux x86-64, Solaris x86-64,
Solaris SPARC (64 bit)
Oracle Database Oracle Exadata Database Machine Recommended Bundle Patches 12.1.0.1 Linux x86-64, Solaris x86-64,
Solaris SPARC (64 bit)
Oracle GI/RAC running on normal clusters GI PSU and DB PSU 12.1.0.1 Linux x86-64, Solaris x86-64,
Solaris SPARC (64 bit)

oplan的使用十分简单,以下是使用的步骤:

1. 去MOS下载Patch 11846294, 并且上传到DB服务器

2. 将$ORACLE_HOME/OPatch备份,删除已存在的 $ORACLE_HOME/OPatch/oplan目录, 并将patch 11846294解压到$ORACLE_HOME/OPatch目录。

3. 下载实际需要应用的补丁,上传到DB服务器,然后解压到特定目录例如/tmp/, 例如Exadata BP11: 14474780。

4. $ORACLE_HOME/oplan/oplan generateApplySteps  /tmp/14474780

完成以后,会在$ORACLE_HOME/cfgtoollogs/oplan生成对应的html版本和txt版本的报告: $ORACLE_HOME/cfgtoollogs/oplan/<TimeStamp>/InstallInstructions.html
$ORACLE_HOME/cfgtoollogs/oplan/<TimeStamp>/InstallInstructions.txt

5. 按照报告中的方案应用补丁,这里有多种方案可供选择,例如in-place或者out-of-place的方式。

6. 如果需要回退,也可以生成回退方案的报告。

$ORACLE_HOME/oplan/oplan generateRollbackSteps  /tmp/14474780

oplan和它的名字一样,目前只是用来检查补丁应用规范的最佳实践的工具,无法根据生成的方案自动应用补丁, 也就是说只是计划而不是行动。但是在可预见的未来,Oracle可能会逐步完善将其发展为补丁自动应用工具,生成可执行的方案以后,用户只要选择1 2, 3之类的选项就能完成补丁的安装,真正做到补丁的一键安装。

以上

Exadata如何搭建PXE虚拟机自动reimage

原文链接:

http://www.dbaleet.org/how_to_build_a_pxe_virtual_machine_to_reimage_automaticaly_in_exadata/

前面的文章介绍了如何对exadata进行reimage, 试想一台满配(Full Rack)X3-2的Exadata, 一共有8个数据库节点, 14个存储节点。每按照传统的方式每个数据库节点 reimage需要1个小时,每个存储节点 reimage需要1.5个小时来计算, 所花费的实际那为8×1+14×1.5=29小时。如果使用多个usb来并行reimage,时间也接近两天左右。有没有一种更简单的方法来完成这个费力不讨好的工作呢?

答案是肯定的,那就是使用PXE的方式来进行reimage。使用PXE一共分为以下几个步骤:

准备工作

在开始安装以前,需要进行如下准备工作:

  • 安装虚拟机,推荐Oracle Virtualbox (可在https://www.virtualbox.org/下载);
  • 虚拟机分配的内存在1GB以上,剩余磁盘空间在20G以上;
  • 安装Oracle Linux 5.7或者其它Linux发行版。Oracle Linux 可在 https://edelivery.oracle.com/下载;
  • 下载Exadata 安装介质。可前往 https://edelivery.oracle.com/,我这里使用的是:11.2.3.1.1版本。
  • VirutalBox需要配置两块虚拟网卡,其中网卡1使用的是Bridge的模式,同时安装者需要一个网线连接自己的笔记本电脑到Exadata自带的Cisco交换机。以便网卡一与Exadata的出厂地址处在同一个网段。网卡2采用的是Host Only的模式,配置次网卡的目的主要是为了方便从笔记本连接到PXE虚拟机。

 

 

 

网卡1在Linux操作系统中对应eth0,其网络配置信息如下:

 

[root@exadatapxe ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
# Intel Corporation 82540EM Gigabit Ethernet Controller
DEVICE=eth0
BOOTPROTO=static
BROADCAST=192.168.1.255
IPADDR=192.168.1.250
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes

网卡2在Linux操作系统中对应eth1,其网络配置信息如下:

[root@exadatapxe ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
# Intel Corporation 82540EM Gigabit Ethernet Controller
DEVICE=eth1
BOOTPROTO=static
BROADCAST=192.168.56.255
#HWADDR=08:00:27:E0:F9:28
IPADDR=192.168.56.250
NETMASK=255.255.255.0
NETWORK=192.168.56.0
ONBOOT=yes

 

制作PXE介质:

1.使用VirtualBox的共享文件夹功能将Exadata介质上传到虚拟机

使用Virtualbox的共享文件夹功能将Exadata的介质上传到虚拟机并解压,最终得到dl180文件夹和dl360文件夹,分别代表存储节点和数据库节点。

2. 使用makeImageMedia制作存储节点的pxe镜像

[root@exadatapxe dl180]# ./makeImageMedia.sh -pxe -pxeout dl180
Please wait. Calculating md5 checksums for cellbits ...
Calculating md5 checksum for exaos.tbz ...
Calculating md5 checksum for cellboot.tbz ...
Calculating md5 checksum for cellfw.tbz ...
Calculating md5 checksum for diag.iso ...
Calculating md5 checksum for kernel.tbz ...
Calculating md5 checksum for ofed.tbz ...
Calculating md5 checksum for sunutils.tbz ...
Calculating md5 checksum for hputils.tbz ...
Calculating md5 checksum for c7rpms.tbz ...
Calculating md5 checksum for commonos.tbz ...
Calculating md5 checksum for debugos.tbz ...
Calculating md5 checksum for cellrpms.tbz ...
Calculating md5 checksum for doclib.zip ...
Calculating md5 checksum for cell.bin ...
Store filename of nfsimg tarball nfsimg-11.2.3.1.1-dl180-DL180.tar inside initrd
Please wait. Making initrd ...
199932 blocks
Please wait. Calculating md5 checksums for boot ...
PXE NFS image: /root/soft/dl180/./PXE/nfsimg-11.2.3.1.1-dl180-DL180.tar
PXE NFS md5 sum: /root/soft/dl180/./PXE/nfsimg-11.2.3.1.1-dl180-DL180.tar.md5
PXE initrd: /root/soft/dl180/./PXE/initrd-11.2.3.1.1-dl180-DL180.img
PXE kernel: /root/soft/dl180/./PXE/vmlinux-11.2.3.1.1-dl180-DL180

3. 创建文件夹用来存放PXE的介质配置文件

[root@exadatapxe PXE]# mkdir /exadata_nfs
[root@exadatapxe PXE]# mkdir /exadata_nfs/dl180
[root@exadatapxe PXE]# mkdir /exadata_nfs/dl360
[root@exadatapxe PXE]# mkdir /exadata_nfs/config
[root@exadatapxe PXE]# mkdir /tftpboot
[root@exadatapxe PXE]# mkdir /tftpboot/pxelinux.cfg

其中:

/exadata_nfs/dl180存放存储节点的安装介质;
/exadata_nfs/dl360存放数据库节点的安装介质;
/exadata_nfs/config存放Exadata的配置文件preconf.csv;
/tftpboot存放tftp的共享信息。

4. 将nfsimg-11.2.3.1.1-dl180-DL180.tar包拷贝到/exadata_nfs/dl180/作为存储节点的安装介质

[root@exadatapxe PXE]# mv nfsimg-11.2.3.1.1-dl180-DL180.tar* /exadata_nfs/dl180/

5. 将剩余的内核引导文件放置到tftp的共享目录/tftpboot下

[root@exadatapxe PXE]# mv * /tftpboot/

6. 解压存储节点的安装镜像

[root@exadatapxe PXE]# cd /exadata_nfs/dl180/
[root@exadatapxe dl180]# tar -pxvf nfsimg-11.2.3.1.1-dl180-DL180.tar

7. 对存储节点安装镜像解压后的文件进行md5校验

[root@exadatapxe dl180]# md5sum *

8. 删除安装存储节点的安装镜像以节省空间

[root@exadatapxe dl180]# rm -rf nfsimg-11.2.3.1.1-dl180-DL180.tar*

9. 使用同样的方式创建数据库节点PXE环境

[root@exadatapxe dl360]# ./makeImageMedia.sh -pxe -pxeout dl360
Please wait. Calculating md5 checksums for cellbits ...
Calculating md5 checksum for exaos.tbz ...
Calculating md5 checksum for dbboot.tbz ...
Calculating md5 checksum for dbfw.tbz ...
Calculating md5 checksum for diag.iso ...
Calculating md5 checksum for kernel.tbz ...
Calculating md5 checksum for ofed.tbz ...
Calculating md5 checksum for sunutils.tbz ...
Calculating md5 checksum for hputils.tbz ...
Calculating md5 checksum for c7rpms.tbz ...
Calculating md5 checksum for commonos.tbz ...
Calculating md5 checksum for debugos.tbz ...
Calculating md5 checksum for dbrpms.tbz ...
Store filename of nfsimg tarball nfsimg-11.2.3.1.1-dl360-DL360.tar inside initrd
Please wait. Making initrd ...
199810 blocks
Please wait. Calculating md5 checksums for boot ...
PXE NFS image: /root/soft/dl360/./PXE/nfsimg-11.2.3.1.1-dl360-DL360.tar
PXE NFS md5 sum: /root/soft/dl360/./PXE/nfsimg-11.2.3.1.1-dl360-DL360.tar.md5
PXE initrd: /root/soft/dl360/./PXE/initrd-11.2.3.1.1-dl360-DL360.img
PXE kernel: /root/soft/dl360/./PXE/vmlinux-11.2.3.1.1-dl360-DL360
[root@exadatapxe PXE]# mv nfsimg-11.2.3.1.1-dl360-DL360.tar* /exadata_nfs/dl360/
[root@exadatapxe PXE]# mv * /tftpboot/
[root@exadatapxe PXE]# cd /exadata_nfs/dl360
[root@exadatapxe dl360]# tar -pxvf nfsimg-11.2.3.1.1-dl360-DL360.tar
[root@exadatapxe dl360]# md5sum *
[root@exadatapxe dl360]# rm -f nfsimg-11.2.3.1.1-dl360-DL360.tar*

TFTP配置

1. 安装tftp的服务端和客户端

[root@exadatapxe Server]# rpm -Uvh tftp-server-0.49-2.0.1.x86_64.rpm
[root@exadatapxe Server]# rpm -Uvh tftp-0.49-2.0.1.x86_64.rpm

2. 修改tftp配置文件

因为tftp 服务由 xinetd 服务管理,故tftp的配置文件位于/etc/xinetd.d/下:

[root@exadatapxe Server]vi /etc/xinetd.d/tftp

唯一一个需要修改的地方是将disable = yes修改为disable = no

3. 启动xinetd服务

[root@exadatapxe ~]# service xinetd start

4. 将xinetd服务配置为始终自动启动

[root@exadatapxe ~]#chkconfig xinetd --level 2345 on

5. 确认配置已生效

[root@exadatapxe ~]#chkconfig --list xinetd

NFS的配置:

1. 修改NFS配置:

修改/etc/exports文件,将以下内容填入到nfs的配置文件中:

[root@exadatapxe ~]#vi /etc/exports
/exadata_nfs 192.168.1.0/24(ro,no_acl,sync,no_root_squash)

2. 使得NFS的配置在当前生效:

[root@exadatapxe ~]# exportfs –a

3. 启动NFS相关服务:

[root@exadatapxe ~]# /etc/init.d/portmap start
[root@exadatapxe ~]# /etc/init.d/nfs start

4. 查看NFS共享目录:

[root@exadatapxe ~]# showmount –e localhost

5. 将NFS相关服务配置为自动启动:

[root@exadatapxe ~]#chkconfig portmap --level 2345 on
[root@exadatapxe ~]#chkconfig nfs --level 2345 on

6. 确认配置已经生效:

[root@exadatapxe ~]# chkconfig --list portmap
[root@exadatapxe ~]# chkconfig --list nfs

DHCP配置

1. 安装dhcp的服务端:

[root@exadatapxe ~]# rpm -qa | grep dhcp
[root@exadatapxe Server]# rpm -ivh dhcp-3.0.5-29.el5.x86_64.rpm

2.上传Exadata配置文件preconf.csv

不要忘记在preconf.csv中第六个逗号和第七个逗号之间添加Exadata主机的mac地址,然后在上传到/exadata_nfs/config目录下。

3. 创建pxe的默认配置文件

[root@exadatapxe ~]# vi /tftpboot/pxelinux.cfg/default

LABEL Exadata_ComputeNode_11.2.3.1.1
kernel vmlinux-11.2.3.1.1-dl360-DL360
append initrd=initrd-11.2.3.1.1-dl180-DL180.img pxe stit updfrm dhcp reboot-on-success dualboot=no notests=diskgroup sk=192.168.1.250:/exadata_nfs preconf=192.168.1.250:/exadata_nfs/config/preconf.csv

LABEL Exadata_CellNode_11.2.3.1.1
kernel vmlinux-11.2.3.1.1-dl180-DL180
append initrd=initrd-11.2.3.1.1-dl180-DL180.img pxe stit updfrm dhcp reboot-on-success notests=diskgroup sk=192.168.1.250:/exadata_nfs/dl180 preconf=192.168.1.250:/exadata_nfs/config/preconf.csv

4. 将pxelinux.0和menu.c32拷贝到/tfptboot/目录

[root@exadatapxe ~]# rpm -ql syslinux | grep pxelinux.0
/usr/lib/syslinux/pxelinux.0
[root@exadatapxe ~]cp /usr/lib/syslinux/pxelinux.0 /tfptboot/
[root@exadatapxe ~]# rpm -ql syslinux | grep menu.c32
/usr/lib/syslinux/menu.c32
[root@exadatapxe ~]cp /usr/lib/syslinux/menu.c32 /tfptboot/

拷贝完成以后,可以看到如下文件信息:

[root@exadatapxe tftpboot]# ls -l
total 75572
-rw-r--r-- 1 root root 34941531 Aug 19 21:35 initrd-11.2.3.1.1-dl180-DL180.img
-rw-r--r-- 1 root root 34936051 Aug 19 23:11 initrd-11.2.3.1.1-dl360-DL360.img
drwxr-xr-x 4 root root 4096 Aug 19 19:43 linux-install
-rw-r--r-- 1 root root 26752 Aug 19 22:18 menu.c32
-rw-r--r-- 1 root root 13148 Aug 19 22:18 pxelinux.0
drwxr-xr-x 2 root root 4096 Aug 20 01:58 pxelinux.cfg
-r-xr-xr-x 1 root root 3677280 Aug 19 21:35 vmlinux-11.2.3.1.1-dl180-DL180
-r-xr-xr-x 1 root root 3677280 Aug 19 23:11 vmlinux-11.2.3.1.1-dl360-DL360

5. 修改dhcp的配置文件:

[root@exadatapxe ~]vi /etc/dhcpd.conf

ddns-update-style none;
allow booting;
allow bootp;
subnet 192.168.1.0 netmask 255.255.255.0 {
option routers 192.168.1.250;
option subnet-mask 255.255.255.0;
option domain-name "oracle.com";
option domain-name-servers 192.168.1.250;
range dynamic-bootp 192.168.1.128 192.168.1.240;
default-lease-time 21600;
max-lease-time 43200;
next-server 192.168.1.250;
filename "pxelinux.0";
}

6.  启动DHCP服务:

[root@exadatapxe ~]# service dhcpd start

7. 将DHCP服务配置为自动启动:

[root@exadatapxe ~]#chkconfig dhcpd --level 2345 on

8. 确认配置已经生效:

[root@exadatapxe ~]# chkconfig --list dhcpd

 

 PXE测试

随意创建一个虚拟机进行测试:

开机按下F12,可以看到以下选择界面:

输入l, 选择使用网络模式进行启动。

经过一小段时间以后,会出现可供选择的菜单:

 

 

 

任意选择其中的一个做测试用

 

安装介质会自动探测到并非Exadata硬件,无法继续。

 

 PXE reimage

在Exadata的第一个数据库节点上执行以下命令:

[root@dm01db01 ~]# dcli –g /opt/oracle.SupportTools/firstconf/<full, half or
quarter> –l root ipmitool chassis bootdev pxe

[root@dm01db01 ~]# dcli –g /opt/oracle.SupportTools/firstconf/<full,half or
quarter> –l root reboot

其中<full,half or quarter> 用您实际的配置代替。运行完这个脚本以后,所有的数据库节点和存储节点都会重启。主机重启以后会自动去找DHCP服务,PXE启动后会出现PXE reimage的菜单,选择对应的版本和节点类型,等待一段时间,reimage完成。

 

 更换PXE介质

如果有新的Exadata版本发布,并不需要再次按照上述步骤重新搭建一个虚拟机,只需要完成以下步骤就可以了:

1. 将新的介质上传到PXE虚拟机,并运行makeImageMedia.sh –pxe命令;

2. 将上述命令生成的nfsimg*拷贝到/exadata_nfs对应的目录;

3. 将initrd*文件和vmlinux文件拷贝到/tftpboot;

4. 更新tftpboot/pxelinux.cfg/default文件;

5. 上传新的preconf.csv文件。

沪ICP备14014813号-2

沪公网安备 31010802001379号