ASM

ASM可以条带化和镜像磁盘,因此可以在数据库备加载的情况下添加、删除磁盘、以及自动平衡IO。
ASM不是一个文件系统,所以无法从操作系统访问ASM存储的文件,对于使用ASM的数据库只能用RMAN进行备份和恢复。
ASM作为单独的ORACLE实例实施,只有ASM运行时数据库才能访问。

 

一、磁盘组

ASM提供了三中磁盘组类型
1 normal redundacy 支持的映像等级有 2-WAY、3-WAY、不保护 ,缺省的2-WAY
标准冗余度要求提供双向镜像,并且要求在一个磁盘组中,至少有2个故障组(failure groups),故障组中的一个磁盘出现故障不
不会导致磁盘故停止工作,也不会丢失数据,对查询磁盘组的对象有些性能影响,这个时候就需要管理员调整
2 high redundancy 支持的映像等级 3-WAY
高冗余度提供三向映像,并且在一个磁盘组至少有3个故障组。故障组中任何其中两组出现故障,对用户来说就象标准冗余一样
3 external redundancy 不保护
表面冗余,紧要求有一个故障组,
在配置磁盘组时,尽量把同一类型的磁盘放到一个组里,避免不同类型的磁盘在一个组里以免影响性能
二、文件
写在ASM磁盘上的文件称之为ASM文件,他们的名字是由ASM自动生成的,你可以指定一个别名对一个ASM文件,你可以创建一个目录

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

NAME TYPE TOTAL_MB FREE_MB
—————————— —— ———- ———-
DATA EXTERN 7248 5489
比如说我在DATA磁盘组上创建一个BOSON目录
alter diskgroup data add directory ‘+data/boson’;

SQL> alter diskgroup data add directory ‘+data/boson’;

Diskgroup altered.

看一下我的数据文件
SQL> select name from v$datafile;

NAME
——————————————————————————–
+DATA/rac/datafile/system.269.636854893
+DATA/rac/datafile/undotbs1.268.636854911
+DATA/rac/datafile/sysaux.261.636854917
+DATA/rac/datafile/undotbs2.259.636855011
+DATA/rac/datafile/users.258.636855023
我门现在利用刚创建的目录给users.258.636855023创建一个别名
SQL> alter diskgroup data add alias ‘+data/boson/users.dbf’
2 for ‘+data/rac/datafile/users.258.636855023′;

Diskgroup altered.
三、模板
ASM支持数据库所有的文件,并提供了控制文件、数据文件、在线日志文件等模板,具体的可以查看官方的资料

四、安装

确定所需的 ASMLib 版本
ASMLib 以三个 Linux 程序包组成的程序包集提供:
oracleasmlib - ASM 库
oracleasm-support - 用于管理 ASMLib 的实用程序
oracleasm - ASM 库的内核模块
每个 Linux 发行套件都有其自己的 ASMLib 程序包集。在每个发行套件中,每个内核版本都有一个相应的 oracleasm 程序包。以下部分介绍如何确定所需的程序包集。
首先,以 root 用户身份登录并运行以下命令来确定所使用的内核:
uname -rm

例如:
oracle:/home/oracle # uname -rm
2.6.16.21-0.8-default i686
使用此信息在 OTN 上查找相应的 ASMLib 程序包:
将 Web 浏览器指向 http://www.oracle.com/technology/global/cn/tech/linux/asmlib
1, 选择适用于您的 Linux 版本的链接。
2, 下载适用于您的 Linux 版本的 oracleasmlib 和 oracleasm-support 程序包
3, 下载与您的内核相对应的 oracleasm 程序包。
oracle:/home/oracle # ls
.Xauthority .fonts .profile .xinitrc.template oracleasm-2.6.16.21-0.8-default-2.0.3-1.i586.rpm
.bash_history .gnu-emacs .urlview .xtalkrc oracleasm-support-2.0.3-1.i386.rpm
.bashrc .inputrc .viminfo 10201_database_linux32.zip oracleasmlib-2.0.2-1.i386.rpm
.dvipsrc .kermrc .xcoralrc Documents public_html
.emacs .mozilla .xemacs bin
.exrc .muttrc .xim.template database
oracle:/home/oracle # rpm -aq oracleasm*
oracle:/home/oracle # rpm -ivh oracleasm*.rpm
Preparing… ########################################### [100%]
1:oracleasm-support ########################################### [ 33%]
2:oracleasm-2.6.16.21-0.8########################################### [ 67%]
3:oracleasmlib ########################################### [100%]
oracle:/home/oracle #
配置 ASMLib
使用 ASMLib 之前,必须运行配置脚本以准备驱动程序。以 root 用户身份运行以下命令,并响应如下示例中所显示的提示。

