科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道创建Oracle10g ASM数据库(二)

创建Oracle10g ASM数据库(二)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

SM disks [ OK ] 详细的安装文档可以通过以下连接查看: http://otn.oracle.com/tech/linux/asmlib/install.html 现在我们已经完成了创建ASM实例的物理基础。

作者:中国IT实验室 来源:中国IT实验室 2007年9月15日

关键字: ASM 数据库 ORACLE

  • 评论
  • 分享微博
  • 分享邮件

由于Virtual Disk的特点,在新创建这个磁盘文件的时候,并不会用到最大的size,所以即使整个分区的空闲容量没有4G(我们要创建4个最大size1G的虚拟磁盘),也不会有问题,虚拟磁盘文件的大小是随着需要而持续增加的,最大增加到指定的max size。当然这种特性也就导致了使用Virtual Disk比使用Plain Disk(创建时即占用max size大小的磁盘空间)的I/O效率要低,所以如果有足够的磁盘空间,那么建议使用Plain Disk,创建Plain Disk的方法是在上面的第二步时,在“Allocate all disk space now”的复选框前面打勾,这样将会创建一个以plndat为扩展名的虚拟磁盘文件。Plain Disk的好处还在于可以模拟RAC环境中的共享磁盘,这是Virtual Disk无法作到的。模拟RAC不在本文叙述的范围内。

 

<!--[if !supportLists]-->3.   <!--[endif]-->更新内核

>uname -a

RHEL3默认安装的linux内核版本是2.4.21-4,为了能够正确的地安装oracleasm lib,我们需要将内核升级到2.4.21-15.EL,否则将无法正常启用oracleasm

原因是我们安装的oracleasmlib是已经编译好的rpm包,而我们当前操作系统的内核必须和编译时候的系统内核版本一样,否则即使看上去安装正常,但是在启动oracleasm时候会在/var/log/messages文件中发现类似如下的报错信息:

kernel-module version mismatch

^I/lib/modules/2.4.21-EL-ABI/oracleasm/oracleasm.o was compiled for kernel version 2.4.21-15.EL ^Iwhile this kernel is version 2.4.21-4.EL.

 

从这个报错信息中我们也可以知道应该安装的内核版本,为了更确切地知道下载的oracleasm包需要哪个版本的内核,我们也可以先下载oracleasm,安装,启动然后查看这个报错信息,之后再升级内核到相应的版本。

 

注意:本文中提到的2.4.21-15.EL内核是本文编写时oracleasm编译使用的内核,随着oracle不断地推出asmlib的新版本,需要的内核版本可能也在不断变化。

 

下载新内核:

kernel-2.4.21-15.EL.i686: http://public.planetmirror.com/pub/pmstuff/patches/kernel-2.4.21-15.EL.i686.rpm

 

安装新内核:

# rpm ?ivh ?-nodeps kernel-2.4.21-15.EL.i686.rpm

 

安装完毕以后,修改/boot/grub/grub.confrpm安装完毕以后,应该已经自动在grub.conf文件中添加了新版kernel启动的段落,我们需要将default=1修改为default=0,这样保证每次启动都用新的内核启动,当测试没有问题之后,我们也可以直接删除grub.conf文件中的title Red Hat Enterprise Linux AS (2.4.21-4.EL)部分,防止因错误操作而使用了原有的系统内核启动系统。

 

# cat /boot/grub/grub.conf

# grub.conf generated by anaconda

#

# Note that you do not have to rerun grub after making changes to this file

# NOTICE:  You do not have a /boot partition.  This means that

#          all kernel and initrd paths are relative to /, eg.

#          root (hd0,0)

#          kernel /boot/vmlinuz-version ro root=/dev/sda1

#          initrd /boot/initrd-version.img

#boot=/dev/sda

default=0

timeout=10

splashimage=(hd0,0)/boot/grub/splash.xpm.gz

title Red Hat Enterprise Linux AS (2.4.21-15.EL)

        root (hd0,0)

        kernel /boot/vmlinuz-2.4.21-15.EL ro root=LABEL=/

        initrd /boot/initrd-2.4.21-15.EL.img

title Red Hat Enterprise Linux AS (2.4.21-4.EL)

        root (hd0,0)

        kernel /boot/vmlinuz-2.4.21-4.EL ro root=LABEL=/

        initrd /boot/initrd-2.4.21-4.EL.img

 

修改完毕以后,重新启动系统,保证使用了新内核

# uname ?a

Linux LinuxNode1 2.4.21-15.EL #1 Thu Apr 22 00:27:41 EDT 2004 i686 i686 i386 GNU/Linux

