oracle创建新的控制文件的方法

发布网友 发布时间:2022-04-20 08:12

我来回答

2个回答

懂视网 时间:2022-05-01 09:00

当这些信息更改或者变动时,oracle数据库会自动把最新信息更新到controlfile文件里面。

启动数据库时,Oracle从初始化参数文件(pfile/spfile)中获得控制文件的名字及位置,打开控制文件,然后从控制文件中读取数据文件和联机日志文件的信息,最后打开数据库。数据库运行时,Oracle会修改控制文件,所以,一旦控制文件损坏,数据库将不能正常运行。


创建控制文件有几个前提和几个区别:

前提:

1.如果是RAC下,则需要关闭群集:

alter system set cluster_database=FALSE scope=spfile sid=‘*‘;

否则恢复的时候会报错;

2.数据库在mount或者OPEN状态下,才能够重建。

区别:

重建控制文件有两种1.resetlogs恢复和noresetlogs恢复方式

下面还是着手恢复步骤:


重建控制文件,

备份方式

Sql>alter  database backup  controlfile to trace  as ‘/u01/controlfile.trcd’;

创建controlfile备份文件到本地

alter database backup controlfile to  ‘+UNDO/ORCL/control‘;

这个是备份控制文件到ASM管理存储里面

如果不知道当前控制文件在哪里

查看位置:select * from v$controlfile;


首先,库能够进入mount状态或者处于OPEN状态:

SQL>startup mount;   或者直接open状态

SQL> alter database backup controlfile to trace as ‘/u01/controlfile.trc‘;

进入/u01/下面

然后编辑这个控制文件

里面包含两部分恢复脚本

一个就是使用norestlogs和另外一个是使用resetlogs恢复的脚本:

内容就不详细全部列出来了:

标识Set #1.NORESETLOGS  case的是使用noresetlogs恢复的

标识Set #1.RESETLOGS  case的是使用resetlogs恢复的

内容如下:

第一个是noresetlogs恢复的脚本

STARTUP NOMOUNT

CREATE CONTROLFILE REUSE DATABASE"ORCL" NORESETLOGS  ARCHIVELOG

    MAXLOGFILES 192

    MAXLOGMEMBERS 3

    MAXDATAFILES 1024

    MAXINSTANCES 32

    MAXLOGHISTORY 292

LOGFILE

  GROUP 1‘+UNDO/orcl/onlinelog/group_1.257.912261307‘  SIZE 50M BLOCKSIZE 512,

  GROUP 2‘+UNDO/orcl/onlinelog/group_2.258.912261307‘  SIZE 50M BLOCKSIZE 512,

  GROUP 3‘+UNDO/orcl/onlinelog/group_3.259.912261453‘  SIZE 50M BLOCKSIZE 512,

  GROUP 4‘+UNDO/orcl/onlinelog/group_4.260.912261453‘  SIZE 50M BLOCKSIZE 512

DATAFILE

 ‘+DATA/orcl/datafile/system.256.912261237‘,

 ‘+DATA/orcl/datafile/sysaux.257.912261239‘,

 ‘+DATA/orcl/datafile/undotbs1.258.912261239‘,

 ‘+DATA/orcl/datafile/users.259.912261239‘,

 ‘+DATA/orcl/datafile/undotbs2.261.912261395‘

CHARACTER SET UTF8

VARIABLE RECNO NUMBER;

EXECUTE :RECNO :=SYS.DBMS_BACKUP_RESTORE.SETCONFIG(‘CONTROLFILE AUTOBACKUP‘,‘ON‘);

RECOVER DATABASE

ALTER SYSTEM ARCHIVE LOG ALL;

ALTER DATABASE OPEN;

ALTER TABLESPACE TEMP ADD TEMPFILE‘+DATA/orcl/tempfile/temp.260.912261313‘

     SIZE 33554432 REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;

下面这就是一个resetlog恢复的脚本:

STARTUP NOMOUNT

