Oracle Database 12c DBA官方手册(第8版)
上QQ阅读APP看书,第一时间看更新

1.4 Oracle物理存储结构

Oracle数据库使用磁盘上的大量物理存储结构来保存和管理用户事务中的数据。有些物理存储结构,如数据文件、重做日志文件和归档的重做日志文件,保存实际的用户数据。其他结构,如控制文件,用于维护数据库对象的状态,而基于文本的警报和跟踪文件则包含数据库中例程事件和错误条件的日志信息。图1-3显示了这些物理结构与逻辑存储结构之间的关系,逻辑存储结构在1.2节中已经介绍过了。

图1-3 Oracle物理存储结构

1.4.1 数据文件

每个Oracle数据库必须至少包含一个数据文件(datafile)。一个Oracle数据文件对应于磁盘上的一个物理操作系统文件。Oracle数据库中的每个数据文件只能正好是一个表空间中的一个成员,然而一个表空间可由许多数据文件组成(BIGFILE表空间正好由一个数据文件组成)。

当Oracle数据文件用完空间时,它可以自动扩展,只要DBA是使用AUTOEXTEND参数创建数据文件即可。通过使用MAXSIZE参数,DBA也可以限制给定数据文件的扩展量。在任何情况下,数据文件的大小最终都会受到它所驻留的磁盘卷的限制。


提示:

DBA通常必须确定是分配一个可以无限自动扩展的数据文件,还是分配许多较小的具有有限扩展量的数据文件。在Oracle的早期版本中,你别无选择,只能有多个数据文件,并在数据文件级别管理表空间。现在有了BIGFILE(大文件)表空间,可在表空间级别管理大多数方面。现在,RMAN也可并行备份BIGFILE表空间(从Oracle Database 11g开始),明智的做法是创建一个数据文件,让其在必要时自动扩展。


数据库中的所有数据最终都驻留在数据文件中。数据文件中频繁访问的块缓存在内存中。类似地,新的数据块不会立刻写出到数据文件,而是在数据库写入程序进程处于活动状态时再写到数据文件。然而,在用户的事务完成之前,事务的改变就会写入重做日志文件。

1.4.2 重做日志文件

无论何时在表、索引或其他Oracle对象中添加、删除或改变数据,都会将一个条目写入当前的重做日志文件(redo log file)。每个Oracle数据库必须至少有两个重做日志文件,因为Oracle以循环方式重用重做日志文件。当一个重做日志文件充满了重做日志条目时,如果实例恢复仍需要它,则当前的日志文件被标记为ACTIVE;如果实例恢复不需要它,则标记为INACTIVE;系统从文件开始处重新使用序列中的下一个日志文件,并将其标记为CURRENT。

理想情况下,永远不会使用重做日志文件中的信息。然而,如果发生电源故障,或者一些其他服务器故障造成Oracle实例失败,数据库缓冲区缓存中新添加的或更新的数据块就可能尚未写入数据文件。重新启动Oracle实例时,通过前滚操作将重做日志文件中的条目应用于数据库数据文件,从而将数据库的状态还原到发生故障时间点的情况。

为能从重做日志组中的一个重做日志文件丢失的情况中恢复,可将重做日志文件的多个副本保存在不同的物理磁盘上。稍后将介绍如何多元复用重做日志文件、归档的日志文件和控制文件,从而确保Oracle数据库的可用性和数据完整性。

1.4.3 控制文件

每个Oracle数据库至少有一个控制文件,用于维护数据库的元数据(即有关数据库自身物理结构的数据)。控制文件包含数据库名称、创建数据库的时间以及所有数据文件和重做日志文件的名称和位置。此外,控制文件还维护恢复管理器(RMAN)所用的信息,如持久性RMAN设置和已在数据库上执行的备份类型。第12章将深入介绍对数据库结构进行改动时,有关改动的信息会立刻反映在控制文件中。

因为控制文件对数据库操作至关重要,所以也可对其进行多元复用。然而,不论控制文件的多少个副本与一个实例关联,系统也只会指定一个控制文件作为检索数据库元数据的主控制文件。

ALTER DATABASE BACKUP CONTROLFILE TO TRACE命令是另一种备份控制文件的方式。它生成一个SQL脚本,如果由于灾难性故障而丢失控制文件的所有多元复用二进制版本,则可以用该脚本重新创建数据库控制文件。

