ITPub博客

首页 > 数据库 > Oracle > ASM 管理篇

ASM 管理篇

原创 Oracle 作者:静以致远√团团 时间:2014-08-01 11:18:10 0 删除 编辑

1asm_diskstring 参数


该参数用来指定asm磁盘的搜索模式,简单的理解就是控制ASM检索磁盘的规则

指定asm_diskstring的值为’ORCL:ASM*’

SQL> alter system set asm_diskstring='ORCL:ASM*' scope=both;

System altered.

 

SQL> show parameter asm_diskstring

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

asm_diskstring                       string      ORCL:ASM*

 

SQL> col NAME for a10

SQL> col PATH for a15

SQL> select GROUP_NUMBER,DISK_NUMBER,NAME,PATH,TOTAL_MB,FREE_MB from v$asm_disk;

 

GROUP_NUMBER DISK_NUMBER NAME       PATH              TOTAL_MB    FREE_MB

------------ ----------- ---------- --------------- ---------- ----------

           1           0 ASM_DISK_1 ORCL:ASM_DISK_1       8189       7372

           1           1 ASM_DISK_2 ORCL:ASM_DISK_2       8189       7373

           1           2 ASM_DISK_3 ORCL:ASM_DISK_3       8189       7370

/*需要注意的是,在访问v$asm_disk视图时,会检索所以磁盘,而在访问v$asm_disk_stat视图时不需要检索磁盘,在磁盘没有更新的情况下,后者更加“廉价”*/

 

asm_diskstring的值设置的必须是ASM组中磁盘当前实例所能检索到的值,其他值将无法设置

SQL> alter system set asm_diskstring='ORCL:ASM_abc' scope=both;

alter system set asm_diskstring='ORCL:ASM_abc' scope=both

*

ERROR at line 1:

ORA-02097: parameter cannot be modified because specified value is invalid

ORA-15014: location 'ORCL:ASM_DISK_1' is not in the discovery set


2、磁盘管理


添加删除硬盘

首先介绍一下几个概念

a)、ASM提供了3种冗余方法

external redundancy 表示Oracle不帮你管理镜像,功能由外部存储系统实现
normal redundancy (默认方式)表示Oracle提供2路镜像来保护数据。 
high redundancy 表示Oracle提供3路镜像来保护数据。

 

b)、ASM failure group:

Oracle通过failure group来提供数据的高可用性。ASM使用的镜像算法并不是镜像整个disk,而是作extent级的镜像。所以很明显如果为各个failure group使用不同容量的disk是不明智的,因为这样在Oracle分配下一个extent的时候可能就会出现问题。在normal redundancy模式下,ASM环境中每分配一个extent都会有一个primary copy和一个second copyASM的算法保证了second copyprimary copy一定是在不同的failure group中,这就是failure group的意义。通过这个算法,ASM保证了即使一个failure group中的所有disk都损坏了,数据也是毫发无伤的。

    Oracle在分配extent的时候,所有failure group中的这个将拥有相同数据的extent称为一个extent set,当Oracle将数据写入文件的时候,primary copy可能在任何一个failure group中,而second copy则在另外的failure group中,当Oracle读取数据的时候,除非是primary copy不可用,否则将优先从primary copy中读取数据,通过这种写入无序,读取有序的算法,Oracle保证了数据读取尽量分布在多个disk中。

以下测试仅为了测试fileglure group,不是正常删除硬盘的方式

现在我的环境中group1中有两块硬盘,冗余方式是默认的normal redundancy,数据库orcle安装在该disk_grup

SQL> col FAILGROUP for a15

SQL> col name for a10

SQL> col path for a15

SQL> select GROUP_NUMBER,DISK_NUMBER,FAILGROUP,FREE_MB,NAME,PATH from v$asm_disk;

 

GROUP_NUMBER DISK_NUMBER FAILGROUP          FREE_MB NAME       PATH

