Oracle ASM 详解(其四)

来源:互联网 发布:知否小说全文免费阅读 编辑:程序博客网 时间:2024/05/16 08:14

 

ASM可以条带化和镜像磁盘,因此可以在数据库被加载的情况下添加、删除磁盘、以及自动平衡IO。

ASM不是一个文件系统,所以无法从操作系统访问ASM存储的文件,对于使用ASM的数据库只能用RMAN进行备份和恢复。

ASM作为单独的ORACLE实例实施,只有ASM运行时数据库才能访问。

一、磁盘组

ASM提供了三种磁盘组类型

 1 normal redundacy  支持的映像等级有2-WAY、3-WAY、不保护 ,缺省的2-WAY

 标准冗余度要求提供双向镜像,并且要求在一个磁盘组中至少有2个故障组(failuregroups),故障组中的一个磁盘出现故障不会导致磁盘组停止工作,也不会丢失数据,对查询磁盘组的对象有些性能影响,这个时候就需要管理员调整

highredundancy   支持的映像等级 3-WAY

  高冗余度提供三向镜像,并且在一个磁盘组至少有3个故障组。故障组中任何其中两组出现故障,对用户来说就象标准冗余一样

 3 external redundancy 不保护

  表面冗余,仅要求有一个故障组,

在配置磁盘组时,尽量把同一类型的磁盘放到一个组里,避免不同类型的磁盘在一个组里以免影响性能

二、文件

 写在ASM磁盘上的文件称之为ASM文件,他们的名字是由ASM自动生成的,你可以指定一个别名对应一个ASM文件,你可以创建一个目录

SQL> selectname,type,total_mb,free_mb from v$asm_diskgroup;

NAME                 TYPE    TOTAL_MB   FREE_MB

—————————— ——     ———-    ———-

DATA                 EXTERN    7248      5489

比如说我在DATA磁盘组上创建一个BOSON目录

alter diskgroup data adddirectory ‘ data/boson’;

SQL> alter diskgroupdata add directory ‘ data/boson’;

Diskgroup altered.

看一下我的数据文件

SQL> select name fromv$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 diskgroupdata add alias ‘ data/boson/users.dbf’

 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.templateoracleasm-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 .viminfo10201_database_linux32.zip oracleasmlib-2.0.2-1.i386.rpm

.dvipsrc .kermrc .xcoralrc Documentspublic_html

.emacs .mozilla .xemacs bin

.exrc .muttrc .xim.templatedatabase

oracle:/home/oracle # rpm -aqoracleasm*

oracle:/home/oracle # rpm -ivhoracleasm*.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 librarydriver.

This will configure the on-bootproperties of the Oracle ASM library

driver. The following questions willdetermine whether the driver is

loaded on boot and what permissions itwill have. The current values

will be shown in brackets (’[]’).Hitting without typing an

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

Default user to own the driverinterface []: oracle

Default group to own the driverinterface []: dba

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

Fix permissions of Oracle ASM disks onboot (y/n) [y]: y

Writing Oracle ASM library driverconfiguration: 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 driverconfiguration: done

Scanning system for ASM disks: done

oracle:/home/oracle #

为 ASM 配置磁盘

接下来,告诉 ASM驱动程序您要使用的磁盘。请注意,这些磁盘是不包含任何内容(甚至不包含分区)的空磁盘。可以将磁盘分区用于ASM,但建议您不要这样做。

通过以 root 用户身份运行以下命令来标记由 ASMLib使用的磁盘:

/etc/init.d/oracleasm creatediskDISK_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 initASM1.ora

##############################################################################

# Copyright (c) 1991, 2001, 2002 byOracle 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> descv$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 instancewith connected RDBMS instance

 oerr ora 15097

15097, 00000, “cannot SHUTDOWN ASMinstance with connected RDBMS instance”

// *Cause:  A SHUTDOWNcommand was issued to an ASM instance that had one or

//         more connected RDBMS instances.

// *Action: Connect to eachRDBMS instance and shut it down, and then reissue

//         the SHUTDOWN command to the ASM instance. Alternatively, use the

//         SHUTDOWN ABORT command.  Note that issuing theSHUTDOWN ABORT

//         command to an ASM instance results in abormal termination ofall

//         RDBMS instances connected to that ASM instance.

//

要关闭ASM实例,首先要关闭每一个数据库实例

% sqlplus /nolog

SQL> CONNECT / ASsysdba

Connected to an idle instance.

SQL> STARTUP

ASM instance started

Total System GlobalArea   71303168 bytes

FixedSize                 1069292 bytes

VariableSize             45068052 bytes

ASMCache                 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 storagesystem

4 petabyte maximum storage for each ASMdisk

40 exabyte maximum storage for eachstorage system

1 million files for each disk group

Maximum files sizes as shown in thefollowing 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 DISKGROUPdgroup1 NORMAL REDUNDANCY

 FAILGROUP controller1 DISK

  3‘/devices/diska1′,

  4‘/devices/diska2′,

  5‘/devices/diska3′,

  6‘/devices/diska4′

  7 FAILGROUPcontroller2 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 DISKdiska5;

ALTER DISKGROUP dgroup1 DROP DISKdiska5

    ADD FAILGROUP failgrp1 DISK ‘/devices/diska9′NAME diska9;

修改磁盘组中的磁盘大小

修改一个磁盘组中所有的磁盘:

ALTER DISKGROUP dgroup1

    RESIZE DISKS IN FAILGROUP failgrp1 SIZE 100G

手动调整字盘平衡速度

ALTER DISKGROUP dgroup2 REBALANCE POWER5 WAIT

挂载所有磁盘组

ALTER DISKGROUP ALL DISMOUNT;

ALTER DISKGROUP dgroup1 DISMOUNT;

检查所有磁盘组的一致性

ALTER DISKGROUP dgroup1 CHECK ALL;

删除磁盘组

DROP DISKGROUP dgroup1;

转自:http://jiangweibj.blog.163.com/blog/static/722835902009877333335/
0 0
原创粉丝点击