例如,如果数据库需要重命名,或者需要改变各种数据库限制——不重新创建整个数据库就无法改变这些限制,此时就可以使用这种跟踪文件来重新创建控制文件。从Oracle 10g开始,可使用nid实用程序来重命名数据库,不必重新创建控制文件。

1.4.4 归档的日志文件

Oracle数据库有两种操作模式:ARCHIVELOG和NOARCHIVELOG模式。当数据库处于NOARCHIVELOG模式时,重做日志文件(也称为“联机的重做日志文件”)的循环重用意味着重做条目(前面事务的内容)在出现磁盘驱动器故障或与其他介质相关的故障时不再可用。在NOARCHIVELOG模式中进行操作,可在发生实例故障或系统崩溃时保护数据库的完整性,因为已经提交但还没有写入数据文件的所有事务都可在联机重做日志文件中找到。

相反,ARCHIVELOG模式将填满的重做日志文件发送到一个或多个指定的目的地,并且可以在发生数据库介质故障事件后的任意给定时间点重新构造数据库。例如,如果包含数据文件的磁盘驱动器崩溃,则可将数据库的内容恢复到发生崩溃前的某个时间点,只要在进行备份时生成了数据文件和重做日志文件最近的备份即可。

对填满的重做日志文件使用多个归档日志的目标是Oracle高可用性的特性之一,即“Oracle Data Guard(数据卫士)”,原名“Oracle备用数据库(Standby Database)”。第13章将详细介绍Oracle Data Guard。

1.4.5 初始参数文件

当数据库实例启动时,为Oracle实例分配内存,并打开两种初始参数文件中的一种:基于文本的文件,名为init<SID>.ora(一般称为init.ora或PFILE);或者是服务器参数文件(称为SPFILE)。实例首先在操作系统的默认位置(例如Unix上的$ORACLE_HOME/dbs)查找SPFILE:spfile<SID>.ora或spfile.ora。如果这些文件都不存在,实例查找名为init<SID>.ora的PFILE。作为一种选择方案,也可以使用STARTUP命令显式指定用于启动的PFILE。

无论哪种格式,初始参数文件都可以指定跟踪文件、控制文件和填满的重做日志文件等文件的位置。它们也设置系统全局区域(SGA)中各种结构的大小限制,以及限制有多少用户可以同时连接到数据库。

在Oracle 9i以前,使用init.ora文件仍是指定实例初始参数的唯一方法。虽然使用文本编辑器可以很容易地编辑该文件,但有一些缺点。如果在命令行中使用ALTER SYSTEM命令改变动态系统参数,则DBA必须记得改变init.ora文件,从而使新的参数值可以在下次重新启动实例时生效。

SPFILE使DBA可以更简单有效地管理参数。如果将SPFILE用于运行的实例中,那么改变初始参数的任何ALTER SYSTEM命令都可以自动改变SPFILE中的初始参数,或者只改变运行实例的初始参数,或者两者都改动。此过程不需要编辑SPFILE,甚至可以不破坏SPFILE本身。

虽然不能镜像参数文件或SPFILE自身,但可将SPFILE备份到init.ora文件,然后使用常规的操作系统命令或RMAN(在SPFILE的情况下)备份Oracle实例的init.ora和SPFILE。

使用DBCA创建数据库时,默认创建SPFILE。

1.4.6 警报和跟踪日志文件

当出错时,Oracle通常将相关消息写入警报日志(alert log),但在后台进程或用户会话的情况下,会将消息写入跟踪日志(trace log)文件。

警报日志文件位于由初始参数BACKGROUND_DUMP_DEST指定的目录中,它包含例程状态消息和错误条件。启动或关闭数据库时,在警报日志中记录一条消息,同时记录不同于默认值的初始参数列表。此外,DBA提交的任何ALTER DATABASE或ALTER SYSTEM命令都会被记录。涉及表空间及其数据文件的操作也记录在该文件中,例如添加表空间、删除表空间以及将数据文件添加到表空间。错误条件,如空间不足的表空间、损坏的重做日志等,也记录在此处。

