暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle(八)管理控制文件

362
//
Oracle 11g
//


管理控制文件和日志文件

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:再次查看移动后的控制文件所在位置。



END


小陈今天的分享就到这里啦!

期待与你下一期的邂逅!


文章转载自小陈的技术博客,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论