自动存储管理ASM日常维护(一)

               

author:skate
time:2009/11/30


 

 

oracle10g自动存储管理(ASM)

 

在常规的文件管理中,我们都要指定文件的名称和路径,操作每一个文件,都需要数据库管理员指出具体的文件路径和名称,而且
在磁盘的优化也需要数据库管理员的参与,oracle公司在oracle10g推出来ASM,把文件的操作封装起来,外部使用时,只要指定具
体的目标磁盘即可,而且asm还自动均匀存储数据,是I/O平衡;asm还有一个很重要的功能是支持并发,使oracle的rac摆脱了第三方
公司

 

在ASM之前,为了防止磁盘的失败,一般采用硬件或者操作系统的raid1镜像;现在asm也提供三种防止磁盘损坏的冗余级别

 

 

外部冗余:asm不对数据库文件镜像,可以通过raid磁盘镜像;所用磁盘最少,有效磁盘空间是所有磁盘设备的大小之和


常规冗余:asm使用2份镜像存储,以提高性能和数据的安全,最少需要两块磁盘(两个failure group);有效磁盘空间是所有磁盘设备
               大小之和的1/2,一般用常规冗余就ok


高冗余:asm使用3份镜像存储,以提高性能和数据的安全,最少需要三块磁盘(三个failure group);有效磁盘空间是所有磁盘设备
            大小之和的1/3,虽然冗余级别高了,但是硬件的代价也最高

 

在硬件安装的时候,一定要把不同的磁盘组安装在不同的磁盘控制器上,防止因为磁盘控制器的损坏而使数据保护失效

 

磁盘组的要求:asm磁盘组的所有磁盘具有大小相同,磁盘不得有的多个逻辑分区,每个磁盘设备就是一个独立的物理磁盘
asm磁盘组中可以指定逻辑卷设备,但是不建议用户使用,因为逻辑卷隐藏了磁盘的物理机构,对于asm通过物理磁盘优化系统
I/O是不利的.


oracle建议优先使用文件系统和asm,尽量不用裸设备,因为裸设备难于管理,但对于数据的I/o。洛裸设备还是有优势的

 

什么是ASM实例

 

在oracle10g中,有两种实例,分别是ASM实例和数据库实例,ASM实例对磁盘组进行管理,增加或删除磁盘设备时,会重新平衡磁盘组
中的存储

 

asm实例工作原理

 

asm实例是在数据库实例启动前就启动的,asm实例启动过程中必须确认数据库的磁盘组和文件,然后asm实例装载(mount)磁盘组
然后再创建一个区位图(extent map),再将区位图传递到数据库实例,然后asm就处于修状态;当在创建和删除文件,增加或删除
磁盘时,asm实例才会被调用,用于重新平衡磁盘组的存储,并刷新数据库实例SGA的区位图;asm实例不处理事务,对数据库实例影响
很小,在SGA中占用的内存大小不超过60MB

 

如何配置asm磁盘组

 

asm磁盘组是多个可管理的磁盘设备的逻辑集合,组成足够大的磁盘组,当磁盘组采用数据数据冗余时,可以实现数据的镜像和数据的
分散存储,创建磁盘组时要考虑众多因素,如磁盘的块数,控制器及冗余级别,数据库的性能和可恢复性

 

创建磁盘组时,考虑的因素

 

1. asm的磁盘组中的磁盘大小及型号要相同,如果是不同型号,可以创建不同的磁盘组
2. 磁盘阵列和asm共存时, 尽量不要是磁盘阵列,因为阵列隐藏了磁盘的物理结构,对asm优化磁盘系统的I/0是不利的
3. asm将数据分散在磁盘组中的不同磁盘中,以实现负载平衡,,所以磁盘的存取性能相同很重要
4. 在增加或删除磁盘时,asm自动重新负载平衡,删除磁盘时,直到数据从磁盘中移动并完成重新平衡后,磁盘才会被释放
5. 可以在数据库运行时,增加或删除磁盘,但是会影响I/O


asm实例重要的参数

 

instance_type
db_unique_name
asm_power_limit
asm_diskstring
asm_diskgroups


asm实例的创建

 

我用的windows2003做的测试,这个比较简单,安装os系统,安装oracle数据库,然后用DBCA创建ASM实例
然后用vmware创建磁盘,我记得在挂盘的时候,我刚开始遇到个小问题,就是在创建了物理分区,逻辑分区
之后,用asmtoolg工具对于磁盘标识时,找不到磁盘,原来是我在创建磁盘后,没有挂载,所以系统没有
识别到

 

只要执行如下语句,然后重启系统,就ok了

 

C:/Documents and Settings/Administrator>diskpart

Microsoft DiskPart Copyright (C) 1999-2001 Microsoft Corporation.
On computer: ASM

DISKPART> help

Microsoft DiskPart 版本 5.2.3790.1830

ADD         - 将镜像添加到一个简单卷。
ACTIVE      - 将当前基本分区标记为活动的分区。
ASSIGN      - 给所选卷指派一个驱动器号或装载点。
AUTOMOUNT   - 启用和禁用基本卷的自动装载。
BREAK       - 中断镜像集。
CLEAN       - 从磁盘清除配置信息或所有信息。
CONVERT     - 在不同的磁盘格式之间转换。
CREATE      - 创建卷或分区。
DELETE      - 删除对象。
DETAIL      - 提供对象详细信息。
ATTRIBUTES  - 操纵卷属性。
EXIT        - 退出 DiskPart
EXTEND      - 扩展卷。
GPT         - 给选择的 GPT 分区分配属性。
HELP        - 打印命令列表。
IMPORT      - 导入磁盘组。
INACTIVE    - 将当前的基本分区标为不活动。
LIST        - 打印对象列表。
ONLINE      - 使当前标为脱机的磁盘联机。
REM         - 不起任何作用。用来注解脚本。
REMOVE      - 删除驱动器号或装载点指派。
REPAIR      - 用失败的成员修复一个 RAID-5 卷。
RESCAN      - 重新扫描计算机,查找磁盘和卷。
RETAIN      - 在一个简单卷下放置一个保留分区。
SELECT      - 将焦点移到一个对象。

 

DISKPART> automount enable

已经启用自动装载新卷。

DISKPART>

 

 

asm实例的维护

 

sqlplus维护磁盘组


asmcmd维护磁盘组

 

1. 创建磁盘组
2. 删除磁盘组
3. 磁盘组增加磁盘成员
4. 磁盘组删除磁盘成员
5. 挂载/卸载磁盘组
6.创建目录

 

 

1. 创建磁盘组

 

  1.1 创建外部冗余磁盘组

 

SQL> create diskgroup dg_skate1 external redundancy
  2  disk '//./orcldiskdisk10' ;

 

磁盘组已创建。

 

SQL> select name,type,total_mb,free_mb from v$asm_diskgroup;

NAME                                                         TYPE
------------------------------------------------------------ ------------
  TOTAL_MB    FREE_MB
---------- ----------
DG_SKATE1                                                    EXTERN
      1019        969


SQL>


   1.2 创建常规冗余磁盘组


SQL> create diskgroup dg2 normal redundancy
  2  failgroup fdisk1 disk '//./orcldiskdisk11' name disk11
  3  failgroup fdisk2 disk '//./orcldiskdisk12' name disk12;

 

磁盘组已创建。

 

SQL> select name,failgroup,path,disk_number from v$asm_disk;

    NAME         FAILGROUP PATH              DISK_NUMBER
 DISK11 FDISK1 //./ORCLDISKDISK11                 0
 DISK12 FDISK2 //./ORCLDISKDISK12                 1


  1.3 创建高冗余磁盘组

 

SQL> create diskgroup dg3 high redundancy
  2  failgroup  fdisk1 disk '//./orcldiskdisk13' name disk13
  3  failgroup  fdisk2 disk '//./orcldiskdisk14' name disk14
  4  failgroup  fdisk3 disk '//./orcldiskdisk15' name disk15;

 

磁盘组已创建。

 

SQL> select name,failgroup,path,disk_number from v$asm_disk;

 

    NAME FAILGROUP PATH DISK_NUMBER
1 DG_SKATE1_0000 DG_SKATE1_0000 //./ORCLDISKDISK10 0
2 DISK11 FDISK1 //./ORCLDISKDISK11 0
3 DISK12 FDISK2 //./ORCLDISKDISK12 1
4 DISK13 FDISK1 //./ORCLDISKDISK13 0
5 DISK14 FDISK2 //./ORCLDISKDISK14 1
6 DISK15 FDISK3 //./ORCLDISKDISK15 2

 

 

2. 删除磁盘组

 

首先确认数据库是否使用磁盘组