------------ ----------- --------------- ---------- ---------- ---------------

           1           0 ASM_DISK_1            7001 ASM_DISK_1 ORCL:ASM_DISK_1

           1           1 ASM_DISK_2            7001 ASM_DISK_2 ORCL:ASM_DISK_2

为了模拟损坏,我直接在vmware中将第二块硬盘删除,两块8g硬盘现在仅剩一块

 

正常启动系统,启动css服务后,scandiskasm会自动将损坏的硬盘清理掉

[oracle@orclasm ~]$ oracleasm scandisks

Reloading disk partitions: done

Cleaning any stale ASM disks...

Scanning system for ASM disks...

[oracle@orclasm ~]$ oracleasm listdisks

ASM_DISK_1

此时对数据库无影响,也就是说两块filedisk中删除任何块,数据库均可正常运行

[oracle@orclasm ~]$ export ORACLE_SID=orcl

[oracle@orclasm ~]$ sqlplus / as sysdba

 

SQL*Plus: Release 10.2.0.1.0 - Production on Fri Aug 1 10:42:51 2014

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to an idle instance.

 

SQL> startup

ORACLE instance started.

 

Total System Global Area  167772160 bytes

Fixed Size                  1218316 bytes

Variable Size              79694068 bytes

Database Buffers           83886080 bytes

Redo Buffers                2973696 bytes

Database mounted.

Database opened.

添加硬盘

    添加两块新的硬盘到系统,方便测试

     

[root@orclasm ~]# fdisk /dev/sdc

Command (m for help): n

Command action

   e   extended

   p   primary partition (1-4)

p

Partition number (1-4): 1

First cylinder (1-1044, default 1): 

Using default value 1

Last cylinder or +size or +sizeM or +sizeK (1-1044, default 1044): 

Using default value 1044

Command (m for help): w

The partition table has been altered!

Calling ioctl() to re-read partition table.

Syncing disks.

[root@orclasm ~]# fdisk /dev/sdd

[root@orclasm ~]# oracleasm createdisk asm_disk_2 /dev/sdc1

Writing disk header: done

Instantiating disk: done

[root@orclasm ~]# oracleasm createdisk asm_disk_3 /dev/sdd1

Writing disk header: done

Instantiating disk: done

 

[root@orclasm ~]# oracleasm scandisks

Reloading disk partitions: done

Cleaning any stale ASM disks...

Scanning system for ASM disks...

[root@orclasm ~]# oracleasm listdisks

ASM_DISK_1

ASM_DISK_2

ASM_DISK_3

 

[oracle@orclasm ~]$ export ORACLE_SID=+ASM

[oracle@orclasm ~]$ sqlplus / as sysdba

 

指定failgroup添加硬盘

SQL> alter diskgroup data add failgroup asm_disk_f_2 disk 'ORCL:ASM_DISK_2' name asm_disk_2;

Diskgroup altered.

 

在不指定failgroup的情况先,默认的disk name将是failgroup

SQL> alter diskgroup data add disk 'ORCL:ASM_DISK_3' name asm_disk_3;

Diskgroup altered

 

当加入一块磁盘时,ASM从磁盘组内已有的各块磁盘上读出部分AU写入到新加入的磁盘中。以实现各盘数据量均衡。

 

SQL> select count(*) from v$asm_operation;

 

  COUNT(*)

----------

         1

SQL> select GROUP_NUMBER,DISK_NUMBER,NAME,PATH,FREE_MB,TOTAL_MB from v$asm_disk;

 

GROUP_NUMBER DISK_NUMBER NAME         PATH               FREE_MB   TOTAL_MB

------------ ----------- ------------ --------------- ---------- ----------

           1           0 ASM_DISK_1   ORCL:ASM_DISK_1       7371       8189

           1           1 ASM_DISK_2   ORCL:ASM_DISK_2       7372       8189

           1           2 ASM_DISK_3   ORCL:ASM_DISK_3       7372       8189