CREATE CONTROLFILE REUSE DATABASE"ORCL" RESETLOGS  ARCHIVELOG

    MAXLOGFILES 192

    MAXLOGMEMBERS 3

    MAXDATAFILES 1024

    MAXINSTANCES 32

    MAXLOGHISTORY 292

LOGFILE

  GROUP 1‘+UNDO/orcl/onlinelog/group_1.257.912261307‘  SIZE 50M BLOCKSIZE 512,

  GROUP 2‘+UNDO/orcl/onlinelog/group_2.258.912261307‘  SIZE 50M BLOCKSIZE 512

DATAFILE

 ‘+DATA/orcl/datafile/system.256.912261237‘,

 ‘+DATA/orcl/datafile/sysaux.257.912261239‘,

 ‘+DATA/orcl/datafile/undotbs1.258.912261239‘,

  ‘+DATA/orcl/datafile/users.259.912261239‘,

 ‘+DATA/orcl/datafile/undotbs2.261.912261395‘

CHARACTER SET UTF8

;

VARIABLE RECNO NUMBER;

EXECUTE :RECNO :=SYS.DBMS_BACKUP_RESTORE.SETCONFIG(‘CONTROLFILE AUTOBACKUP‘,‘ON‘);

RECOVER DATABASE USING BACKUP CONTROLFILE

ALTER DATABASE ADD LOGFILE THREAD 2

  GROUP 3‘+UNDO/orcl/onlinelog/group_3.259.912261453‘ SIZE 50M BLOCKSIZE 512 REUSE,

  GROUP 4‘+UNDO/orcl/onlinelog/group_4.260.912261453‘ SIZE 50M BLOCKSIZE 512 REUSE;

ALTER DATABASE OPEN RESETLOGS;

ALTER TABLESPACE TEMP ADD TEMPFILE‘+DATA/orcl/tempfile/temp.260.912261313‘

     SIZE 33554432 REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;


好了,下面开始停库恢复:

启动到nomount状态下:

Startup  nomount

直接在nomount状态下复制粘贴下面这段脚本:

CREATE CONTROLFILE REUSE DATABASE"ORCL" NORESETLOGS  ARCHIVELOG

    MAXLOGFILES 192

    MAXLOGMEMBERS 3

    MAXDATAFILES 1024

    MAXINSTANCES 32

    MAXLOGHISTORY 292

LOGFILE

  GROUP 1‘+UNDO/orcl/onlinelog/group_1.257.912261307‘  SIZE 50M BLOCKSIZE 512,

  GROUP 2‘+UNDO/orcl/onlinelog/group_2.258.912261307‘  SIZE 50M BLOCKSIZE 512,

  GROUP 3‘+UNDO/orcl/onlinelog/group_3.259.912261453‘  SIZE 50M BLOCKSIZE 512,

  GROUP 4 ‘+UNDO/orcl/onlinelog/group_4.260.912261453‘ SIZE 50M BLOCKSIZE 512

DATAFILE

 ‘+DATA/orcl/datafile/system.256.912261237‘,

 ‘+DATA/orcl/datafile/sysaux.257.912261239‘,

 ‘+DATA/orcl/datafile/undotbs1.258.912261239‘,

 ‘+DATA/orcl/datafile/users.259.912261239‘,

 ‘+DATA/orcl/datafile/undotbs2.261.912261395‘

CHARACTER SET UTF8;

好了

现在控制文件创建好了;如果有报错,查看是不是RAC状态下没有关闭集群

查看当前状态:已经到了MOUNTED状态下了

执行后面的:

VARIABLE RECNO NUMBER;

EXECUTE :RECNO :=SYS.DBMS_BACKUP_RESTORE.SETCONFIG(‘CONTROLFILE AUTOBACKUP‘,‘YES‘);

在后面的

RECOVERY DATABASE就不用执行了,因为已经有数据文件了。

这里仅仅只是控制文件没有而已

直接ALTER DATABASE OPEN;

成功启动数据库

最后执行以下TEM表空间

