ASMLIB 是 Oracle 数据库的 ASM(自动存储管理)特性的可选支持库。
ASM 简化了存储管理并大大减少了内核资源的使用(例如打开的文件描述符的数量)。
它消除了 DBA(数据库管理员)直接管理可能数以千计的 Oracle 数据库文件的需要,只需要管理分配给 Oracle 数据库的磁盘组。
ASMLIB 允许使用 ASM 的 Oracle 数据库更有效地访问它正在使用的磁盘组。
在以前的版本中,Oracle ASM 作为 Oracle 数据库安装的一部分进行安装。
在 Oracle Database 11g 第 2 版 (11.2) 中,Oracle ASM 是 Oracle Grid Infrastructure 安装的一部分,用于集群或者独立服务器。
在本文中,我们将在 Linux 服务器上安装 ASMLIB,并将磁盘标记为供 Oracle Grid Infrastructure 使用,或者更具体地说是 Oracle Grid Infrastructure 的 Oracle ASM 组件。
配置 Oracle ASM 库驱动程序
按如下方式配置 Oracle ASM 库驱动程序:
[root@gridserver ~]# oracleasm configure -i Configuring the Oracle ASM library driver. This will configure the on-boot properties of the Oracle ASM library driver. The following questions will determine whether the driver is loaded on boot and what permissions it will have. The current values will be shown in brackets ('[]'). Hitting <ENTER> without typing an answer will keep that current value. Ctrl-C will abort. Default user to own the driver interface []: grid Default group to own the driver interface []: asmadmin Start Oracle ASM library driver on boot (y/n) [n]: y Scan for Oracle ASM disks on boot (y/n) [y]: y Writing Oracle ASM library driver configuration: done [root@gridserver ~]#
请注意,如果我们在上述配置中省略用户和组,那么它将被设置为默认用户 root 和默认组 root,并且在网格基础设施安装期间检测候选磁盘时会产生问题。
[root@localhost ~]# oracleasm init Creating /dev/oracleasm mount point: /dev/oracleasm Loading module "oracleasm": oracleasm Configuring "oracleasm" to use device physical block size Mounting ASMlib driver filesystem: /dev/oracleasm [root@localhost ~]#
创建分区
使用 fdisk 检查可用空间。
[root@gridserver ~]# fdisk -l Disk /dev/sda: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00035159 Device Boot Start End Blocks Id System /dev/sda1 * 1 64 512000 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 64 2611 20458496 8e Linux LVM Disk /dev/sdb: 26.8 GB, 26843545600 bytes 255 heads, 63 sectors/track, 3263 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Disk /dev/mapper/vg_gridserver-lv_root: 18.9 GB, 18865979392 bytes 255 heads, 63 sectors/track, 2293 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Disk /dev/mapper/vg_gridserver-lv_swap: 2080 MB, 2080374784 bytes 255 heads, 63 sectors/track, 252 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 [root@gridserver ~]#
从上面的输出中,我们可以看到 /dev/sdb 有 26 GB 的存储空间。
现在,我们将创建 6 个相同大小(即每个 4GB)的分区,如下所示:
[root@gridserver ~]# fdisk /dev/sdb Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel with disk identifier 0xf5d5e858. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): n Command action e extended p primary partition (1-4) e Partition number (1-4): 1 First cylinder (1-3263, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-3263, default 3263): Using default value 3263 Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l First cylinder (1-3263, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-3263, default 3263): +4G Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l First cylinder (524-3263, default 524): Using default value 524 Last cylinder, +cylinders or +size{K,M,G} (524-3263, default 3263): +4G Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l First cylinder (1047-3263, default 1047): Using default value 1047 Last cylinder, +cylinders or +size{K,M,G} (1047-3263, default 3263): +4G Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l First cylinder (1570-3263, default 1570): Using default value 1570 Last cylinder, +cylinders or +size{K,M,G} (1570-3263, default 3263): +4G Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l First cylinder (2093-3263, default 2093): Using default value 2093 Last cylinder, +cylinders or +size{K,M,G} (2093-3263, default 3263): +4G Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l First cylinder (2616-3263, default 2616): Using default value 2616 Last cylinder, +cylinders or +size{K,M,G} (2616-3263, default 3263): +4G Command (m for help): p Disk /dev/sdb: 26.8 GB, 26843545600 bytes 255 heads, 63 sectors/track, 3263 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xf5d5e858 Device Boot Start End Blocks Id System /dev/sdb1 1 3263 26210016 5 Extended /dev/sdb5 1 523 4200934+ 83 Linux /dev/sdb6 524 1046 4200966 83 Linux /dev/sdb7 1047 1569 4200966 83 Linux /dev/sdb8 1570 2092 4200966 83 Linux /dev/sdb9 2093 2615 4200966 83 Linux /dev/sdb10 2616 3138 4200966 83 Linux Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. [root@gridserver ~]#
现在,我们有 6 个分区(每个 4GB),可用于 Oracle ASM 存储磁盘。
安装 ASMLIB
Oracle ASMLIB 内核驱动程序现在包含在 UEK(牢不可破的企业内核)中。
使用该内核时无需安装驱动包。
oracleasm-support 和 oracleasmlib 软件包仍然需要从 ULN(牢不可破的 Linux 网络)安装。
虽然驱动程序和支持工具位于 Oracle Linux 安装介质上,但 oracleasmlib RPM 不在(此包允许 Oracle 访问内核驱动程序)。
此包仅在 ULN 上可用。
ULN 的订阅者可以使用 yum 或者 up2date 在他们的服务器上下载和安装软件包。
非订阅者可以在他们的 Oracle Linux 机器上免费使用为 RHEL(Red Hat Enterprise Linux)构建的类似软件包。
好消息是 oracleasm 内核驱动程序也可以从 RHEL 和 CentOS yum 存储库中获得。
由于我们的操作系统是 CentOS 6.3,因此,我可以使用 yum 轻松安装它。
检查 oracleasm 模块是否可用于 Linux 发行版,如下所示:
[root@gridserver sysconfig]# yum search oracleasm Loaded plugins: fastestmirror, presto Loading mirror speeds from cached hostfile * base: centos.mirror.net.in * extras: centos.mirror.net.in * updates: centos.mirror.net.in base | 3.7 kB 00:00 extras | 3.4 kB 00:00 updates | 3.4 kB 00:00 ==================== N/S Matched: oracleasm========================== kmod-oracleasm.x86_64 : oracleasm kernel module(s) Name and summary matches only, use "search all" for everything. [root@gridserver sysconfig]#
现在安装 kmod-oracleasm。
[root@gridserver sysconfig]# yum install oracleasm
完成后更新内核,从 http://www.oracle.com 下载并安装最新版本的 oracleasm-support 和 oracleasmlib。
[root@gridserver sysconfig]# cd [root@gridserver ~]# wget http://oss.oracle.com/projects/oracleasm-support/dist/files/RPMS/rhel6/amd64/2.1.8/oracleasm-support-2.1.8-1.el6.x86_64.rpm [root@gridserver ~]# wget http://download.oracle.com/otn_software/asmlib/oracleasmlib-2.0.4-1.el6.x86_64.rpm [root@gridserver ~]# rpm -ivh oracleasm-support-2.1.8-1.el6.x86_64.rpm [root@gridserver ~]# rpm -ivh oracleasmlib-2.0.4-1.el6.x86_64.rpm
创建 ASM 磁盘
ASMLIB 不支持 SELINUX,因此我们必须在继续之前禁用 SELINUX。
[root@gridserver ~]# setenforce 0 [root@gridserver ~]# sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config && cat /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted [root@gridserver ~]#
创建ASM磁盘,我会为oradata创建3个磁盘,为recovery_area创建3个磁盘。
[root@gridserver ~]# oracleasm createdisk ASM_DATA1 /dev/sdb5 Writing disk header: done Instantiating disk: done [root@gridserver ~]# oracleasm createdisk ASM_DATA2 /dev/sdb6 Writing disk header: done Instantiating disk: done [root@gridserver ~]# oracleasm createdisk ASM_DATA3 /dev/sdb7 Writing disk header: done Instantiating disk: done [root@gridserver ~]# oracleasm createdisk ASM_FRA1 /dev/sdb8 Writing disk header: done Instantiating disk: done [root@gridserver ~]# oracleasm createdisk ASM_FRA2 /dev/sdb9 Writing disk header: done Instantiating disk: done [root@gridserver ~]# oracleasm createdisk ASM_FRA3 /dev/sdb10 Writing disk header: done Instantiating disk: done [root@gridserver ~]#
如果我们正在为集群安装 Oracle Grid Infrastructure,并且磁盘位于已由 RAC 中的另一个节点标记的共享存储中,则只能在设置 iScsi Initiator 后通过以下命令扫描这些磁盘。
oracleasm scandisks
现在,已安装 ASMLIB 并已创建 ASM 磁盘。
我们可以在服务器上安装 Oracle Grid Infrastructure 12c。
创建用户和角色
根据 Oracle Grid Infrastructure 12c 的要求创建以下操作系统用户和组。
[root@gridserver ~]# groupadd -g 601 oinstall [root@gridserver ~]# groupadd -g 602 dba [root@gridserver ~]# groupadd -g 603 oper [root@gridserver ~]# groupadd -g 604 asmadmin [root@gridserver ~]# groupadd -g 605 asmoper [root@gridserver ~]# groupadd -g 606 asmdba [root@gridserver ~]# [root@gridserver ~]# useradd -u 601 -g oinstall -G asmadmin,asmdba,asmoper grid [root@gridserver ~]# [root@gridserver ~]# passwd grid Changing password for user grid. New password: BAD PASSWORD: it is WAY too short BAD PASSWORD: is too simple Retype new password: passwd: all authentication tokens updated successfully. [root@gridserver ~]#