我翻译的:Oracle9i管理员指南第三章

来源:互联网 发布:urlencode java 编辑:程序博客网 时间:2024/06/06 01:37
 

3.使用Oracle-Managed文件

1.       什么是Oracle-Managed文件?

2.       创建和使用Oracle-Managed文件

3.       创建Oracle-Managed文件

4.       Oracle-Managed文件的功能

5.       什么情况下使用Oracle-Managed文件

3.1 什么是Oracle-Managed文件

通过使用Oracle-Managed文件可以简化数据库的管理。你通过操作数据库对象,来操作数据库对象对应的操作系统文件,而不必直接管理组成数据库的操作系统文件。Oracle内部通过标准文件系统接口对下面数据库结构进行创建和删除文件:

表空间

在线重做日志

控制文件

通过初始化参数,对某一类文件,你可以设定一个目录,之后oracle确保该文件被创建或者在不需要的时候被删除。这一特征不会影响管理文件的创建和命名,比如跟踪文件,审计文件,警告文件,核心文件等。

3.1.1 谁能够使用Oracle-Managed文件

Oracle Managed文件对两种数据库最有用,一种是支持lvm和可分配容量大并且可扩展的文件的数据库,另一种是低端或者测试用的数据库。

Oracle Managed文件不能帮助使用裸设备的系统简化数据库管理。Oracle Managed文件是在操作系统的帮助下,更好的实现磁盘空间的分配。而裸设备没有操作系统,因此不能使用Oracle Managed文件这一特性。相反,因为Oracle Managed要求使用操作系统,你就不能控制文件在磁盘上的布局,也失去了调整io的能力。

Lvm是一组软件包,它将物理磁盘连接起来,放在一个连续的地址空间上,在高层软件看起来像是一个磁盘。Lvm使得lv具有更好的容量,性能,稳定性和可用性。有的系统在lv被创建制后,允许修改lv,比如扩展lv容量或者将lv分配到别的磁盘上。

文件系统是一个建立在lv之上的数据结构。文件管理器是管理文件系统的一组软件包,负责在文件系统内,分配或者收回文件的空间。文件系统可以在磁盘上分配很多文件,每个文件看起来都是地址连续的,但实际上他们并不一定是地址连续。如果文件系统的容量满了,那么该文件系统所有文件的大小都不会再增长。一个文件系统的空间可用性,不会影响到另一个文件系统。一个操作系统可以有多个文件系统,每个文件系统对不同的文件提供不同的支持。

3.1.2 使用Oracle-Managed文件的好处

使用Oracle-Managed文件将带来以下好处:

1.       使得数据库的管理更加方便,不需要构造文件名和定义特定的存储要求。有一套统一的规则可以用于命名,相关的文件文件系统可以定义存储特征并分配相应的存储池。

2.       减少由管理员指定错误文件而产生的破坏。每个Oracle-Managed文件及其文件名都是惟一的,在两个不同的数据库中使用同一个文件是最常见的错误,这样将会导致花费大量的停机时间并丢失已经提交的事务,另一种错误是一个文件使用两个不同的名称。

3.       减少由废弃文件引起的磁盘空间的浪费。当某些Oracle-Managed文件不再有用时,Oracle 将自动删除这些文件,在大型系统中往往因为人们不能确定某个文件是否还有用,从而浪费了大量的磁盘空间,删除磁盘上不用的文件将会简化管理的任务并能防止在删除文件时可能出现的错误。

4.       简化测试和开发数据库的创建过程。Oracle-Managed使得花费在决定有关文件结构及其命名的时间最少,并且执行更少的文件管理任务,这样可以使管理员更好地将精力集中在测试或开发数据库真正的需求上。

5.       Oracle-Managed文件使得便携式第三方工具的开发工作更容易展开,Oracle-Managed文件使得管理员不再需要将操作系统特定的文件名称放到SQL 本中。

3.2 创建和使用Oracle-Managed文件

下面的参数允许数据库服务器使用Oracle-Managed文件:

上面两个参数指定的目录必须是已经存在的,oracle不会创建该目录,此外oracle还有在该目录创建文件的权限。如果在创建数据库的语句中没有创建数据文件等几个文件,则在上面两个参数指定的路径下,创建Oracle-Managed文件。这两个参数可以通过ALTER SYSTEM或者ALTER SESSION来修改。