SQL> select * from v$asm_client;

未选定行


没有数据库实例使用asm实例中的磁盘组,然后就可以删除与该实例连接的磁盘组

 

SQL> select name,type,state,total_mb,free_mb from v$asm_diskgroup;

NAME                                                         TYPE
------------------------------------------------------------ ------------
STATE                    TOTAL_MB    FREE_MB
---------------------- ---------- ----------
DG_SKATE1                                                    EXTERN
MOUNTED                      1019        969

DG2                                                          NORMAL
MOUNTED                      1004        902

DG3                                                          HIGH
MOUNTED                      1527       1374


SQL> drop diskgroup dg3 including contents;

 

磁盘组已删除。

 

SQL> select name ,type,state,total_mb,free_mb from v$asm_diskgroup;

NAME                                                         TYPE
------------------------------------------------------------ ------------
STATE                    TOTAL_MB    FREE_MB
---------------------- ---------- ----------
DG_SKATE1                                                    EXTERN
MOUNTED                      1019        969

DG2                                                          NORMAL
MOUNTED                      1004        902


SQL>

 

 


3. 磁盘组增加磁盘成员

 

SQL> select name,failgroup,path,disk_number from v$asm_disk;

 

    NAME FAILGROUP PATH DISK_NUMBER


1   //./ORCLDISKDISK13 0
2   //./ORCLDISKDISK14 1
3   //./ORCLDISKDISK15 2
4 DG_SKATE1_0000 DG_SKATE1_0000 //./ORCLDISKDISK10 0
5 DISK11 FDISK1 //./ORCLDISKDISK11 0
6 DISK12 FDISK2 //./ORCLDISKDISK12 1

 

 


4. 磁盘组删除磁盘成员


SQL> alter diskgroup dg2 drop disk disk13;

 

磁盘组已变更。

 

5. 挂载/卸载磁盘组


SQL> select name,state from v$asm_diskgroup;

NAME
------------------------------------------------------------
STATE
----------------------
DG_SKATE1
MOUNTED

DG2
MOUNTED


SQL> alter diskgroup dg_skate1 dismount;

 

磁盘组已变更。

 

SQL> select name,state from v$asm_diskgroup;

NAME
------------------------------------------------------------
STATE
----------------------
DG_SKATE1
DISMOUNTED

DG2
MOUNTED


SQL> alter diskgroup all mount;


alter diskgroup all mount
*
第 1 行出现错误:
ORA-15032: ?????????
ORA-15017: ??????? "DG2"
ORA-15030: ??????????????? "DG2"


SQL> alter diskgroup all dismount;

 

磁盘组已变更。

 

SQL> select name,state from v$asm_diskgroup;

NAME
------------------------------------------------------------
STATE
----------------------
DG_SKATE1
DISMOUNTED

DG2
DISMOUNTED


SQL> alter diskgroup all mount;

 

磁盘组已变更。

 

SQL> select name,state from v$asm_diskgroup;

NAME
------------------------------------------------------------
STATE
----------------------
DG_SKATE1
DISMOUNTED

DG2
MOUNTED


SQL> alter diskgroup dg_skate1 mount;

 

磁盘组已变更。

 

SQL> select name,state from v$asm_diskgroup;

NAME
------------------------------------------------------------
STATE
----------------------
DG_SKATE1
MOUNTED

DG2
MOUNTED


SQL>

 

6.创建目录

 

SQL> alter diskgroup dg2 add directory '+dg2/test/';

 

磁盘组已变更。

 

SQL> alter diskgroup dg2 add directory '+dg2/test/datafile';

 

磁盘组已变更。

 

SQL>


在数据库实例中使用asm磁盘组创建表空间和数据文件

 

SQL> create tablespace tbs1 datafile
  2  '+dg2/test/datafile/tbs01.dbf' size 1m
  3  autoextend on next 1m maxsize 2m;

 

表空间已创建。

SQL>

 

asm相关视图:


v$asm_disk
v$asm_diskgroup
v$asm_client
v$asm_template

 


维护asm磁盘组除了用sqlplus维护之外,还可以用asmcmd,他很类似linux的命令

 

