您的位置:首页 > 数据库 > Oracle

学习《Oracle 9i10g编程艺术》的笔记 (七) 文件

2009-11-27 13:58 225 查看
这一章中,我们将分析构成数据库和实例的8 种文件类型。

与实例相关的文件只有:
参数文件(parameter file):这些文件告诉Oracle 实例在哪里可以找到控制文件,并且指
定某些初始化参数,这些参数定义了某种内存结构有多大等设置。我们还会介绍存储数据库参
数文件的两种选择。
跟踪文件(trace file):这通常是一个服务器进程对某种异常错误条件做出响应时创建的诊
断文件。
警告文件(alert file):与跟踪文件类似,但是包含“期望”事件的有关信息,并且通过一
个集中式文件(其中包括多个数据库事件)警告DBA。
构成数据库的文件包括:
数据文件(data file):这些文件是数据库的主要文件;其中包括数据表、索引和所有其他
的段。
临时文件(temp file):这些文件用于完成基于磁盘的排序和临时存储。
控制文件(control file):这些文件能告诉你数据文件、临时文件和重做日志文件在哪里,
还会指出与文件状态有关的其他元数据。
重做日志文件(redo log file):这些就是事务日志。

密码文件(password file):这些文件用于对通过网络完成管理活动的用户进行认证。我们
不打算详细讨论这些文件。
从Oracle 10g 开始,又增加了两种新的可选文件类型,可以帮助Oracle 实现更快的备份和更快的恢
复操作。这两类新文件是:
修改跟踪文件(change tracking file):这个文件有利于对Oracle 数据建立真正的增量备
份。修改跟踪文件不一定非得放在闪回恢复区(Flash Recovery Area),不过它只与数据库备
份和恢复有关,所以我们将在介绍闪回恢复区时再讨论这个文件。
闪回日志文件(flashback log file):这些文件存储数据库块的“前映像”,以便完成新增
加的FLASHBACK DATABASE 命令。
我们还会讨论通常与数据库有关的其他类型的文件,如:
转储文件(dump file ,DMP file):这些文件由Export(导出)数据库实用程序生成,并
由Import(导入)数据库实用程序使用。
数据泵文件(Data Pump file):这些文件由Oracle 10g 新增的数据泵导出(Data Pump
Export)进程生成,并由数据泵导入(Data Pump Import)进程使用。外部表也可以创建和使
用这种文件格式。
平面文件(flat file):这些无格式文件可以在文本编辑器中查看。通常会使用这些文件向
数据库中加载数据。
以上文件中,最重要的是数据文件和重做日志文件,因为其中包含了你辛辛苦苦才积累起来的数据。
只要有这两个文件,就算是其他文件都没有了,我也能得到我的数据。如果把重做日志文件弄丢失了,可
能会丢失一些数据。如果把数据文件和所有备份都丢失了,那么这些数据就永远也找不回来了。

1.参数文件

与Oracle 数据库有关的参数文件有很多,从客户工作站上的tnsnames.ora 文件(用于“查找”网络
上的一个服务器)到服务器上的listener.ora 文件(用于启动网络监听器),还有sqlnet.ora、cman.ora
和ldap.ora 等文件。不过,最重要的参数文件是数据库的参数文件,如果没有这个参数文件,甚至无法启
动数据库。

数据库的参数文件通常称为初始文件(init file),或init.ora 文件。这是因为历史上它的默认名
就是init<ORACLE_SID>.ora。之所以称之为“历史上”的默认名,原因是从Oracle9i Release 1 以来,
对于存储数据库的参数设置,引入了一个有很大改进的新方法:服务器参数文件( server parameter file),
或简称为SPFILE。这个文件的默认名为spfile<ORACLE_SID>.ora

