ASM学习与搭建

来源:互联网 发布:淘宝街拍欧美 编辑:程序博客网 时间:2024/05/18 18:18
摘要:

     在真正的海量数据库环境中,DBA 可能会花费很多的时间来作磁盘管理,比如一个表空间

将占满整个磁盘,DBA 就需要再添加一块磁盘到操作系统中,然后再在新的磁盘上创建新

的数据文件,如果是单个磁盘这倒不是很繁琐,问题是如果原先我们使用的是RAID 或者

说是LVM,那么现在大量的数据仍然是分布在以前的那些磁盘上,如果我们想让这些数据

均匀地分布在以前的磁盘和新增加的磁盘上,我们可能就要耗费一天甚至几天的时间来作原

先数据的导出导入。那么如果有一种方法,能实现我们就把一块磁盘加到系统里,然后告诉

Oracle 我们要用这块盘了,剩下的工作全部由Oracle 来完成,该是多好的一件事情!幸

运的是,Oracle10g 已经提供了这个功能,这就是ASM( Automatic Storage

Management)。我们称为“自动存储管理”。Oracle10g 的ASM 不但帮助DBA 从繁琐的

磁盘空间管理中解脱出来,而且更值得关注的是ASM 同时提供了条带和镜像的功能,而这

些功能原先需要通过单独地配置RAID 来实现。

于是,今天呆在家里突然心血来潮,搭建一个ASM来玩玩。。。

下面是我的搭建过程,希望有兴趣的也可以自己有空搭建一个来玩玩。

搭建这中环境来玩,其实并不难,就像现在的建筑工程师一样的想盖一栋属于自己的楼盘。当然在盖楼盘之前你得把材料准备好,得遵守建筑的一些规则。后面你怎么装修,就是看你的需要了。尽情的发挥你的特长哦。。。废话不多,开始了。

准备: 操作系统安装ISO,我采用的是rhel-server-5.4-i386-dvd.iso(32位的),内核是2.6.18-164.el5 为啥子我要提到这个呢,因为后面你要根据你的内核版本到ORACLE官网去下载相应的oracleasm包。根据我的操作系统版本,找到了下面三个rpm包,取下来

oracleasm-2.6.18-164.el5-2.0.5-1.el5.i686.rpm
oracleasmlib-2.0.4-1.el5.i386.rpm
oracleasm-support-2.1.8-1.el5.i386.rpm

还要准备的就是数据包:

10201_database_linux32.zip

第一步: 安装Linux操作系统,这里就不做详细的解释了,如果不知道怎么安装的到网上搜索一下就知道了,很简单。

第二步:安装下载下来的3个rpm包,要用root用户安装

rpm -ivh oracleasm-2.6.18-164.el5-2.0.5-1.el5.i686.rpm
rpm -ivh oracleasmlib-2.0.4-1.el5.i386.rpm
rpm -ivh oracleasm-support-2.1.8-1.el5.i386.rpm

第三步: 加载必要的虚拟硬盘,为创建ASM数据组做准备

[root@RadHat5 ~]# fdisk /dev/sdi

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-2610, default 1): 
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-2610, default 2610): 
Using default value 2610

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@RadHat5 ~]# 

 

 

配置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 驱动,并且mount 上ASM 文件系统,同时我们可以通过以

下命令来手工的卸载和加载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 level 是5,那么上面生成链

接的命令应该在/etc/rc5.d 目录中操作。

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

#lsmod | grep oracleasm

oracleasm 14224 1

#dmesg | grep oracleasm

ASM: oracleasmfs mounted with options: <defaults>

创建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

# /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 ]

第四不:安装数据库,这里要注意,我们只安装数据库软件不创建实例,怎么安装,请参看数据库安装手册或者到网上搜索相关资料

第五步:创建ASM实例,并启动

1. 创建初始化文件

su - oracle

cd $ORACLE_HOME/dbs/

vi init+ASM.ora

# ******Below is init script for asm instance******
*.asm_diskstring='ORCL:VOL*'
*.background_dump_dest='/home/oracle/admin/+ASM/bdump'
*.core_dump_dest='/home/oracle/admin/+ASM/cdump'
*.instance_type='asm'
*.large_pool_size=12M
*.remote_login_passwordfile='SHARED'
*.user_dump_dest='/home/oracle/admin/+ASM/udump'
# ******Above is init script for asm instance******

export ORACLE_SID=+ASM

2. 创建密码文件

$ su – oracle

$ cd $ORACLE_HOME/dbs

$ orapwd file=orapw+ASM password=dba

3. 创建目录结构

$ 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

4. 启动实例

$ 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

# $ORACLE_HOME/bin/localconfig reset $ORACLE_HOME

#/etc/init.d/init.cssd start

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

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

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

 创建spfile,重新启动

