sanhutrees 发表于 2018-9-24 14:40:26

oracle_asm理解

  ASM是一个黑盒子,黑盒子的好处就是里面的东西我们不用费脑细胞管,坏处就是你想费脑细胞也没机会。
  先看个示例:
  登入数据库实例
  创建一个自己的表空间,创建一个用户,创建一个表
  SQL> create tablespace ts_test datafile '+DGROUP1'>
  Tablespace created.
  SQL> create user kamus>
  User created.
  SQL> grant dba to kamus;
  Grant succeeded.
  SQL> conn kamus/pass
  Connected.
  SQL> create table t_test as select * from dba_objects;
  Table created.
  SQL> select count(*) from t_test;
  COUNT(*)
  ------------------------
  10319
  从中可以看出,与原来创建表空间时需要指定datafile路径与名字不同,这里只要指出想让此表空间去哪个ASM组就行了。
  具体oracle怎么分配这(些)datafile,怎么避免热点,就些就不用我们操心了。
  ASM提供了3种冗余方法。
  external redundancy表示Oracle不帮你管理镜像,功能由外部存储系统实现,比如通过RAID技术。
  normal redundancy(默认方式)表示Oracle提供2路镜像来保护数据。
  high redundancy表示Oracle提供3路镜像来保护数据。
  ASM可以动态增加和删减硬盘,假设ASM的diskgroup A为normal,假设原本的diskgroup 有2块盘,当增加2块盘进入后,原来分布于2块盘上的数据将由oracle自动平均分布到4块盘上,达到避免热点,均衡I/O的效果。(不知道normal下是不是必须是偶数块硬盘) 当删除一块时,不会有影响,重新插入后就能自动写上去。
  11G下默认拔出硬盘3.5小时内oracle是不会认为你要重写的,即当3.5小时后再插入,硬盘数据将被重写。10G下不知道。
  测试ASM数据库的automatic rebalance功能 添加两个虚拟硬盘,分别是sdf和sdg,大小500M 启动系统,启动ASM实例,启动数据库 实例
  创建ASM磁盘
  #/etc/init.d/oracleasm createdisk VOL5 /dev/sdf
  #/etc/init.d/oracleasm createdisk VOL6 /dev/sdg
  登入ASM实例检查v$asm_disk视图,发现这两个新加的硬盘已经找到了 将硬盘添加到磁盘组中
  SQL>>

  Diskgroup>  检查数据库的auto rebalance工作进度,数据库正在将原来分布在两个磁盘上的数据平均分配到三个磁盘上
  SQL> SELECT group_number, operation, state, est_work, sofar, est_rate, est_minutes FROM v$asm_operation;
  SQL> /
  GROUP_NUMBER OPERATION STATE EST_WORK SOFAR EST_RATE EST_MINUTES
  ------------ ---------- -------- ---------- ---------- ---------- -----------
  1                     REBAL      RUN       275      39      148
  1
  以上表示数据重新分配的工作已经成功完成
  SQL> select name,allocation_unit_size,total_mb from v$asm_diskgroup;
  NAME ALLOCATION_UNIT_SIZE TOTAL_MB
  ------------------------------ -------------------- ----------
  DGROUP1      1048576          5120
  登入ASM实例,将磁盘从磁盘组中删除
  SQL>>

  Diskgroup>  SQL> SELECT group_number, operation, state, est_work, sofar, est_rate, est_minutes FROM v$asm_operation;
  GROUP_NUMBER OPERATION STATE EST_WORK SOFAR EST_RATE EST_MINUTES
  ------------ ---------- -------- ---------- ---------- ---------- -----------
  1                  REBAL          RUN      566         46      151
  3
  SQL> select name,allocation_unit_size,total_mb from v$asm_diskgroup;
  NAME ALLOCATION_UNIT_SIZE TOTAL_MB
  ------------------------------ -------------------- ----------
  DGROUP1      1048576         4096
  Executed in 0.13 seconds
  SQL> select label,failgroup from v$asm_disk;
  LABEL                                          AILGROUP
  ------------------------------- -----------------------------------------
  VOL1                                                FGROUP1
  VOL2                                                FGROUP1
  VOL3                                                FGROUP2
  VOL5                                                FGROUP1
  VOL6                                                FGROUP2
  可以看到磁盘组的总容量已经减少了,磁盘数目也减少了

页: [1]
查看完整版本: oracle_asm理解