3.2.1 设置初始化参数DB_CREATE_FILE_DEST

在初始化参数文件中包含DB_CREATE_FILE_DEST初始化参数,使数据库服务器在默认位置以便创建以下文件

数据文件

临时文件

联机重做日志文件

控制文件

可以指定文件系统目录的名称,以便为上述操作系统文件的创建提供默认的位置,在下面的例子中使用/u01/oradata/payroll 作为创建Oracle-Managed文件的默认目录

DB_CREATE_FILE_DEST = '/u01/oradata/payroll'

3.2.2 设置初始化参数DB_CREATE_ONLINE_LOG_DEST_n

在初始化参数文件中包含DB_CREATE_ONLINE_LOG_DEST_n 初始化参数,使数据库服务器在默认位置创建以下文件

联机重做日志文件

控制文件

可以指定文件系统目录的名称为上述操作系统文件的创建提供默认的位置,最多可以指定5 个多路复用的位置,对于联机重做日志文件和控制文件来说,该参数可以覆盖在DB_CREATE_FILE_DEST 初始化参数中为它们指定的任何默认位置,如果没有指定

DB_CREATE_FILE_DEST 参数而确定了DB_CREATE_ONLINE_LOG_DEST_n 参数那么只有联机重做日志文件和控制文件可以被创建为Oracle-Managed的文件,oracle推荐至少指定两个参数例如

DB_CREATE_ONLINE_LOG_DEST_1 = '/u02/oradata/payroll'

DB_CREATE_ONLINE_LOG_DEST_2 = '/u03/oradata/payroll'

如果其中的一个目标失败,另一个仍然可以使用。这种方法将为联机重做日志文件和控制文件提供更大的容错性。

3.3 创建Oracle 管理的文件(木鱼青)

当创建数据库的操作中,没有指定文件时,遇到下面的一种情况,Oracle将创建相应的Oracle-Managed文件:

1.       在初始化参数文件中已经包含初始化参数DB_CREATE_FILE_DESTDB_CREATE_ONLINE_LOG_DEST_n

2.       调用ALTER SYSTEM ALTER SESSION 语句来动态设置DB_CREATE_FILE_DEST DB_CREATE_ONLINE_LOG_DEST_n

如果创建Oracle-Managed文件的语句出现错误或者因为某些方面的失败而不能完成操作,那么该语句创建的任何一个Oracle-Managed文件都将作为错误或失败的一部分自动被删除掉,但是因为文件系统和存储子系统也可能发生的大量的潜在错误,所以有时可能需要使用操作系统命令手动删除这些文件。当创建Oracle-Managed文件时,它的文件名将被写入报警文件,如果需要手动删除该文件,可以利用这些信息找到它。

本节将讨论以下内容

1.       如何命名Oracle-Managed文件

2.       在数据库创建期间创建Oracle 管理文件

3.       为表空间创建数据文件

4.       为临时表空间创建临时文件

5.       创建控制文件

6.       创建联机重做日志文件

3.3.1 如何命名oracle-managed文件

两个Oracle 管理文件不会有相同的名称,oracle-managed文件的名称由三部分构成:

1.       默认的文件系统目录位置

2.       基于文件类型选择的特定端口的文件名模版

3.       Oracle 数据库服务器或操作系统创建的惟一的字符串

这就保证了文件的创建不会覆盖现有的文件,也不会将该文件误认为其他文件。举例如下oracle-managed文件的文件名在Solaris 上的格式为:

1.       %t 是表空间的名称,最多可以使用8个字符。如果8个字符还使得名称太长,那么名称将进行截取。把表空间名称放在惟一的字符串前,意味着表空间的所有数据文件将按字母顺序进行排列

2.       %u 是一个包含8 个字符的字符串它确保惟一性

3.       %g 是联机重做日志文件的组号

 

3.3.2 在数据库创建期间创建Oracle 管理文件

3.3.2.1 在数据库创建期间指定控制文件

在数据库创建期间,控制文件创建在由CONTROL_FILES初始化参数指定的文件中,如果没有设置CONTROL_FILES参数,而至少设置了一个创建oracle-managed文件所需的初始化参数,那么将在默认的控制文件目标位置创建oracle-managed控制文件,按优先权的次序,定义默认的目标位置如下:

1.       如果指定了初始化参数DB_CREATE_ONLINE_LOG_DEST_n,那么将在指定的每个目录中创建oracle-managed控制文件的副本,第一个目录中的文件为主控制文件

2.       如果指定了初始化参数DB_CREATE_FILE_DEST,而没有指定初始化参数DB_CREATE_ONLINE_LOG_DEST_n,那么将在指定的目录中创建oracle-managed控制文件

如果没有设置CONTROL_FILES参数,也没有设置上述任何一个初始化参数那么Oracle 将根据操作系统的不同采取相应的默认行为,在操作系统相应的默认位置中至少创建一个控制文件的副本,这种情形下创建的任何一个控制文件的副本都不是oracle-managed文件,而且必须往初始化参数文件中添加CONTROL_FILES 初始化参数。

如果Oracle创建了oracle-managed控制文件,并且服务器使用服务器参数文件,那么Oracle 将在服务器参数文件中创建一个CONTROL_FILES初始化参数入口,如果没有服务器参数文件,则必须手动创建一个CONTROL_FILES初始化参数入口,并把它放在文本初始化参数文件中

3.3.2.2 在数据库创建期间指定联机重做日志文件

CREATE DATABASE语句中不要求有LOGFILE子句,而且将它省略掉可以提供更简单的方式来创建oracle-managed联机重做日志文件.如果省略掉LOGFILE子句那么将在默认的联机重做日志文件目标位置,创建联机重做日志文件.按优先权的次序,默认的目标位置如下:

1.       如果指定了初始化参数DB_CREATE_ONLINE_LOG_DEST_n那么Oracle将在指定的每个目录中创建两个联机重做文件,特别是在指定的每个目录中,Oracle将创建两个联机重做组,其中包含相应的成员,这些联机重做日志文件都是oracle-managed文件

2.       如果指定了初始化参数DB_CREATE_FILE_DEST而没有指定初始化参数DB_CREATE_ONLINE_LOG_DEST_n那么将在指定的目录中,创建两个联机重做日志文件两个组,每个组一个成员。这些联机重做日志文件都是oracle-managed文件

3.       如果省略了LOGFILE子句,并且没有指定上述任何一个初始化参数,那么在操作系统相应的默认位置上将创建两个联机重做日志文件,这种情形下创建的任何一个联机重做日志文件都不是oracle-managed文件

oracle-managed联机重做日志文件的默认大小是100MB

也可以通过包含LOGFILE子句但是省略文件名的方式创建oracle-managed联机重做日志文件,并且重写默认的属性。但是与上述创建联机重做日志文件稍有不同的是,如果CREATE DATABASE语句的LOGFILE子句中没有提供文件名,而且没有提供创建Oracle管理文件所需的初始化参数,那么执行CREATE DATABASE 语句将会失败。

3.3.2.3 在数据库创建期间指定SYSTEM表空间数据文件

CREATE DATABASE语句中不要求有DATAFILE子句,而且将它省略掉可以为SYSTEM表空间提供更简单的方式来创建oracle-managed数据文件。如果省略掉DATAFILE子句将会发生下面的一种情况:

如果设置了DB_CREATE_FILE_DEST那么将在DB_CREATE_FILE_DEST指定的目录中为SYSTEM表空间创建Oracle管理的数据文件

如果没有设置DB_CREATE_FILE_DEST那么Oracle将会创建一个SYSTEM表空间数据文件,该文件的名称和大小依据操作系统而定。在这种方式下创建的SYSTEM表空间数据文件都不是oracle-managed数据文件

oracle-managed数据文件的默认大小为100MB并且该文件是自动可扩展的没有最大尺寸方面的限制

通过包含DATAFILE子句但是省略文件名的方式也可以为SYSTEM 表空间创建oracle-managed数据文件,并且重写默认的属性。如果没有提供文件名但是设置了DB_CREATE_FILE_DEST参数那么将在DB_CREATE_FILE_DEST指定的目录中,为SYSTEM表空间创建oracle-managed数据文件。如果既没有提供文件名也没有设置DB_CREATE_FILE_DEST参数那么执行CREATE DATABASE 语句将会失败。

3.3.2.4 在数据库创建期间指定撤消表空间数据文件