安装Oracle ASMLib

下载ASMLib需要的三个文件

asmlib:http://otn.oracle.com/software/tech/linux/asmlib/files/RPMS/rhel3/x86/oracleasmlib-1.0.0-1.i386.rpm

asm-support:http://otn.oracle.com/software/tech/linux/asmlib/files/RPMS/rhel3/x86/oracleasm-support-1.0.2-1.i386.rpm

asm-kernel:http://otn.oracle.com/software/tech/linux/asmlib/files/RPMS/rhel3/x86/oracleasm-2.4.21-EL-1.0.0-1.i686.rpm

 

如果是多处理器的版本,那么可以下载下面这个文件替换上面的第三个文件:

asm-smp-kernel:http://otn.oracle.com/software/tech/linux/asmlib/files/RPMS/rhel3/x86/oracleasm-2.4.21-EL-smp-1.0.0-1.i686.rpm

 

安装:

$su ?

# rpm -Uvh oracleasm-support-1.0.2-1.i386.rpm \

    oracleasm-lib-1.0.0-1.i386.rpm \

oracleasm-2.4.21-EL-1.0.0-1.i686.rpm

          

配置ASMLib

# /etc/init.d/oracleasm configure

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  without typing an

answer will keep that current value.  Ctrl-C will abort.

 

Default user to own the driver interface []: oracle

Default group to own the driver interface []: dba

Start Oracle ASM library driver on boot (y/n) [n]: y

Fix permissions of Oracle ASM disks on boot (y/n) [y]: y

Writing Oracle ASM library driver configuration               [  OK  ]

Creating /dev/oracleasm mount point                       [  OK  ]

Loading module "oracleasm"                                [  OK  ]

Mounting ASMlib driver filesystem                           [  OK  ]

Scanning system for ASM disks                             [  OK  ]

 

以上操作将加载oracleasm.o驱动,并且mountASM文件系统,同时我们可以通过以下命令来手工的卸载和加载ASMLib

# /etc/init.d/oracleasm disable

Writing Oracle ASM library driver configuration              [  OK  ]

Unmounting ASMlib driver filesystem                       [  OK  ]

Unloading module "oracleasm"                             [  OK  ]

 

# /etc/init.d/oracleasm enable

Writing Oracle ASM library driver configuration              [  OK  ]

Loading module "oracleasm"                                [  OK  ]

Mounting ASMlib driver filesystem                           [  OK  ]

Scanning system for ASM disks                             [  OK  ]

 

如果当前操作系统的内核和编译ASMLib的内核不同,那么上面的操作将会出错,请检查/var/log/messages文件,确认需要更新的系统内核版本。

 

添加init文件使系统启动时自动加载ASMLib

$ su ?

# cd /etc/rc3.d

# ln -s ../init.d/oracleasm S99oracleasm

# ln -s ../init.d/oracleasm K01oracleasm

 

注意:如果系统启动是自动进入图形界面,也就是系统的init level5,那么上面生成链接的命令应该在/etc/rc5.d目录中操作。

 

重新启动系统,确认ASMLib已经可以自动加载

#lsmod | grep oracleasm

oracleasm              14224   1

 

#dmesg | grep oracleasm

ASM: oracleasmfs mounted with options:

 

创建ASM磁盘

# /etc/init.d/oracleasm createdisk VOL1 /dev/sdb

Marking disk "/dev/sdb" as an ASM disk [  OK  ]

# /etc/init.d/oracleasm createdisk VOL2 /dev/sdc

Marking disk "/dev/sdc" as an ASM disk [  OK  ]

# /etc/init.d/oracleasm createdisk VOL3 /dev/sdd

Marking disk "/dev/sdd" as an ASM disk [  OK  ]

#/etc/init.d/oracleasm createdisk VOL4 /dev/sde

Marking disk "/dev/sde" as an ASM disk [  OK  ]

 

# /etc/init.d/oracleasm listdisks

VOL1

VOL2

VOL3

VOL4

 

如果要删除ASM磁盘通过以下命令

# /etc/init.d/oracleasm deletedisk VOL4

Removing ASM disk "VOL4" [  OK  ]

 

注意如果是在RAC环境中的某一个节点中添加了ASM磁盘那么需要在其它的节点上运行scandisk来获取这种变化。

# /etc/init.d/oracleasm scandisks

Scanning system for ASM disks [  OK  ]

 

详细的安装文档可以通过以下连接查看

http://otn.oracle.com/tech/linux/asmlib/install.html

 

现在我们已经完成了创建ASM实例的物理基础,下面开始安装数据库。

 

