总结控制文件 backup/restore/recover

本文介绍了Oracle数据库控制文件的备份与恢复方法,包括通过RMAN进行数据控制文件的备份和恢复、通过热备份恢复控制文件、在归档模式下创建控制文件等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,通过rman 备份数据控制文件,及恢复!  ---归档模式下
备份: 
   rman target /      ---归档下  -open
   backup current controlfile format '/u01/app/%U_%T.controlfil';
  
   remove  controlfile 所有控制文件
 恢复
  
 startup nomount 
 rman target /
 RMAN> restore controlfile from '/u01/app/01nvl5v2_1_1_20130117_control';
 RMAN> alter database mount;
 RMAN> recover database;
 RMAN> alter database open resetlogs;  --使用日志恢复


2,通过 通过热备份,恢复控制文件   -----hot backup --归档模式下

 备份:
 alter system switch logfile 
  alter database  backup controlfile  to '/u01/app/oracle/oradata/orcl/rectl.bak';

【---SQL> alter database backup controlfile to '/home/oracle/hotbk/ctl.bk';    --备份控制文件,以2进制形式备份,系统会自动去寻找该库   
             下的控制文件备份。
----SQL> alter database backup controlfile to trace as '/home/oracle/hotbk/ctl.bk.txt';  --备份控制文件,以文本形式备份,系统自动去寻
               找该库下的控制文件备份。】

 remove controlfile 
 恢复:
 查看 show parameter controlfile 路径下,对应的控制文件是否存在,还是部分丢失
  cp 备份 controlfile到对应的目录下
  startup nomount 
  alter database mount 
   alter database open resetlogs;

3, 通过 创建控制文件,在归档的下 ---模拟在归档下,控制文件丢失,重建控制文件
  
  控制文件主要包括a, group redo 日志组 b,datafile c,参数值 d, 字符集
 select name from v$controlfile;
 select name from v$controlfile;
 select name from v$controlfile;      --记住路径

startup nomount 下,创建controlfile 

{
create  controlfile reuse  set database  "库名" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 454
LOGFILE
GROUP 1 '/u01/app/oracle/oradata/gtadb1/redo01.log' size 50m,
GROUP 2 '/u01/app/oracle/oradata/gtadb1/redo02.log' size 50m,
GROUP 3 '/u01/app/oracle/oradata/gtadb1/redo03.log' size 50m
DATAFILE
'/u01/app/oracle/oradata/gtadb1/system01.dbf',
'/u01/app/oracle/oradata/gtadb1/sysaux01.dbf',
'/u01/app/oracle/oradata/gtadb1/undotbs01.dbf',
'/u01/app/oracle/oradata/gtadb1/users01.dbf',
'/u01/app/oracle/oradata/gtadb1/example01.dbf'
character set zhs16gbk;
}

 alter database open resetlogs
     ----这样数据不会丢失,历史数据文件存在,redo日志存在的话---数据不会丢失!

4 非归档 下面,   -----历史数据文件存在的话,redo 日志不存在的话,会丢部分数据。
   具体  同上   ,只是参数不同!


创建控制文件 的参数信息:  ---同时需要对应spfile 文件修改






一、Oracle 控制文件

        为二进制文件,初始化大小由CREATE DATABASE指定,可以使用RMAN备份

        记录了当前数据库的结构信息,同时也包含数据文件及日志文件的信息以及相关的状态,归档信息等等

        在参数文件中描述其位置,个数等等。通常采用分散放开,多路复用的原则。在mount阶段被读取,open阶段一直被使用

        维护数据库一致性(数据库启动时会比较控制文件与联机日志文件中的ckpt,即起始scn号,如相等则正常启动,否则需要介质恢复)

        一个控制文件只能属于一个数据库

        控制文件的任意修改将写入到初始化参数中指定的所有控制文件中,读取时则仅读取第一个控制文件

        控制文件只能连接一个数据库,控制文件的大小一般不要超过MB,最多为个,最少一个,互为镜像

               

        控制文件中包含的内容

            数据库的名字、ID、创建的时间戳

            表空间的名字

            联机日志文件、数据文件的位置、个数、名字

            联机日志的Sequence号码

            检查点的信息

            撤销段的开始或结束

            归档信息

            备份信息

   

