首页 > 代码库 > 数据库数据文件管理
数据库数据文件管理
DB_CREATE_FILE_DEST
参数DB_CREATE_FILE_DEST用来指定重要数据库文件的位置,数据库文件包括:数据文件、临时文件、重做日志文件、控制文件、块变化跟踪文件。
例:
DB_CREATE_FILE_DEST = ‘/u01/app/oracle/oradata‘ --指定数据文件的默认存放位置
DB_RECOVERY_FILE_DEST
参数DB_RECOVERY_FILE_DEST 和 参数DB_RECOVERY_FILE_DEST_SIZE用来指定快速恢复区的默认位置,快速恢复区包括以下文件:
一个或多个重做日志文件、一个或多个控制文件、RMAN备份文件(数据文件副本、控制文件副本等)、归档日志、闪回日志。
例:
DB_RECOVERY_FILE_DEST = ‘/u01/app/oracle/fast_recovery_area‘
DB_RECOVERY_FILE_DEST_SIZE = 20G
DB_CREATE_ONLINE_LOG_DEST_n
参数DB_CREATE_ONLINE_LOG_DEST_n用来指定重做日志和控制文件的默认位置,可以指定一个目录或者ASM磁盘组,参数最后的n表示参数可以重复设置多个,但最多不能超过五个。
对于控制文件和重做日志文件按,这个参数设置的值会被DB_CREATE_FILE_DEST 和DB_RECOVERY_FILE_DEST参数设置的值覆盖,但如果 DB_CREATE_FILE_DEST没被设置只设置了DB_CREATE_ONLINE_LOG_DEST_n参数,那么只有重做日志文件和控制文件能通过OCF(ORACLE Managed Files)创建。
Oracle建议设置至少两个位置,因为这大大提高了容错能力,例:
DB_CREATE_ONLINE_LOG_DEST_1 = ‘/u02/oradata‘
DB_CREATE_ONLINE_LOG_DEST_2 = ‘/u03/oradata‘
文件会被创建为OCF(Oracle Managed Files)的情况
当你设置了相应参数,而有没有明确给出文件的相关信息时,文件会被创建成为OCF:
*在初始化参数文件中设置了参数DB_CREATE_FILE_DEST,
DB_RECOVERY_FILE_DEST,或者 DB_CREATE_ONLINE_LOG_DEST_n
*用命令ALTER SYSTEM动态设置参数DB_RECOVERY_FILE_DEST, DB_CREATE_FILE_DEST,或DB_CREATE_ONLINE_LOG_DEST_n
*用命令ALTER SESSION动态设置参数DB_RECOVERY_FILE_DEST, DB_CREATE_FILE_DEST,或DB_CREATE_ONLINE_LOG_DEST_n
如果创建OCF数据文件SQL语句发现错误或者是因为某些原因执行失败,那么所创建的数据文件会被当作是失败或错误恢复而自动删除,某些情况下还须手动删除。
Oracle托管文件(OCF)的命名
Oracle托管文件的命名规则遵循OFA(Optimal Flexible Architecture)标准,被指定的文件名应满足以下要求:
*数据库文件都很容易跟其他文件区分开来;
*不同的文件类型的文件名应明确包含相关重要的属性,例如一个数据文件的名字应该包含跟它相关联的表空间的名字,一个归档日志文件包含线程、队列及创建日期等信息。
Oracle托管文件创建时不会给出重复的名字,文件的命名规则由以下构成:
*文件创建的默认位置
*一个文件的命名模板是基于文件的类型和操作系统的类型以及是否使用Oracle自动存储管理
*是一个唯一的字符串——确保文件的创建不会损坏现有的文件
命名规则:
destination_prefix/o1_mf_%t_%u_.dbf
destination_prefix 指的是destination_location/db_unique_name/datafile;
destination_location 就是参数DB_CREATE_FILE_DEST指定的目录;
db_unique_name 就是唯一的目标数据库的名字(通过参数DB_UNIQUE_NAME设置,如果DB_UNIQUE_NAME参数没有设置,那么就会使用初始化参数DB_NAME的值);
%t 指的是表空间的名字;
%u 是保证唯一性的有八个字符的字符串;
例:
假设参数设置成以下值
DB_CREATE_FILE_DEST = /u01/app/oracle/oradata
DB_UNIQUE_NAME = PAYROLL
那么,数据文件的名字就如下
/u01/app/oracle/oradata/PAYROLL/datafile/o1_mf_tbs1_2ixh90q_.dbf
需要注意的是,千万不要去重命名这些Oracle托管文件(OCF),数据库跟据它的名字来识别它是否是Oracle管理文件;如果你重命名了的话,数据库将不再将其识别为和当作Oracle托管文件(OCF)。
用Oracle托管文件的方式创建数据库
CREATE DATABASE语句产生相关Oracle托管文件。
*指定控制文件
在配置文件里设置初始化参数CONTROL_FILES ,即可创建相应控制文件按;
*指定重做日志文件
参数LOGFILE在CREATE DATABASE 语句中会被忽略,因为在创建Oracle托管重做日志文件时这个参数会被忽略。
*指定SYSTEM 和 SYSAUX表空间数据文件
在CREATE DATABASE 语句中DATAFILE和SYSAUX DATAFILE参数并不需要设置,因为在创建system 和sysaux 的Oracle托管表空间数据文件时会被忽略。
*指定undo表空间的数据文件
参数UNDO TABLESPACE的子参数DATAFILE是可选的,它的文件名并不需要指定。
控制文件
在数据库创建的过程中,控制文件是根据CONTROL_FILES参数的设置而创建的,如果参数CONTROL_FILES没有设置并且设置了至少一个Oracle托管文件创建所需的初始化参数,Oracle托管控制文件在默认位置创建,而这个默认位置则是根据初始化参数的设置情况而定的,如下:
1.设置了一个或多个DB_CREATE_ONLINE_LOG_DEST_n初始化参数,第一个目录是主要控制文件的位置,而参数 DB_CREATE_FILE_DEST 和 DB_RECOVERY_FILE_DEST则会被忽略(如果有设置);
2.如果只设置了 DB_CREATE_FILE_DEST,数据库将会在该目录下创建一个控制文件;
3.同样,如果只设置了参数DB_RECOVERY_FILE_DEST,数据库就会在该目录下创建一个控制文件;
如果 CONTROL_FILES和Oracle托管文件创建所需的初始化参数都没有设置,那么控制文件的默认位置将取决于操作系统依赖。所有以这种形式创建的控制文件都不是Oracle托管文件,你必须在初始化参数文件中添加CONTROL_FILES这个参数。
所以如果想数据库创建Oracle托管控制文件,若有spfile,就往spfile里添加CONTROL_FILES参数;若没有spfile,那么你必须手动往txt格式的pfile文件添加CONTROL_FILES参数。
重做日志文件
重做日志的默认位置是由以下参数的设置情况而定的
1.如果设置了一个或多个DB_CREATE_ONLINE_LOG_DEST_n参数,数据库将会在各个参数所指定的目录都创建一个日志文件,不过日志文件的个数受参数MAXLOGMEMBERS所设置的值约束。
2.如果除参数. DB_CREATE_ONLINE_LOG_DEST 之外,参数 DB_CREATE_FILE_DEST 和 DB_RECOVERY_FILE_DEST 都设置了,那么数据库将会在每个参数所制定的目录创建一个Oracle托管文件成员,参数 DB_CREATE_FILE_DEST所设置的位置的日志文件为第一个成员。
3.如果只设置了 DB_CREATE_FILE_DEST 参数或者只设置了 DB_RECOVERY_FILE_DEST参数数据库都会在相应的目录创建一个日志文件。
默认的Oracle托管日志文件的大小是100M。如果所有的Oracle托管文件创建初始化参数和LOGFILE都没有设置,那么CREATE DATABASE这个语句将会执行失败。
SYSTEM和SYSAUX表空间的数据文件
在创建system 和sysaux 的Oracle托管表空间数据文件时参数 DATAFILE 和 SYSAUX DATAFILE 会被忽略,而数据文件的位置有以下情况:
1.只设置了DB_CREATE_FILE_DEST参数,其他Oracle托管文件创建初始化参数都没设置,那么表空将将会给SYSTEM表空间和 SYSAUX表空间在参数指定的位置各创建一个数据文件;
2.如果DB_CREATE_FILE_DEST参数没有设置,那么SYSTEM表空间和 SYSAUX表空间的数据文件的名字和大小将有操作系统依赖决定,以这种方式创建的数据文件不再是Oracle托管文件;
通常情况下,SYSTEM和SYSAUX的表空间Oracle托管文件的大小为100M并且是可扩展的,每次扩张的大小为100M或者是其自身大小,你也可以通过ALTER TABLESPACE来更改其每次扩张的大小。
如果是创建Oracle托管文件,那么DATAFILE参数将会被覆盖;如果所有的参数都没有设置,那么CREATE DATABASE执行将会失败。当默认参数被Oracle托管文件覆盖时,设置了SIZE参数而并没有设置AUTOEXTEND参数,那么数据文件将不能自动扩张。
UNDO表空间的数据文件
参数UNDO TABLESPACE的子参数DATAFILE是可选的,文件名也不需要指定。当 设置了DB_CREATE_FILE_DEST参数而没有给出数据文件的文件名时,Oracle托管文件将会在参数指定目录创建;如果数据文件名没给出 DB_CREATE_FILE_DEST参数也没有设置,CREATE DATABASE语句将会提示说有语法错误。
数据文件的位置:
1.设置了DB_CREATE_FILE_DEST参数,数据文件将会在参数指定位置闯将;
2.没设置DB_CREATE_FILE_DEST参数,数据文件的位置将会由操作系统来决定。
默认表空间的临时文件
参数DEFAULT TEMPORARY TABLESPACE的子参数TEMPFILE是可选的,文件名也不需要指定。如果文件名没指定但参数DB_CREATE_FILE_DEST 设置了,数据库将会在参数指定的目录创建Oracle托管临时文件;如果参数DB_CREATE_FILE_DEST 没有设置,CREATE DATABASE将会执行失败并提示语法错误。
DEFAULT TEMPORARY TABLESPACE参数是可选的如果没有给出,那么默认临时表空间就不会被创建。Oracle托管临时文件默认是100M,以及是可以无线扩张的。
例:
Example 1
以下例子是以Oracle托管文件的方式创建数据库及其数据文件,假设如下
*SYSTEM表空间数据文件在目录/u01/app/oracle/oradata下,并且是可以无限扩张的;
*SYSAUX表空间数据文件在 /u01/app/oracle/oradata目录,并且是可以无限扩张的,表空间是本地自动段管理的;
*有两个在线的日志文件组分别在目录/u02/oradata和/u03/oradata下,每个组成员的文件大小都是100M;
*如果启用了自动udno管理模式(默认),undo表空间的数据文件将会在 /u01/app/oracle/oradata目录下创建,文件的大小是20M并且是可以无限扩张的,undo表空间的名字是SYS_UNDOTS;
*如果初始化参数CONTROL_FILES没有设置,那么数据库将会分别在/u02/oradata和/u03/oradata创建一个控制文件,其中/u02/oradata下的是主控制文件;
要满足以上要求,那么就需要在初始化参数文件中设置以下参数:
DB_CREATE_FILE_DEST = ‘/u01/app/oracle/oradata‘
DB_CREATE_ONLINE_LOG_DEST_1 = ‘/u02/oradata‘
DB_CREATE_ONLINE_LOG_DEST_2 = ‘/u03/oradata‘
填写完之后,执行以下语句即可:
CREATE DATABASE sample;
如果想要把数据库的SYSTEM表空间创建成本地管理表空间,只需在创建语句后添加参数EXTENT MANAGEMENT LOCAL即可;如果没有这个参数,表空间将会是目录管理的,Oracle官方推荐创建本地管理的SYSTEM表空间
CREATE DATABASE sample EXTENT MANAGEMENT LOCAL;
Example 2
以下例子也是以Oracle托管文件的方式创建数据库及其数据文件,假设如下
*SYSTEM表空间的数据文件是在目录/u01/app/oracle/oradata 下,并且是可以无线扩张的;
*SYSAUX表空间数据文件在目录/u01/app/oracle/oradata下,并且是可以无限扩张的以及是自动断空间管理的;
*两个100M的重做日志文件在目录/u01/app/oracle/oradata下,并且是不可复用的;
*一个名字和大小分别为SYS_UNDOTS和20M的UNDO表空间数据文件在目录/u01/app/oracle/oradata下,并且是可无限扩张的;
*控制文件在目录/u01/app/oracle/oradata下;
在这个例子中,还假设以下情况:
*初始化参数文件中没有设置DB_CREATE_ONLINE_LOG_DEST_n参数;
*初始化参数文件中没有设置CONTROL_FILES参数;
*UNDO自动管理模式已开启;
接下来执行以下语句
ALTER SYSTEM SET DB_CREATE_FILE_DEST = ‘/u01/app/oracle/oradata‘;
CREATE DATABASE sample2 EXTENT MANAGEMENT LOCAL;
需要说明的是,以上配置并不是一个生产环境下的数据库配置的例子,只供讲解或测试用;创建一个生产环境下的数据库你至少需要创建两个控制文件,以及重做日志文件是可复用的。
Example 3
在这个例子中,Oracle托管默认临时表空间数据文件和UNDO表空间数据文件的大小都是已经给定的,有以下假设:
*一个400M的SYSTEM表空间数据文件在目录/u01/app/oracle/oradata下(因为已经指定了大小,所有数据文件是不可扩张的);
*一个200M的SYSAUX表空间数据文件在目录/u01/app/oracle/oradata下(因为已经指定了大小,所有数据文件是不可扩张的),表空间是自动断空间管理的;
*两个重做日志文件组分别在目录/u02/oradata和/u03/oradata,并且每个组里的成员文件都是100M;
*默认临时表空间dflt_ts的临时文件在目录/u01/app/oracle/oradata下,大小为10M,并且是不可扩张的;
*大小为100M的UNDO表空间undo_ts在目录 /u01/app/oracle/oradata下,并且是不可扩张的;
*如果CONTROL_FILES初始化参数没有设置,两个控制文件将分别会在目录/u02/oradata和/u03/oradata创建,其中/u02/oradata下的是主要控制文件;
接下来,在初始化参数文件中设置添加以下参数:
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;
数据库数据文件管理