开发者社区> 余二五> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

oracle数据库存储管理--ASM

简介:
+关注继续查看

说明:文章是用windows live writer自动上载的,有些特殊符号显示不正确,如“>”显示为“>”。须修改之处太多,无暇修改。阅读不便之处,请见谅!

特点:

  • ASM能代替外部LVM或FS的功能,不依赖外部数据存储结构。
  • ASM内含多种存储冗余功能如镜像,不依赖外部数据冗余功能。
  • 能够自动将数据均衡分布在磁盘组内所有磁盘中,从而提高系统性能。
  • 跨平台使用,配置和管理界面统一,简化了用户管理。

1、在linux下须安装相应补丁包和驱动程序(按以下顺序安装):

# rpm -ivh oracleasm-support-2.1.3-1.el5.i386.rpm

# rpm -ivh oracleasm-2.6.18-164.el5-2.0.5-1.el5.rpm

# rpm -ivh oracleasmlib-2.0.4-1.el5.i386.rpm

在商用unix下是不用安装这些驱动程序的,如AIX下直接使用rhdisk。实际上,在linux下也可以直接使用磁盘或磁盘分区(须转换为裸设备),后面会有介绍。

2、配置ASM环境

# /etc/init.d/oracleasm configure

Configuring the Oracle ASM library driver.

This will configure the on-boot properties of the Oracle ASM library

driver. The following questions will determine whether the driver is

loaded on boot and what permissions it will have. The current values

will be shown in brackets ('[]'). Hitting <ENTER> without typing an

answer will keep that current value. Ctrl-C will abort.

Default user to own the driver interface []: oracle

Default group to own the driver interface []: oinstall

Start Oracle ASM library driver on boot (y/n) [n]: y

Scan for Oracle ASM disks on boot (y/n) [y]:

Writing Oracle ASM library driver configuration: done

Initializing the Oracle ASMLib driver: [ OK ]

Scanning the system for Oracle ASMLib disks: [ OK ]

若配置后显示失败(failure),则检查oracleasm的版本是否与操作系统内核版本一致。

检查方法:#uname –r是否与oracleasm-2.6.18-164.el5-2.0.5-1.el5.rpm 是否对应,若不一致则到下面网站下载:http://www.oracle.com/technetwork/topics/linux/downloads/rhel5-084877.html。若检查版本是一致的,则可尝试执行如下命令:# oracleasm update-driver。

3、创建和删除ASM磁盘

创建ASM磁盘:

# /etc/init.d/oracleasm createdisk data_vol01_sdb5 /dev/sdb5 
Marking disk "data_vol01_sdb5" as an ASM disk:             [  OK  ] 
# /etc/init.d/oracleasm createdisk data_vol02_sdb6 /dev/sdb6 
Marking disk "data_vol02_sdb6" as an ASM disk:             [  OK  ] 
 

列出ASM磁盘:

# /etc/init.d/oracleasm listdisks 
DATA_VOL01_SDB5 
DATA_VOL02_SDB6 
FLASH_VOL_SDB1

删除ASM磁盘:

# /etc/init.d/oracleasm deletedisk FLASH_VOL_SDB1 
Removing ASM disk "FLASH_VOL_SDB1":                        [  OK  ]

4、创建ASM磁盘组:

(1)启动dbca

# su - oracle 
$ dbca

image

(2)启动CSS服务

image

提示用root用户运行$ORACLE_HOME/bin/localconfig add,使CSS(Oracle Cluster Synchronization Service,集群同步服务)启动并加入inittab文件,使其开机自动启动。

image

# /u01/db_1/bin/crsctl check cssd 
CSS appears healthy                              

css服务正常。

(3)设置ASM实例的sys用户密码

image

(4)启动ASM实例

image

image

(5)创建磁盘组

image

image

三种冗余模式:

  1. High:数据将镜像两份,磁盘组中至少3个磁盘。
  2. Normal:数据镜像一份,磁盘组中至少2个磁盘。
  3. Extenal:外部提供数据保护,如:RAID盘。

磁盘的八种状态:

  • UNKNOWN - Automatic Storage Management disk header has not been read

  • CANDIDATE - Disk is not part of a disk group and may be added to a disk group with the ALTER DISKGROUP statement

  • INCOMPATIBLE - Version number in the disk header is not compatible with the Automatic Storage Management software version.

  • PROVISIONED - Disk is not part of a disk group and may be added to a disk group with the ALTER DISKGROUP statement. The PROVISIONED header status is different from the CANDIDATE header status in that PROVISIONED implies that an additional platform-specific action has been taken by an administrator to make the disk available for Automatic Storage Management.

  • MEMBER - Disk is a member of an existing disk group. No attempt should be made to add the disk to a different disk group. The ALTER DISKGROUP statement will reject such an addition unless overridden with the FORCE option

  • FORMER - Disk was once part of a disk group but has been dropped cleanly from the group. It may be added to a new disk group with the ALTER DISKGROUP statement.

  • CONFLICT - Automatic Storage Management disk was not mounted due to a conflict

  • FOREIGN - Disk contains data created by an Oracle product other than ASM. This includes datafiles, logfiles, and OCR disks.

image

冗余方式为normal,成员盘两个,则取两盘中容量最小为可用空间。但在normal和high方式下,磁盘组的可用容量还与failgroup组中的磁盘有关,后面会详细介绍。

5、使用裸设备创建ASM磁盘组:

(1)创建裸设备

# vi /etc/udev/rules.d/60-raw.rules

ACTION=="add", KERNEL=="sdb1", RUN+="/bin/raw /dev/raw/raw1 %N" 
ACTION=="add", KERNEL=="sdb2", RUN+="/bin/raw /dev/raw/raw2 %N" 
ACTION=="add", KERNEL=="sdb3", RUN+="/bin/raw /dev/raw/raw3 %N" 
ACTION=="add", KERNEL=="sdb5", RUN+="/bin/raw /dev/raw/raw4 %N" 
KERNEL=="raw[1-4]",OWNER="oracle",GROUP="oinstall",MODE="640"

注:阴影部分,不可以有超过大于10的数。也就是说如果用这种方法改变裸设备的所主,设备编号则不能有大于10,如:raw10,raw11…等这样的设备名。如果有可用chown改变。

# start_udev 
Starting udev:                                             [  OK  ] 
# ls –l /dev/raw 
total 0 
crw-r----- 1 oracle oinstall 162, 1 Jan 31 17:02 raw1 
crw-r----- 1 oracle oinstall 162, 2 Jan 31 17:02 raw2 
crw-r----- 1 oracle oinstall 162, 3 Jan 31 17:02 raw3 
crw-r----- 1 oracle oinstall 162, 4 Jan 31 17:02 raw4

(2)创建磁盘组

# su - oracle 
$ dbca

image

由于/dev/sdb5即raw4已经是data_grp01的成员盘,所以不会显示。

image

冗余方式为external,成员盘两个,则磁盘组可用容量为两盘容量之和(不包括开销)。

6、使用ASM磁盘组

创建数据库(截图步骤中部分省略):

$ export ORACLE_SID=+ASM

$ lsnrctl start

image

image

image

image

image

image

image

image

image

7、ASM磁盘维护

(1)数据库启动顺序:CSS服务—&gt;ASM实例—&gt;Oracle数据库实例

         数据库关闭顺序:Oracle数据库实例—&gt;ASM实例—&gt;CSS服务

(2)登入ASM实例

$ export ORACLE_SID=+ASM

$ sqlplus / as sysdba

SQL&gt; show parameter name;

NAME                     TYPE            VALUE 
------------------------------------ ---------------------- ------------------------------ 
db_name                  string 
db_unique_name                 string            +ASM 
global_names                 boolean            FALSE 
instance_name                 string            +ASM 
service_names                 string            +ASM

(3)登录数据库

$export ORACLE_SID=asmora10

$ sqlplus / as sysdba

SQL&gt; show parameter instance_name;

NAME                     TYPE     VALUE 
------------------------------------ ----------- ------------------------------ 
instance_name                 string     asmora10 
SQL&gt; show parameter spfile;

NAME                     TYPE     VALUE 
----------------------------- ----------- ------------------------------ 
spfile                     string     +DATA_GRP01/asmora10/spfileasm 
                                               ora10.ora

SQL&gt; select name from v$datafile 
  2  union 
  3  select member from v$logfile 
  4  union 
  5  select name from v$controlfile 
  6  union 
  7  select name from v$tempfile;

NAME 
-------------------------------------------------------------------------------- 
+DATA_GRP01/asmora10/controlfile/current.260.741893725 
+DATA_GRP01/asmora10/datafile/sysaux.257.741893599 
+DATA_GRP01/asmora10/datafile/system.256.741893597 
+DATA_GRP01/asmora10/datafile/undotbs1.258.741893599 
+DATA_GRP01/asmora10/datafile/users.259.741893599 
+DATA_GRP01/asmora10/onlinelog/group_1.261.741893725 
+DATA_GRP01/asmora10/onlinelog/group_2.262.741893737 
+DATA_GRP01/asmora10/onlinelog/group_3.263.741893745 
+DATA_GRP01/asmora10/tempfile/temp.264.741893765 
+FLASH_GRP01/asmora10/controlfile/current.256.741893725 
+FLASH_GRP01/asmora10/onlinelog/group_1.257.741893731

