【数据库管理】③控制文件
关键文件
(1、系统 TBS文件;2、控制文件;3、日志文件的当前日志文件;4、undo文件)
如果关键文件算坏,则数据库挂起或无法工作
1. 控制文件的功能和特点
1) 定义数据库当前物理状态 -- 控制文件实时更新,不停地记录信息
2) 维护数据的一致性 -- 和数据文件头部记录SCN对比
3) 是一个二进制文件
4) 在mount阶段被读取
5) 记录RMAN备份的元数据
2. 查看控制文件位置的方法
2.1 参数查看
[oracle@oracle-db-19c ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Fri Mar 31 09:12:22 2023
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL> show user;
USER is "SYS"
SQL> show con_name;
CON_NAME
------------------------------
CDB$ROOT
SQL>
SQL> show parameter control_file
NAME TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
control_file_record_keep_time integer
7
control_files string
/u02/oradata/CDB1/control01.ct
l, /u02/oradata/CDB1/control02
.ctl
SQL>
+++++++++++++++++++++++++++++++++++++++++++++++
-- control_file_record_keep_time 7 :RMAN元数据保留天数
-- 两个目录,控制文件内容一样,多路复用
2.2 进入目录下查看
[oracle@oracle-db-19c dbhome_1]$ cd /u02/oradata/CDB1/
[oracle@oracle-db-19c CDB1]$ pwd
/u02/oradata/CDB1
[oracle@oracle-db-19c CDB1]$ ls -ltr
2.3 视图查看
SQL>
SQL> select name from v$controlfile;
NAME
--------------------------------------------------------------------------------
/u02/oradata/CDB1/control01.ctl
/u02/oradata/CDB1/control02.ctl
SQL>
3. 控制文件多元化
1).配置多个control_files,控制文件最好有三个,是相互镜像的(shutdown下cp命令复制即可),然后修改spfile control_files参数,Oracle建议分配在不同的物理磁盘上.
[oracle@oracle-db-19c CDB1]$ pwd
/u02/oradata/CDB1
[oracle@oracle-db-19c CDB1]$ mkdir -p /u02/disk1
[oracle@oracle-db-19c CDB1]$ cp /u02/oradata/CDB1/control01.ctl /u02/disk1/control01.ctl
[oracle@oracle-db-19c CDB1]$ cp /u02/oradata/CDB1/control01.ctl /u02/disk1/control02.ctl
[oracle@oracle-db-19c CDB1]$ cp /u02/oradata/CDB1/control01.ctl /u02/disk1/control03.ctl
[oracle@oracle-db-19c CDB1]$ cp /u02/oradata/CDB1/control01.ctl /u02/disk1/control04.ctl
[oracle@oracle-db-19c CDB1]$ rm -rf /u02/disk1/control01.ctl
[oracle@oracle-db-19c CDB1]$ rm -rf /u02/disk1/control02.ctl
[oracle@oracle-db-19c CDB1]$
SQL> alter system set control_files='/u02/oradata/CDB1/control01.ctl','/u02/oradata/CDB1/control02.ctl','/u02/disk1/control03.ctl', '/u02/disk1/control04.ctl' scope=spfile;
2).三个control文件要一致(同一版本,scn相同)
-rw-r----- 1 oracle oinstall 7356416 07-16 20: 00 control01.ctl
-rw-r----- 1 oracle oinstall 7356416 07-16 20: 01 control02.ctl
-rw-r----- 1 oracle oinstall 7356416 07-16 20: 01 control03.ctl
-rw-r----- 1 oracle oinstall 7356416 07-16 20: 01 control04.ctl
3).控制文件查看
v$controlfile 、show parameter controlfile、 v$parameter
4. 控制文件的重建与备份
4.1 trace 文件
可以在mount或open模式下生成一个脚本,用于控制文件重建.(热备)
生成的trace 文件在udump的最新trc文件里
SQL> alter database backup controlfile to trace;
-- 或者指定目录
SQL> alter database backup controlfile to trace as '/u01/app/oracle/oradata/orcl/con.trace';
4.2 binary 文件
控制文件的备份(二进制备份).(热备)
alter database backup controlfile to '/u01/app/oracle/oradata/orcl/con.bak';
5. 控制文件手工恢复
控制文件一旦损坏,系统将崩溃或死机.
单个文件损坏了 :数据库关闭,使用操作系统命令复制其副本到指定的位置.
所有的控制文件丢失 :(正常关闭,shutdown immediate后删除控制文件)
假设控制文件的备份也没有,利用前面做的trace文件重新生成控制文件在nomount 状态下执行trace脚本
5.1 关闭数据库
SQL> shutdown immediate
5.2 删除控制文件
[oracle@oracle-db-19c orcl]$ rm *.ctl # 删除后缀.ctl的控制文件
5.3 启动数据库started
SQL> startup
SQL> select status from v$instance;
STATUS
---------------
STARTED
5.5 执行con.trace脚本生成控制文件
SQL>
CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/u01/app/oracle/oradata/orcl/redo01.log' SIZE 50M BLOCKSIZE 512,
GROUP 2 '/u01/app/oracle/oradata/orcl/redo02.log' SIZE 50M BLOCKSIZE 512,
GROUP 3 '/u01/app/oracle/oradata/orcl/redo03.log' SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
'/u01/app/oracle/oradata/orcl/system01.dbf',
'/u01/app/oracle/oradata/orcl/test01.dbf',
'/u01/app/oracle/oradata/orcl/sysaux01.dbf',
'/u01/app/oracle/oradata/orcl/undotbs01.dbf',
'/u01/app/oracle/oradata/orcl/example01.dbf',
'/u01/app/oracle/oradata/orcl/users01.dbf',
'/u01/app/oracle/oradata/orcl/tbs16k01.dbf'
CHARACTER SET AL32UTF8
;
5.6 重建控制文件主要有两大部分内容
[oracle@oracle-db-19c orcl] $ ll
# 可以看到执行后三个控制文件又重新建立了.
说明: 这个重建控制文件的过程主要有两大部分内容:
第一部分是脚本中的可见信息:
1)定义了几个参数的最大值
2)在线日志的物理信息
3)数据文件的物理信息
4)使用的字符集.
第二部分是隐含的不可见信息:
比如SCN信息,关键步骤是将当前所有数据文件头部的最新SCN信息复制到了控制文件中.以便接下来打开数据库.
SQL>
SQL> select file#, checkpoint_change# from v$datafile; -- 从控制文件读出
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 31445128
3 31445128
4 31445128
5 2160789
6 2160789
7 31445128
8 2160789
9 31445128
10 31445128
11 31445128
12 31445128
FILE# CHECKPOINT_CHANGE#
---------- ------------------
13 31445128
14 31445128
15 31445128
16 31445128
85 31445128
126 31445128
127 31445128
154 31445128
155 31445128
162 21742070
163 31445128
FILE# CHECKPOINT_CHANGE#
---------- ------------------
164 21742070
165 21742070
166 21742070
169 31445128
181 31445128
27 rows selected.
SQL> select file#, checkpoint_change# from v$datafile_header; -- 从数据文件读出
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 31445128
3 31445128
4 31445128
5 2160789
6 2160789
7 31445128
8 2160789
9 31445128
10 31445128
11 31445128
12 31445128
FILE# CHECKPOINT_CHANGE#
---------- ------------------
13 31445128
14 31445128
15 31445128
16 31445128
85 31445128
126 31445128
127 31445128
154 31445128
155 31445128
162 21742070
163 31445128
FILE# CHECKPOINT_CHANGE#
---------- ------------------
164 21742070
165 21742070
166 21742070
169 31445128
181 31445128
27 rows selected.
SQL>
-- 控制文件已创建
5.7 处于MOUNTED状态
SQL> select status from v$instance;
STATUS
------------------------------------
MOUNTED
SQL>
5.8 打开数据库
SQL> alter database open resetlogs;
所有的控制文件丢失,利用控制文件备份(手动备份或RMAN备份都可以)恢复控制文件.(有点复杂,留在053备份恢复中再介绍)
相关文章
- AirDroid2-用浏览器控制安卓设备
- Matlab仿真PID控制(带M文件、simulink截图和参数分析)
- 十字路口的交通灯控制系统_十字路口红绿灯控制程序设计
- 技术分享 | OceanBase 数据处理之控制文件
- SQLServer 错误 8996 对象 ID O_ID,索引 ID I_ID,分区 ID PN_ID,分配单元 ID A_ID(类型为 TYPE)的 IAM 页 P_ID 控制着文件组 FG_ID1 中的页,这些页应该在文件组 FG_ID2 中。 故障 处理 修复 支持远程
- Linux下控制文件覆盖权限的技巧(linux文件覆盖权限)
- Oracle控制文件的路径指定与管理(oracle控制文件路径)
- Oracle重建控制文件:一键搞定(oracle重建控制文件)
- Oracle参数文件: 控制服务器性能的重要工具(oracle参数文件作用)
- Oracle数据库控制文件的重要性(oracle中控制文件)
- Oracle中的事务控制与锁定机制(oracle中事务和锁)
- Oracle中的ck控制文件的关键保护(oracle中ck是什么)
- Oracle数据库三个控制文件的作用(oracle三个控制文件)
- 如何用javascript控制上传文件的大小
- Js控制表单域代码