ALTER TABLESPACE TEMP ADD TEMPFILE‘+DATA/orcl/tempfile/temp.260.912261313‘

     SIZE33554432  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;


resetlogs方式重建controlfile

数据文件在,但是日志文件没有是可以用这个方式回复

启动到nomount状态下:

Startup  nomount

直接在nomount状态下复制粘贴下面这段脚本:

CREATE CONTROLFILE REUSE DATABASE"ORCL" RESETLOGS  ARCHIVELOG

    MAXLOGFILES 192

    MAXLOGMEMBERS 3

    MAXDATAFILES 1024

    MAXINSTANCES 32

    MAXLOGHISTORY 292

LOGFILE

  GROUP 1‘+UNDO/orcl/onlinelog/group_1.257.912261307‘  SIZE 50M BLOCKSIZE 512,

  GROUP 2‘+UNDO/orcl/onlinelog/group_2.258.912261307‘  SIZE 50M BLOCKSIZE 512

DATAFILE

 ‘+DATA/orcl/datafile/system.256.912261237‘,

 ‘+DATA/orcl/datafile/sysaux.257.912261239‘,

 ‘+DATA/orcl/datafile/undotbs1.258.912261239‘,

  ‘+DATA/orcl/datafile/users.259.912261239‘,

 ‘+DATA/orcl/datafile/undotbs2.261.912261395‘

CHARACTER SET UTF8;

好了

查看当前状态:已经到了MOUNTED状态下了

执行后面的:

VARIABLE RECNO NUMBER;

EXECUTE :RECNO :=SYS.DBMS_BACKUP_RESTORE.SETCONFIG(‘CONTROLFILE AUTOBACKUP‘,‘YES‘);

这里因为是用resetlogs恢复的所以启动数据库的时候也要resetlogs

ALTER DATABASE OPEN resetlogs;

成功启动数据库

最后执行以下TEM表空间

ALTER TABLESPACE TEMP ADD TEMPFILE‘+DATA/orcl/tempfile/temp.260.912261313‘

     SIZE33554432  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;

Ok这个也恢复成功了。


总结:

两种恢复方式基本一样,只有在启动数据库的时候有差别,可以根据数据库当时情况具体操作。

但是一般情况下不可能出现控制文件丢失。而且控制文件最少要备份两份以上放在不同的位置。



                                                                                          如有不足或缺漏请一起讨论,共同进步

本文出自 “且行且珍惜” 博客,请务必保留此出处http://zjwbk.blog.51cto.com/8740969/1788659

ORACLE之重建控制文件

标签:oracle   数据库   控制文件   controlfile   

热心网友 时间:2022-05-01 06:08

控制文件除了包括数据文件、日志文件信息外,还包含一些与实例密切相关的参数,如maxlogfiles、maxlogmembers、maxloghistory等等。如果在开始创建实例时,这些参数大小设置不是很合理的话,则可能会导致实例的不可用,比如maxdatafiles表示实例中所有数据文件的总数,如果目前所创建的数据文件已经达到这个值,则不能再创建新的数据文件。
创建控制文件的详细步骤:(1)先进行准备工作控制文件必须包含数据文件和日志文件的路径和文件名,所以必须先查询数据文件(查dba_data_files数据字典)和日志文件(查V$logfile数据字典)的详细信息:select member from v$logfile;select name from v$datafile;select value from v$parameter where name='control_files';(2)关闭数据库用immediate或abort关闭数据库sql>connect as sysdbasql>shutdown immediate;(3)备份所有数据文件和重做日志文件当数据库发生变化时,一般情况都要进行备份工作,最好采用操作系统的冷备份对所有数据文件、日志文件及控制文件进行备份。(4)用nomount选项启动数据库sql>startup mount(5)用create controlfile建立控制文件。(6)用脱机方式备份新的控制文件到设备。(7)修改服务参数文件路径spfile.(8)如果丢失联机或归档日志或数据文件,则恢复数据库。否则执行第(9)步骤。(9)使用alter database open命令打开数据库。(10)关闭数据库并备份数据库
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com