oracle数据库物理文件大致有8种:
- 参数文件(parameter file)
- 跟踪文件(trace file)
- 警告文件(alert file)
- 数据文件(data file)
- 临时文件(temp file)
- 控制文件(control file)
- 重做日志文件(redo log file)
- 密码文件(password file)
我认为最重要的是数据文件和重做日志文件。因为就算其他文件都损坏了,我也能恢复出需要的其他数据。
(数据管理的重心是重在预防,而不是亡羊补牢)
控制文件是什么?控制文件的作用?
其实吧,控制文件是一个很小的二进制文件,用于记录数据库的物理结构。
----(也是说,把它需要重建策成跟踪文件才能用文本工具打开阅览内容)。
控制文件记录着oracle很重要的信息。
比如说:
- 创建数据库的时间戳,
- 数据文件的名字及位置,
- 重做日志文件的名字及位置,
- 检查点信息(Checkpoint),
- 表空间信息
- 日志历史记录(Log History)
- 归档日志的信息
- 备份信息
- 当前的日志序列号(Log Sequence Number)
控制文件以数据的重要性来分可分为两种: 不可覆盖部分和可覆盖部分。
不可覆盖部分:记录着数据文件,重做日志文件的名称和位置,表空间信息,检查点信息等。
(数据库启动-->参数文件-->控制文件-->数据,重做日志文件)-----文件的联系
可覆盖部分: 归档日志文件信息和RMAN备份信息。
control_file_record_keep_time参数决定着这两者的保存时间。(一般默认是7天)
与控制文件相关的视图:
v$controlfile_record_section----录了几乎全部的controlfile中的相关信息。
SQL> desc v$controlfile_record_section
Name
----------------
TYPE -------类型
RECORD_SIZE ------每个类型每条记录占用的空间
RECORDS_TOTAL ------每个类型所能保留的最大记录数
RECORDS_USED -------每个类型当前已占用的记录数
FIRST_INDEX
LAST_INDEX
LAST_RECID
v$controlfile---"name列",记录每个控制文件的存储的位置。
或---
参数文件----control_files参数也记录着控制文件的位置.
SQL> select name from v$controlfile
2 /
NAME
--------------------------------------------------------------------------
/home/app/oracle/oradata/orcl/control01.ctl
/home/app/oracle/flash_recovery_area/orcl/control02.ctl
SQL> select value from v$parameter2 where name=<control_files>;
VALUE
-----------------------------------------------------------------------------
/home/app/oracle/oradata/orcl/control01.ctl
/home/app/oracle/flash_recovery_area/orcl/control02.ctl
看来我的oracle的控制文件当前只有一个备份,即共两个而已。
但控制文件太重要了!
oracle官方建议至少应该拥有控制文件的三个以上的副本!
---而您可以通过多路复用技术,将控制文件的副本创建到不同的磁盘上。
然后再修改初始化参数文件spfile中的 control_files 参数,使之包含所有的控制文件.
也就是说,把oracle中的控制文件全包含到spfile文件中。
这样做的好处有哪些呢?
如果你的磁盘坏了,oracle仍能够快速恢复。(是不是很方便?)
-----下面是如何使用多路复用技术了。
1.查看$controlfile,我oracle的控制文件有1个。
SQL> select name from v$controlfile;
NAME
--------------------------------------------------------------------------------
/home/app/oracle/oradata/orcl/control01.ctl
2.oracle离线。
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
3.在你的操作系统上手动备份控制文件。(注意:控制文件的手动备份一定要在数据库停止后再执行!)
[[email protected] ~]$ cp /home/app/oracle/oradata/orcl/control01.ctl /oracle1
[[email protected] ~]$ cp /home/app/oracle/oradata/orcl/control01.ctl /oracle2
4.SQL> startuo nomount
-------非安装启动,这种方式启动下可执行:重建控制文件、重建数据库
5. 接着呢,修改 spfile 中的 control_files 这个属性,为其增加2个控制文件信息,
存放在/oracle1/和/oracle2/下。
SQL> alter system set control_files=
2 </home/app/oracle/oradata/orcl/control01.ctl>,
3 </oracle1/control01.ctl>,
4 </oracle2/control01.ctl> scope=spfile
5 /
System altered.
6.启动oracle,查看控制文件,多了两个控制文件。
SQL> startup
SQL> select name from v$controlfile;
NAME
--------------------------------------------------------------------------------
/home/app/oracle/oradata/orcl/control01.ctl
/oracle1/control01.ctl
/oracle2/control01.ctl
哪些情况需要备份控制文件呢?----
- 增加,删除,或者重命名数据文件时
- 增加,删除表空间时,或者表空间可读可写状态时
- 增加或者删除重做日志文件或组时。
------备份控制文件的命令
alter database backup controlfile to <PATH.bak>;-----PTAH:路径。
----备份到控制文件后,如果突然你三个控制文件都损坏(这个几率太小了。)