Oracle实例后台进程的跟踪文件也通过BACKGROUND_DUMP_DEST定位。例如,PMON(Process Monitor,进程监测)和SMON(System Monitor,系统监测)的跟踪文件在错误发生或SMON需要执行实例恢复时将记录一个条目,QMON(Queue Monitor,队列监测)的跟踪文件在它生成新进程时会记录一条消息。

针对单独的用户会话或数据库连接也会创建跟踪文件。这些跟踪文件位于由初始参数USER_DUMP_DEST指定的目录中。在下面两种情况下会创建用户进程的跟踪文件:第一种情况是因为权限问题、空间不足等而在用户会话中生成某种错误。在第二种情况中,可使用命令ALTER SESSION SET SQL_TRACE=TRUE显式地创建跟踪文件。针对用户执行的每个SQL语句生成跟踪信息,可在调整用户的SQL语句时起到帮助作用。

可在任何时间删除或重命名警报日志文件,下次生成警报日志消息时重新创建警报日志文件。DBA通常建立一个每天执行的批处理作业(通过操作系统机制或Oracle企业管理器的调度程序),用于逐日重命名和归档警报日志。

1.4.7 备份文件

备份文件有多个来源,如操作系统的复制命令或OracleRMAN(恢复管理器)。如果DBA执行“冷”备份(关于备份类型的更多细节请参见1.7节),备份文件就只是数据文件、重做日志文件、控制文件和归档的重做日志文件等文件的操作系统副本。

除了数据文件的逐位图像副本(RMAN中的默认方式),RMAN还可以生成数据文件、控制文件、重做日志文件、归档的日志文件以及SPFILE的完整备份和增量备份,这些备份都采用特殊格式,称为“备份集”,只有RMAN可以读取。RMAN备份集的备份通常小于初始的数据文件,因为RMAN并不备份未使用过的块。

1.4.8 Oracle管理文件

Oracle 9i中引入Oracle管理文件(OMF,Oracle Managed Files),它通过自动创建和删除组成数据库中逻辑结构的数据文件,简化了DBA的工作。

如果没有OMF,DBA可能删除表空间,而忘记删除底层的操作系统文件。这会造成磁盘资源利用率低下,并增加不必要的数据库不再需要的数据文件备份时间。

OMF非常适合于较小的数据库,这种数据库只有少量的用户和兼职DBA,并且不需要生产数据库的优化配置。即使数据库较小,Oracle也建议最好为构成数据库的所有数据文件使用ASM(Automatic Storage Management,自动存储管理),并且建议只使用两个磁盘组,一个用于表和索引段(如+DATA),另一个用于RMAN备份、控制文件的第二个副本、归档重做日志的副本(如+RECOV)。初始参数DB_FILE_CREATE_DEST指向+DATA磁盘组,DB_CREATE_ONLINE_DEST_1指向+DATA磁盘组,DB_CREATE_ONLINE_DEST_2指向+RECOV。联机日志文件目标LOG_ARCHIVE_DEST_n同样如此。

1.4.9 密码文件

Oracle密码文件(password file)是磁盘上的Oracle管理或软件目录结构中的文件,用于对Oracle系统管理员进行身份验证,以执行创建数据库或启动和关闭数据库等任务。通过该文件授予的是SYSDBA和SYSOPER权限。对其他任何类型的用户进行身份验证都在数据库本身完成,因为可能关闭数据库或没有安装数据库,所以在此类情况下就需要另一种形式的管理员身份验证。

如果密码文件不存在或者已经受损,可使用Oracle命令行实用程序orapwd创建密码文件。由于要通过该文件授予非常高的权限,因此应将该文件存储在安全的目录位置,只有DBA和操作系统管理员可以访问该位置。一旦创建这种密码文件,应将初始参数REMOTE_LOGIN_ PASSWORDFILE设置为EXCLUSIVE,允许SYS以外的用户使用密码文件。另外,密码文件必须位于$ORACLE_HOME/dbs目录中。


提示:

创建至少一个非SYS或SYSTEM的用户,该用户具有执行每日管理任务的DBA权限。如果有多个DBA管理一个数据库,则每个DBA都应该有自己的、具有DBA权限的账户。


作为一种备选方案,也可以使用OS身份验证完成对SYSDBA和SYSOPER权限的验证,这种情况下不需要创建密码文件,并应将初始参数REMOTE_LOGIN_PASSWORDFILE设置为NONE。