Oracle-重建控制文件的方式
简介
控制文件记录了当前数据库的结构信息,如数据文件,日志文件的信息和相关的状态等。它是一个二进制文件。在参数文件中描述控制文件的位置和数量,在数据库实例启动到mount状态时读取控制文件的信息,在open状态中一直被使用,以维护数据库的一致性。
控制文件位置
SHOW PARAMETER CONTROL_FILES
set lines 168 pages 99
col name for a60
select * from v$controlfile;
控制文件的内容
数据字典中查看
col type for a32
select * from V$CONTROLFILE_RECORD_SECTION;
strings 查看控制文件内容
- 数据库的名字,ID、创建的时间戳
- 表空间的名字
- 联机日志文件、数据文件的位置、个数、名字
- 联机日志的Sequence号码
- 检查点的信息
- 撤销段的开始或结束
- 归档信息
- 备份信息
重建控制文件注意事项
重建控制文件时,需要相应的redo logfile和数据文件已存在。
set和reuse database
- set database: 将数据文件头的db_name改成脚本中指定的名称
- reuse database: 读取数据文件头中的db_name并校验脚本中指定的名称是否一致
resetlogs和noresetlogs
-
noresetlogs: 从current的redo logfile中得到系统scn号,数据文件scn号
-
resetlogs: 将redo logfile内容清空,sequence#从1开始
tempfile
控制文件不包含tempfile,可以在open数据库后再创建。
问题
描述
当无备份控制文件的情况下,如何重建
处理方案
获取控制文件的方式
trace文件(需要在mount或open状态)
生成trace文件
alter database backup controlfile to trace as '/tmp/control_rebuild.trc';
生成的trace文件包含了resetlogs和noresetlogs 两个部分。若只需某一部分内容,可执行
alter database backup controlfile to trace as '/tmp/ctl_no.sql' noresetlogs;
alter database backup controlfile to trace as '/tmp/ctl_rel.sql' resetlogs;
查看文件(/tmp/control_rebuild.trc)
重建控制文件脚本
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "O11G" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/ups/data/oradata/o11g/redo01.log' SIZE 50M BLOCKSIZE 512,
GROUP 2 '/ups/data/oradata/o11g/redo02.log' SIZE 50M BLOCKSIZE 512,
GROUP 3 '/ups/data/oradata/o11g/redo03.log' SIZE 50M BLOCKSIZE 512
DATAFILE
'/ups/data/oradata/o11g/system01.dbf',
'/ups/data/oradata/o11g/sysaux01.dbf',
'/ups/data/oradata/o11g/undotbs01.dbf',
'/ups/data/oradata/o11g/users01.dbf',
'/ups/data/oradata/o11g/awrdata01.dbf',
'/ups/data/oradata/o11g/awridx01.dbf',
'/ups/data/oradata/o11g/vpx01.dbf'
CHARACTER SET ZHS16GBK
;
VARIABLE RECNO NUMBER;
EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('ENCRYPTION FOR DATABASE','ON');
RECOVER DATABASE
ALTER SYSTEM ARCHIVE LOG ALL;
ALTER DATABASE OPEN;
ALTER TABLESPACE TEMP ADD TEMPFILE '/ups/data/oradata/o11g/temp01.dbf'
SIZE 309329920 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
事件转储
这种方式不直观友好
alter session set events 'immediate trace name CONTROLF level 12';
或
oradebug setmypid
oradebug tracefile_name
oradebug dump controlf 12
获取trc文件路径
-- 获取trc文件
select pr.value || '/' || i.instance_name || '_ora_' || to_char(ps.spid)
|| '.trc' "trace file name" from v$session s, v$process ps, v$parameter pr, v$instance i
where s.paddr = ps.addr and s.sid = userenv('sid') and pr.name = 'user_dump_dest';
-- 获得当前的spid
select spid from v$process where addr =
(select paddr from v$session where sid =
(select sid from v$mystat where rownum = 1));
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