假设使用一个init.ora 参数文件,而且这个init.ora 参数文件确实在服务器的默认位置上,
那么只需发出CREATE SPFILE 命令,并重启服务器实例就行了:
spfile$ORACLE_SID.ora (Unix environment variable)
spfile%ORACLE_SID%.ora (Windows environment variable)
sys@ORA10G> show parameter spfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string
sys@ORA10G> create spfile from pfile;
File created.
sys@ORA10G> startup force;
ORACLE instance started.
Total System Global Area 603979776 bytes
Fixed Size 780300 bytes
Variable Size 166729716 bytes
Database Buffers 436207616 bytes
这里使用SHOW PARAMETER 命令显示出原先没有使用SPFILE,但是创建SPFILE 并重启实例后,确实
使用了这个SPFILE,而且它采用了默认名。
注意在集群环境中,通过使用Oracle RAC,所有实例共享同一个SPFILE,所以要以一种受控的方式完
成这个转换过程(从PFILE 转换为SPFILE)。这个SPFILE 可以包含所有参数设置,甚至各个实例
特有的设置都可以放在这一个SPFILE 中,但是必须把所有必须的参数文件合并为一个有以下格
式的PFILE。
在集群环境中,为了从使用各个PFILE 转换为所有实例都共享一个公共的SPFILE,需要把各个PFILE
合并为如下一个文件:
Redo Buffers 262144 bytes
Database mounted.
Database opened.
sys@ORA10G> show parameter spfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string /home/ora10g/dbs/spfil
eora10g.ora
*.cluster_database_instances=2
*.cluster_database=TRUE
*.cluster_interconnects='10.10.10.0'
*.compatible='10.1.0.2.0'
*.control_files='/ocfs/O10G/control01.ctl','/ocfs/O10G/control02.ctl'
*.db_name='O10G'
...
*.processes=150
*.undo_management='AUTO'
O10G1.instance_number=1
O10G2.instance_number=2
O10G1.local_listener='LISTENER_O10G1'
O10G2.local_listener='LISTENER_O10G2'
O10G1.remote_listener='LISTENER_O10G2'
O10G2.remote_listener='LISTENER_O10G1'
O10G1.thread=1
O10G2.thread=2
O10G1.undo_tablespace='UNDOTBS1'
O10G2.undo_tablespace='UNDOTBS2'

也就是说, 集群中所有实例共享的参数设置都以*. 开头。单个实例特有的参数设置( 如
INSTANCE_NUMBER 和所用的重做THREAD)都以实例名(Oracle SID)为前缀。在前面的例子中,
PFILE 对应包含两个节点的集群,其中的实例分别为O10G1 和O10G2。
*.db_name = 'O10G'这个赋值指示,使用这个SPFILE 的所有实例会装载一个名为O10G 的
数据库。
O10G1.undo_tablespace='UNDOTBS1'指示,名为O10G1 的实例会使用这个特定的撤销(undo)
表空间,等等

2.跟踪文件

如果开发人员设置了SQL_TRACE=TRUE,服务器就会生成一个包含性能相关信息的跟踪文件。

Oracle 数据库(以及应用服务器和Oracle 应用)都是可以充分测量的。数据库中这种测量性反映在
以下几方面:
V$视图:大多数V$视图都包含“调试”信息。V$WAITSTAT、V$SESSION_EVENT 还有其他许
多V$视图之所以存在,就是为了让我们知道内核内部到底发生了什么。
审计命令:利用这个命令,你能指定数据库要记录哪些事件以便日后分析。
资源管理器(DBMS_RESOURCE_MANAGER):这个特性允许你对数据库中的资源( CPU、I/O 等)
实现微管理。正是因为数据库能访问描述资源使用情况的所有运行时统计信息,所以才可能有
资源管理器。
Oracle“事件”:基于Oracle 事件,能让Oracle 生成所需的跟踪或诊断信息。
DBMS_TRACE:这是PL/SQL 引擎中的一个工具,它会全面地记录存储过程的调用树、所产生
的异常,以及遇到的错误。
数据库事件触发器:这些触发器(如ON SERVERERROR)允许你监控和记录你觉得“意外”
或非正常的情况。例如,可以记录发生“临时空间用尽”错误时正在运行的SQL。
SQL_TRACE:这个SQL 跟踪工具还可以采用一种扩展方式使用,即通过10046 Oracle 事件。