二、查看控制文件的相关信息

    1.使用相关视图来查看

        V$CONTROLFILE                   --列出实例中所有控制文件的名字及状态信息

        V$PARAMETER                     --列出所有参数的位置及状态信息

        V$CONTROLFILE_RECORD_SECTION    --列出控制文件中记录的部分信息

        SHOW PARAMETER CONTROL_FILES    --列出控制文件的名字、状态、位置等

 

        SQL> select * from v$controlfile;

        STATUS  NAME                                               IS_ BLOCK_SIZE FILE_SIZE_BLKS

        ------- -------------------------------------------------- --- ---------- --------------

                /u01/app/oracle/oradata/orcl/control01.ctl         NO       16384            430

                /u01/app/oracle/oradata/orcl/control02.ctl         NO       16384            430

                /u01/app/oracle/oradata/orcl/control03.ctl         NO       16384            430

       

SQL> select name,type,value from  v$parameter where name like '%control%';

 

NAME                                 TYPE VALUE

 ------------------------------ ---------- ------------------------------------------------------------

control_files                           2 /u01/app/oracle/oradata/orcl/control01.ctl, /u01/app/oracle/

                                        oradata/orcl/control02.ctl, /u01/app/oracle/oradata/orcl/con

                                        trol03.ctl

control_file_record_keep_time           3 7

       

SQL> select * from v$controlfile_record_section;

TYPE                         RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX LAST_INDEX LAST_RECID

---------------------------- ----------- ------------- ------------ ----------- ---------- ----------

DATABASE                             316             1            1           0          0          0

CKPT PROGRESS                       8180            11            0           0          0          0

 REDO THREAD                          256             8            1           0          0          0

 REDO LOG                              72            16            9           0          0         20



 SQL> show parameter control_files;

 NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

control_files                        string      /u01/app/oracle/oradata/orcl/c

                                                ontrol01.ctl, /u01/app/oracle/

                                                  oradata/orcl/control02.ctl, /u

                                                  01/app/oracle/oradata/orcl/con

                                                  trol03.ctl

SQL> select controlfile_sequence# from v$database;

 

CONTROLFILE_SEQUENCE#

---------------------

               985      


 

ORA-25153: 临时表空间为空


今天做flashback table实验时出现了报错,下面谈谈处理过程:

ORA-25153: 临时表空间为空

1.做闪回表的第一步要对表t启用row movement

SQL> alter table t enable row movement;

表已更改。

2.查询当前的scn

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
     592774

3.往表里插入一个数据,并commit

SQL> insert into t values(123456,100);

已创建 1 行。

SQL> commit;

提交完成。

4.执行闪回表操作,此时报了个ORA-25153
SQL> flashback table t to scn 592774;
flashback table t to scn 592774
                *
第 1 行出现错误:
ORA-00604: 递归 SQL 级别 1 出现错误
ORA-25153: 临时表空间为空

思路:

我数据的版本是10.2.0.1,之前做过控制文件恢复,导致临时表空间为空,|这是10g的一个bug,在11g里已经没有这个问题(以上两句不知是否正确)|。

1.首先查看dba_tablespaces,表空间都online

SQL> select tablespace_name,status from dba_tablespaces;

TABLESPACE_NAME                STATUS
------------------------------ ---------
SYSTEM                         ONLINE
UNDOTBS1                       ONLINE
SYSAUX                         ONLINE
TEMP                           ONLINE
USERS                          ONLINE

2.查看dba_temp_files

SQL> select tablespace_name,file_name from dba_temp_files;

未选定行

SQL> alter database  default temporary tablespace temp;
alter database  default temporary tablespace temp
*
第 1 行出现错误:
ORA-12907: 表空间 TEMP 已经是默认的临时表空间

问题就出在这里了,临时数据文件丢了。现在来加一个


正常情况下,一个sql执行之后,返回结果后系统会自动收回分配给这个用户的空间。以便可以把此部分空间再分配给其他用户。
好了,既然问题出在临时表空间,那就查看一下临时表空间信息:
   select * from dba_tablespaces;
   select * from dba_temp_files;
   select * from v$tempfile

方法一、增大临时文件大小:

  SQL> alter database tempfile ‘/u01/app/oracle/oradata/orcl/temp01.dbf’ resize100m;

  Database altered.

  方法二、将临时数据文件设为自动扩展:

  SQL> alter database tempfile ‘/u01/app/oracle/oradata/orcl/temp01.dbf’ autoextend on next 5m maxsize unlimited;



SQL> alter tablespace temp add tempfile 'D:\oracle\product\10.2.0\oradata\test\TEMP01.DBF'size 21M autoextend off;;

表空间已更改。

SQL> select tablespace_name,file_name from dba_temp_files;

TABLESPACE_NAME
------------------------------
FILE_NAME
--------------------------------------------------------------------------------
TEMP
D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\TEMP01.DBF

现在再执行闪回表:
SQL> flashback table t to scn 592774;

闪回完成。

SQL> select * from t;

        ID         AA
---------- ----------
         1        100
        12        100
       123        100
      1234        100
     12345        100

成功了


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值