+FLASH_GRP01/asmora10/onlinelog/group_2.258.741893743 
+FLASH_GRP01/asmora10/onlinelog/group_3.259.741893751

13 rows selected.

(4)查看磁盘组及ASM磁盘

$ export ORACLE_SID=+ASM

$ sqlplus / as sysdba

查看磁盘组状况:

SQL&gt; select name,state,type,total_mb,free_mb,usable_file_mb,offline_disks from v$asm_diskgroup;

NAME          STATE             TYPE        TOTAL_MB    FREE_MB USABLE_FILE_MB OFFLINE_DISKS 
------------- ---------------------- ------------ ---------- ---------- -------------- ------------- 
DATA_GRP01    MOUNTED             NORMAL        4784       2766       1383           0 
FLASH_GRP01   MOUNTED             EXTERN        3826       3597       3597           0

手动mount磁盘组:

SQL&gt; alter diskgroup data_grp01 mount;

手动卸载磁盘组(在数据库关闭情况下):

SQL&gt; alter diskgroup flash_grp01 dismount;

查看磁盘状况:

SQL&gt; select name,header_status,mount_status,state,total_mb,path from v$asm_disk;

image

(5)添加、删除磁盘组

image

添加磁盘组:

SQL&gt; create diskgroup data_grp02 high redundancy disk 'ORCL:DATA_VOL03_SDB7','ORCL:DATA_VOL04_SDB8','ORCL:DATA_VOL03_SDB9';

image

删除磁盘组:

SQL&gt; drop diskgroup data_grp02;

(6)向external磁盘组中添加、删除磁盘

添加磁盘到磁盘组

SQL&gt; alter diskgroup flash_grp01 add disk '/dev/raw/raw3' name flash_grp01_03;

image

查看磁盘组中磁盘重新平衡状况:

SQL&gt; select group_number,operation,state,est_work,sofar,est_rate,est_minutes from v$asm_operation;

image

SQL&gt; show parameter power

NAME                     TYPE            VALUE 
------------------------------------ ---------------------- ------------------------------ 
asm_power_limit              integer            1

这参数指定重新平衡磁盘数据时暂用带宽的力度。取值为0~11。数值越大,对系统占用的I/0资源越多,重新平衡动作将越快完成。此参数也可以在添加或删除磁盘动作时指定,如:

SQL&gt; alter diskgroup data_grp01 add disk 'ORCL:DATA_VOL03_SDB7' rebalance power 11;

从磁盘组中删除磁盘:

SQL&gt; alter diskgroup flash_grp01 drop disk flash_grp01_03;

image

image

(7)向磁盘组中添加、删除磁盘

添加磁盘:

SQL&gt; alter diskgroup data_grp01 add disk 'ORCL:DATA_VOL03_SDB7','ORCL:DATA_VOL04_SDB8';

image

删除磁盘:

SQL&gt; alter diskgroup data_grp01 drop disk 'DATA_VOL01_SDB5';

注意:如果删除normal或high磁盘组中的磁盘,删除磁盘后磁盘组中磁盘的数量必须不少于2个或3个。若不能满足这个要求,则被删除的磁盘会处于hung状态。如下所示:

image

这种情况下应先放弃drop操作:

SQL&gt; alter diskgroup data_grp01 undrop disks;

如果确定要删除磁盘,则应先向组内添加一块新的磁盘后再删除:

SQL&gt; alter diskgroup data_grp01 add disk 'ORCL:DATA_VOL02_SDB6' drop disk 'DATA_VOL03_SDB7';

8、Failgroup故障组

(1)概念

在normal和high保护模式下,ASM会将数据镜像2份或三份,如(以normal磁盘组为例):

image

两个磁盘的情况下,数据A,B,C,D在两个磁盘上互为镜像。

image

三个磁盘的情况下,数据A,B,C,D和镜像在不同磁盘,并均匀分布。

image

四个磁盘情况下,数据均匀分布。考虑如下情况:

image

两块磁盘损坏,则数据A将面临丢失。为解决这个问题,引出failgroup的概念:在同一ASM磁盘组内,一个或多个磁盘组成一个failgroup,镜像在不同failgroup间进行,同样一个failgroup的不同磁盘间不允许做镜像。这样,如果同一个failgroup组内的磁盘处于同一磁盘控制器的情况下(比如,上图中上面两块受损的磁盘由同一个SCSI控制器掌管),可以避免磁盘控制器损坏导致的数据损失。也就是说,同一ASM磁盘组内任意一个failgroup内的磁盘损坏都不会造成数据丢失。当然,这种情况在external模式下是不成立的。

所以,上述情况如果在每两块磁盘为一个failgroup的情况下,数据分布应该是这样的:

image

(2)查看failgroup

SQL&gt;  select name,header_status,mount_status,total_mb,failgroup,path from v$asm_disk;

image

默认情况下,在创建ASM磁盘组时,每个磁盘均属于以该磁盘名命名的failgroup。

(3)指定磁盘的failgroup

image

在normal/high保护模式下,failgroup至少有2/3个。

SQL&gt; create diskgroup data_grp02 normal redundancy failgroup fg01 disk '/dev/raw/raw3' failgroup fg02 disk '/dev/raw/raw4';

image

SQL&gt; alter diskgroup data_grp02 add failgroup fg01 disk 'ORCL:DATA_VOL03_SDB9' name data_grp02_0002;

image

从上面data_grp02磁盘组的可用空间可以看出,由于镜像的原因,failgroup中磁盘的分配情况也会影响到磁盘组的可用空间。如下图所示:

image

(4)删除failgroup中磁盘

SQL&gt; alter diskgroup data_grp02 drop disk 'DATA_GRP02_0001';

image

failgroup中最后一个磁盘不能被删除。

SQL&gt; alter diskgroup data_grp02 undrop disks;

9、手工控制ASM

$ export ORACLE_SID=+ASM

$ asmcmd

ASMCMD&gt; ? 
        commands: 
        --------  
        cd 
        du 
        find 
        help 
        ls 
        lsct 
        lsdg 
        mkalias 
        mkdir 
        pwd 
        rm 
        rmalias 
ASMCMD&gt; ls -l 
State       Type    Rebal  Unbal  Name 
MOUNTED     NORMAL  N      N      DATA_GRP01/ 
MOUNTED     NORMAL  N      N      DATA_GRP02/ 
DISMOUNTED          N      N      FLASH_GRP01/ 
ASMCMD&gt; cd data_grp02 
ASMCMD&gt; ls 
ASMCMD&gt; mkdir ttt 
ASMCMD&gt; ls -l 
Type  Redund  Striped  Time             Sys  Name 
                                        N    ttt/ 
ASMCMD&gt; lsdg 
State       Type    Rebal  Unbal  Sector  Block       AU  Total_MB  Free_MB  Req_mir_free_MB  Usable_file_MB  Offline_disks  Name 
MOUNTED     NORMAL  N      N         512   4096  1048576      7176     5093             2392            1350              0  DATA_GRP01/ 
MOUNTED     NORMAL  N      N         512   4096  1048576      7175     7071             2870            2100              0  DATA_GRP02/ 
DISMOUNTED          N      N         512   4096  1048576         0        0                0               0             

10、裸设备迁移至ASM环境

 

待续。。。









本文转自 d185740815 51CTO博客,原文链接:http://blog.51cto.com/luotaoyang/488064,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
oracle数据库带或不带数据导入导出操作大全
oracle数据库带或不带数据导入导出操作大全
202 0
Oracle数据库的增删改操作介绍
前面的博文介绍了Oracle的简单查询操作,博客地址:http://blog.csdn.net/weixin_36380516/article/details/65935879 这里再对Oracle的更新操作即Oracle的增删改操作进行简单的介绍 首先要掌握对表结构的基本操作。 增加字段: alter table 表名 add(字段名 字段类型和长度) alter table
1000 0
Oracle 11g数据库相关操作
1、Oracle11g默认对空表不分配segment,故使用exp导出Oracle11g数据库时,空表不会导出,怎么解决? 办法一:   设置deferred_segment_creation 参数为FALSE后,无论是空表还是非空表,都分配segment。
688 0
ADO.Net对Oracle数据库的操作【转载】
一 ADO.Net简介 访问数据库的技术有许多,常见的有一下几种:开放数据库互联(ODBC)、数据访问对象(DAO)、远程数据对象 (RDO)、 ActiveX数据对象(ADO)。我们今天主要要学习ADO.NET中OracleClient命名空间中的几个常用对象,用这作为对ADO.NET认 识学习的开始。
1123 0
Oracle 数据库性能优化3日实战(企业培训)
课程名称一: Oracle性能优化及调整 课程时长 1天 课程深度: 高级 上机实验: 10%-30% 授课对象: Oracle开发人员、Oracle数据库管理人员,应用程序开发人员 课程描述: 本课程讲述Oracle数据库物理层规划,系统性能的监控,数据库性能参数调整,统计信息的收集,使用自动化调试工具优化数据库,I/O子系统的配置与设计以及性能优化方法论等。
1892 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
ORACLE 10g 数据库体系结构图
立即下载
迁移 ORACLE 最佳实践
立即下载
PostgresChina2018_刘成伟_oracle到Postgres数据库迁移工具
立即下载