删除硬盘 

当删除一块磁盘时,ASM从即将删除的磁盘上读出所有的AU,然后平均写入到组内其它的磁盘上。以实现各盘数据量均衡。 

 

SQL> alter diskgroup data drop disk asm_disk_3;

Diskgroup altered.

 

此时ASM会自动将被删除的硬盘中的数据写入其他两组磁盘中

SQL> select count(*) from v$asm_operation;

  COUNT(*)

----------

         1

SQL> select GROUP_NUMBER,DISK_NUMBER,NAME,PATH,FREE_MB,TOTAL_MB from v$asm_disk;

 

GROUP_NUMBER DISK_NUMBER NAME         PATH               FREE_MB   TOTAL_MB

------------ ----------- ------------ --------------- ---------- ----------

           1           0 ASM_DISK_1   ORCL:ASM_DISK_1       7371       8189

           1           1 ASM_DISK_2   ORCL:ASM_DISK_2       7372       8189

           1           2 ASM_DISK_3   ORCL:ASM_DISK_3       7422       8189

 

SQL> select GROUP_NUMBER,DISK_NUMBER,NAME,PATH,FREE_MB,TOTAL_MB from v$asm_disk;

 

GROUP_NUMBER DISK_NUMBER NAME         PATH               FREE_MB   TOTAL_MB

------------ ----------- ------------ --------------- ---------- ----------

           1           0 ASM_DISK_1   ORCL:ASM_DISK_1       7252       8189

           1           1 ASM_DISK_2   ORCL:ASM_DISK_2       7251       8189

           1           2 ASM_DISK_3   ORCL:ASM_DISK_3       7662       8189

SQL> select count(*) from v$asm_operation;

 

  COUNT(*)

----------

         0

 

SQL> select GROUP_NUMBER,DISK_NUMBER,NAME,PATH,FREE_MB,TOTAL_MB from v$asm_disk;

 

GROUP_NUMBER DISK_NUMBER NAME         PATH               FREE_MB   TOTAL_MB

------------ ----------- ------------ --------------- ---------- ----------

           0           0              ORCL:ASM_DISK_3          0       8189

           1           0 ASM_DISK_1   ORCL:ASM_DISK_1       7001       8189

           1           1 ASM_DISK_2   ORCL:ASM_DISK_2       7001       8189

需要注意的是ASM为了保护磁盘的正常冗余,如果因为删除磁盘导致不满足最少冗余磁盘个数,该磁盘将等到有新的磁盘加入磁盘组,把数据转移到新的磁盘上之后再进行删除。

比如冗余度为normal,至少需要两块硬盘,而我删除了其中的一个,那么ASM将等待添加一块新的硬盘后,把被删除的硬盘数据转移到这块新的硬盘上,再去删除该硬盘。

添加磁盘组

create diskgroup diskgroup_name 

 redundancy 

failgroup failgroup_name disk 'disk_nmae' name asm_disk_name 

 

failgroup的个数的限制: 

HIGH---------- failgroup >= 3 

