asm笔记
DBA的存储挑战
1、数据库规模迅速增长
-DBA需要管理数以千计的数据文件
2、计划宕机时间的减少
3、存储资源涉及到很多机构
-数据库管理员 -系统管理员 -存储管理员 -网络管理员
4、数据库存储的管理的复杂性和成本日益增加
oracle自动存储管理(ASM)
1、直接在oracle内核提供了文件系统和卷管理器的垂直整合
2、将数据库文件分布到所有可用存储器中以实现最佳性能和最高的资源利用率
能够进行简单和非侵入性资源分配并提供自动重新平衡
ASM磁盘组
1、作为逻辑单元管理的磁盘组
2、将磁盘总空间划分为统一大小的1MB
3、ASM将每个oracle文件平均分布到磁盘组的所有磁盘中
传统方法与ASM-添加磁盘
传统方法 ASM
1、将磁盘添加到操作系统 1、将磁盘添加到操作系统
2、使用卷管理器创建卷 2、发出添加磁盘命令
3、通过卷创建文件系统 alter diskgroup add disk
4、计算出要移新磁盘的数据
5、将数据移至新文件
6、重命名数据库中的文件
7、重新调整I/O
使用ASM添加磁盘
DBA向现有磁盘组发出添加磁盘的请求
ASM动态重新平衡
更改存储配置时自动在线重新平衡
仅将数据按比例至所添加的存储
传统方法与ASM--删除磁盘
传统方法 ASM
1、列出磁盘上的所有数据 1、发出删除磁盘命令
2、选择现有文件系统以保留 2、oracle认为操作完成时从
删除的磁盘中的数据 操作系统中删除磁盘
3、将数据移至新文件
4、重命名数据库中的文件
5、从操作系统中删除磁盘
6、重新调整I/O
传统方法与ASM--调整I/O
传统方法 ASM
1、每日监控I/O性能 oracle自动完成调整I/O
2、发现热点
3、找出删除热点的方法
4、将数据移动到新文件
5、重命名数据库中的文件
6、确认热点已删除
数据分布
自动存储管理扩展
1、允许动态在线存储重新配置
2、重新平衡时高效地重新分布数据
3、在所有存储配置中不再需要手动I/O
使用asm进行数据镜像
1、磁盘组冗余选项
1)外部:进行硬件镜像
2)正常:两向镜像
3)高:三向镜像
2、与数据库集成后将不再需要脏区日志记录
ASM镜像
1、在区的级别上镜像
2、在每个磁盘上混合元区与镜像区
3、不需要联机备件磁盘
-仅需要多余的容量
-故障磁盘负载分布在未出现的故障的磁盘中
-保持平衡的I/O负载
asm故障组
1、磁盘组由DBA指定
2、故障组是共享公用资源(需要有容纳故障的能力)的一组磁盘
-区的冗余副本存储在单独的故障组中
3、故障组由DBA指定或由ASM自动指定
asm的体系结构 支持非rac和rac集群存储
asm的商业利益
1、增加了正常运行时间
-数据库始终可用
-自动文件命名和管理->发生错误的可能性降低
-存储资源的在线更改(添加磁盘、删除磁盘和移植到新存储器)
2、减少管理成本
-自动实现数据库布局和文件命名
-不再需要手动I/O调节
-在员工人数不变的情况下管理更多数据库
3、优化资源的使用
-更大程度地利用现有硬件投资
-能力提高(DB和DBA)
具体实施安装方法
一、配置好oracle10g软件的各种参数和添加相关的磁盘
二 、安装oracleasmrpm包四个(一个是内核的,不用装了)
rpm -Uvh 也是安装 2.6.9-55.ELsmp
$su –
# rpm -Uvh oracleasm-support-1.0.2-1.i386.rpm \
oracleasm-lib-1.0.0-1.i386.rpm \
oracleasm-2.4.21-EL-1.0.0-1.i686.rpm
三、配置ASMLib:
# /etc/init.d/oracleasm configure
下命令来手工的卸载和加载ASMLib
# /etc/init.d/oracleasm disable
# /etc/init.d/oracleasm enable
添加init文件使系统启动时自动加载ASMLib
$ su –
# cd /etc/rc3.d
# ln -s ../init.d/oracleasm S99oracleasm (注意查后面的)
# ln -s ../init.d/oracleasm K01oracleasm
重新启动系统,确认ASMLib 已经可以自动加载
#lsmod | grep oracleasm
#dmesg | grep oracleasm
四、磁盘分区与创建asm磁盘
fdisk /dev/sdb /dev/sdc /dev/sdd /dev/sde
# /etc/init.d/oracleasm createdisk VOL1 /dev/sdb1
# /etc/init.d/oracleasm createdisk VOL2 /dev/sdc1
# /etc/init.d/oracleasm createdisk VOL3 /dev/sdd1
# /etc/init.d/oracleasm createdisk VOL4 /dev/sde1
# /etc/init.d/oracleasm listdisks
如果要删除ASM 磁盘通过以下命令:
# /etc/init.d/oracleasm deletedisk VOL4
# /etc/init.d/oracleasm listdisks
注意:如果是在RAC 环境中的某一个节点中添加了ASM 磁盘,那么需要在其它的节点上
运行scandisk 来获取这种变化。
# /etc/init.d/oracleasm scandisks
用ROOT用户登录,然后执行:
/u01/oracle/product/10.2.0/db_1/bin/localconfig add
五、安装Oracle10g软件,不安装数据库。
六、创建ASM 实例
1. 创建初始化文件
$ su – oracle
$ cd $ORACLE_HOME/dbs
$ vi init+ASM.ora
创建asm 实例的初始化脚本,脚本内容如下所示:
# ******Below is init script. for asm instance******
*.asm_diskstring='FOX:VOL*'
*.background_dump_dest='/u01/admin/+ASM/bdump'
*.core_dump_dest='/u01/admin/+ASM/cdump'
*.instance_type='asm'
*.large_pool_size=12M
*.remote_login_passwordfile='SHARED'
*.user_dump_dest='/u01/admin/+ASM/udump'
# ******Above is init script. for asm instance******
asm_diskstring=''
2. 创建密码文件
$ su – oracle
$ cd $ORACLE_HOME/dbs
$ orapwd file=orapw+ASM password=qkhhfqp entries=10
3. 创建目录结构
$ su – oracle
$ cd $ORACLE_HOME/dbs
$ mkdir -p $ORALCE_BASE/admin/+ASM/udump
$ mkdir -p $ORALCE_BASE/admin/+ASM/bdump
$ mkdir -p $ORALCE_BASE/admin/+ASM/cdump
4. 启动实例
$ export ORACLE_SID=+ASM
$ sqlplus / as sysdba
SQL> startup
5.创建spfile,重新启动
SQL> create spfile from pfile;
SQL> shutdown immediate;
SQL> startup;
6.创建diskgroup
SQL> create diskgroup dgroup1 normal redundancy
failgroup fgroup1 disk 'ORCL:VOL1','ORCL:VOL2'
failgroup fgroup2 disk 'ORCL:VOL3','ORCL:VOL4';
SQL> select name,state from v$asm_diskgroup;
如果上述命令返回的state 是DISMOUNTED,那么我们需要手工将挂载diskgroup
SQL> ALTER DISKGROUP dgroup1 MOUNT;
SQL> show parameter asm_diskgroups
如果要卸载diskgroup,使用下面的命令:
ALTER DISKGROUP ALL DISMOUNT;
七、创建ASM 数据库
八、ASM 数据库的简单测试
创建ASM 磁盘
#/etc/init.d/oracleasm createdisk VOL5 /dev/sdf1
#/etc/init.d/oracleasm createdisk VOL6 /dev/sdg1
登入ASM 实例检查v$asm_disk 视图,发现这两个新加的硬盘已经找到了
将硬盘添加到磁盘组中
SQL> ALTER DISKGROUP DGROUP1 ADD
FAILGROUP FGROUP1 DISK 'ORCL:VOL5'
FAILGROUP FGROUP2 DISK 'ORCL:VOL6';
检查数据库的auto rebalance 工作进度,数据库正在将原来分布在两个磁盘上的数据平均分配到三个磁盘上
SQL> SELECT group_number, operation, state, est_work, sofar, est_rate,
est_minutes FROM v$asm_operation;
不停运行,看看数据重新分配
SQL> select name,allocation_unit_size,total_mb from v$asm_diskgroup;
登入数据库实例
创建一个自己的表空间,创建一个用户,创建一个表
SQL> create tablespace ts_test datafile '+DGROUP1' size 200M;
SQL> create user pretty identified by qkhhfqp default tablespace ts_test;
SQL> grant dba to pretty;
SQL> conn pretty/qkhhfqp
SQL> create table t_test as select * from dba_objects;
SQL> select count(*) from t_test;
登入ASM 实例,将磁盘从磁盘组中删除
SQL> alter diskgroup dgroup1 drop disk VOL4;
SQL> SELECT group_number, operation, state, est_work, sofar, est_rate,
est_minutes FROM v$asm_operation;
SQL> select name,allocation_unit_size,total_mb from v$asm_diskgroup;
SQL> select label,failgroup from v$asm_disk;
可以看到磁盘组的总容量已经减少了,磁盘数目也减少了
有些文档上说删除了磁盘之后要执行:ALTER DISKGROUP REBALANCE
但是发现不需要手动执行,整个REBALANCE 的工作确实是自动的,当删除磁盘以后,数据库自动开始作REBALANCE 了可以看到磁盘组的总容量已经减少了,磁盘数目也减少了
有些文档上说删除了磁盘之后要执行:ALTER DISKGROUP REBALANCE但是发现不需要手动执行,整个REBALANCE 的工作确实是自动的,当删除磁盘以后,数据库自动开始作REBALANCE 了为了两个FAILGROUP 的大小相同,再删除一个磁盘
SQL> alter diskgroup dgroup1 drop disk VOL2;
我们可以从下面的SQL 知道在ASM 实例中可以查询到所有可以用的磁盘,而在数据库实例中只可以查询到让自己使用的磁盘
ASM 实例:
SQL> SELECT disk_number, label FROM V$asm_disk;
ORA-29701: unable to connect to Cluster Manager
解决: 用ROOT用户登录,然后执行:
/u01/oracle/product/10.2.0/db_1/bin/localconfig add
先关数据库实例,再关ASM实例.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11364208/viewspace-277846/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/11364208/viewspace-277846/