管理控制文件和日志文件
Oralce控制文件:
在Oracle数据库启动时,需要打开控制文件,因为它保存了Oracle系统所需要的其他文件的存储目录和物理数据库相关的状态信息。Oracle系统利用控制文件打开数据库文件、日志文件等,从而打开数据库。
控制文件是Oracle数据库中最重要的物理文件,它以一个非常小的二进制文件存在,其中主要保存了以下内容:
· 数据库名和标识
· 数据库创建时的时间
· 表空间名
· 数据文件和日志文件的名称和位置
· 当前日志文件的序列号
· 最近检查点信息
· 恢复管理器的信息
控制文件在数据库启动的Mount阶段被读取,一个控制文件只能与一个数据库相关联,即控制文件与数据库是一对一的关系。控制文件应该放在不同的硬盘上,以防止控制文件的失效造成数据库无法启动,控制文件的大小在create database语句中被初始化。
当成功启动数据库后,在数据库的运动过程中,数据库服务器可以不断地修改控制文件中的内容。所有在数据库被打开阶段,控制文件都是可读写的。但是其他任何用户都无法修改控制文件。只有数据库服务器可以修改控制文件中的信息。
由于控制文件关系到数据库的正常运行,所以控制文件的管理非常重要。控制文件的管理策略主要有:使用多路复用控制文件和备份控制文件。
· 1、多路复用控制文件:为一个数据库创建多个控制文件,一般将控制文件存放在不同的磁盘中,进行多路复用。Oracle一般会默认创建3个包含相同信息的控制文件,目的是当其中一个受损时,可以调用其他控制文件继续工作。
· 2、备份控制文件
备份控制文件比较容易理解,就是每次对数据库的结构做出修改后,重新备份控制文件。
(添加、删除或重命名数据文件)
(添加、删除表空间或者修改表空间状态)
(添加、删除日志文件)

管理控制文件
1、创建控制文件
create controlfile
reuse database "database name"
[resetlogs | noresetlogs]
[archivelog | noarchivelog]
maxlogfiles number
maxlogmembers number
maxdatafiles number
maxinstances number
maxloghistory number
logfile
GROUP group_number logfile_name [SIZE number K | M][,...]
datafile_name[,...];
Oracle数据库在启动时需要访问控制文件,这是因为控制文件中包含了数据库的数据文件和日志文件信息。也因此,在创建控制文件时,需要指定与数据相关的日志文件与数据文件。
创建一个控制文件具体步骤:
① 查询数据库中的数据文件和日志文件信息,了解文件的路径和名称。
可通过v$datafile数据字典查询数据文件的信息。
可通过v$logfile数据字典查询日志文件的信息
② 关闭数据库
③ 备份前边①中查询出来的所有数据文件和日志文件。备份方式有很多种,建议使用操作系统冷备份方式。
④ 使用startup nomount命令启动数据库实例。但不可打开数据库
⑤ 创建新的控制文件,在创建时指定前面查询出来的所有数据文件和日志文件。
⑥ 修改服务器参数文件spfile中参数control_files的值,让新创建的控制文件生效。
首先通过v$controlfile数据字典了解控制文件的信息
然后修改参数control_files的值,让它指向上述几个控制文件。
⑦ 最后使用ALTER DATABASE OPEN命令打开数据库。
注意:如果在创建控制文件时使用了resetlogs选项,则应该使用如下命令打开数据库:
查询控制文件信息
Oracle提供了3个数据字典来查看不同的控制文件信息:
v$controlfile:包含所有控制文件的名称和状态信息。
v$parameter:包含系统的所有初始化参数,其中包括与控制文件相关的参数control_files。
v$control_record_section:包含控制文件中各个记录文档段的信息。
备份控制文件
为了进一步降低因控制文件受损而影响数据库正常运行的可能性,确保数据库的安全,DBA需要在数据结构发生改变时,立即备份控制文件。Oracle允许将控制文件备份为二进制文件或脚本文件。
备份为二进制文件
备份为二进制文件,实际上就是复制控制文件。这需要使用alter database backup controlfile语句,并指定目标文件位置。
备份为脚本文件
生成脚本的文件将自动存放到系统定义的目录中,并由系统命名。该目录由参数user_dump_dest参数指定。可以使用show parameter语句查询该参数的值。
查看该文件
系统自动为脚本文件命名的格式为:<sid>_ora_<spid>.trc 其中<sid>标识当前会话的标识号,<spid>表示操作系统进程标识号。

恢复控制文件
1、部分控制文件损坏的情况
如果数据库正在运行,我们应该先关闭数据库,再将完整的控制文件复制到已经丢失或者出错的控制文件位置,但是要更改该丢失或者出错的控制文件的名字。
如果存储丢失控制文件的目录也被破坏,则需要创建一个新的用于存储新的控制文件,并为该控制文件命名。此时需要修改数据库初始化参数中文件的位置信息。
2、控制文件全部丢失或者损坏的情况
此时应该使用备份的控制文件重建控制文件,这也是为什么Oracle强调在数据库结构发生变化后要进行控制文件备份的原因。
Step1:以sysdba身份连接到Oracle,使用shutdown immediate命令关闭数据库。
Step2:在操作系统中使用完好的控制文件副本覆盖损坏的控制文件。
Step3:使用startup启动并打开数据库。执行startup命令时,数据库以正常方式启动数据库,加载数据文件,并且打开数据库。
3、手动重建控制文件
在使用备份的脚本文件重建控制文件时,通过TRACE文件重新定义数据库的日志文件、数据文件、数据库名及其他一些参数信息。然后执行该脚本,重新执行一个可用的控制文件。
在特殊情况下,需要移动控制文件,例如磁盘出现故障,导致应用中的控制文件所在的物理位置无法访问。
移动控制文件,实际上就是改变服务器参数文件spfile中的参数文件control_files的值,让该参数指向一个新的控制文件路径。当然,首先需要有一个完好的控制文件副本。
实验区:
Step1:查看当前控制文件所在的位置
Step2:用alter system语句修改服务器参数文件spfile中的control_files参数的值为新路径下的控制文件
Step3:使用shutdown immeidate命令关闭数据库
Step4:使用startup命令启动并打开数据库,控制文件移动成功。
Step5:再次查看移动后的控制文件所在位置。

小陈今天的分享就到这里啦!
期待与你下一期的邂逅!