Oracle ASM 详解

ASM:AutomaticStorageManagement,Oracle主推的一种面向Oracle的存储解决方案,ASMRDBMS非常相似,ASM也是由实例和文件组成,也可以通过sqlplus工具来维护。

ASM实例的创建和删除也可以用DBCA这个命令来操作dbca的第一个界面选择配置自动存储管理就可以了。ASM实例需要CSS进程,如果是非RAC环境,在启动ASM实例之前会提示用脚本

$ORACLE_HOME/bin/localconfigadd启动CSS

1.ASM实例由SGA和后台进程组成。

1.1SGA组成:

ASM实例的SGA包括BufferCacheSharePoolLargePool等。需要注意的是SharePool,因为ExtentMap要放在这部分的内存中,需要更具数据量来估计ExtentMap的大小做相应的调整。

ExtentMap的大小可以根据所有文件大小的和来估算,使用下面的语句来计算所有文件和:

Selectsum(bytes)/(1024*1024*1024)fromv$datafile;

Selectsum(bytes)/(1024*1024*1024)fromv$logfilea,v$logbwherea.Group#=b.Group#;

Selectsum(bytes)/(1024*1024*1024)fromv$tempfilewherestatus='ONLINE';

3sum的总和对应着数据库存放ASM中所有文件大小总和,对于使用ExternalRedundancy的磁盘组,每100G需要1MBExtentMap,根据这个比例计算ExtentMap所需要的空间,在加上额外的2MB就可以了。在实际工作中一般不需要考虑ASMSGA的配置,使用Oracle提供的缺省值就可以了。

1.2后台进程

ASM实例比RDBMS实例多2个进程:RBALABRn

RBAL:这个进程也叫Rebalancer进程,负责规划ASM磁盘组的Reblance活动。

ABRn:是RBAL进程的子进程,这个进程在数量上可以有多个,n1~9,这组进程负责真正完成Reblance活动。

使用ASM作为存储的RDBMS实例也会多出2个进程:RBALASMB

RBAL:这个进程的主要功能是打开每个磁盘的所有磁盘和数据的Rebalance

ASMB:这个进程作为ASM实例和数据库实例之间的信息通道。这个进程负责与ASM实例的通信,它先利用DiskgroupNameCSS获得管理该DiskgroupASM实例的连接串,然后建立到ASM的持久连接,两个实例之间通过这条连接定期交换信息,同时也是一种心跳机制。

RDBMS实例要想使用ASM作为存储,RDBMS实例必须在启动时从ASM实例获得ExtentMap,以后发生磁盘组的维护操作,ASM实例还要把ExtentMap的更新信息通知给RDBMS实例,这2个实例间的信息交换就是他你哦刚过ASMB进程完成的。这也就为什么:ASM实例必须要先于数据库实例启动,和数据库实例同步运行,迟于数据库实例关闭。

注意:ASM实例和数据库实例的关系可以是11,也可以是1n。如果是1n,最好为ASM安装单独的ASM_HOME

2.ASM配置

ASM可以使用裸设备或者ASMLib方式,因为裸设别的维护比较复杂,在此只讲解ASMLib方式。

对应不同的操作系统,需要不同的包,下载的时候一定要和操作系统内核一致。我的操作系统是Redhat4update7.内核版本是2.6.9-78.ELSMP

oracleasmlib-2.0.4-1.el4.i386.rpm

oracleasm-support-2.1.3-1.el4.i386.rpm

oracleasm-2.6.9-78.EL-2.0.5-1.el4.i686.rpm

http://www.oracle.com/technology/tech/linux/asmlib/index.html

该页面有下载地址,注意选择CPU类型。asmlibsupport,在同一个页面下载。

安装包:

#rpm-ivh*.rpm

安装完之后进行配置:

#/etc/init.d/oracleasmconfigure

会有相应的提示,回答oracle,dba,y,y就可以了

分别对应默认用户,默认组,随系统自启动,启动时设置权限。

/etc/init.d/oracleasmcreatediskVOL1/dev/sdc1

/etc/init.d/oracleasmscandisks

/etc/init.d/oracleasmlistdisks

关于oracleasm的更多用法参考help

[root@node1~]#/etc/init.d/oracleasm--help

Usage:/etc/init.d/oracleasm{start|stop|restart|enable|disable|configure

|createdisk|deletedisk|querydisk|listdisks|scandisks|status}

3.ASM实例配置

3.1初始化参数

[oracle@node1bin]$exportORACLE_SID=+ASM1

[oracle@node1bin]$sqlplus/assysdba