oracle:/home/oracle # /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 []: dba
Start Oracle ASM library driver on boot (y/n) [n]: y
Fix permissions of Oracle ASM disks on boot (y/n) [y]: y
Writing Oracle ASM library driver configuration: done
Creating /dev/oracleasm mount point: done
Loading module “oracleasm”: done
Mounting ASMlib driver filesystem: done
Scanning system for ASM disks: done
oracle:/home/oracle #

现在,如下所示启用 ASMLib 驱动程序。
oracle:/home/oracle # /etc/init.d/oracleasm enable
Writing Oracle ASM library driver configuration: done
Scanning system for ASM disks: done
oracle:/home/oracle #
为 ASM 配置磁盘
接下来,告诉 ASM 驱动程序您要使用的磁盘。请注意,这些磁盘是不包含任何内容(甚至不包含分区)的空磁盘。可以将磁盘分区用于 ASM,但建议您不要这样做。
通过以 root 用户身份运行以下命令来标记由 ASMLib 使用的磁盘:
/etc/init.d/oracleasm createdisk DISK_NAME device_name
(提示:DISK_NAME 应由大写字母组成。当前版本有一个错误,即如果使用小写字母,ASM 实例将无法识别磁盘。)
例如:
# /etc/init.d/oracleasm createdisk VOL1 /dev/sdb
Marking disk “/dev/sdb” as an ASM disk [ OK ]

不过我按照上面说的运行
oracle:/home/oracle # /etc/init.d/oracleasm createdisk VOL1 /dev/sdb
Marking disk “/dev/sdb” as an ASM disk: asmtool: Device “/dev/sdb” is not a partition
failed
然后我把/dev/sdb重新分区了就可以
oracle:/home/oracle # /etc/init.d/oracleasm createdisk VOL1 /dev/sdb1
Marking disk “/dev/sdb1″ as an ASM disk: done
oracle:/home/oracle # /etc/init.d/oracleasm createdisk VOL2 /dev/sdb2
Marking disk “/dev/sdb2″ as an ASM disk: done
oracle:/home/oracle # /etc/init.d/oracleasm createdisk VOL3 /dev/sdb3
Marking disk “/dev/sdb3″ as an ASM disk: done
oracle:/home/oracle # /etc/init.d/oracleasm createdisk VOL4 /dev/sdb5
Marking disk “/dev/sdb5″ as an ASM disk: done
以下示例演示了如何列出标记为由 ASMLib 使用的所有磁盘。
oracle:/home/oracle # /etc/init.d/oracleasm listdisks
VOL1
VOL2
VOL3
VOL4
oracle:/home/oracle #
既然已经安装了 ASMLib,且已将磁盘标记为可用,下面,您便可以创建一个 ASM 实例,并构建一个使用 ASM 进行磁盘存储的数据库。最容易的方法就是使用数据库配置助手 (DBCA) 来完成此操作。

五、ASM的参数文件

[oracle@rac1 dbs]$ cat init+ASM1.ora

##############################################################################
# Copyright (c) 1991, 2001, 2002 by Oracle Corporation
##############################################################################

###########################################
# Cluster Database
###########################################
cluster_database=true

###########################################
# Diagnostics and Statistics
###########################################
background_dump_dest=/u01/app/oracle/admin/+ASM/bdump
core_dump_dest=/u01/app/oracle/admin/+ASM/cdump
user_dump_dest=/u01/app/oracle/admin/+ASM/udump

###########################################
# Miscellaneous
###########################################
instance_type=asm 必须为ASM

###########################################
# Pools
###########################################
large_pool_size=12M

###########################################
# Security and Auditing
###########################################
remote_login_passwordfile=exclusive 启用了远程管理,所以必须有密码文件

asm_diskgroups=’DATA’

+ASM2.instance_number=2
+ASM1.instance_number=1

还有一些参数比如说
asm_power_limit,这个是设置磁盘重新平衡的速度缺省为1 可以取值0-11
当你往ASM磁盘组添加磁盘时,修改此参数为较大值能更快让磁盘数据更块的平均分布,但是由此也待来了性能影响,
所以在做此项操作时要估计对数据库性能的影响,选择合适的值。
可以通过查询 v$asm_operation视图查看
SQL> desc v$asm_operation;
Name Null? Type
—————————————————– ——– ————————————
GROUP_NUMBER NUMBER
OPERATION VARCHAR2(5)
STATE VARCHAR2(4)
POWER NUMBER
ACTUAL NUMBER
SOFAR NUMBER
EST_WORK NUMBER
EST_RATE NUMBER
EST_MINUTES NUMBER
参数文件错误有 ORA-15021

六、启动ASM实例

要连接ASM实例,需要设置ORACLE_SID,比说单实例的数据库缺省的为+ASM
集群环境为+ASMnode#

