Oracle ASM 详解(其一)

来源:互联网 发布:知否小说全文免费阅读 编辑:程序博客网 时间:2024/05/24 15:41
Oracle ASM 详解
 

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

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

$ORACLE_HOME/bin/localconfig add 启动CSS。

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

1.1 SGA 组成:

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

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

Select sum(bytes)/(1024*1024*1024) from v$datafile;

Select sum(bytes)/(1024*1024*1024) from v$logfile a, v$log b wherea.Group#=b.Group#;

Select sum(bytes)/(1024*1024*1024) from v$tempfile wherestatus='online';

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

1.2 后台进程

ASM 实例比RDBMS 实例多2个进程: RBAL 和ABRn。
RBAL: 这个进程也叫Rebalancer进程, 负责规划ASM 磁盘组的Reblance活动。
ABRn:是RBAL进程的子进程,这个进程在数量上可以有多个, n从1~9, 这组进程负责真正完成Reblance活动。

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

RBAL: 这个进程的主要功能是打开每个磁盘的所有磁盘和数据的Rebalance。
ASMB: 这个进程作为ASM 实例和数据库实例之间的信息通道。这个进程负责与ASM 实例的通信,它先利用Diskgroup Name 从CSS 获得管理该Diskgroup 的ASM实例的连接串, 然后建立到ASM 的持久连接, 两个实例之间通过这条连接定期交换信息,同时也是一种心跳机制。

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

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

2. ASM 配置

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

对应不同的操作系统,需要不同的包,下载的时候一定要和操作系统内核一致。 我的操作系统是 Red hat 4 update 7.内核版本是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 类型。 asmlib 和 support,在同一个页面下载。

安装包:

#rpm -ivh *.rpm

安装完之后进行配置:

#/etc/init.d/oracleasm configure

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

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

/etc/init.d/oracleasm createdisk VOL1 /dev/sdc1

/etc/init.d/oracleasm scandisks

/etc/init.d/oracleasm listdisks  

关于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@node1 bin]$ export ORACLE_SID= ASM1

[oracle@node1 bin]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Sun Feb 21 19:10:512010

Copyright (c) 1982, 2005, Oracle.  Allrights reserved.

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 -Production

With the Partitioning, Real Application Clusters, OLAP and DataMining options

SQL> create pfile from spfile;

File created.

SQL> show parameterasm

NAME                                TYPE       VALUE

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

asm_diskgroups                      string     FLASH_RECOVERY_AREA, DATA

asm_diskstring                      string

asm_power_limit                     integer    1

[oracle@node2 dbs]$ pwd

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

[oracle@node2 dbs]$ ls

ab_ ASM2.dat hc_rac2.dat   initrac2.ora  orapwrac2

hc_ ASM2.dat  initASM2.ora  orapw ASM2

[oracle@node2 dbs]$ more init ASM1.ora

ASM2.asm_diskgroups='FLASH_RECOVERY_AREA'#Manual Dismount

ASM1.asm_diskgroups='FLASH_RECOVERY_AREA','DATA'#Manual Mount

*.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 中通过show parameter 查看。

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

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

SQL> show parameter asm_power_limit

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

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

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

比如:

SQL> alter diskgroup DATA rebalance power 5;

Disk groups can be rebalanced manually using the REBALANCE clauseof the ALTER DISKGROUP statement. If the POWER clause is omittedthe ASM_POWER_LIMIT parameter value is used. Rebalancing is onlyneeded when the speed of the automatic rebalancing is notappropriate.

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.2 CSS 进程

无论是否在RAC 环境下, ASM 实例都是需要CSS 进程的, 所以,如果是非RAC 环境, 在启动ASM实例之前用脚本
$ORACLE_HOME/bin/localconfig add 启动CSS, 否则ASM 实例启动时会报ORA-29701:unable to connect to Cluster Manager, 并提示执行该脚本

3.3 ASM 实例的相关操作

ASM 管理 登录,启动,关闭:

[oracle@node2 dbs]$ export ORACLE_SID= ASM2

[oracle@node2 dbs]$ sqlplus / as sysdba

SQL> startup

SQL> shutdown immediate;

检查disk group信息的SQL:

SQL> col state format a10

SQL> col name format a15

SQL> col failgroup format a20 

SQL> set line 200

