当前位置:   article > 正文

Oracle 自动存储管理 (ASM)_oracle asm

oracle asm

1. 在 Oracle ASM 中添加磁盘和删除磁盘操作

1.1 Automatic Storage Management

ASM:自动存储管理
在这里插入图片描述
Oracle 在 10g 版本之前仅将数据存储在文件系统中。因此,在执行 Oracle I/O 操作时,最后一个词和进程属于操作系统。有一些问题,因为没有集中的存储管理。例如,在有多个挂载点(挂载到服务器的物理或逻辑磁盘)的情况下,即使表空间已被填满,我们也必须以 DBA 身份执行额外的操作(禁用自动扩展等)足够的空间。

借助自动存储管理功能,Oracle 数据库的存储管理完全掌握在 Oracle 手中。为此,您需要在安装 Oracle 数据库软件之前安装 ASM。ASM 是一个单独的实例,就像 Oracle 数据库实例一样。当您连接到 ASM 实例时,只执行与 ASM 相关的磁盘操作。无法执行与数据库相关的查询或处理。

顺便说一下,我们说10g引入了自动存储管理,但这并不意味着文件系统已经结束。对于 Oracle 10g、11g、12c、18c 甚至新发布的 Oracle 19c,您可以使用 ASM 来简化存储的管理,或者您可以使用旧式的文件系统。

在这里插入图片描述

1.2 Oracle 自动存储管理优势

条带化是 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;
  • 1

如果使用文件系统,则将数据文件添加到表空间:

ALTER TABLESPACE MEHMET ADD DATAFILE '/oracle/oradata/MEHMET/deveci01.dbf' SIZE 10M AUTOEXTEND ON NEXT 1024M MAXSIZE UNLIMITED;
  • 1

2. ASM 磁盘组

在这里插入图片描述
当使用 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

要连接到 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

如上创建后,我们可以如下设置配置文件,我们现在可以连接到 ASM:

oracle:deveci01:/home/users/oracle:> . profile.12c.asm
  • 1

或者您可以按如下方式设置 ASM 实例配置文件

oracle:deveci01:/home/users/oracle:>  . oraenv
ORACLE_SID = [oracle] ? +ASM
The Oracle base has been set to /u01/app/oracle
[oracle@deveci ~]# 
  • 1
  • 2
  • 3
  • 4

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/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

我们还可以使用

sqlplus / as sysasm
  • 1

命令连接到 ASM 实例,并使用查询执行类似的操作。
您可以按如下方式向 ASM 磁盘组添加和删除磁盘。
首先设置 ASM 配置文件:

oracle:deveci01:/home/users/oracle:> . profile.12c.asm
  • 1

也可以通过如下方式何止ASM 实例配置文件:

oracle:deveci01:/home/users/oracle:>  . oraenv
ORACLE_SID = [oracle] ? +ASM
The Oracle base has been set to /u01/app/oracle
[oracle@deveci ~]#
  • 1
  • 2
  • 3
  • 4

然后我们使用命令“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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

如果一个 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

如果重新创建磁盘组,则可以使用以下命令
首先创建这个组,然后将磁盘添加到磁盘组中,如下所示。

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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

如果我们在 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

将 /dev/rhdisk12 磁盘添加到 RECO 磁盘组:

SQL> ALTER DISKGROUP RECO ADD DISK '/dev/rhdisk38' NAME RECO_0010 SIZE 102399 M REBALANCE POWER 10;


Diskgroup altered.
  • 1
  • 2
  • 3
  • 4

我们给出重新平衡操作的并行度值,并通过 POWER 参数提高 REBALANCE 的速度。
在繁忙的系统上设置为 10 会降低数据库的性能。

如果未给出此参数,则默认采用 ASM_POWER_LIMIT 参数的值。ASM_POWER_LIMIT 可以采用 0-11 的值。可以从

V$ASM_OPERATION
  • 1

视图中监控重新平衡状态 。

如果未给出此参数,则默认采用 ASM_POWER_LIMIT 参数的值。

SQL> show parameter ASM_POWER_LIMIT


NAME            TYPE    VALUE


--------        ------- --------
asm_power_limit integer 1




SQL> select * from v$asm_operation;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

除了 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
SQL> alter diskgroup DATA drop disk DATA_0004;
Diskgroup altered.
  • 1
  • 2

丢弃的磁盘中 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

如果 RAC 是数据库,则应检查所有节点,并在其他节点中看到相同的状态。

使用 asmca 删除磁盘:

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/347012
推荐阅读
相关标签
  

闽ICP备14008679号