SQL> shutdown
ORA-15097: cannot SHUTDOWN ASM instance with connected RDBMS instance

oerr ora 15097
15097, 00000, “cannot SHUTDOWN ASM instance with connected RDBMS instance”
// *Cause: A SHUTDOWN command was issued to an ASM instance that had one or
// more connected RDBMS instances.
// *Action: Connect to each RDBMS instance and shut it down, and then reissue
// the SHUTDOWN command to the ASM instance. Alternatively, use the
// SHUTDOWN ABORT command. Note that issuing the SHUTDOWN ABORT
// command to an ASM instance results in abormal termination of all
// RDBMS instances connected to that ASM instance.
//
要关闭ASM实例,首先要关闭每一个数据库实例

% sqlplus /nolog
SQL> CONNECT / AS sysdba
Connected to an idle instance.

SQL> STARTUP
ASM instance started

Total System Global Area 71303168 bytes
Fixed Size 1069292 bytes
Variable Size 45068052 bytes
ASM Cache 25165824 bytes
ASM diskgroups mounted
CRS 根据配置管理 Oracle 的群集资源,包括资源的启动、停止、监视和故障切换。
CSS 可管理 Oracle 群集成员并将其自身的组成员服务提供给 RAC 实例
[oracle@rac2 ~]$ crsctl check cssd
CSS appears healthy

八ASM限制

ASM imposes the following limits:

63 disk groups in a storage system

10,000 ASM disks in a storage system

4 petabyte maximum storage for each ASM disk

40 exabyte maximum storage for each storage system

1 million files for each disk group

Maximum files sizes as shown in the following table:

Disk Group Type Maximum File Size
External redundancy 35 TB
Normal redundancy 5.8 TB
High redundancy 3.9 TB

八、磁盘组管理

1、创建磁盘组

SQL> STARTUP NOMOUNT
SQL> CREATE DISKGROUP dgroup1 NORMAL REDUNDANCY
2 FAILGROUP controller1 DISK
3 ‘/devices/diska1′,
4 ‘/devices/diska2′,
5 ‘/devices/diska3′,
6 ‘/devices/diska4′
7 FAILGROUP controller2 DISK
8 ‘/devices/diskb1′,
9 ‘/devices/diskb2′,
10 ‘/devices/diskb3′,
11 ‘/devices/diskb4′;

2、添加磁盘

ALTER DISKGROUP dgroup1 ADD DISK
‘/devices/diska5′ NAME diska5,
‘/devices/diska6′ NAME diska6;

没有指定故障组,所以两个磁盘分别添加到自己的故障组

ASM中,创建一个目录
alter diskgroup boson add directory ‘+data/backup’;
在已经创建的目录中在创建目录
alter diskgroup boson add directory ‘+data/backup/archivelog’;
重命名一个目录
alter diskgroup boson rename directory ‘+data/backup’ to ‘+data/bak’;
删除一个目录
alter diskgroup boson drop directory ‘+data/bak’force
ASM文件别名的管理,相关视图v$asm_alias
ALTER DISKGROUP dgroup1 ADD ALIAS ‘+dgroup1/mydir/second.dbf’
FOR ‘+dgroup1/sample/datafile/mytable.342.3′;
重命名一个别名
ALTER DISKGROUP dgroup1 RENAME ALIAS ‘+dgroup1/mydir/datafile.dbf’
TO ‘+dgroup1/payroll/compensation.dbf’;

删除一个别名
ALTER DISKGROUP dgroup1 DROP ALIAS ‘+dgroup1/payroll/compensation.dbf’;
删除一个ASM文件
ALTER DISKGROUP dgroup1 DROP FILE ‘+dgroup1/payroll/compensation.dbf’;
删除一个磁盘从磁盘组中
ALTER DISKGROUP dgroup1 DROP DISK diska5;

ALTER DISKGROUP dgroup1 DROP DISK diska5
ADD FAILGROUP failgrp1 DISK ‘/devices/diska9′ NAME diska9;

修改磁盘组中的磁盘大小
修改一个磁盘组中所有的磁盘:
ALTER DISKGROUP dgroup1
RESIZE DISKS IN FAILGROUP failgrp1 SIZE 100G
手动调整字盘平衡速度
ALTER DISKGROUP dgroup2 REBALANCE POWER 5 WAIT
挂载所有磁盘组
ALTER DISKGROUP ALL DISMOUNT;
ALTER DISKGROUP dgroup1 DISMOUNT;
检查所有磁盘组的一致性
ALTER DISKGROUP dgroup1 CHECK ALL;
删除磁盘组
DROP DISKGROUP dgroup1;

本文出自于:http://www.oralife.cn/html/2007/180_asm.html

http://www.oracle-base.com/articles/10g/ASMUsingASMLibAndRawDevices.php