SQL> create spfile from pfile;

SQL> shutdown immediate;

SQL> startup;

6. 创建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

如果上述命令返回的state 是DISMOUNTED,那么我们需要手工将挂载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

第六步:创建ASM ORACLE数据库实例

这里就很简单了,直接下一步下一步。。。。

第八步:使用数据库。

如果能正常的运行起来,就算安装成功了。。

 

下面是我启动的过程:

[oracle@RadHat5 dbs]$ export ORACLE_SID=+ASM
[oracle@RadHat5 dbs]$ sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on Mon Jan 13 08:12:33 2014

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SQL> connect / as sysdba
Connected to an idle instance.
SQL> startup
ASM instance started

Total System Global Area   83886080 bytes
Fixed Size                  1217836 bytes
Variable Size              57502420 bytes
ASM Cache                  25165824 bytes
ASM diskgroups mounted
SQL> col label for a10
SQL> col failgroup for a15
SQL> select label,failgroup from v$asm_disk;

LABEL      FAILGROUP
---------- ---------------
VOL1       FGROUP1
VOL2       FGROUP1
VOL3       FGROUP2
VOL4       FGROUP2
VOL5       FGROUP1
VOL6       FGROUP2

6 rows selected.

SQL> 

SQL> col name for a15
SQL> col state for a15
SQL> select name,state from v$asm_diskgroup;

NAME            STATE
--------------- ---------------
DGROUP1         MOUNTED

SQL> quit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
[oracle@RadHat5 dbs]$ asmcmd
ASMCMD> ls
DGROUP1/
ASMCMD> lsdg
State    Type    Rebal  Unbal  Sector  Block       AU  Total_MB  Free_MB  Req_mir_free_MB  Usable_file_MB  Offline_disks  Name
MOUNTED  NORMAL  N      N         512   4096  1048576    122838   120276            20473           49901              0  DGROUP1/
ASMCMD> du
Used_MB      Mirror_used_MB
   1229                2464
ASMCMD> lsdg
State    Type    Rebal  Unbal  Sector  Block       AU  Total_MB  Free_MB  Req_mir_free_MB  Usable_file_MB  Offline_disks  Name
MOUNTED  NORMAL  N      N         512   4096  1048576    122838   120276            20473           49901              0  DGROUP1/
ASMCMD> ls       
DGROUP1/
ASMCMD> cd DGROUP1
ASMCMD> ls
MASTDB/
ASMCMD> cd MASTDB
ASMCMD> pwd
+DGROUP1/MASTDB
ASMCMD> cd DATAFILE
ASMCMD> ls
SYSAUX.262.836385863
SYSTEM.260.836385809
TBS_TEST.266.836387839
UNDOTBS1.261.836385841
USERS.264.836385885

[oracle@RadHat5 dbs]$ export ORACLE_SID=MASTDB
[oracle@RadHat5 dbs]$ sqlplus /nolog 

SQL*Plus: Release 10.2.0.1.0 - Production on Mon Jan 13 08:17:22 2014

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SQL> connect / as sysdba
Connected to an idle instance.
SQL> startup
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/home/oracle/product/10.2.0/db_1/dbs/initMASTDB.ora'
SQL> quit
Disconnected

不好意思,刚才的ORACLE_SID写成了大小,不认识。说明ORACLE_SID 大写敏感,又知道了一个小小的秘密哦。。。
[oracle@RadHat5 dbs]$ export ORACLE_SID=mastdb
[oracle@RadHat5 dbs]$ sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on Mon Jan 13 08:17:41 2014

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SQL> connect / as sysdba
Connected to an idle instance.
SQL> startup
ORACLE instance started.

Total System Global Area  285212672 bytes
Fixed Size                  1218992 bytes
Variable Size              75499088 bytes
Database Buffers          205520896 bytes
Redo Buffers                2973696 bytes
Database mounted.
Database opened.

SQL> connect hds/hds
Connected.
SQL> select * from test_tb;   

        ID NAME
---------- ------------------------------
         1 周XX

SQL> 

说明启动正常可以使用了。

下面是顺序停止过程:

oracle@RadHat5 dbs]$ export ORACLE_SID=mastdb
[oracle@RadHat5 dbs]$ sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on Mon Jan 13 08:17:41 2014

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SQL> connect / as sysdba
Connected.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> quit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
[oracle@RadHat5 dbs]$ export ORACLE_SID=+ASM
[oracle@RadHat5 dbs]$ sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on Mon Jan 13 08:21:45 2014

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SQL> connect / as sysdba
Connected.
SQL> shutdown immediate
ASM diskgroups dismounted
ASM instance shutdown
SQL> 

先停数据库实例,再停ASM实例,最后把操作系统关掉。。。

0 0
原创粉丝点击