Oracle-重建控制文件的方式

时间:2021-08-25 18:04:45   收藏:0   阅读:10

简介

控制文件记录了当前数据库的结构信息,如数据文件,日志文件的信息和相关的状态等。它是一个二进制文件。在参数文件中描述控制文件的位置和数量,在数据库实例启动到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 查看控制文件内容

技术分享图片

重建控制文件注意事项

重建控制文件时,需要相应的redo logfile和数据文件已存在。

set和reuse database

resetlogs和noresetlogs

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));

原文:https://www.cnblogs.com/binliubiao/p/15184641.html

评论(0)
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!