CREATE DATABASE语句可以执行与OMF相关的行为。
1.在数据库创建时指定控制文件
在数据库创建时,控制文件使用初始化参数CONTROL_FILES指定的文件来创建。
如果参数CONTROL_FILES没有设置和至少一个要求用来创建OMF的初始参数已设置,那么Oracle管理的控制文件会在缺省的控制文件目的地创建。按照优先顺序,缺省的目的地定义如下:
1) 一个或多个控制文件在初始化参数DB_CREATE_ONLINE_LOG_DEST_n中指定。在第一个目录中的文件是主控制文件。当指定DB_CREATE_ONLINE_LOG_DEST_n时,数据库不会在DB_CREATE_FILE_DEST和DB_RECOVERY_FILE_DEST(FRA,快速恢复区域)中创建控制文件。
2) 如果没有指定DB_CREATE_ONLINE_LOG_DEST_n的值,但设置了DB_CREATE_FILE_DEST和DB_RECOVERY_FILE_DEST,那么数据库在每个位置中创建一个控制文件。在DB_CREATE_FILE_DEST中指定的位置是主控制文件。
3) 如果只指定了DB_CREATE_FILE_DEST的值,那么数据库在那个位置创建一个控制文件。
4) 如果只指定了DB_RECOVERY_FILE_DEST的值,那么数据库在那个位置创建一个控制文件。
如果CONTROL_FILES参数没有设置和这些初始化参数都没有设置,那么Oracle数据库的缺省行为依赖于操作系统。至少一个控制文件的拷贝在依赖操作系统的缺省位置中创建。在这种方式中创建的控制文件的任何拷贝都不是OMF,必须增加一个CONTROL_FILES初始化参数到任意一个初始化参数文件。
如果数据库创建了一个Oracle管理的控制文件和存在一个服务器参数文件,那么数据库在服务器参数文件中创建一个CONTROL_FILES初始化参数条目。如果不存在服务器参数文件,那么必须手动包含一个CONTROL_FILES初始化参数条目在文本初始化参数文件中。
2.在数据库创建时指定redo日志文件
在CREATE DATABASE语句中的LOGFILE子语句不是必需的,省略它提供一个简单的方式来创建Oracle管理的redo日志文件。
如果省略LOGFILE子语句,redo日志文件在缺省的redo日志文件目的地中创建。按照优先顺序,缺省的目的地定义如下:
1) 如果设置了DB_CREATE_ONLINE_LOG_DEST_n,数据库在每个指定的目录中创建一个日志文件成员,直到达到MAXLOGMEMBERS初始化参数定义的值。
2) 如果没有指定DB_CREATE_ONLINE_LOG_DEST_n的值,但同时设置了DB_CREATE_FILE_DEST和DB_RECOVERY_FILE_DEST,那么数据库在每个位置中创建一个Oracle管理的日志文件成员。在DB_CREATE_FILE_DEST中指定的目的地中的日志文件是第一个成员。
3) 如果只指定了DB_CREATE_FILE_DEST的值,那么数据库在那个位置创建一个日志文件成员。
4) 如果只指定了DB_RECOVERY_FILE_DEST的值,那么数据库在那个位置创建一个日志文件成员。
Oracle管理的redo日志文件缺省大小为100MB。
可选地,可以通过包含LOGFILE子语句但忽略文件名称来创建Oracle管理的redo日志文件和覆写缺省的属性。redo日志文件以相同的方式创建,除了以下情况:如果在LOGFILE子语句中没有提供文件名称,同时创建OMF要求的初始化参数都没有提供,那么CREATE DATABASE语句会失败。
3.在数据库创建时指定SYSTEM和SYSAUX表空间数据文件
在CREATE DATABASE语句中的子语句DATAFILE或SYSAUX DATAFILE不是必需的,忽略它为SYSTEM和SYSAUX表空间提供了一个简单的方式来创建Oracle管理的数据文件。
如果DATAFILE子语句被忽略,那么以下的其中一种行为会发生:
1) 如果设置了DB_CREATE_FILE_DEST,那么SYSTEM表空间和SYSAUX表空间的Oracle管理的数据文件将创建在目录DB_CREATE_FILE_DEST中。
2) 如果没有设置DB_CREATE_FILE_DEST,那么数据库创建一个SYSTEM和一个SYSAUX表空间数据文件,它们的名称和大小依赖于操作系统。以这种方式创建的任何SYSTEM或SYSAUX表空间数据文件都不是Oracle管理的文件(OMF)。
缺省情况下,Oracle管理的数据文件,包含SYSTEM和SYSAUX表空间的数据文件,是100M和可自动扩展的。当自动扩展是必需时,数据库以现有的大小或100M大小(其中更小的那个)扩展数据文件。也可以在指定数据文件时使用STORAGE子语句的NEXT参数明确地指定自动扩展的单位(在CREATE或ALTER TABLESPACE操作中)。
可选地,可以创建SYSTEM或SYSAUX表空间的Oracle管理的数据文件和覆写缺省的属性。这可以通过包含DATAFILE子语句,忽略文件名称,但指定覆写的属性。当文件名称没有提供和DB_CREATE_FILE_DEST参数已经设置,SYSTEM或SYSAUX表空间的Oracle管理的数据文件使用指定的覆写属性在目录DB_CREATE_FILE_DEST中创建。然而,如果文件名称没有提供和DB_CREATE_FILE_DEST参数没有设置,那么CREATE DATABASE语句失败。
当覆写Oracle管理的文件的缺省属性时,如果指定SIZE值没有指定AUTOEXTEND子语句,那么数据文件是不会自动扩展的。
4.在数据库创建时指定Undo表空间数据文件
UNDO TABLESPACE子语句的DATAFILE次子语句是可选的,文件名称在文件说明中不是必需的。
如果没有提供文件名称和设置了DB_CREATE_FILE_DEST参数,那么Oracle管理的数据文件创建在DB_CREATE_FILE_DEST目录中。如果 DB_CREATE_FILE_DEST没有设置,那么语句失败报语法错误。
CREATE DATABASE语句中的UNDO TABLESPACE子语句本身是可选的。如果它没有提供,同时自动undo管理模式是启用的(缺省值),那么命名为SYS_UNDOTS的缺省undo表空间被创建,自动扩展的20MB的数据文件以如下方式分配:
1) 如果设置了DB_CREATE_FILE_DEST,那么Oracle管理的数据文件创建在指定的目录中。
2) 如果没有设置DB_CREATE_FILE_DEST,那么数据文件存放在操作系统特定的位置。
5.在数据库创建时指定缺省的临时表空间数据文件
DEFAULT TEMPORARY TABLESPACE子语句的TEMPFILE次子语句是可选的,文件名称在文件说明中不是必需的。
如果没有提供文件名称和设置了DB_CREATE_FILE_DEST参数,那么Oracle管理的临时文件创建在DB_CREATE_FILE_DEST目录中。如果 DB_CREATE_FILE_DEST没有设置,那么语句失败报语法错误。
CREATE DATABASE语句中的DEFAULT TEMPORARY TABLESPACE子语句本身是可选的。如果它没有提供,那么缺省的临时表空间不会创建。
Oracle管理的临时文件缺省的大小是100M,文件是自动扩展,最大大小是无限的。
6.在数据库创建时使用OMF示例
以下示例阐述了使用CREATE DATABASE语句创建数据库时使用OMF特性。
示例1:
示例使用以下OMF创建数据库:
1) SYSTEM表空间数据文件位于目录/u01/app/oracle/oradata,它可以自动扩展到无限大小。
2) SYSAUX表空间数据文件位于目录/u01/app/oracle/oradata,它可以自动扩展到无限大小。表空间是使用自动段空间管理来本地管理。
3)两个在线日志组,每个日志组有两个100M的成员,一个在/u02/oradata,一个在/u03/oradata。
4)如果自动undo管理模式已启用(缺省值),那么undo表空间数据文件位于目录/u01/app/oracle/oradata,它的大小是20MB,可以自动扩展到无限大小。命名为SYS_UNDOTS的undo表空间被创建。
5)如果没有CONTROL_FILES初始化参数被指定,那么两个控制文件,一个位于/u02/oradata,一个位于/u03/oradata。在/u02/oradata的控制文件是主控制文件。
下面的OMF相关的参数设置包含在初始化参数文件中:
DB_CREATE_FILE_DEST = ‘/u01/app/oracle/oradata’
DB_CREATE_ONLINE_LOG_DEST_1 = ‘/u02/oradata’
DB_CREATE_ONLINE_LOG_DEST_2 = '/u03/oradata
在SQL提示符中执行以下语句:
CREATE DATABASE sample;
增加EXTENT MANAGEMENT LOCAL子语句来使用本地管理的SYSTEM表空间来创建数据库:
CREATE DATABASE sample EXTENT MANAGEMENT LOCAL;
如果不含这个子语句,SYSTEM表空间是字典管理的。Oracle建议创建本地管理的SYSTEM表空间。
示例2:
示例使用以下OMF创建数据库:
1) SYSTEM表空间数据文件位于目录/u01/app/oracle/oradata,它可以自动扩展到无限大小。
2) SYSAUX表空间数据文件位于目录/u01/app/oracle/oradata,它可以自动扩展到无限大小。表空间是使用自动段空间管理来本地管理。
3)两个在线日志组,每个日志组有一个100M的成员,位于/u01/app/oracle/oradata。它们没有多路复用。
4)undo表空间数据文件位于目录/u01/app/oracle/oradata,它的大小是20MB,可以自动扩展到无限大小。命名为SYS_UNDOTS的undo表空间被创建。
5)控制文件位于/u01/app/oracle/oradata。
在这个示例中,假设以下情况:
1)在初始化参数文件中没有指定DB_CREATE_ONLINE_LOG_DEST_n初始化参数。
2)在初始化参数文件中没有指定CONTROL_FILES初始化参数。
3)自动undo管理模式已启用。
在SQL提示符中执行以下语句:
ALTER SYSTEM SET DB_CREATE_FILE_DEST = ‘/u01/app/oracle/oradata’;
CREATE DATABASE sample2 EXTENT MANAGEMENT LOCAL;
这个数据库配置不建议用来做生产数据库。示例阐述了一个非常低端的数据库或简单的测试数据库可以很容易创建。为了更好的保护数据库不会出故障,至少多一个控制文件应该被创建,redo日志应该多路复用。
示例3:
在这个示例中,指定了缺省临时表空间和undo表空间的OMF的文件大小。数据库使用以下OMF来创建:
1) 400MB的SYSTEM表空间数据文件位于目录/u01/app/oracle/oradata,因为指定了SIZE,文件不是自动扩展的。
2) 200MB的SYSAUX表空间数据文件位于目录/u01/app/oracle/oradata,因为指定了SIZE,文件不是自动扩展的。表空间是使用自动段空间管理来本地管理。
3) 两个在线日志组,每个日志组有两个100M的成员,一个在/u02/oradata,一个在/u03/oradata。
4) 对于缺省的临时表空间dflt_ts,10MB的临时文件位于目录/u01/app/oracle/oradata,因为指定了SIZE,文件不是自动扩展的。
5)对于undo表空间undo_ts,100MB的数据文件位于目录/u01/app/oracle/oradata,,因为指定了SIZE,文件不是自动扩展的。
6)如果没有CONTROL_FILES初始化参数被指定,那么两个控制文件,一个位于/u02/oradata,一个位于/u03/oradata。在/u02/oradata的控制文件是主控制文件。
下面的OMF相关的参数设置包含在初始化参数文件中:
DB_CREATE_FILE_DEST = ‘/u01/app/oracle/oradata’
DB_CREATE_ONLINE_LOG_DEST_1 = ‘/u02/oradata’
DB_CREATE_ONLINE_LOG_DEST_2 = '/u03/oradata
在SQL提示符中执行以下语句:
CREATE DATABASE sample3
EXTENT MANAGEMENT LOCAL
DATAFILE SIZE 400M
SYSAUX DATAFILE SIZE 200M
DEFAULT TEMPORARY TABLESPACE dflt_ts TEMPFILE SIZE 10M
UNDO TABLESPACE undo_ts DATAFILE SIZE 100M;
来源:《Oracle Database Database Administrator’s Guide, 19c》