13.3 如何使用ASM磁盘组

Oracle引入ASM的目的是为了简化数据库的管理工作。用户在创建数据库文件时,可以将磁盘组作为文件的默认存储位置,这样便省去了指定文件名称、文件大小等信息的诸多麻烦,从而大大减轻了数据库管理员的负担。

当利用ASM管理数据库文件时,这些文件将存储在磁盘组的磁盘中。磁盘组中的文件对操作系统是不可见的,用户只能通过Oracle提供的实用工具查看这些文件。

数据库中的大部分文件类型都可以利用自动存储管理功能进行管理,只有少数类型的文件如警告文件、跟踪文件、审计文件、备份文件等,不能存储在磁盘组中。

1.创建数据文件

数据文件是属于某个表空间的,所以创建数据文件的情况一般有两种,一种情况是在创建表空间的同时创建数据文件,另一种情况是向一个已经存在的表空间中添加数据文件。如果要在某个磁盘组上创建数据文件,首先需要通过初始化参数将该磁盘组指定为数据文件的默认存储位置。例如:


DB_CREATE_FILE_DEST='+dg1'


然后通过命令向一个表空间中添加数据文件,或者创建一个全新的表空间。例如:


SQL>CREATE TABLESPACE ts1;


这样就在数据库中创建了一个表空间ts1,表空间所对应的数据文件存储在磁盘组dg1上,数据文件的大小和扩展属性都采用了默认的信息。

如果在创建数据文件时不希望采用默认信息,那么可以指定文件大小和扩展属性等信息。例如:


SQL>CREATE TABLESPACE ts2 DATAFILE'+dg1'SIZE 50M AUTOEXTEND ON;


2.添加重做日志文件

在一个日志组中可以有多个日志成员,这些日志成员可以位于不同的磁盘组上。在添加新的日志组时,可以通过初始化参数指定多个日志成员,也可以直接在命令中指定。假设有以下初始化参数设置:


DB_CREATE_ONLINE_LOG_DEST_1='+dg1'

DB_CREATE_ONLINE_LOG_DEST_2='+dg2'

DB_CREATE_ONLINE_LOG_DEST_2='+dg3'


那么通过下面的语句可以添加一个日志组,在这个日志组中有三个日志成员,它们分别位于磁盘组dg1、dg2和dg3上。


SQL>ALTER DATABASE ADD LOGFILE;


3.创建数据库

利用自动存储管理功能,我们可以通过最简单的语句创建一个数据库,不再需要指定数据文件、重做日志文件和控制文件等信息。假设有以下初始化参数设置:


DB_CREATE_FILE_DEST='+dg1'

DB_RECOVERY_FILE_DEST='+dg2'

DB_RECOVERY_FILE_DEST_SIZE=500M


那么我们可以通过下面的语句创建数据库test:


SQL>CREATE DATABASE test;


这条语句执行的结果是:创建了SYSTEM和SYSAUX表空间,对应的数据文件存储在磁盘组dg1上;创建了一个重做日志组,它包含两个日志成员,分别位于磁盘组dg1和dg2上;如果在数据库实例的参数文件中没有设置初始化参数CONTROL_FILES,那么将创建两个控制文件,它们分别位于磁盘组dg1和dg2上。上述文件均属于Oracle自动管理的文件。