安装Oracle10g

RHEL3上安装Oracle10g已经是非常简单的操作了,只要系统内核参数设置正确,几乎不会碰到任何问题。

从以下连接可以得到在RHEL3上安装Oracle10g的详细步骤,本文不再赘述。

http://www.puschitz.com/InstallingOracle10g.shtml

 

在安装Oracle10g的时候,我们选择不创建数据库,只安装软件的方式,在软件安装结束以后再通过dbca来创建ASM实例和数据库。

 

创建ASM实例

<!--[if !supportLists]-->1.  <!--[endif]-->创建初始化文件

$ su ? oracle

$ cd $ORACLE_HOME/dbs

$ vi init+ASM.ora

创建asm实例的初始化脚本,脚本内容如下所示:

# ******Below is init script for asm instance******

*.asm_diskstring='ORCL:VOL*'

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

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

*.instance_type='asm'

*.large_pool_size=12M

*.remote_login_passwordfile='SHARED'

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

# ******Above is init script for asm instance******

 

说明:

<!--[if !supportLists]-->1.   <!--[endif]-->dump目录指向$ORACLE_BASE/,本文中ASM实例的SID+ASM。最好不要修改这个实例名,否则在下一步用dbca创建数据库的时候,dbca将找不到可用的磁盘组,我想这应该是dbca的一个bug,手工创建ASM类型的数据库就应该没有这个限制了。

<!--[if !supportLists]-->2.   <!--[endif]-->asm_diskstring用于实例启动的时候检查可用的ASM磁盘,由于我们前面创建ASM磁盘的名称是VOL1VOL4,所以我们此处使用*通配符,前面的’ORCL:’不可以省略,否则ASM实例将无法检查到磁盘。

 

<!--[if !supportLists]-->2.  <!--[endif]-->创建密码文件

$ su ? oracle

$ cd $ORACLE_HOME/dbs

$ orapwd file=orapw+ASM password=dba

 

<!--[if !supportLists]-->3.  <!--[endif]-->创建目录结构

$ su ? oracle

$ cd $ORACLE_HOME/dbs

$ mkdir ?p $ORALCE_BASE/admin/+ASM/udump

$ mkdir ?p $ORALCE_BASE/admin/+ASM/bdump

$ mkdir ?p $ORALCE_BASE/admin/+ASM/cdump

 

<!--[if !supportLists]-->4.  <!--[endif]-->启动实例

$ export ORACLE_SID=+ASM

$ sqlplus / as sysdba

SQL> startup

ASM instance started

 

Total System Global Area  100663296 bytes

Fixed Size                   777616 bytes

Variable Size              99885680 bytes

Database Buffers                  0 bytes

Redo Buffers                      0 bytes

ORA-15110: no diskgroups mounted

 

因为我们是首次启动asm实例,还没有创建diskgroup,所以显示15110错误是正常的。

 

如果启动实例的时候碰到如下报错:

ORA-29701: unable to connect to Cluster Manager

那么请检查/etc/inittab文件,看看是否有下面这行

h1:35:respawn:/etc/init.d/init.cssd run >/dev/null 2>&1

如果没有请添加,如果被注释了请取消注释。

 

<!--[if !supportLists]-->5.  <!--[endif]-->创建spfile,重新启动

SQL> create spfile from pfile;

SQL> shutdown immediate;

SQL> startup;

 

<!--[if !supportLists]-->6.  <!--[endif]-->创建diskgroup

SQL> create diskgroup dgroup1 normal redundancy

  2  failgroup fgroup1 disk 'ORCL:VOL1','ORCL:VOL2'

  3  failgroup fgroup2 disk 'ORCL:VOL3','ORCL:VOL4';

 

Diskgroup created.

 

SQL> col name for a10

SQL> select name,state from v$asm_diskgroup;

 

NAME       STATE

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

DGROUP1    MOUNTED

 

如果上述命令返回的stateDISMOUNTED,那么我们需要手工将挂载diskgroup

SQL> ALTER DISKGROUP dgroup1 MOUNT;

 

Diskgroup altered.

 

此时检查数据库初始化参数,发现asm_diskgroups参数值已经自动设置为DGROUP1,这表明在下次启动asm实例的时候,这个diskgroup会被自动挂载。

SQL> col name for a10

SQL> col type for a10

SQL> col value for a20

SQL> show parameter asm_diskgroups

 

NAME                                 TYPE       VALUE

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

asm_diskgroups                       string     DGROUP1

 

如果要卸载diskgroup使用下面的命令

ALTER DISKGROUP ALL DISMOUNT;

 

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件