赞
踩
ASM:自动存储管理
Oracle 在 10g 版本之前仅将数据存储在文件系统中。因此,在执行 Oracle I/O 操作时,最后一个词和进程属于操作系统。有一些问题,因为没有集中的存储管理。例如,在有多个挂载点(挂载到服务器的物理或逻辑磁盘)的情况下,即使表空间已被填满,我们也必须以 DBA 身份执行额外的操作(禁用自动扩展等)足够的空间。
借助自动存储管理功能,Oracle 数据库的存储管理完全掌握在 Oracle 手中。为此,您需要在安装 Oracle 数据库软件之前安装 ASM。ASM 是一个单独的实例,就像 Oracle 数据库实例一样。当您连接到 ASM 实例时,只执行与 ASM 相关的磁盘操作。无法执行与数据库相关的查询或处理。
顺便说一下,我们说10g引入了自动存储管理,但这并不意味着文件系统已经结束。对于 Oracle 10g、11g、12c、18c 甚至新发布的 Oracle 19c,您可以使用 ASM 来简化存储的管理,或者您可以使用旧式的文件系统。
条带化是 ASM 最重要的特性。有了这个特性,如果一个磁盘组中有多个磁盘,ASM 会通过在数据区级别将数据分发到这些不同的磁盘来保存数据。例如,如果一个磁盘组有 5 个磁盘,则数据在 extent 级别进行拆分并分发到 5 个磁盘。下图精美地展示了这个分发过程。
在旧类型的文件系统模型中,数据存储在单个磁盘上,因为它存储在数据文件的基础上。因此,当我们使用 ASM 时,可以获得额外的性能,因为我们使用 ASM 将数据分布到不同的磁盘。
镜像是 ASM 的另一个重要特性。借助此功能,可以执行基于磁盘的备份。写入时,不同的副本同时写入两个或多个磁盘,因此当磁盘组中的磁盘发生故障时,ASM 将从其他磁盘恢复。
镜像可以通过 Oracle ASM 或存储级别完成。如果在存储级别进行镜像,则无需使用 Oracle ASM 进行镜像。
对于磁盘组中的磁盘故障,ASM 中存在三种冗余模型。这些如下。
外部冗余: 该模型没有镜像,所以没有Oracle级别的磁盘备份。通常建议在存储级别执行镜像的情况下使用此模型。在此模型中,100% 的磁盘可用。因此,如果您的磁盘大小为 1 TB,则可用磁盘空间为 1 TB。
正常冗余: 在此模型中,Oracle 存储数据的两个副本。如果存储级别没有 Raid 配置,则通常首选此模型。如果您的磁盘大小为 1 TB,可用磁盘空间将减少到 500 GB。
高冗余: 在该模型中,Oracle 将数据存储在三个副本中。这样,即使其中一两个磁盘损坏,也不会丢失数据。如果您的磁盘大小为 3 TB,可用磁盘空间将减少到 1 TB。
重新平衡: Oracle ASM 的其他特性之一是它在磁盘组中执行重新平衡数据。有了这个特性,数据几乎平均分布在所有磁盘上,所以数据均匀分布在磁盘上。平衡磁盘还可以提高性能。当一个新的磁盘被添加到 ASM 磁盘组或从 ASM 磁盘组中删除时,重新平衡过程开始并且数据被均匀分布。
使用 ASM 时,Oracle 会自动命名数据文件和重做日志。例如,将任何数据文件添加到表空间时,如果使用文件系统,则指定所有路径和数据文件名称。在 ASM 中,只指定了磁盘组名称。
如果使用 ASM,则将数据文件添加到表空间:
ALTER TABLESPACE DEVECI ADD DATAFILE '+DATA' SIZE 10M AUTOEXTEND ON NEXT 1024M MAXSIZE UNLIMITED;
如果使用文件系统,则将数据文件添加到表空间:
ALTER TABLESPACE MEHMET ADD DATAFILE '/oracle/oradata/MEHMET/deveci01.dbf' SIZE 10M AUTOEXTEND ON NEXT 1024M MAXSIZE UNLIMITED;
当使用 Oracle ASM 时,磁盘组的概念就进入了我们的生活。顾名思义,我们将数据存储在磁盘组中,其中一个或多个磁盘组合在一起,而不是单个磁盘。
ASM 实例与 Oracle 数据库实例不同。当我们如下查询smon进程时,“+ASM”实例被列为一个实例。
oracle:deveci01:/home/users/oracle:>ps -ef |grep smon
root 11731186 1 18 10:05:48 - 0:00 /u01/app/oracle/product/12.1.0/grid/bin/osysmond.bin
oracle 12058826 1 0 10:06:56 - 0:00 ora_smon_DEVECI
oracle 12976246 1 0 10:06:24 - 0:00 asm_smon_+ASM
oracle 38338572 28049424 1 10:07:02 pts/0 0:00 grep smon
要连接到 ASM 实例,请按如下方式创建 ASM 实例配置文件。
oracle:deveci01:/home/users/oracle:> vi profile.12g.asm
export ORACLE_HOME=/u01/app/oracle/product/12.1.0/grid
export ORACLE_BASE=/u01/app/oracle
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH
export ORACLE_SID=+ASM
bash
如上创建后,我们可以如下设置配置文件,我们现在可以连接到 ASM:
oracle:deveci01:/home/users/oracle:> . profile.12c.asm
或者您可以按如下方式设置 ASM 实例配置文件
oracle:deveci01:/home/users/oracle:> . oraenv
ORACLE_SID = [oracle] ? +ASM
The Oracle base has been set to /u01/app/oracle
[oracle@deveci ~]#
asmcmd 是我们执行和监视许多磁盘操作的工具。
我们可以使用 LSDG 命令连接并列出磁盘组和大小、可用空间等,如下所示。
oracle:deveci:/home/users/oracle:> asmcmd
ASMCMD> lsdg
State Type Rebal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name
MOUNTED EXTERN N 512 4096 1048576 512000 510551 0 510551 0 N DATA/
MOUNTED EXTERN N 512 4096 4194304 204800 203272 0 203272 0 Y RECO/
ASMCMD>
ASMCMD> cd DATA
ASMCMD> ls -l
Type Redund Striped Time Sys Name
Y DEVECI/
我们还可以使用
sqlplus / as sysasm
命令连接到 ASM 实例,并使用查询执行类似的操作。
您可以按如下方式向 ASM 磁盘组添加和删除磁盘。
首先设置 ASM 配置文件:
oracle:deveci01:/home/users/oracle:> . profile.12c.asm
也可以通过如下方式何止ASM 实例配置文件:
oracle:deveci01:/home/users/oracle:> . oraenv
ORACLE_SID = [oracle] ? +ASM
The Oracle base has been set to /u01/app/oracle
[oracle@deveci ~]#
然后我们使用命令“sqlplus / as sysasm”连接到 ASM 实例。
运行以下查询以查看此处的磁盘组:
SQL> SELECT GROUP_NUMBER, NAME,SECTOR_SIZE,BLOCK_SIZE,ALLOCATION_UNIT_SIZE,STATE,TYPE TOTAL_MB,FREE_MB FROM V$ASM_DISKGROUP;
GROUP_NUMBER NAME SECTOR_SIZE BLOCK_SIZE ALLOCATION_UNIT_SIZE STATE TOTAL_ FREE_MB
------------ -------- ----------- ---------- -------------------- ----------- ------ ----------
1 DATA 512 4096 1048576 CONNECTED EXTERN 355915
2 RECO 512 4096 1048576 CONNECTED EXTERN 721067
如果一个 ASM Disk 已经映射到操作系统(这是一个存储端操作。),它们将出现在下面的查询中。HEADER_STATUS = CANDIDATE 是无法添加的磁盘。
HEADER_STATUS 值为 CANDIDATE 的磁盘是未映射到操作系统的磁盘。
SQL> SELECT MOUNT_STATUS, HEADER_STATUS, MODE_STATUS, STATE, TOTAL_MB, FREE_MB, NAME, PATH, LABEL FROM V$ASM_DISK; MOUNT_S HEADER_STATU MODE_ST STATE TOTAL_MB FREE_MB NAME PATH LABEL ------- ------------ ------- -------- ---------- ---------- ----------- -------- ---------- CLOSED CANDIDATE ONLINE NORMAL 0 0 /dev/rhdisk38 CLOSED CANDIDATE ONLINE NORMAL 0 0 /dev/rhdisk39 CLOSED CANDIDATE ONLINE NORMAL 0 0 /dev/rhdisk40 CACHED MEMBER ONLINE NORMAL 102399 17756 DATA_0000 /dev/rhdisk10 CACHED MEMBER ONLINE NORMAL 102399 17795 DATA_0001 /dev/rhdisk11 CACHED MEMBER ONLINE NORMAL 102399 17787 DATA_0002 /dev/rhdisk12
如果重新创建磁盘组,则可以使用以下命令
首先创建这个组,然后将磁盘添加到磁盘组中,如下所示。
CREATE DISKGROUP RECO EXTERNAL REDUNDANCY DISK '/dev/mapper/asmtsk1' NAME RECO_0001 SIZE 102399 M;
ALTER DISKGROUP RECO REBALANCE POWER 10;
ALTER DISKGROUP RECO ADD DISK '/dev/mapper/asmtsk2' NAME RECO_0002 SIZE 102399 M REBALANCE POWER 10;
ALTER DISKGROUP RECO ADD DISK '/dev/mapper/asmtsk3' NAME RECO_0003 SIZE 102399 M REBALANCE POWER 10;
ALTER DISKGROUP RECO ADD DISK '/dev/mapper/asmtsk4' NAME RECO_0004 SIZE 102399 M REBALANCE POWER 10;
ALTER DISKGROUP RECO ADD DISK '/dev/mapper/asmtsk5' NAME RECO_0005 SIZE 102399 M REBALANCE POWER 10;
如果我们在 2 节点 RAC 系统上创建了一个新磁盘组,我们不应忘记将磁盘组挂载到第二个节点上。
SQL> select INST_ID,GROUP_NUMBER,NAME,STATE from GV$ASM_DISKGROUP; INST_ID GROUP_NUMBER NAME STATE ---------- ------------ ------- ------- 1 1 DATA MOUNTED 1 2 RECO MOUNTED 2 1 DATA MOUNTED 2 0 RECO DISMOUNTED SQL> alter diskgroup RECO mount; Diskgroup altered. SQL> select INST_ID,GROUP_NUMBER,NAME,STATE from GV$ASM_DISKGROUP; INST_ID GROUP_NUMBER NAME STATE ---------- ------------ ------ ----------- 1 1 DATA MOUNTED 1 2 RECO MOUNTED 2 1 DATA MOUNTED 2 2 RECO MOUNTED
将 /dev/rhdisk12 磁盘添加到 RECO 磁盘组:
SQL> ALTER DISKGROUP RECO ADD DISK '/dev/rhdisk38' NAME RECO_0010 SIZE 102399 M REBALANCE POWER 10;
Diskgroup altered.
我们给出重新平衡操作的并行度值,并通过 POWER 参数提高 REBALANCE 的速度。
在繁忙的系统上设置为 10 会降低数据库的性能。
如果未给出此参数,则默认采用 ASM_POWER_LIMIT 参数的值。ASM_POWER_LIMIT 可以采用 0-11 的值。可以从
V$ASM_OPERATION
视图中监控重新平衡状态 。
如果未给出此参数,则默认采用 ASM_POWER_LIMIT 参数的值。
SQL> show parameter ASM_POWER_LIMIT
NAME TYPE VALUE
-------- ------- --------
asm_power_limit integer 1
SQL> select * from v$asm_operation;
除了 ASMCMD 和 sqlplus,您还可以查看磁盘组并使用 asmca 实用程序添加和删除磁盘。
添加一个带有 asmca 的磁盘:
可以按如下方式删除 ASM 磁盘组中的磁盘:
SQL> SELECT name, header_status, path FROM V$ASM_DISK; NAME HEADER_STATU PATH ----------- -------------- ---------- FORMER /dev/rhdisk18 FORMER /dev/rhdisk15 FORMER /dev/rhdisk16 FORMER /dev/rhdisk17 DATA_0000 MEMBER /dev/rhdisk10 DATA_0001 MEMBER /dev/rhdisk11 DATA_0002 MEMBER /dev/rhdisk12 DATA_0003 MEMBER /dev/rhdisk13 DATA_0004 MEMBER /dev/rhdisk14
SQL> alter diskgroup DATA drop disk DATA_0004;
Diskgroup altered.
丢弃的磁盘中 header_status 的值将是前者
SQL> SELECT name, header_status, path FROM V$ASM_DISK; NAME HEADER_STATU PATH ----------- -------------- ---------- FORMER /dev/rhdisk18 FORMER /dev/rhdisk14 FORMER /dev/rhdisk15 FORMER /dev/rhdisk16 FORMER /dev/rhdisk17 DATA_0000 MEMBER /dev/rhdisk10 DATA_0001 MEMBER /dev/rhdisk11 DATA_0002 MEMBER /dev/rhdisk12 DATA_0003 MEMBER /dev/rhdisk13
如果 RAC 是数据库,则应检查所有节点,并在其他节点中看到相同的状态。
使用 asmca 删除磁盘:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。