NORMAL---------- failgroup >= 2 

    EXTERNAL-------- failgroup == 0  (指定外部冗余)
    此处使用的三块硬盘(sdd1sde1sdf1)来做高度冗余的一个磁盘组DATA2,硬盘添加方法跟上面相似

    [root@orclasm ~]# oracleasm createdisk asm_disk_3 /dev/sdd1

    Writing disk header: done

    Instantiating disk: done

    [root@orclasm ~]# oracleasm createdisk asm_disk_4 /dev/sde1

    Writing disk header: done

    Instantiating disk: done

    [root@orclasm ~]# oracleasm createdisk asm_disk_5 /dev/sdf1

    Writing disk header: done

    Instantiating disk: done

    [root@orclasm ~]# oracleasm scandisks

    Reloading disk partitions: done

    Cleaning any stale ASM disks...

    Scanning system for ASM disks...

    [root@orclasm ~]# oracleasm listdisks

    ASM_DISK_1

    ASM_DISK_2

    ASM_DISK_3

    ASM_DISK_4

    ASM_DISK_5

 

    SQL> select GROUP_NUMBER,NAME,PATH from v$asm_disk;

 

    GROUP_NUMBER NAME                           PATH

    ------------ ------------------------------ ---------------

               0                                ORCL:ASM_DISK_3

               0                                ORCL:ASM_DISK_4

               0                                ORCL:ASM_DISK_5

               1 DATA_ASM_DISK_2                ORCL:ASM_DISK_2

               1 DATA_ASM_DISK_1                ORCL:ASM_DISK_1

 

    SQL> create diskgroup data2

      2  high redundancy

      3  failgroup data2_fail_1 disk 'ORCL:ASM_DISK_3' name data2_asm_disk_1

      4  failgroup data2_fail_2 disk 'ORCL:ASM_DISK_4' name data2_asm_disk_2

      5  failgroup data2_fail_3 disk 'ORCL:ASM_DISK_5' name data2_asm_disk_3

      6  /

    Diskgroup created.

 

    SQL> select GROUP_NUMBER,NAME,FREE_MB,TOTAL_MB,STATE from v$asm_diskgroup;

 

    GROUP_NUMBER NAME          FREE_MB   TOTAL_MB STATE

    ------------ ---------- ---------- ---------- -----------

               1 DATA            14002      16378 MOUNTED

               2 DATA2           24414      24567 MOUNTED

 


卸载挂载磁盘组

SQL> alter diskgroup data2 dismount;

Diskgroup altered.

 

SQL> select GROUP_NUMBER,NAME,FREE_MB,TOTAL_MB,STATE from v$asm_diskgroup;

 

GROUP_NUMBER NAME          FREE_MB   TOTAL_MB STATE

------------ ---------- ---------- ---------- -----------

           1 DATA            14002      16378 MOUNTED

           0 DATA2               0          0 DISMOUNTED

 

SQL> alter diskgroup data2 mount;

Diskgroup altered.

/*或者使用alter diskgroup all mount; 挂载所以磁盘组*/

SQL> select GROUP_NUMBER,NAME,FREE_MB,TOTAL_MB,STATE from v$asm_diskgroup;

 

GROUP_NUMBER NAME          FREE_MB   TOTAL_MB STATE

------------ ---------- ---------- ---------- -----------

           1 DATA            14002      16378 MOUNTED

           2 DATA2           24414      24567 MOUNTED

删除磁盘组

SQL> drop diskgroup data2;

Diskgroup dropped.

3、目录管理

目录概念 

A)表示根目录 

B)、目录不能递归创建 

C)、不能直接删除非空目录,需要先删目录下的内容,然后再删上层目录

目录的操作

直接递归添加目录将报错

SQL> alter diskgroup data add directory '+data/test_dir1/test_dir2';

alter diskgroup data add directory '+data/test_dir1/test_dir2'

*

ERROR at line 1:

ORA-15032: not all alterations performed

ORA-15173: entry 'test_dir1' does not exist in directory '/'

 

SQL> alter diskgroup data add directory '+data/test_dir1';

Diskgroup altered.

 

SQL> alter diskgroup data add directory '+data/test_dir1/test_dir2';

Diskgroup altered.

 

删除目录

SQL> alter diskgroup data drop directory '+data/test_dir1/test_dir2';

Diskgroup altered.

 

SQL> alter diskgroup data drop directory '+data/test_dir1';

Diskgroup altered.

 

ASMCMD管理目录

[oracle@orclasm ~]$ asmcmd

ASMCMD> help 

commands:

        --------

        cd

        du

        find

        help

        ls

        lsct

        lsdg

        mkalias

        mkdir

        pwd

        rm

        rmalias

ASMCMD> cd + //+ASM根目录

ASMCMD> ls