UNDO TABLESPACE子句中的DATAFILE次子句是可选项,并且在文件指定中不要求有文件名。如果没有提供文件名但是设置了DB_CREATE_FILE_DEST参数,那么将在DB_CREATE_FILE_DEST指定的目录中创建oracle-managed数据文件,如果没有设置DB_CREATE_FILE_DEST参数,那么执行这条语句将会出现语法错误。在CREATE DATABASE 语句中UNDO TABLESPACE 子句本身就是可选项,如果没有指定这一项,并且采用的是自动撤消管理模式那么将创建一个名为SYS_UNDOTBS 的表空间并且分配一个10MB 的数据文件,该文件可以自动扩展大小如下所示

如果设置了DB_CREATE_FILE_DEST,那么oracle-managed数据文件将创建在指定的目录中

如果没有设置DB_CREATE_FILE_DEST,那么数据文件将采用操作系统指定的位置

3.3.2.5 在数据库创建期间指定默认的临时表空间的临时文件

DEFAULT TEMPORARY TABLESPACE 子句中的TEMPFILE 次子句是可选项,并且文件指定中不要求有文件名。如果没有提供文件名,但是设置了DB_CREATE_FILE_DEST参数,那么将在DB_CREATE_FILE_DEST 指定的目录中创建oracle-managed临时文件,如果没有设置DB_CREATE_FILE_DEST 参数,那么执行这条语句将会出现语法错误。DEFAULT TEMPORARY TABLESPACE 子句本身就是可选项,如果没有指定这一项那么将不会创建默认的临时表空间,oracle-managed临时文件的默认大小是100MB,并且该文件是自动可扩展的,没有最大尺寸方面的限制。

3.3.2.6 使用Oracle 管理文件的CREATE DATABASE 语句的例子

这一节介绍使用oracle-managed文件特性时的CREATE DATABASE 语句的例子

1 CREATE DATABASE 1

在初始化参数文件中包含以下内容

DB_CREATE_FILE_DEST = '/u01/oradata/sample'

DB_CREATE_ONLINE_LOG_DEST_1 = '/u02/oradata/sample'

DB_CREATE_ONLINE_LOG_DEST_2 = '/u03/oradata/sample'

CREATE DATABASE 语句为

SQL> CREATE DATABASE sample;

这个例子创建的数据库包含以下oracle-managed文件

目录/u01/oradata/sample 中的SYSTEM 表空间数据文件该文件是100MB,并且具有自动可扩展大小的特性没有最大尺寸限制

两个联机日志组每个组有两个成员每个组员100MB分别在/u02/oradata/sample/u03/oradata/sample目录中

如果自动撤消管理模式有效,那么在/u01/oradata/sample2目录中的撤消表空间数据文件的大小是10MB,并且该文件具有自动可扩展大小的特性,没有最大尺寸限制,还创建有一个名为SYS_UNDOTBS 的撤消表空间

如果没有指定CONTROL_FILES初始化参数那么有两个控制文件分别在/u02/oradata/sample目录和/u03/oradata/sample目录中,/u02/oradata/sample目录中的控制文件是主控制文件

2 CREATE DATABASE 2

在这个例子中做以下假设

在初始化参数文件中不指定初始化参数DB_CREATE_ONLINE_LOG_DEST_n

在初始化参数文件中没有指定初始化参数CONTROL_FILES

自动撤消管理模式有效

SQL> ALTER SYSTEM SET DB_CREATE_FILE_DEST = '/u01/oradata/sample2';

SQL> CREATE DATABASE sample2;

这个例子创建的数据库包含以下oracle-managed文件

定义在 /u01/oradata/sample2 目录中的SYSTEM 表空间数据文件该文件是100MB

两个100MB 的联机重做日志文件都在/u02/oradata/sample2 目录中它们不能多路复用

定义在 /u01/oradata/sample2 目录中的撤消表空间数据文件它的大小是10MB,并且该文件具有自动可扩展大小的特性没有最大尺寸限制,还创建有一个名为SYS_UNDOTBS 的撤消表空间,控制文件在目录/u02/oradata/sample 中。不建议这么配置数据库,这只适用于最低端的数据库或者简单的测试数据库,为了更好的保护这种数据库,以防失败就需要创建至少一个或更多的控制文件,并且应该能够多路复用联机重做日志