C:/Documents and Settings/Administrator>asmcmd -p
ASMCMD [+] > ls
DG2/
DG_SKATE1/
ASMCMD [+] > help
        asmcmd [-p] [command]

        The environment variables ORACLE_HOME and ORACLE_SID determine the
        instance to which the program connects, and ASMCMD establishes a
        bequeath connection to it, in the same manner as a SQLPLUS / AS
        SYSDBA.  The user must be a member of the SYSDBA group.

        Specifying the -p option allows the current directory to be displayed
        in the command prompt, like so:

        ASMCMD [+DATAFILE/ORCL/CONTROLFILE] >

        [command] specifies one of the following commands, along with its
        parameters.

        Type "help [command]" to get help on a specific ASMCMD command.

        commands:
        --------
        cd
        du
        find
        help
        ls
        lsct
        lsdg
        mkalias
        mkdir
        pwd
        rm
        rmalias
ASMCMD [+] >


ASMCMD [+] > ls
DG2/
DG_SKATE1/


ASMCMD [+] > cd dg2


ASMCMD [+dg2] > ls
ORCL/
test/


ASMCMD [+dg2] > du
Used_MB      Mirror_used_MB
      2                   4


ASMCMD [+dg2] > lsct
DB_Name   Status        Software_Version  Compatible_version  Instance_Name
orcl      CONNECTED           10.2.0.1.0          10.2.0.1.0  orcl


ASMCMD [+dg2] > lsdg
State    Type    Rebal  Unbal  Sector  Block       AU  Total_MB  Free_MB  Req_mi
r_free_MB  Usable_file_MB  Offline_disks  Name
MOUNTED  NORMAL  N      N         512   4096  1048576      1004      896
        0             448              0  DG2/
MOUNTED  EXTERN  N      N         512   4096  1048576      1019      969
        0             969              0  DG_SKATE1/


ASMCMD [+dg2] > ls
ORCL/
test/


ASMCMD [+dg2] > mkdir test1


ASMCMD [+dg2] > ls
ORCL/
test/
test1/


ASMCMD [+dg2] > rm test1


ASMCMD [+dg2] > ls
ORCL/
test/


ASMCMD [+dg2] > pwd
+dg2


ASMCMD [+dg2] > mkalias test1
usage: mkalias <filename> <alias>
ASMCMD [+dg2] > mkalias test test_alias
ORA-15032: ?????????
ORA-15046: ASM ??? '+dg2/test' ??????????? (DBD ERROR: OCIStmtExecute)
ASMCMD [+dg2] > help mkalias
        mkalias <filename> <alias>

        Create the specified <alias> for the <filename>.  A user-defined
        alias must reside in the same diskgroup as the system-created filename,
        and only one user-defined alias is permitted per file.  The SQL
        equivalent is ALTER DISKGROUP <dg_name> ADD ALIAS <alias> FOR
        <filename>.


ASMCMD [+dg2] > ls
ORCL/
test/


ASMCMD [+dg2] > ls test
datafile/


ASMCMD [+dg2] > ls test/datafile
tbs01.dbf


ASMCMD [+dg2] > mkalias +dg2/test/datafile/tbs01.dbf tbs_alias.dbf
ORA-15032: ?????????
ORA-15046: ASM ??? '+dg2/test/datafile/tbs01.dbf' ??????????? (DBD ERROR: OCIStm
tExecute)


ASMCMD [+dg2] > ls
ORCL/
test/
ASMCMD [+dg2] > ls orcl
DATAFILE/


ASMCMD [+dg2] > ls orcl/datafile
TBS1.256.704247841
TBS2.257.704248559


ASMCMD [+dg2/orcl/datafile] > mkalias tbs1.256.704247841 tbsa_alias
ORA-15032: ?????????
ORA-15176: ?? '+dg2/orcl/datafile/tbs1.256.704247841' ????????? (DBD ERROR: OCIS
tmtExecute)
ASMCMD [+dg2/orcl/datafile] > mkalias tbs2.257.704248559 tbsa_alias


ASMCMD [+dg2/orcl/datafile] > ls
TBS1.256.704247841
TBS2.257.704248559
tbsa_alias


ASMCMD [+dg2/orcl/datafile] >
ASMCMD [+dg2/orcl/datafile] > rmalias tbsa_alias


ASMCMD [+dg2/orcl/datafile] > ls
TBS1.256.704247841
TBS2.257.704248559


ASMCMD [+dg2/orcl/datafile] >

 

 

 

 

-----end---

 

 

 

 


 

           
上一篇:Qt 中 this->size() this->rect() event->size() 三者差异


下一篇:Threejs之三维坐标系AxesHelper