不论是使用SQL_TRACE 还是扩展的跟踪工具,Oracle 都会在数据库服务器主机的以下两个位置生成
一个跟踪文件:
如果使用专用服务器连接,会在USER_DUMP_DEST 参数指定的目录中生成跟踪文件。
如果使用共享服务器连接,则在BACKGROUND_DUMP_DEST 参数指定的目录中生成跟踪文件。
要想知道跟踪文件放在哪里,可以从SQL*Plus 执行SHOW PARAMETER DUMP_DEST 命令来查看,也可以
直接查询V$PARAMETER 视图:

ops$tkyte@ORA10G> select name, value
2 from v$parameter
3 where name like '%dump_dest%'
4 /

3.警告文件

4.数据文件

数据文件和重做日志文件是数据库中最重要的文件。你的数据最终就是要存储在数据文件中。每个数
据库都至少有一个相关的数据文件,通常还不止一个。最简单的“测试”数据库只有一个数据文件。实际
上,在第2 章中我们已经见过一个例子,其中用最简单的CREATE DATABASE 命令根据默认设置创建了一个
数据库,这个数据库中有两个数据文件,其中一个对应SYSTEM 表空间(真正的Oracle 数据字典),另一个
对应SYSAUX 表空间(在10g 及以上版本中,非字典对象都存储在这个表空间中)。不过,所有实际的数据
库都至少有3 个数据文件;一个存储SYSTEM 数据,一个存储SYSAUX 数据,还有一个存储USER 数据。

5.临时文件

Oracle 中的临时数据文件(Temporary data files)即临时文件(temp files)是一种特殊类型的
数据文件。Oracle 使用临时文件来存储大规模排序操作和散列操作的中间结果,如果RAM 中没有足够的空
间,还会用临时文件存储全局临时表数据,或结果集数据。永久数据对象(如表或索引)不会存储在临时
文件中,但是临时表及其索引的内容要存储在临时文件中。所以,你不可能在临时文件中创建表,但是使
用临时表时完全可以在其中存储数据。
Oracle 以一种特殊的方式处理临时文件。一般而言,你对对象所做的每一个修改都会存储在重做日
志中;这些事务日志会在以后某个时间重放以“重做事务”,例如,失败后进行恢复时就可能需要“重做事
务”。临时文件不包括在这个重放过程内。对临时文件并不生成redo 日志,不过可以生成undo 日志。由于
UNDO 总是受redo 的“保护”,因此,这就会生成使用临时表的redo 日志,有关详细内容见第9 章。为全
局临时表生成undo 日志的目的是为了回滚在会话中所做的一些工作,这可能是因为处理数据时遇到一个错
误,也可能因为某个一般性的事务失败。DBA 不需要备份临时数据文件,实际上,备份临时数据文件只会
浪费时间,因为你无法恢复临时数据文件。

6.控制文件

控制文件(control file)是一个相当小的文件(最多能增长到64 MB 左右),其中包含Oracle 需要
的其他文件的一个目录。参数文件告知实例控制文件的位置,控制文件则告知实例数据库和在线重做日志
文件的位置。
控制文件还告知了Oracle 其他一些事情,如已发生检查点的有关信息、数据库名(必须与DB_NAME
参数匹配)、创建数据库的时间戳、归档重做日志的历史(有时这会让控制文件变大)、RMAN 信息等。

开发人员实际上可能不会接触到控制文件。对于DBA 来说,控制文件是数据库中一个非常重要的部分,
但是对于软件开发人员,它们并不是太重要

7.重做日志文件