3 CREATE DATABASE 3

在初始化参数文件中包含以下内容

DB_CREATE_FILE_DEST = '/u01/oradata/sample3'

DB_CREATE_ONLINE_LOG_DEST_1 = '/u02/oradata/sample3'

DB_CREATE_ONLINE_LOG_DEST_2 = '/u03/oradata/sample3'

CREATE DATABASE 语句为

SQL> CREATE DATABASE sample3 DATAFILE SIZE 400M

2> DEFAULT TEMPORARY TABLESPACE dflt_ts TEMPFILE SIZE 10M

3> UNDO TABLESPACE undo_ts DATAFILE SIZE 10M;

这个例子中指定了默认临时表空间和撤消表空间的oracle-managed文件的大小创建的数据库有以下特征

这个例子创建的数据库包含以下oracle-managed文件

/u01/oradata/sample3 目录中的SYSTEM 表空间数据文件该文件是400MB

两个联机日志组每个组有两个成员每个组员是100MB分别在/u02/oradata/sample3/u03/oradata/sample3目录中

/u01/oradata/sample3 目录中为名为dflt_ts 的默认临时表空间创建一个10MB 的临时文件

/u01/oradata/sample3 目录中为名为undo_ts 的撤消表空间创建一个10MB的数据文件

如果没有指定CONTROL_FILES 初始化参数那么有两个控制文件分别在/u02/oradata/sample3 目录和/u03/oradata/sample3 目录中,/u02/oradata/sample3 目录中的控制文件是主控制文件

3.3.3 为表空间创建数据文件

采用以下语句可以创建数据文件在这一节中将逐个加以介绍

1.       CREATE TABLESPACE

2.       CREATE UNDO TABLESPACE

3.       ALTER TABLESPACE … ADD DATAFILE

创建表空间时不管是普通的表空间还是撤消表空间,都可以使用DATAFILE 子句来创建,如果在语句中包含了DATAFILE 子句那么文件名是可选项,如果没有提供DATAFILE子句或文件名,那么将应用如下准则

如果指定了初始化参数DB_CREATE_FILE_DEST 那么将在参数指定的位置上创建Oracle 管理的数据文件

如果没有指定初始化参数DB_CREATE_FILE_DEST 那么执行创建数据文件的语句将会导致失败

如果用ALTER TABLESPACE … ADD DATAFILE 语句在表空间中添加了数据文件,那么文件名将是可选项,如果没有指定文件名,将采用前面段落中介绍的准则,默认情况下为普通表空间创建的Oracle 管理的数据文件大小为100MB 并且该文件的大小是可自动扩展的而且没有最大尺寸的限制。

3.3.3.1 CREATE TABLESPACE 的例子

下面是一些创建具有Oracle 管理文件的表空间的例子

1 CREATE TABLESPACE 1

SQL> ALTER SYSTEM SET DB_CREATE_FILE_DEST = '/u01/oradata/sample';

SQL> CREATE TABLESPACE tbs_1;

这个例子为数据文件的创建设置了默认位置/u01/oradata/sample 然后创建了表空间tbs_1其中有一个数据文件数据文件的大小为100MB 并且其大小是可自动扩展的,而且没有最大尺寸的限制

2 CREATE TABLESPACE 2

在初始化参数文件中包含以下内容

DB_CREATE_FILE_DEST = '/u01/oradata/sample2'

CREATE TABLESPACE 语句为

SQL> CREATE TABLESPACE tbs_2 DATAFILE SIZE 400M AUTOEXTEND OFF;

这个例子在/u01/oradata/sample2 目录中创建了一个名为tbs_2 的表空间,其中包含一个数据文件,该文件的大小是不可以自动扩展的,大小为400MB

3 CREATE TABLESPACE 3

在初始化参数文件中包含以下内容

DB_CREATE_FILE_DEST = '/u01/oradata/sample3'

CREATE TABLESPACE 语句为

SQL> CREATE TABLESPACE tbs_3 DATAFILE AUTOEXTEND ON MAXSIZE 800M;

这个例子在/u01/oradata/sample3 目录中创建了一个名为tbs_3 的表空间,其中包含一个可以自动扩展大小的数据文件该文件的起始大小为100MB最大尺寸为800MB

4 CREATE TABLESPACE 4