SQL> selectSTATE,REDUNDANCY,TOTAL_MB,FREE_MB,NAME,FAILGROUP fromv$asm_disk;

SQL>selectGROUP_NUMBER,NAME,STATE,TYPE,TOTAL_MB,FREE_MB,UNBALANCED fromv$asm_diskgroup;

创建新的diskgroup

SQL> create diskgroup dgtest normal redundancy
  failgroupDATA1 disk '/dev/oracleasm/VOL5' name DATA1
  failgroupDATA2 disk '/dev/oracleasm/VOL6' name DATA2;

删除diskgroup

SQL> drop diskgroup DATA including contents;

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

手动mount命令

ALTER DISKGROUP ALL DISMOUNT;

ALTER DISKGROUP ALL MOUNT;

ALTER DISKGROUP DATA DISMOUNT;

ALTER DISKGROUP DATA MOUNT;

为diskgroup增加disk

SQL> alter diskgroup DATA add disk'/dev/oracleasm/VOL5' name VOL5,'/dev/oracleasm/VOL6' nameVOL6;

从diskgroup删除disk

SQL> alter diskgroup DATA drop disk VOL5;

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

ALTER DISKGROUP DATA UNDROP DISKS;

The UNDROP DISKS clause of the ALTER DISKGROUP statement allowspending disk drops to be undone. It will not revert drops that havecompleted, or disk drops associated with the dropping of a diskgroup.

数据文件的管理

Aliases allow you to reference ASM files using user-friendly names,rather than the fully qualified ASM filenames.

-- Create an alias using the fully qualifiedfilename.

ALTER DISKGROUP disk_group_1 ADD ALIAS 'disk_group_1/my_dir/my_file.dbf' FOR 'disk_group_1/mydb/datafile/my_ts.342.3';

-- Create an alias using the numeric formfilename.

ALTER DISKGROUP disk_group_1 ADD ALIAS 'disk_group_1/my_dir/my_file.dbf' FOR ' disk_group_1.342.3';

-- Rename an alias.

ALTER DISKGROUP disk_group_1 RENAME ALIAS 'disk_group_1/my_dir/my_file.dbf' TO 'disk_group_1/my_dir/my_file2.dbf';

-- Delete an alias.

ALTER DISKGROUP disk_group_1 DELETE ALIAS 'disk_group_1/my_dir/my_file.dbf';

-- Drop file using an alias.

ALTER DISKGROUP disk_group_1 DROP FILE 'disk_group_1/my_dir/my_file.dbf';

-- Drop file using a numeric formfilename.

ALTER DISKGROUP disk_group_1 DROP FILE ' disk_group_1.342.3';

-- Drop file using a fully qualifiedfilename.

ALTER DISKGROUP disk_group_1 DROP FILE 'disk_group_1/mydb/datafile/my_ts.342.3';

-- create datafile

SQL> create tablespace users2 datafile 'TESTDB_DATA1' size 100m;

注意事项:

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

SQL>alter system register;

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

4. Oracle 中删除 ASM 实例

删除自动存储管理实例

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

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

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

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

4.4 如果没有与 ASM相关联的数据库实例,则删除与该实例相关联的磁盘组。
首先,识别与 ASM相关联的磁盘组:
SQL>select name from v$asm_diskgroup;
其次,用下列命令删除每个要删除的磁盘组:
SQL>drop diskgroup including contents;

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

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

5.  ASMCMD 工具

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

[oracle@node1 bin]$ which asmcmd

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

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

[oracle@node1 bin]$ ./asmcmd

ASMCMD> ls

DATA/

FLASH_RECOVERY_AREA/

ASMCMD> help

asmcmd [-p] [command]

The environment variables ORACLE_HOME and ORACLE_SID determine theinstance to which the program connects, and ASMCMD establishes abequeath connection to it, in the same manner as a SQLPLUS / ASSYSDBA.  The user must be a member of theSYSDBA group.

Specifying the -p option allows the current directory to bedisplayed in the command prompt, like so:

ASMCMD [ DATAFILE/ORCL/CONTROLFILE] >

[command] specifies one of the following commands, along with itsparameters.

Type "help [command]" to get help on a specific ASMCMDcommand.

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.  Allrights 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里写别名的信息。 这样数据库也就使用别名了。


0 0
原创粉丝点击