重做日志文件(redo log file)对于Oracle 数据库至关重要。它们是数据库的事务日志。通常只用
于恢复,不过也可以用于以下工作:
系统崩溃后的实例恢复
通过备份恢复数据文件之后恢复介质
ops$tkyte@ORA10G> !df
Filesystem 1K-blocks Used Available Use% Mounte
d on
/dev/hda2 74807888 44099396 26908460 63% /
/dev/hda1 102454 14931 82233 16% /b
oot
none 1030804 0 1030804 0%
/dev/shm
备用(standby)数据库处理
输入到流中,这是一个重做日志挖掘过程,用于实现信息共享(这也是一种奇特的复制)
重做日志文件的主要目的是,万一实例或介质失败,重做日志文件就能派上用场,或者可以作为一种
维护备用数据库(standby database)的方法来完成故障恢复。如果数据库所在主机掉电,导致实例失败,
Oracle 会使用在线重做日志将系统恢复到掉电前的那个时刻。如果包含数据文件的磁盘驱动器出现了永久
性故障,Oracle 会使用归档重做日志以及在线重做日志,将磁盘驱动器的备份恢复到适当的时间点。另外,
如果你“无意地”删除了一个表,或者删掉了一些重要的信息,而且提交了操作,则可以恢复一个备份,
并让Oracle 使用这些在线和归档重做日志文件将其恢复到意外发生前的那个时刻。

你在Oracle 中完成的每个操作几乎都会生成一定的redo 信息,并写入在线重做日志文件。向表中插
入一行时,插入的最终结果会写入重做日志。删除一行时,则会在重做日志中写入你删除了这一行这一事
实。删除一个表时,删除的效果会写入重做日志。从表中删除的数据不会写入;不过,Oracle 删除表时执
行的递归SQL 确实会生成redo。例如,Oracle 从SYS.OBJ$表(和其他内部字典对象)中删除一行时,这
就会生成redo,另外如果支持不同模式的补充日志(supplemental logging ),还会把具体的DROP TABLE
语句写入重做日志流。

8.密码文件

密码文件(password file)是一个可选的文件,允许远程SYSDBA 或管理员访问数据库。
启动Oracle 时,还没有数据库可以用来验证密码。在“本地”系统上启动Oracle 时(也就是说,不
在网络上,而是从数据库实例所在的机器启动),Oracle 会利用操作系统来执行这种认证。

9.修改跟踪文件

修改跟踪文件(change tracking file)是一个可选的文件,这是Oracle 10g 企业版中新增的。这
个文件惟一的目的是跟踪自上一个增量备份以来哪些块已经修改。采用这种方式,恢复管理器(Recovery
Manager,RMAN)工具就能只备份确实有变化的数据库块,而不必读取整个数据库。

10.闪回日志文件

闪回日志文件(flashback log file)简称为闪回日志(flashback log),这是Oracle 10g 中为支
持FLASHBACK DATABASE 命令而引入的,也是Oracle 10g 企业版的一个新特性。闪回日志包含已修改数据
库块的“前映像”,可用于将数据库返回(恢复)到该时间点之前的状态。

11.DMP 文件(EXP/IMP 文件)

导出工具(Export)和导入工具(Import)是年头已久的Oracle 数据抽取和加载工具,很多个版本
中都有这些工具。导出工具的任务是创建一个平台独立的DMP 文件(转储文件),其中包含所有必要的元数
据(CREATE 和ALTER 语句形式),可能还有数据本身,可以用于重新创建表、模式甚至整个数据库。导入
工具的惟一作用就是读取这些DMP 文件,执行其DDL 语句,并加载它找到的所有数据。

12.数据泵文件

Oracle 10g 中至少有两个工具使用数据泵(data pump)文件格式。外部表(external table)可以
加载和卸载数据泵格式的数据,新的导入/导出工具IMPDP 和EXPDP 使用这种文件格式的方式与IMP 和EXP
使用DMP 文件格式的方式完全一样。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: