ASM 的failgroup组测试

ASM使用的镜像算法并不是镜像整个disk,而是作extent级的镜像。   

Normal冗余 :一块以上的磁盘损坏,会导致数据丢失
HIgh 冗余:两块以上的磁盘损坏,会导致数据丢失
创建High冗余度的磁盘组,一个3个failgroup,每个failgroup组下面有2个磁盘。
测试发现
1 每个failgroup组下面,可以删除1个磁盘,剩余1个磁盘
2 每个failgroup组下面,需要保留1个磁盘,是因为只有3个failgroup组,high冗余度必须要有3个failgroup组
3 增加failgroup组为4个,然后将某一个failgroup组里面的磁盘全部删除,这样剩余了3个failgroup组,是可以的。

-- 创建冗余度为high的磁盘组,失败组必须要3个。否则会出错

 

SQL> create diskgroup test high redundancy
failgroup fa1 disk 
'/dev/asm-disk1' name fa1_disk1,
'/dev/asm-disk2' name fa1_disk2
failgroup fa2 disk
'/dev/asm-disk4' name fa2_disk4,
'/dev/asm-disk5' name fa2_disk5  2    3    4    5    6    7  ;
create diskgroup test high redundancy
*
ERROR at line 1:
ORA-15018: diskgroup cannot be created
ORA-15072: command requires at least 3 regular failure groups, discovered only 2


-- 创建ASM磁盘组

 

 

SQL> create diskgroup test high redundancy
failgroup fa1 disk 
'/dev/asm-disk1' name fa1_disk1,
'/dev/asm-disk2' name fa1_disk2
failgroup fa2 disk
'/dev/asm-disk4' name fa2_disk4,
'/dev/asm-disk5' name fa2_disk5
failgroup fa3 disk
'/dev/asm-disk7' name fa3_disk7,
'/dev/asm-disk8' name fa3_disk8	  2    3    4    5    6    7    8    9   10  
 11  ;

Diskgroup created.

 

 

--ASMCMD下查看,已经可以看到创建的TEST磁盘组了。

 

[oracle@asm dev]$ export ORACLE_SID=+ASM
[oracle@asm dev]$ asmcmd
ASMCMD> ls
DATA/
SBDB1/
TEST/
ASMCMD> cd test
ASMCMD> ls
ASMCMD> 

-- 创建一个表空间,表,插入数据

 

 

SYS@PROD1>create tablespace test datafile '+test' size 10M autoextend on;

Tablespace created.

SYS@PROD1>create tablespace test datafile '+test' size 10M autoextend on;

Tablespace created.

SYS@PROD1>create tablespace test1 datafile '+test';

Tablespace created.

SYS@PROD1>drop tablespace test1 including contents and datafiles;

Tablespace dropped.

SYS@PROD1>

-- ASMCMD下查看

ASMCMD> ls
TEST.256.961123057
TEST1.257.961123095
ASMCMD> pwd
+TEST/PROD1/DATAFILE
ASMCMD> ls
TEST.256.961123057
ASMCMD> 

-- 创建表

SYS@PROD1>create table t1 tablespace test as select * from dba_objects;

Table created.

SYS@PROD1>

SYS@PROD1>select tablespace_name ,owner from dba_tables where table_name='T1';

TABLESPACE_NAME 	       OWNER
------------------------------ ------------------------------
TEST			       SYS

SYS@PROD1>

SYS@PROD1>select count(*) from t1;

  COUNT(*)
----------
     96294

SYS@PROD1>


--一共有 3个failgroup组, fa1,fa2,fa3 .

 

--删除掉fa1失败组 中的一个磁盘

alter diskgroup test drop disk fal_disk1;
SQL> alter diskgroup test drop disk fa1_disk1;

Diskgroup altered.

SQL> 

-- 查询 
SYS@PROD1>/

  COUNT(*)
----------
     96294

SYS@PROD1>

 


-- 删除掉fa1失败组中的另一个磁盘,是不可以的。因为这样只剩下2个失败组了。不符合high冗余度。但是删除第二个失败组里面的一个磁盘,是可以的。同时,删除第三个失败组里面的一个磁盘,也是可以的。

 

SQL> alter diskgroup test drop disk fa1_disk2;
alter diskgroup test drop disk fa1_disk2
*
ERROR at line 1:
ORA-15067: command or option incompatible with diskgroup redundancy


SQL> alter diskgroup test drop disk fa2_disk4;

Diskgroup altered.

SQL> alter diskgroup test drop disk fa3_disk8;

Diskgroup altered.

--再添加一个failgroup组 ,第四个失败组,这样,就有4个失败组了。就可以把之前的失败组中的一个磁盘删除,这样剩余3个失败组。

 

 

SQL> alter diskgroup test add 
failgroup fa4 disk
'/dev/asm-disk3' name fa4_disk3,
'/dev/asm-disk6' name fa4_disk6 rebalance power 5 wait;  2    3    4  

Diskgroup altered.

SQL> 

*/
-- 继续删除fal1里面的diskgroup
SQL> alter diskgroup test drop disk fa1_disk2;

Diskgroup altered.

 

--删除掉失败组1里面的最后一个磁盘后,剩余3个失败组了


继续查询表,是可以查询的

 

SYS@PROD1>/

  COUNT(*)
----------
     96294

SYS@PROD1>/

  COUNT(*)
----------
     96294

SYS@PROD1>/

  COUNT(*)
----------
     96294

SYS@PROD1>

 

 

 

 

 

End

 

-- 2019-12-06 add

以下测试,在虚拟机上模拟exadata,测试exadata下的更换磁盘

-- 磁盘情况
磁盘6 7 failgroup是test_normal1
磁盘8 9 failgroup是test_normal2

 -- 创建表空间tbs_normal,表t_normal。使用磁盘组TEST_NORMAL 。

create tablespace tbs_normal datafile '+TEST_NORMAL' size 200M autoextend on maxsize 1G;
create table t_normal tablespace tbs_normal as select * from dba_objects;

SYS@exa>create tablespace tbs_normal datafile '+TEST_NORMAL' size 200M autoextend on maxsize 1G;

Tablespace created.

SYS@exa>create table t_normal tablespace tbs_normal as select * from dba_objects;

Table created.

SYS@exa>
SYS@exa>select count(*) from t_normal;

  COUNT(*)
----------
     75204

SYS@exa>

-- 删除掉磁盘,并查看磁盘的reblance情况。

alter diskgroup TEST_NORMAL drop disk DATA_CD_DISK08_CELL1;

SYS@+ASM>alter diskgroup TEST_NORMAL drop disk DATA_CD_DISK08_CELL1;

Diskgroup altered.

SYS@+ASM>select * from v$asm_operation;

GROUP_NUMBER OPERA STAT      POWER     ACTUAL	   SOFAR   EST_WORK   EST_RATE
------------ ----- ---- ---------- ---------- ---------- ---------- ----------
EST_MINUTES ERROR_CODE
----------- --------------------------------------------
	   3 REBAL RUN		 1	    1	      12	 46	    42
	  0


SYS@+ASM>

SYS@+ASM>/

GROUP_NUMBER OPERA STAT      POWER     ACTUAL	   SOFAR   EST_WORK   EST_RATE
------------ ----- ---- ---------- ---------- ---------- ---------- ----------
EST_MINUTES ERROR_CODE
----------- --------------------------------------------
	   3 REBAL RUN		 1	    1	      57	 57	    51
	  0


SYS@+ASM>/

no rows selected

SYS@+ASM>

-- 在cell上查看各个状态。其实这个看不出什么,都是正常的。

CellCLI> list physicaldisk '/opt/oracle/cell11.2.3.2.0_LINUX.X64_120713/disks/raw/disk08'
	 /opt/oracle/cell11.2.3.2.0_LINUX.X64_120713/disks/raw/disk08	 /opt/oracle/cell11.2.3.2.0_LINUX.X64_120713/disks/raw/disk08	 normal

CellCLI> 
CellCLI> list lun '/opt/oracle/cell11.2.3.2.0_LINUX.X64_120713/disks/raw/disk08'
	 /opt/oracle/cell11.2.3.2.0_LINUX.X64_120713/disks/raw/disk08	 /opt/oracle/cell11.2.3.2.0_LINUX.X64_120713/disks/raw/disk08	 normal

CellCLI>

CellCLI> list celldisk 'CD_disk08_cell1'
	 CD_disk08_cell1	 normal

CellCLI> 

CellCLI> list griddisk 'DATA_CD_DISK08_CELL1'
	 DATA_CD_disk08_cell1	 active

CellCLI> 

查询视图查看磁盘的情况,8号磁盘没有了

-- 隔一段时间,将磁盘再加上,在添加磁盘的时候,没有指定failgroup,使用了默认的failgroup名称。

ALTER DISKGROUP TEST_NORMAL ADD  DISK 'o/10.10.10.1/DATA_CD_disk08_cell1' 

SYS@+ASM>ALTER DISKGROUP TEST_NORMAL ADD  DISK 'o/10.10.10.1/DATA_CD_disk08_cell1';

Diskgroup altered.

SYS@+ASM>select * from v$asm_operation;

GROUP_NUMBER OPERA STAT      POWER     ACTUAL	   SOFAR   EST_WORK   EST_RATE
------------ ----- ---- ---------- ---------- ---------- ---------- ----------
EST_MINUTES ERROR_CODE
----------- --------------------------------------------
	   3 REBAL RUN		 1	    1	       2	 61	    25
	  2


SYS@+ASM>
SYS@+ASM>/

GROUP_NUMBER OPERA STAT      POWER     ACTUAL	   SOFAR   EST_WORK   EST_RATE
------------ ----- ---- ---------- ---------- ---------- ---------- ----------
EST_MINUTES ERROR_CODE
----------- --------------------------------------------
	   3 REBAL RUN		 1	    1	      58	 58	    47
	  0


SYS@+ASM>/

no rows selected

SYS@+ASM>

-- 此时视图查询到的磁盘信息如下:8号磁盘的failgroup是cell1. 因为在添加磁盘的时候,没有指定failgroup。

-- 再次将该盘drop掉,

SYS@+ASM>alter diskgroup TEST_NORMAL drop disk DATA_CD_DISK08_CELL1;

Diskgroup altered.

SYS@+ASM>select * from v$asm_operation;

GROUP_NUMBER OPERA STAT      POWER     ACTUAL	   SOFAR   EST_WORK   EST_RATE
------------ ----- ---- ---------- ---------- ---------- ---------- ----------
EST_MINUTES ERROR_CODE
----------- --------------------------------------------
	   3 REBAL RUN		 1	    1	      26	 75	   191
	  0


SYS@+ASM>/

no rows selected

SYS@+ASM>

-- 重新加入,使failgroup和之前一样

ALTER DISKGROUP TEST_NORMAL ADD FAILGROUP TEST_NORMAL2 DISK 'o/10.10.10.1/DATA_CD_disk08_cell1';

END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值