SQL> ALTER SYSTEM SET DB_CREATE_FILE_DEST = '/u01/oradata/sample4';

SQL> CREATE TABLESPACE tbs_4 DATAFILE SIZE 200M, SIZE 200M;

这个例子为数据文件的创建设置了默认位置/u01/oradata/sample4然后在这个目录中创建了一个名为tbs_4 的表空间,其中包含两个数据文件这些数据文件的大小可以自动扩展起始大小为200MB没有上限。

3.3.3.2 CREATE UNDO TABLESPACE 的例子

下面的例子中在/u01/oradata/sample 目录中创建了一个名为undotbs_1 的撤消表空间,其中的数据文件的大小为100MB并且大小可以自动扩展,没有上限

初始化参数文件中包含以下内容

DB_CREATE_FILE_DEST = '/u01/oradata/sample'

CREATE UNDO TABLESPACE 语句为

SQL> CREATE UNDO TABLESPACE undotbs_1;

3.3.3.3 ALTER TABLESPACE 的例子

下面的例子中在表空间tbs_1 中添加了一个Oracle 管理的可自动扩展的数据文件,该文件起始大小为100MB 最大值为800MB

初始化参数文件中包含以下内容

DB_CREATE_FILE_DEST = '/u01/oradata/sample'

ALTER TABLESPACE 语句为

SQL> ALTER TABLESPACE tbs_1 ADD DATAFILE AUTOEXTEND ON MAXSIZE 800M;

3.3.4 为临时表空间创建临时文件

可以采用下面的语句创建临时文件将在本节中逐个加以讨论

CREATE TEMPORARY TABLESPACE

ALTER TABLESPACE … ADD TEMPFILE

创建临时表空间时TEMPFILE 子句是可选项,如果在语句中包含了TEMPFILE 子句,那么文件名将是可选项,如果没有提供TEMPFILE 子句或文件名,那么将遵循以下的准则

如果指定了初始化参数DB_CREATE_FILE_DEST那么将在参数指定的位置上创建Oracle 管理的临时文件

如果没有指定初始化参数DB_CREATE_FILE_DEST那么执行创建临时文件的语句将会导致失败

如果用ALTER TABLESPACE … ADD TEMPFILE 语句在表空间中添加了临时文件,那么文件名将是可选项如果没有指定文件名将遵循前面段落中介绍的准则

默认情况下为普通表空间创建的Oracle 管理的临时文件大小为100MB并且该文件的大小是可自动扩展的,没有上限

3.3.4.1 CREATE TEMPORARY TABLESPACE 的例子

在下面的例子中为临时文件的创建设置了默认位置/u01/oradata/sample然后创建了一个名为temptbs_1 的表空间,其中包含的临时文件的大小为100MB并且大小可以自动扩展,没有上限

SQL> ALTER SYSTEM SET DB_CREATE_FILE_DEST = '/u01/oradata/sample';

SQL> CREATE TEMPORARY TABLESPACE temptbs_1;

3.3.4.2 ALTER TABLESPACE … ADD TEMPFILE 的例子

在下面的例子中为临时文件的创建设置了默认位置/u03/oradata/sample然后在名为temptbs_1 的表空间中添加了一个临时文件,该临时文件的起始大小为100MB并且大小可以自动扩展,没有上限

SQL> ALTER SYSTEM SET DB_CREATE_FILE_DEST = '/u03/oradata/sample';

SQL> ALTER TABLESPACE TBS_1 ADD TEMPFILE;

3.3.5 创建控制文件

当发布CREATE CONTROLFILE 语句时,将会在CONTROL_FILES 初始化参数指定的文件中创建一个控制文件,如果指定了REUSE 也可以重新使用某个控制文件,如果没有设置CONTROL_FILES 参数,那么将在默认的控制文件目标位置创建控制文件,按如下优先权定义默认的目标位置

如果指定了初始化参数DB_CREATE_ONLINE_LOG_DEST_n 那么Oracle 将在指定的每个目录中创建Oracle 管理的控制文件副本,在第一个目录中的文件是主要的控制文件

如果指定了初始化参数DB_CREATE_FILE_DEST 而没有指定初始化参数

DB_CREATE_ONLINE_LOG_DEST_n 那么将在指定的目录中创建Oracle 管理的

控制文件