SQL*Plus:Release10.2.0.1.0-ProductiononSunFeb2119:10:512010

Copyright(c)1982,2005,Oracle.Allrightsreserved.

Connectedto:

OracleDatabase10gEnterpriseEditionRelease10.2.0.1.0-Production

WiththePartitioning,RealApplicationClusters,OLAPandDataMiningoptions

SQL>createpfilefromspfile;

Filecreated.

SQL>showparameterasm

NAMETYPEVALUE

-----------------------------------------------------------------------------

asm_diskgroupsstringFLASH_RECOVERY_AREA,DATA

asm_diskstringstring

asm_power_limitinteger1

[oracle@node2dbs]$pwd

/u01/app/oracle/product/10.2.0/db_1/dbs

[oracle@node2dbs]$ls

ab_+ASM2.dathc_rac2.datinitrac2.oraorapwrac2

hc_+ASM2.datinit+ASM2.oraorapw+ASM2

[oracle@node2dbs]$moreinit+ASM1.ora

+ASM2.asm_diskgroups='FLASH_RECOVERY_AREA'#ManualDismount

+ASM1.asm_diskgroups='FLASH_RECOVERY_AREA','DATA'#ManualMount

*.asm_diskgroups='FLASH_RECOVERY_AREA','DATA'

*.background_dump_dest='/u01/app/oracle/admin/+ASM/bdump'

*.cluster_database=true

*.core_dump_dest='/u01/app/oracle/admin/+ASM/cdump'

+ASM2.instance_number=2

+ASM1.instance_number=1

*.instance_type='asm'

*.large_pool_size=12M

*.remote_login_passwordfile='exclusive'

*.user_dump_dest='/u01/app/oracle/admin/+ASM/udump'

相关说明:

ASM实例的SGA需要的内存很小,一般默认值即可,无需修改。ASMSGA的默认值如下:

SHARED_POOL_SIZE=48M

LARGE_POOL_SIZE=12M

SHARED_POOL_RESERVED_SIZE=24M

SGA_MAX_SIZE=88M

这些默认值可以在sqlplus中通过showparameter查看。

Instance_type:对于ASM实例,这个应该设置成ASM,如果是数据库实例,则是RDBMS.

DB_UNIQUE_NAME:这个参数使用缺省值+ASM即可

SQL>showparameterasm_power_limit

NAMETYPEVALUE

-----------------------------------------------

asm_power_limitinteger1

ASM_POWER_LIMIT:当在磁盘组中添加删除磁盘时,磁盘组会自动对数据在新旧磁盘间重新分配,从而实现分散IO,这个过程就叫再平衡(Rebalance);

这个动作会在磁盘间移动数据,因此虽然是联机操作,仍然会影响部分性能,所以要在系统空闲的时候进行。该参数控制Rebalance速度,取值范围0-11.最小值0代表不做Rebalance,最大值11代表最快的速度,也意味着严重影响性能,1代表最慢的速度和最小的性能影响。除了在初始化参数中定义该参数,也可以在操作时指定。

比如:

SQL>alterdiskgroupDATArebalancepower5;

DiskgroupscanberebalancedmanuallyusingtheREBALANCEclauseoftheALTERDISKGROUPstatement.IfthePOWERclauseisomittedtheASM_POWER_LIMITparametervalueisused.Rebalancingisonlyneededwhenthespeedoftheautomaticrebalancingisnotappropriate.

ASM_DISKSTRING:定义哪些磁盘可以被ASM使用,ASM实例启动时就根据这个参数值扫描发现ASM磁盘,配置了这个参数以后,还必须确认ORACLE用户对这些磁盘有操作的权限

1.如果使用裸设备,用逗号分隔每个设备名:

Asm_diskstring='/dev/raw/raw1','/dev/raw/raw2','/dev/raw/raw3'

2.如果使用ASMLib时,就需要使用"ORCL:磁盘名"

Asm_diskstring='ORCL:VOL1'

3.使用ASMLib时,也可以使用通配符

Asm_diskstring='ORCL:VOL*'

ASM_DISKGROUPS:这个参数用于定义ASM实例启动后自动挂载的磁盘组,如果不自动挂载,也可以使用命令挂载。

注意:ASM实例启动即可以通过pfile,也可以通过spfile,如果使用spfile启动,那么如果创建新的磁盘组,这个参数会被自动修改,下次启动时会自动挂载这个新建的磁盘组,如果是使用pfile,这个参数不会自动更新,需要手工的更新。

3.2CSS进程