DATA/

ASMCMD> mkdir +DATA/test_dir1  //创建目录

ASMCMD> mkdir +DATA/test_dir1/test_dir2

ASMCMD> cd +DATA/test_dir1/

ASMCMD> ls

test_dir2/

ASMCMD> rm test_dir2   //删除目录

ASMCMD> ls

ASMCMD> cd +

ASMCMD> rm +DATA/test_dir1

ASMCMD> cd +DATA

ASMCMD> ls

ORCL/

 

创建删除别名

ASMCMD> mkalias '+DATA/ORCL/datafile/SYSTEM.256.854421493' system.dbf

ASMCMD> rmalias system.dbf

/*注意别名创建保留在当前目录,删除时也要到当前目录删除*/

文件管理

    ASM文件概述

ASM文件的命名不同于普通文件的命名,它的文件名一般不直接指定,由ASM系统自己生成,并且其管理方式是OMF。如果人为指定,则文件的管理方式就不再是OMF。 

  文件的命名规则 

    1)、完全命名: 

格式:+diskgroup_name/database_name/filetype/file_name.xxx.xxxx 

作用:只能用于引用,不能在创建ASM文件时指定。 

说明:xxx表示数字,是唯一的。 

例如:+dgdata/info/datafile/system.256.78684974 

 

2)、数字命名:

  格式:file_name.xxx.xxxx 

作用:只能用于引用,不能在创建ASM文件时指定。 

说明:xxx表示数字,是唯一的。 

例如:system.256.78684974 

 

3)、不完全命名: 

  格式:+diskgroup_name 

作用:用于创建ASM文件,在创建文件时指定,由ASM 自动生成对应的文件名。 

说明:文件是OMF。 

例如:

SQL> create tablespace test01 datafile '+data' size 10m;

Tablespace created.

SQL> select name,file# from v$datafile;

 

NAME                                                   FILE#

------------------------------------------------- ----------

+DATA/orcl/datafile/system.256.854421493                   1

+DATA/orcl/datafile/undotbs1.258.854421495                 2

+DATA/orcl/datafile/sysaux.257.854421493                   3

+DATA/orcl/datafile/users.259.854421495                    4

+DATA/orcl/datafile/test01.270.854505245                   5

 

4)、带模板的不完全命名: 

格式:+diskgroup_name template_name) 

作用:用于创建ASM文件,在创建文件时指定,由ASM 自动生成对应的文件名。 

说明:文件是OMF。 

例如:create tablespace test datafile +dgdata(my_template)’ size 100m; 

创建一个模板

 

[oracle@orclasm ~]$ export ORACLE_SID=+ASM

[oracle@orclasm ~]$ sqlplus / as sysdba

SQL> alter diskgroup data add template my_temp attributes(high fine);

Diskgroup altered.

/*alter diskgroup data drop template my_temp;用来删除模板*/

[oracle@orclasm ~]$ export ORACLE_SID=orcl

[oracle@orclasm ~]$ sqlplus / as sysdba

 

SQL> create tablespace test02 datafile '+data(my_temp)' size 10m;

Tablespace created.

SQL> select name,file# from v$datafile;

 

NAME                                                    FILE#

-------------------------------------------------- ----------

+DATA/orcl/datafile/system.256.854421493                    1

+DATA/orcl/datafile/undotbs1.258.854421495                  2

+DATA/orcl/datafile/sysaux.257.854421493                    3

+DATA/orcl/datafile/users.259.854421495                     4

+DATA/orcl/datafile/test01.270.854505245                    5

+DATA/orcl/datafile/test02.271.854505671                    6

 


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29320885/viewspace-1243621/,如需转载,请注明出处,否则将追究法律责任。

下一篇: Oracle 之pin和lock
请登录后发表评论 登录
全部评论
每个人都有梦想,去实现吧!

注册时间:2013-11-14

  • 博文量
    164
  • 访问量
    2103389