Exadata 高性能盘换成高容量盘
随着业务系统的快速发展,现在的数据库动辄十几或几十个TB,以前老版本的Exadata,比如X2-2或X3-2,高性能的机械盘(单块盘存储容量为600GB)的存储容量已经根本无法满足数据增长的需求,有很多的客户需要对Exadata的存储进行扩容。
存储扩容的方案比较多,例如增加新的存储节点、高性能盘换高容量盘、1/8配置升级成1/4配置(在当前Exadata硬件支持的情况下)、增加Exadata存储扩展柜等等,本文不对存储扩容方案进行一一介绍,只列举其中的将存储节点的高性能盘更换成8TB高容量盘方案进行详细讲解。
7.1.1 注意事项
X2、X3、X4和X5 Exadata和存储扩展架,将Exadata存储服务器中的磁盘更换成8TB的高容量盘时,需要注意如下事项。
n Exadata的V1和V2系统,不支持8TB的高容量磁盘交换。
n 不提供10TB大容量磁盘的磁盘交换服务。注意:这里不提供10TB大容量磁盘的服务并不是指在技术层面不支持这种操作,而仅仅是ORACLE公司不提供这种服务,单纯从技术而言,应该不存在问题。
n X2/X3/X4/X5系列的Exadata可以使用单块容量大小为8TB的高容量盘,但必须保证存储软件版本和GI集群版本也必须满足一定的要求,具体要求如下所示。
1) 原始型号为H7280A520SUN8.0T要求Exadata 12.1.2.1.2或更高,这些驱动器已经到了使用寿命的尽头,一旦当前库存耗尽,将不再作为替换部件提供。
2) 较新的型号为H7280B520SUN8.0T需要以下Exadata版本之一:18.x或更高版本;12.2.1.1.2或更高的12.2版本;12.1.2.3.6或更高的12.1版本。
3) GI集群版本需要为以下版本之一:12.1.0.2.11或更高的BP补丁或更高的版本;12.1.0.2.10及以下的BP补丁,则需要额外打21281532、21099555、28683167补丁;11.2.0.4.18或更高BP补丁;11.2.0.4.17及以下的BP补丁,则需要额外打21099555;11.2.0.3版本,则需要额外打21099555。
n 单块容量大小为8TB的高容量盘比以前其它类型的磁盘稍大一些,如果在X3/X4/X5上更换成8TB的磁盘时,需要更换新的盘托。具体情况如表8.1所示。
表8.1 Exadata不同机架中更新8TB磁盘是否需要托架
Exadata类型 |
原始磁盘类型 |
原始磁盘大小 |
新磁盘类型 |
新磁盘大小 |
是否需要新的磁盘托架 |
X2 |
高容量盘 |
2TB |
高容量盘 |
8TB |
N |
X2 |
高容量盘 |
3TB |
高容量盘 |
8TB |
N |
X2 |
高容量盘 |
4TB |
高容量盘 |
8TB |
N |
X2 |
高性能盘 |
600GB |
高容量盘 |
8TB |
N |
X3 |
高容量盘 |
3TB |
高容量盘 |
8TB |
Y |
X3 |
高容量盘 |
4TB |
高容量盘 |
8TB |
Y |
X3 |
高性能盘 |
1.2TB |
高容量盘 |
8TB |
Y |
X4 |
高容量盘 |
4TB |
高容量盘 |
8TB |
Y |
X4 |
高性能盘 |
1.2TB |
高容量盘 |
8TB |
Y |
X5 |
高容量盘 |
4TB |
高容量盘 |
8TB |
Y |
n 一个存储节点中所有的磁盘都必须进行更换,不能只更换其中的一部分磁盘。
n 如果要执行数据库在线的磁盘替换操作,至少需要4个存储节点(数据处于Normal冗余的情况下)和6个存储节点(数据处于High冗余的情况下),因为存储节点进行磁盘更换时,每次只允许操作一台,同时需要将该存储节点从磁盘组中删除,更换完磁盘并重新刷机然后添加回磁盘组中。需要更多的存储节点是为了满足Votedisk需求(Normal冗余的磁盘组中有3个副本,也即需要3个存储节点;High冗余的磁盘组中有5个副本,也即需要5个存储节点)。除非一个备用的存储节点可以合并到1/8配置或1/4配置机架中,否则这些较小的机架必须离线磁盘更换。
n 如果是在线的磁盘替换操作,整个过程ASM需要rebalance的次数为2+存储节点个数。先将存储节点1从磁盘组中删除,此时需要发生1次ASM rebalance操作,第1次rebalance操作完成后,存储节点1上的所有磁盘进行更换,然后对存储节点1重新刷机初始化,接着将存储节点1加入到磁盘组中,加入磁盘组的同时不要触发ASM rebalance操作,同时删除存储节点2,此时才触发ASM rebalance操作,也即将存储节点1的加入和存储节点2的删除这两个动作合并成一次ASM rebalance操作,如此已往,对所有存储节点完成换盘操作。
n 虽然可以在应用程序继续工作的情况下执行在线替换磁盘操作,但是要加快ASM rebalance操作,应该尽量对应用程序进行控制。同时,删除存储节点会导致底层存储数量减少,应用程序的性能会大幅下降,最佳的做法是将应用程序工作负载减少到几乎为零,让ASM rebalance操作使用大部分资源。
n 如果是在线的磁盘替换操作,在磁盘更换之前,存储软件的版本如果不满足要求,则该存储节点更换完磁盘进行重新刷机时,必须使用满足要求的存储软件版本,这种方式将造成不同版本的存储软件在长时间内混合使用,也许会导致系统运行异常。建议在磁盘更换之前就将存储软件版本升级到满足要求的版本,重新刷机时保持存储软件版本不变;或者建议停机进行磁盘替换操作。
7.1.2 换盘方式选择
根据磁盘的选择、空闲空间和机架的大小,Exadata磁盘交换可以在线滚动方式或离线方式完成。此时,可以通过以下规则用于确定使用哪种方式来进行换盘。
n 如果环境不超过3个存储单元,则必须离线执行Exadata磁盘交换服务,因为当机架中存在少于4个单元时,我们无法为VOTE保留所需的冗余级别,因此此时无法在线执行此交换。
n 如果没有足够的可用空间来允许重新ASM rebalance操作,则必须离线执行Exadata磁盘交换服务。
n 如果环境超过3个存储单元,并且有足够的空间来允许重新ASM rebalance操作,则允许在线执行操作,在交换期间,我们从每个磁盘组一次删除一个存储节点以执行Exadata磁盘交换服务。
7.1.3 在线换盘
本文稍后提供了一个脚本,以帮助确定ASM磁盘组可用空间量。如果存储节点个数满足要求,同时ASM磁盘组的剩余空间也满足要求,则可以执行在线更换操作。
1. 前期检查
在执行正式磁盘更换操作之前,请先对当前环境进行全面检查,具体检查项如下所示。
n 检查当前环境的存储软件版本是否支持新的磁盘,具体见前面的“注意事项”章节,如果当前的存储软件版本不支持存储节点混合版本同时运行,则需要提前升级存储软件版本。
n 调用check_diskswap_space.sql脚本检查当前环境是否存在足够的剩余空间来执行ASM rebalance操作,从MOS文档《Oracle Exadata Database Machine Disk Swap Service Process (Doc ID 1544637.1)》中获取check_diskswap_space.sql脚本。
n 在开始正式磁盘交换之前一周,运行exachk工具,分析exachk工具生成的报告,并解决所有发现的关键问题。
n 检查每个ASM磁盘组中的griddisk大小是否一致,在换盘之前,必须保证每个磁盘组中的griddisk大小一致,具体检查命令如下所示。
SQL> select distinct dg.name, dgd.total_mb from v$asm_disk dgd, v$asm_diskgroup dg where dg.group_number = dgd.group_number; |
n 准备存储节点image刷机的刷机介质。
n 收集存储节点的网络配置信息,存储节点刷机后需要进行网络配置。
n 检查存储节点是否开启了FlashCache的write-back模式,具体检查命令如下所示。
# dcli -g ~/cell_group -l root cellcli -e "list cell attributes flashcachemode" |
n 在ASM实例中查询gv$asm_operation视图,确保当前没有ASM rebalance操作正在运行,具体命令如下所示。
SQL> select * from gv$asm_operation; |
n 对数据库进行完整的数据库备份,备份集必须保留到Exadata之外的存储上,确保所有备份和归档日志可用,并验证备份没有损坏。
n 在所有存储节点上运行cellcli命令,以确定当前存储节点是否配置了SMTP和SNMP信息,如果配置了SMTP和SNMP信息,则将输出保存,后期重新对存储节点刷机后,需要重新配置这些信息,具体命令如下所示。
# cellcli -e list cell detail |
2. 正式更换
在线更换存储节点磁盘操作的详细步骤,请参考以下内容。
(1)、调整ASM的power limit参数值,在不影响数据库性能的前提下,尽可能地增加power limit参数值,加快完成ASM rebalance操作。ASM的power limit参数值建议不要超过32,可参考MOS文档《Oracle Exadata High Availability Best Practices (Doc ID 1274322.1)》,也可直接运行代码清单8.1进行检查。
代码清单8.1 设置最佳的power limit参数值
set serveroutput on declare diskspace number; cellspace number; disk_rebal_time number; cell_rebal_time number; default_power_limit number; max_rate_diff_cell number; max_rate_diff_disk number; failgroup_name varchar2(30); diskgroup_name varchar2(30); begin dbms_output.put_line('---------------------------------------------------------------'); dbms_output.put_line('Estimates are provided for both the current default power '); dbms_output.put_line('(asm_power_limit) and the recommended DBM max of 32'); dbms_output.put_line('The current recommended default power limit for a DBM is 4'); dbms_output.put_line(chr(10)); dbms_output.put_line('Note these estimates are for a DBM with High Performance drives'); dbms_output.put_line('and do not include the compaction phase of rebalance. The '); dbms_output.put_line('compaction phase is not required for redundancy restoration'); dbms_output.put_line('---------------------------------------------------------------'); select value into default_power_limit from v$parameter where name = 'asm_power_limit'; max_rate_diff_cell := 32 / default_power_limit; max_rate_diff_disk := 16 / default_power_limit; for dg in (select group_number from v$asm_Diskgroup where group_number > 0 and state = 'MOUNTED') loop select failgroup into failgroup_name from v$asm_disk where group_number = dg.group_number and rownum = 1; select name into diskgroup_name from v$asm_diskgroup where group_number = dg.group_number; select round(sum(total_mb - free_mb) / 1024, 0) into diskspace from v$asm_disk where disk_number = 1 and group_number = dg.group_number; select round(sum(total_mb - free_mb) / 1024, 0) into cellspace from v$asm_disk where failgroup = failgroup_name and group_number = dg.group_number; disk_rebal_time := round((diskspace / 280) * 60, 0); cell_rebal_time := round((cellspace / 1024) * 60, 0); dbms_output.put_line(chr(10)); dbms_output.put_line('****************************************************************'); dbms_output.put_line('Rough time estimates for rebalance of diskgroup ' || diskgroup_name || ':'); dbms_output.put_line('DISK based rebalance at the default power of ' || default_power_limit || ': ' || disk_rebal_time * max_rate_diff_disk || ' minutes'); dbms_output.put_line('CELL based rebalance at the default power of ' || default_power_limit || ': ' || cell_rebal_time * max_rate_diff_cell || ' minutes'); dbms_output.put_line('DISK based rebalance at the maximum recommended power of 32: ' || disk_rebal_time || ' minutes'); dbms_output.put_line('CELL based rebalance at the maximum recommended power of 32: ' || cell_rebal_time || ' minutes'); dbms_output.put_line('****************************************************************'); end loop; end; / |
(2)、如果当前系统正在运行的存储软件版本为11.2.3.2.0或更高版本,则需要确认是否开启了FlashCache的write-back模式,具体检查命令如下所示。
# cellcli -e "list cell attributes flashcachemode" |
(3)、第一个存储节点从当前环境删除,将该存储节点中的所有griddisk从磁盘组中全部删除,具体命令如下所示。
SQL> alter diskgroup dbfs drop disks in failgroup cell01 rebalance power 4; SQL> alter diskgroup data drop disks in failgroup cell01 rebalance power 4; SQL> alter diskgroup reco drop disks in failgroup cell01 rebalance power 4; |
(4)、检查ASM rebalance操作是否完成,具体命令如下所示。
SQL> select count(*) from gv$asm_operation; |
如果以上SQL语句的结果输出为0,则表示ASM rebalance操作已经完成。
同时检查该存储节点中griddisk的HEADER_STATUS和MOUNT_STATUS的状态,具体命令如下所示。
SQL> select path, group_number, mount_status, header_status, mode_status, state, mount_date from gv$asm_disk where failgroup = '<cell name>' order by path; |
以上命令输出中,header_status列的状态应该为former,MOUNT_STATUS列的状态应该为closed。
(5)、当替换磁盘的存储节点上完成了所有的ASM rebalance操作之后,删除该存储节点,具体命令如下所示。
CellCLI> drop cell force; |
(6)、运行ipconf.pl脚本,验证当前的网络配置信息是否正确,保存正确的网络配置信息,后期对存储节点重新刷机时需要这些信息。
# /opt/oracle.cellos/ipconf.pl -check -verbose |
(7)、停止该存储节点服务,并关闭该存储节点,具体命令如下所示。
# cellcli -e alter cell shutdown services all # shutdown -h -y now |
(8)、对该存储节点更换所有的硬盘,并重新刷机,一旦对该存储节点刷机完成,执行命令检查存储节点状态是否正常,具体命令如下所示。
# imageinfo # cellcli -e list cell detail |
(9)、针对该重新刷机的存储节点,手工重新创建celldisk。
1)如果该存储节点为1/4配置或更高配置时,命令如下。
# cellcli -e alter cell restart services all # cellcli -e list physicaldisk # cellcli -e drop flashcache # cellcli -e drop celldisk all harddisk force # cellcli -e drop flashcache force # cellcli -e list cell # cellcli -e create celldisk all # cellcli -e create flashlog all |
2)如果该存储节点为1/8配置或更高配置时,命令如下。
# cellcli -e alter cell restart services all # cellcli -e list physicaldisk # cellcli -e drop flashcache # cellcli -e drop celldisk all harddisk force # cellcli -e drop flashcache force # cellcli -e list cell # cellcli -e drop flashlog # cellcli -e drop celldisk all; # cellcli -e alter cell eighthRack=true # cellcli -e list cell attributes eighthrack # cellcli -e create celldisk all # cellcli -e create flashlog all |
(10)、针对该重新刷机的存储节点,手工创建FlashCache,具体命令如下所示。
1)如果该存储节点最初启用了FlashCache的Write-Back模式,在上面的步骤中收集过相关信息,则现在应该重新启用Write-Back模式,命令如下。
# cellcli -e alter cell shutdown services cellsrv # cellcli -e alter cell flashCacheMode = WriteBack # cellcli -e alter cell startup services cellsrv # cellcli -e create flashcache all |
2) 如果该存储节点最初没有启用了FlashCache的Write-Back模式,则命令如下。
# cellcli -e create flashcache all |
(11)、针对该重新刷机的存储节点,创建一个临时性的griddisk,大小为7290.0625GB。
# cellcli -e create griddisk all harddisk prefix=tempgd,size=7290.0625g |
该临时性的griddisk只是为了临时性地从磁盘的最外圈先占用一部分空间,目的是为了创建最内圈的DBFS_DG这个griddisk时,不需要单独指定offset参数和size参数。
(12)、创建DBFS_DG griddisks。此时不需要在creategriddisk命令中指定size和offset参数值,因为它将使用临时griddisk创建后剩余的所有空闲空间。注意:无论当前的DBFS_DG磁盘组中每个griddisk大小是多少,对于任何新替换的磁盘,DBFS_DG磁盘组中每个griddisk大小都应该是33GB。
# cellcli -e create griddisk all harddisk prefix=DBFS_DG |
(13)、删除刚刚创建的临时性的griddisk,命令如下。
# cellcli -e drop griddisk all prefix=tempgd force |
(14)、创建DATA磁盘组的griddisk,命令如下。
# cellcli -e create griddisk all harddisk prefix=<existing DATA prefix>,size=<new targeted size of DATA griddisk>,cachingPolicy="default" |
创建DATA磁盘组的griddisk时,如果没有指定offset参数,则griddisk将在磁盘的外圈创建,这种griddisk的速度最快,同时指定DATA磁盘组的griddisk的大小。
(15)、创建RECO磁盘组的griddisk,命令如下。
# cellcli -e create griddisk all harddisk prefix=<existing RECO prefix>,cachingPolicy="default" |
创建RECO磁盘组的griddisk时,如果没有指定size参数,也即这个磁盘上剩余的空间都用来创建RECO磁盘组的griddisk。
(16)、检验刚刚创建的griddisk,命令如下。
# cellcli -e list physicaldisk # cellcli -e list lun # cellcli -e list celldisk attributes name, freespace # cellcli -e list griddisk attributes name, size, offset, status |
需要确保该存储节点上celldisk的freespace参数值为0。
(17)、测试新存储节点上磁盘的性能,命令如下。
# cellcli -e calibrate force |
(18)、将新的griddisk加入各自磁盘组中,指定磁盘大小为原始griddisk大小,而不是现在griddisk的大小,同时,将另外一个存储节点从磁盘组中删除,具体命令如下所示。
SQL> alter diskgroup DATA add disk 'o/<cell ip>/DATA_*<cellname>' size <original size of griddisk> drop disks in failgroup <next cell> rebalance power 4; SQL> alter diskgroup RECO add disk 'o/<cell ip>/RECO_*<cellname>' size <original size of griddisk> drop disks in failgroup <next cell> rebalance power 4; SQL> alter diskgroup DBFS add disk 'o/<cell ip>/DBFS_*<cellname>' size <original size of griddisk> drop disks in failgroup <next cell> rebalance power 4; |
这种方式只需要ASM rebalance操作一次即可。
(19)、检查ASM rebalance操作是否完成,具体命令如下所示。
SQL> select count(*) from gv$asm_operation; |
如果以上SQL语句的结果输出为0,则表示ASM rebalance操作已经完成。
同时检查新增存储节点和刚删除存储节点中griddisk的HEADER_STATUS和MOUNT_STATUS的状态,具体命令如下所示。
SQL> select path, group_number, mount_status, header_status, mode_status, state, mount_date from gv$asm_disk where path like '%DATA_<added cellname>%' or path like '%DATA_<dropped cellname>%' order by path; |
以上命令输出中,新增存储节点的MOUNT_STATUS列的状态应该为cached,header_status列的状态应该为member,mode_status列的状态应该为online,state列的状态应该为normal;新刚删除存储节点的MOUNT_STATUS列的状态应该为closed,header_status列的状态应该为former,mode_status列的状态应该为online,state列的状态应该为normal。
(20)、重复以上的第4步至第18步,依次更换剩余的存储节点。
(21)、一旦所有存储节点更换完毕,最后来修改磁盘组中griddisk真实的大小。
SQL> alter diskgroup <diskgroup name> resize all size <new griddisk size> rebalance power 4; |
(22)、重新配置存储节点的e-mail邮件告警信息,命令如下所示。
CellCLI> alter cell smtpServer='******', smtpFromAddr='shiyh@oracle.com.cn', smtpUser='shiyh', smtpPwd='*******', smtpToAddr='liese.liu@oracle.com.cn', smtpPort='25', smtpUseSSL='false', smtpFrom='Exadata cell', notificationPolicy='critical,warning,clear', notificationMethod='mail'; |
7.1.4 停机换盘
如果存储节点个数不满足要求,或者ASM磁盘组的剩余空间不满足要求,则只能执行停机更换操作。
1. 前期检查
在执行正式停机磁盘更换操作之前,请先对当前环境进行全面检查,具体检查项如下所示。
n 检查当前环境的存储软件版本是否支持新的磁盘,具体见前面的“注意事项”章节,如果当前的存储软件版本不支持新的磁盘,则需要提前升级存储软件版本。
n 在开始正式磁盘交换之前一周,运行exachk工具,分析exachk工具生成的报告,并解决所有发现的关键问题。
n 准备存储节点image刷机的刷机介质。
n 收集存储节点的网络配置信息,存储节点刷机后需要进行网络配置。
n 对数据库进行完整的数据库备份,备份集必须保留到Exadata之外的存储上,确保所有备份和归档日志可用,并验证备份没有损坏。
n 在所有存储节点上运行cellcli命令,以确定当前存储节点是否配置了SMTP和SNMP信息,如果配置了SMTP和SNMP信息,则将输出保存,后期重新对存储节点刷机后,需要重新配置这些信息,具体命令如下所示。
# cellcli -e list cell detail |
2. 正式更换
停机更换存储节点磁盘操作的详细步骤,请参考以下内容。
(1)、备份OCR,确定并注意OCR的当前位置,并确保存在近期的OCR自动备份。
# GI_HOME/bin/ocrcheck # GI_HOME/bin/ocrconfig -showbackup # GI_HOME/bin/ocrconfig -manualbackup |
(2)、确认GI集群当前Votedisk的位置,具体命令如下所示。
# GI_HOME/bin/crsctl query css votedisk |
(3)、连接到ASM实例,查询griddisk的当前大小,具体命令如下所示。
SQL> select distinct dg.name, dgd.total_mb from v$asm_disk dgd, v$asm_diskgroup dg where dg.group_number = dgd.group_number; |
(4)、备份ASM实例的spfile,具体命令如下所示。
SQL> create pfile='/tmp/pfile_asm.ora' from spfile; |
(5)、干净地停止数据库,具体命令如下所示。
$ $DB_HOME/bin/srvctl stop db -d <dbname> -o immediate |
(6)、以SYSASM的方式登录到ASM实例,运行命令收集磁盘组参数,为创建新磁盘组作准备,见代码清单8.2所示。
代码清单8.2 收集ASM磁盘组参数
set pagesize 100 break on dg_name skip 1 set linesize 150 col attrib_name form a50 col attrib_value form a50 SELECT dg.name dg_name, a.name attrib_name, a.value attrib_value FROM v$asm_attribute a, v$asm_diskgroup dg WHERE a.group_number = dg.group_number and a.name in ('compatible.rdbms', 'compatible.asm', 'au_size', 'disk_repair_time', 'cell.smart_scan_capable', 'sector_size', 'content.type') ORDER BY dg.name, a.name; |
(7)、停止GI集群,并关闭GI集群随操作系统自动启动。
# dcli -g ~/dbs_group -l root GI_HOME/bin/crsctl stop crs [-f] # dcli -g ~/dbs_group -l root GI_HOME/bin/crsctl disable crs |
(8)、停止所有存储节点的服务,关闭所有存储节点,并更换硬盘。
CellCLI> drop cell force; # /opt/oracle.cellos/ipconf.pl -check -verbose # cellcli -e alter cell shutdown services all # shutdown -h -y now |
(9)、对所有存储节点重新刷机。
(10)、手工创建celldisk。
1)如果该存储节点为1/4配置或更高配置时,命令如下。
# cellcli -e alter cell restart services all # cellcli -e list physicaldisk # cellcli -e drop flashcache # cellcli -e drop celldisk all harddisk force # cellcli -e drop flashcache force # cellcli -e list cell # cellcli -e create celldisk all # cellcli -e create flashlog all |
2)如果该存储节点为1/8配置或更高配置时,命令如下。
# cellcli -e alter cell restart services all # cellcli -e list physicaldisk # cellcli -e drop flashcache # cellcli -e drop celldisk all harddisk force # cellcli -e drop flashcache force # cellcli -e list cell # cellcli -e drop flashlog # cellcli -e drop celldisk all; # cellcli -e alter cell eighthRack=true # cellcli -e list cell attributes eighthrack # cellcli -e create celldisk all # cellcli -e create flashlog all |
(11)、针对该重新刷机的存储节点,手工创建FlashCache,具体命令如下所示。
1)如果该存储节点最初启用了FlashCache的Write-Back模式,在上面的步骤中收集过相关信息,则现在应该重新启用Write-Back模式,命令如下。
# cellcli -e alter cell shutdown services cellsrv # cellcli -e alter cell flashCacheMode = WriteBack # cellcli -e alter cell startup services cellsrv # cellcli -e create flashcache all |
2) 如果该存储节点最初没有启用了FlashCache的Write-Back模式,则命令如下。
# cellcli -e create flashcache all |
(12)、针对该重新刷机的存储节点,创建一个临时性的griddisk,大小为7290.0625GB。
# cellcli -e create griddisk all harddisk prefix=tempgd,size=7290.0625g |
该临时性的griddisk只是为了临时性地从磁盘的最外圈先占用一部分空间,目的是为了创建最内圈的DBFS_DG这个griddisk时,不需要单独指定offset参数和size参数。
(13)、创建DBFS_DG griddisks。此时不需要在creategriddisk命令中指定size和offset参数值,因为它将使用临时griddisk创建后剩余的所有空闲空间。注意:无论当前的DBFS_DG磁盘组中每个griddisk大小是多少,对于任何新替换的磁盘,DBFS_DG磁盘组中每个griddisk大小都应该是33GB。
# cellcli -e create griddisk all harddisk prefix=DBFS_DG |
(14)、删除刚刚创建的临时性的griddisk,命令如下。
# cellcli -e drop griddisk all prefix=tempgd force |
(15)、创建DATA磁盘组的griddisk,命令如下。
# cellcli -e create griddisk all harddisk prefix=<existing DATA prefix>,size=<new targeted size of DATA griddisk>,cachingPolicy="default" |
创建DATA磁盘组的griddisk时,如果没有指定offset参数,则griddisk将在磁盘的外圈创建,这种griddisk的速度最快,同时指定DATA磁盘组的griddisk的大小。
(16)、创建RECO磁盘组的griddisk,命令如下。
# cellcli -e create griddisk all harddisk prefix=<existing RECO prefix>,cachingPolicy="default" |
创建RECO磁盘组的griddisk时,如果没有指定size参数,也即这个磁盘上剩余的空间都用来创建RECO磁盘组的griddisk。
(17)、检验刚刚创建的griddisk,命令如下。
# cellcli -e list physicaldisk # cellcli -e list lun # cellcli -e list celldisk attributes name, freespace # cellcli -e list griddisk attributes name, size, offset, status |
需要确保该存储节点上celldisk的freespace参数值为0。
(18)、测试新存储节点上磁盘的性能,命令如下。
# cellcli -e calibrate force |
(19)、在其中一个计算节点以独占模式启动GI集群,具体命令如下。
# $GI_HOME/bin/crsctl start crs -excl -nocrs |
(20)、创建DBFS_DG磁盘组,具体命令如下。
SQLPLUS> create diskgroup dbfs_dg normal redundancy disk 'o/*/DBFS_DG*<cellprefix>*' attribute 'au_size' = '<attribute value for au_size for DBFS_DG diskgroup from step 6>','sector_size' = '<attribute value for sector_size for DBFS_DG diskgroup from step 6>', 'compatible.asm' = '<attribute value for compatible.asm for DBFS_DG diskgroup from step 6>', 'compatible.rdbms' = '<attribute value for compatible.rdbms for DBFS_DG diskgroup from step 6>', 'cell.smart_scan_capable' = '<attribute value for cell.smart_scan_capable for DBFS_DG diskgroup from step 6>'; SQLPLUS> alter diskgroup dbfs_dg set attribute 'disk_repair_time' = '<value for disk_repair_time for DBFS_DG diskgroup from Step 6>'; SQLPLUS> alter diskgroup dbfs_dg set attribute 'content.type' = '<value for content.type for DBFS_DG diskgroup from Step 6>'; |
(21)、恢复OCR,具体命令如下。
# cd <ocr backup location> # GI_HOME/bin/ocrconfig -restore <backup file created in step 1> |
(22)、替换voting disk,具体命令如下。
# GI_HOME/bin/crsctl replace votedisk +DBFS_DG |
(23)、重建ASM实例的spfile文件,具体命令如下。
SQLPLUS> create spfile='+DBFS_DG' from pfile='/tmp/pfile_asm.ora'; |
(24)、重启GI集群,具体命令如下。
# $GI_HOME/bin/crsctl stop crs [-f] # $GI_HOME/bin/crsctl start crs # $GI_HOME/bin/crsctl check cluster -all # $GI_HOME/bin/crsctl enable crs |
(25)、重建DATA和RECO磁盘组,具体命令如下。
SQLPLUS> create diskgroup data_<dbm_prefix> [normal | high] redundancy disk 'o/*/DATA*<cellprefix>*' attribute 'au_size' = '<attribute value for au_size for DATA* diskgroup from step 6>','sector_size' = '<attribute value for sector_size for DATA* diskgroup from step 6>', 'compatible.asm' = '<attribute value for compatible.asm for DATA* diskgroup from step 6>', 'compatible.rdbms' = '<attribute value for compatible.rdbms for DATA* diskgroup from step 6>', 'cell.smart_scan_capable' = '<attribute value for cell.smart_scan_capable for DATA* diskgroup from step 6>'; SQLPLUS> alter diskgroup data_<dbm_prefix> set attribute 'disk_repair_time' = '<attribute value for disk_repair_time for DATA* diskgroup from Step 6>'; SQLPLUS> alter diskgroup data_<dbm_prefix> set attribute 'content.type' = '<attribute value for content.type for DATA* diskgroup from Step 6|DATA>'; SQLPLUS>create diskgroup reco_<dbm_prefix> [normal | high] redundancy disk 'o/*/RECO*<cellprefix>*' attribute 'au_size' = '<attribute value for au_size for RECO* diskgroup from step 6>','sector_size' = '<attribute value for sector_size for RECO* diskgroup from step 6>', 'compatible.asm' = '<attribute value for compatible.asm for RECO* diskgroup from step 6>', 'compatible.rdbms' = '<attribute value for compatible.rdbms for RECO* diskgroup from step 6>', 'cell.smart_scan_capable' = '<attribute value for cell.smart_scan_capable for RECO* diskgroup from step 6>'; SQLPLUS> alter diskgroup reco_<dbm_prefix> set attribute 'disk_repair_time' = '<attribute value for disk_repair_time for RECO* diskgroup from Step 6>'; SQLPLUS> alter diskgroup reco_<dbm_prefix> set attribute 'content.type' = '<attribute value for content.type for RECO* diskgroup from Step 6|RECOVERY>'; SQLPLUS> alter diskgroup data_<dbm_prefix> mount; SQLPLUS> alter diskgroup reco_<dbm_prefix> mount; |
(26)、恢复数据库,具体过程省略。