无论是否在RAC环境下,ASM实例都是需要CSS进程的,所以,如果是非RAC环境,在启动ASM实例之前用脚本

$ORACLE_HOME/bin/localconfigadd启动CSS,否则ASM实例启动时会报ORA-29701unabletoconnecttoClusterManager,并提示执行该脚本

3.3ASM实例的相关操作

ASM管理登录启动关闭:

[oracle@node2dbs]$exportORACLE_SID=+ASM2

[oracle@node2dbs]$sqlplus/assysdba

SQL>startup

SQL>shutdownimmediate;

检查diskgroup信息的SQL

SQL>colstateformata10

SQL>colnameformata15

SQL>colfailgroupformata20

SQL>setline200

SQL>selectSTATE,REDUNDANCY,TOTAL_MB,FREE_MB,NAME,FAILGROUP

fromv$asm_disk;

SQL>selectGROUP_NUMBER,NAME,STATE,TYPE,TOTAL_MB,FREE_MB,

UNBALANCEDfromv$asm_diskgroup;

创建新的diskgroup

SQL>creatediskgroupdgtestnormalredundancy

2failgroupDATA1disk'/dev/oracleasm/VOL5'nameDATA1

3failgroupDATA2disk'/dev/oracleasm/VOL6'nameDATA2;

删除diskgroup

SQL>dropdiskgroupDATAincludingcontents;

--对于多结点的diskgroup,只能有在一个asm实例上挂载之后才能被dorp,其他结点必须dismount

手动mount命令

ALTERDISKGROUPALLDISMOUNT;

ALTERDISKGROUPALLMOUNT;

ALTERDISKGROUPDATADISMOUNT;

ALTERDISKGROUPDATAMOUNT;

diskgroup增加disk

SQL>alterdiskgroupDATAadddisk'/dev/oracleasm/VOL5'name

VOL5,'/dev/oracleasm/VOL6'nameVOL6;

diskgroup删除disk

SQL>alterdiskgroupDATAdropdiskVOL5;

取消删除disk的命令,只能在上述命令没执行完成的时候有效

ALTERDISKGROUPDATAUNDROPDISKS;

TheUNDROPDISKSclauseoftheALTERDISKGROUPstatementallowspendingdiskdropstobeundone.Itwillnotrevertdropsthathavecompleted,ordiskdropsassociatedwiththe

droppingofadiskgroup.

数据文件的管理

AliasesallowyoutoreferenceASMfilesusinguser-friendlynames,ratherthanthefully

qualifiedASMfilenames.

--Createanaliasusingthefullyqualifiedfilename.

ALTERDISKGROUPdisk_group_1ADDALIAS'+disk_group_1/my_dir/my_file.dbf'

FOR'+disk_group_1/mydb/datafile/my_ts.342.3';

--Createanaliasusingthenumericformfilename.

ALTERDISKGROUPdisk_group_1ADDALIAS'+disk_group_1/my_dir/my_file.dbf'

FOR'+disk_group_1.342.3';

--Renameanalias.

ALTERDISKGROUPdisk_group_1RENAMEALIAS'+disk_group_1/my_dir/my_file.dbf'

TO'+disk_group_1/my_dir/my_file2.dbf';

--Deleteanalias.

ALTERDISKGROUPdisk_group_1DELETEALIAS'+disk_group_1/my_dir/my_file.dbf';

--Dropfileusinganalias.

ALTERDISKGROUPdisk_group_1DROPFILE'+disk_group_1/my_dir/my_file.dbf';

--Dropfileusinganumericformfilename.

ALTERDISKGROUPdisk_group_1DROPFILE'+disk_group_1.342.3';

--Dropfileusingafullyqualifiedfilename.

ALTERDISKGROUPdisk_group_1DROPFILE'+disk_group_1/mydb/datafile/my_ts.342.3';

--createdatafile

SQL>createtablespaceusers2datafile'+TESTDB_DATA1'size100m;

注意事项:

1.ASM实例在配置好并且创建了ASM磁盘组之后,还必须保证已经注册到Listener后才能在数据库实例中使用,否则就需要手工注册ASM实例:

SQL>altersystemregister;

2.一旦数据库实例使用ASM作为存储,那么在数据库实例运行时是无法关闭ASM实例的。否则会报ORA-15097cannotSHUTDOWNASMinstancewithconnectedRDBMSinstance.错误。

4.Oracle中删除ASM实例

删除自动存储管理实例+ASM实例+ASM的删除是在数据库被卸载之后完成的,并删除/ORACLE_HOME/dbs目录下的所有文件(除了与ASM相关的)。因此必须完成下列步骤:

4.1在命令提示符中,设置oracle_sid环境变量为+ASM实例:
#exportoracle_sid=+ASM

4.2启动SQL*Plus并以sys用户连接到自动存储管理+ASM实例:
#sqlplus/assysdba

4.3使用下列命令来确定是否有数据库实例正在使用自动存储管理实例+ASM
SQL>selectinstance_namefromv$asm_client;
该命令结果列出所有正在运行并使用+ASM实例的数据库实例。只要+ASM包含正在支持的数据库实例,就不能删除该+ASM实例。(其实可以先shutdown对应的数据库实例,然后从asmcmd进入磁盘组所在目录,删掉对应的数据库目录和文件就可以了)。

4.4如果没有与+ASM相关联的数据库实例,则删除与该实例相关联的磁盘组。
首先,识别与+ASM相关联的磁盘组:
SQL>selectnamefromv$asm_diskgroup;
其次,用下列命令删除每个要删除的磁盘组:
SQL>dropdiskgroup<disk_group_name>includingcontents;

4.5关闭+ASM实例并退出SQL*Plus
SQL>shutdown
SQL>exit

4.6在命令提示符中输入下列命令,删除+ASM服务(我没找到这个命令,所以没有运行):
oradim-delete-asmsid+ASM

5.ASMCMD工具

ASM实例的管理除了sqlplusOracle还提供了asmcmd命令,具体参考help

[oracle@node1bin]$whichasmcmd

/u01/app/oracle/product/10.2.0/db_1/bin/asmcmd

[oracle@node1bin]$cd/u01/app/oracle/product/10.2.0/db_1/bin/

[oracle@node1bin]$./asmcmd

ASMCMD>ls

DATA/

FLASH_RECOVERY_AREA/

ASMCMD>help

asmcmd[-p][command]

TheenvironmentvariablesORACLE_HOMEandORACLE_SIDdeterminethe

instancetowhichtheprogramconnects,andASMCMDestablishesa

bequeathconnectiontoit,inthesamemannerasaSQLPLUS/AS

SYSDBA.TheusermustbeamemberoftheSYSDBAgroup.

Specifyingthe-poptionallowsthecurrentdirectorytobedisplayed

inthecommandprompt,likeso:

ASMCMD[+DATAFILE/ORCL/CONTROLFILE]>

[command]specifiesoneofthefollowingcommands,alongwithits

parameters.

Type"help[command]"togethelponaspecificASMCMDcommand.

commands:

--------

cd

du

find

help

ls

lsct

lsdg

mkalias

mkdir

pwd

rm

rmalias

ASMCMD>

----- 2010年9月23日补充--------

里面有删除别名的语法, 现在已经不支持了。 之前没有测试,写文章不严禁。 在google上搜这个问题的时候,发现有人转载了我的文章,但是这个错误还是没有发现。

刚查阅了一下Oracle 的联机文档, 删除别名用的也是drop。

Example 7-5 Dropping an alias name for an Oracle ASM filename

ALTER DISKGROUP data DROP ALIAS '+data/payroll/compensation.dbf';

地址:

http://download.oracle.com/docs/cd/E11882_01/server.112/e16102/asmfiles.htm#CHDDHIGG

这里面有对ASM 有详细的说明。 可以参考。

顺便补充一点知识:

C:/Users/Administrator.DavidDai>sqlplus /nolog

SQL*Plus: Release 11.2.0.1.0 Production on 星期四 9

Copyright (c) 1982, 2010, Oracle. All rights reserved

SQL> conn sys/oracle@rac2 as sysdba;

已连接。

SQL> select file_name from dba_data_files;

FILE_NAME

------------------------------------------------------

+DATA/orcl/datafile/users.279.730181053

+DATA/orcl/datafile/sysaux.277.730181053

+DATA/orcl/datafile/undotbs1.278.730181053

+DATA/orcl/datafile/system.276.730181051

+DATA/orcl/datafile/undotbs2.284.730181347

ASM文件名字的格式是固定的:+group/dbname/file type/tag.file.incarnation

在创建db时系统自动创建的几个表空间(system,undotbs,sysaux,users)对应的都是真实的数据文件,即ASM 文件默认的命名格式。而且这个信息都写到了控制文件里。 如果我们使用别名的话,会方便很多。 对于这些创建数据库时自动创建的表空间,我们要他们使用别名,除了手工创建对应别名外,还需要重建控制文件,并且在重建时,datafile 里写别名的信息。 这样数据库也就使用别名了。

<!--EndFragment-->
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值