12.3 如何创建OMF数据库

在创建数据库时,可以利用Oracle的自动文件管理功能创建数据文件、控制文件和重做日志文件。

在创建数据库的同时,创建了SYSTEM表空间、SYSAUX表空间、UNDO表空间、临时表空间,同时还可以创建其他表空间。

对于SYSTEM和SYSAUX表空间,在创建数据库的语句中可以不使用DATAFILE和SYSAUX DATAFILE子句来指定它们所包含的数据文件。这时如果设置了初始化参数DB_CREATE_FILE_DEST,那么数据文件将在这个初始化参数指定的位置被自动创建。否则,Oracle将为这两个表空间分别创建一个数据文件,它们的大小、名称将取决于具体的操作系统平台。在后一种情况下,创建的数据文件不是OMF文件。

Oracle管理的数据文件的默认大小为100MB,并且可以自动扩展,每次扩展100M。当然,用户也可以为数据文件指定初始大小和扩展属性等重要信息。通过DATAFILE子句为SYSTEM和SYSAUX表空间指定相关属性,可以覆盖它们的默认属性。

对于UNDO表空间,可以不指定表空间对应的数据文件名,Oracle将根据初始化参数DB_CREATE_FILE_DEST指定的存储位置创建数据文件。如果没有设置这个初始化参数,创建数据库的语句将执行失败。

在创建数据库的CREATE DATABASE语句中,UNDO TABLESPACE子句也是可选的。如果没有指定这个子句,Oracle将激活自动UNDO管理,并且创建名称为SYS_UNDOTS的UNDO表空间,在该表空间包含一个20M的数据文件,这个数据文件的大小可以自动扩展,它的存储位置取决于初始化参数DB_CREATE_FILE_DEST。

对于临时表空间,可以不指定表空间对应的数据文件名称,这时Oracle将根据初始化参数DB_CREATE_FILE_DEST的值创建数据文件,它的默认大小为100MB,并且可以自动扩展。如果没有设置这个初始化参数,创建数据库的CREATE DATABASE语句将执行失败。

在创建数据库时可以不创建临时表空间,所以在CREATE DATABASE语句中,DEFAULT TEMPORARY TABLESPACE子句也是可选的。如果没有指定这个子句,将不创建临时表空间。

在创建数据库时,Oracle将根据初始化参数CONTROL_FILES的设置创建控制文件。如果没有设置这个初始化参数,Oracle将按照以下原则创建控制文件:

·根据初始化参数DB_CREATE_ONLINE_LOG_DEST_n的设置,在指定的存储位置创建控制文件。其中在第一个存储位置中创建的文件称为主控制文件。

·如果没有设置初始化参数DB_CREATE_ONLINE_LOG_DEST_n,但是设置了初始化参数DB_CREATE_FILE_DEST和DB_RECOVRY_FILE_DEST,那么Oracle将根据这两个参数的设置,在指定的两个目录中分别创建一个控制文件。

·如果仅仅设置了初始化参数DB_CREATE_FILE_DEST和DB_RECOVERY_FILE_DEST其中一个,那么Oracle将在指定的目录中创建一个控制文件。

·如果以上三个初始化参数以及CONTROL_FILES都没有设置,Oracle将根据操作系统的不同,在默认的位置至少创建一个控制文件。为了能够正常访问控制文件,在创建数据库后,数据库管理员应该在参数文件中手工添加初始化参数CONTROL_FILES的设置。在创建数据库的CREATE DATABASE语句中,可以不使用LOGFILE子句,Oracle将按照与创建控制文件相同的原则创建重做日志文件,每个重做日志文件的默认大小为100MB。

当然,也可以在创建重做日志文件时为其指定属性,如文件大小等。与传统的方法一样,可以使用LOGFILE子句,并指定相关的属性,但是不需要指定文件名。

在对所有需要的参数进行设置之后,就可以创建数据库了。例如,要借助于自动文件管理功能创建一个数据库,首先在参数文件中设置以下初始化参数:


DB_CREATE_FILE_DEST='/export/home/Oracle/oradata1'

DB_CREATE_ONLINE_LOG_DEST_1='/export/home/Oracle/oradata2'

DB_CREATE_ONLINE_LOG_DEST_2='/export/home/Oracle/oradata3'


这样可以通过一条非常简单的命令创建数据库:


SQL>CREATE DATABASE test1;


在这条命令中,没有使用任何附加的子句,所以Oracle将按照默认的方式创建数据文件、控制文件和重做日志文件,这些文件都属于Oracle管理的文件。

下面的命令用于创建数据库test1,同时指定SYSTEM表空间的区管理方式为本地管理。如果不指定,SYSTEM表空间将是字典管理方式的。Oracle建议创建本地管理的表空间。


SQL>CREATE DATABASE test1 EXTENT MANAGEMENT LOCAL;


现在我们再来分析一个例子。要借助于自动文件管理功能创建一个数据库,数据库文件的存储位置是根据初始化参数的设置来确定的,名称是自动产生的,而文件的大小可以根据需要自己指定。

首先在参数文件中按照以下方式设置初始化参数:


DB_CREATE_FILE_DEST='/export/home/Oracle/oradata1'

DB_CREATE_ONLINE_LOG_DEST_1='/export/home/Oracle/oradata2'

DB_CREATE_ONLINE_LOG_DEST_2='/export/home/Oracle/oradata3'


然后执行下面的语句创建数据库:


SQL>CREATE DATABASE test2

DATAFILE SIZE 250M autoextend on next 10240K

SYSAUX DATAFILE SIZE 150M autoextend on next 10240K

UNDO TABLESPACE uts1 DATAFILE SIZE 20M autoextend on next 10240K

DEFAULT TEMPORARY TABLESPACE dts1 TEMPFILE SIZE 20M;


这条语句执行后,将创建另外一个数据库test2,为表空间SYSTEM和SYSAUX各创建了一个数据文件,大小分别是250MB和150MB,可自动扩展,下一个扩展的区的大小为1024KB。同时创建了一个UNDO表空间和一个临时表空间,数据文件的大小均为20MB。这四个数据文件的位置通过初始化参数DB_CREATE_FILE_DEST指定。

虽然在CREATE DATABASE语句中没有指定重做日志文件,但是因为设置了初始化参数DB_CREATE_ONLINE_LOG_DEST_n,所以在指定的两个目录中将分别创建一个重做日志文件,文件将采用默认的大小100MB。

控制文件的情况与重做日志文件类似,虽然没有设置初始化参数CONTROL_FILES,但是根据初始化参数DB_CREATE_ONLINE_LOG_DEST_n的设置,在指定的每个目录中分别创建一个控制文件。