ORACLE控制文件一致性【weber出品】

一、首先控制文件有什么作用呢?

控制文件记录了如下信息:1、数据库的创建时间2、数据文件的位置3、日志文件的位置等作用是指导数据库 找到数据文件,日志文件并将数据库启动到 open 状态。

与其用文字来描述,不如我们来看看control_file里面有些什么好了。然后在一一分析:

SQL> show parameter control_file

NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time         integer     7
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

可以看出来control_file的位置在 /u01/app/oracle/oradata/orcl/这目录下。

SQL> alter database backup controlfile to trace;

我们到这个目录去:/u01/app/oracle/admin/orcl/udump

[[email protected] udump]$ ls -l
total 192
-rw-r----- 1 oracle oinstall   854 Sep 15 11:46 orcl_ora_10453.trc
-rw-r----- 1 oracle oinstall 12332 Sep 17 20:02 orcl_ora_14205.trc
-rw-r----- 1 oracle oinstall   705 Sep 16 14:59 orcl_ora_21120.trc
-rw-r----- 1 oracle oinstall   726 Sep 16 14:59 orcl_ora_21124.trc
-rw-r----- 1 oracle oinstall   855 Sep 15 11:49 orcl_ora_23699.trc
-rw-r----- 1 oracle oinstall   855 Sep 16 21:38 orcl_ora_23743.trc

找到一个时间是今天的以.trc结尾的文件。用vi来打开它。

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,
  GROUP 2 ‘/u01/app/oracle/oradata/orcl/redo02.log‘  SIZE 50M,
  GROUP 3 ‘/u01/app/oracle/oradata/orcl/redo03.log‘  SIZE 50M
-- STANDBY LOGFILE
DATAFILE
  ‘/u01/app/oracle/oradata/orcl/system01.dbf‘,
  ‘/u01/app/oracle/oradata/orcl/undotbs01.dbf‘,
  ‘/u01/app/oracle/oradata/orcl/sysaux01.dbf‘,
  ‘/u01/app/oracle/oradata/orcl/users01.dbf‘,
  ‘/u01/app/oracle/oradata/orcl/example01.dbf‘
CHARACTER SET AL32UTF8

可以看到里面记录着数据文件和日志文件的存放位置。

二、控制文件有三个,三个控制文件都是一模一样的。这是用来冗余备份,如果其中一个坏了,可以用另外的一个给重新覆盖。我们接下来模拟一个环境。我们把其中一个控制文件给破干掉:

[[email protected] orcl]$ ls
control01.ctl  control03.ctl  redo01.log  redo03.log    system01.dbf  undotbs01.dbf
control02.ctl  example01.dbf  redo02.log  sysaux01.dbf  temp01.dbf    users01.dbf
[[email protected] orcl]$ mv control03.ctl ./control03.ctl.bak
[[email protected] orcl]$ ls
control01.ctl  control03.ctl.bak  redo01.log  redo03.log    system01.dbf  undotbs01.dbf
control02.ctl  example01.dbf      redo02.log  sysaux01.dbf  temp01.dbf    users01.dbf

然后我们登入启动一下:

SQL> startup
ORACLE instance started.

Total System Global Area  608174080 bytes
Fixed Size            1275128 bytes
Variable Size          222300936 bytes
Database Buffers      381681664 bytes
Redo Buffers            2916352 bytes
ORA-00205: error in identifying control file, check alert log for more info

我们打开报警文件看看:

[[email protected] bdump]$ pwd
/u01/app/oracle/admin/orcl/bdump

vi 查看一下:alert_orcl.log
Wed Sep 17 20:34:18 CST 2014
ORA-00210: cannot open the specified control file
ORA-00202: control file: ‘/u01/app/oracle/oradata/orcl/control03.ctl‘
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory

很明显的说是打不开,废话,肯定打不开,我都给干掉了你找得到才怪了。

这个是有我给大家指出两条解决思路:

方法一:修改spfile,不是说spfile里面记录着参数文件的位置嘛,而且肯定是记录着3条位置,那么我们就把其中第三个控制文件干掉

过程:

创建一个pfile,因为spfile是二进制文件,不可以修改SQL> create pfile=‘/u01/pfile.ora‘ from spfile;

File created.

然后编辑一下参数文件pfile:

[[email protected] dbs]$ cd /u01
[[email protected]-oracle u01]$ ls
oracle  pfile.ora
[[email protected]-oracle u01]$ vi pfile.ora

*.control_files=tl‘,‘/u01/oracle/oradata/orcl/control02.ctl‘,‘/u01/oracle/oradata/orcl/control03.ctlorcl.__db_cache_size=176160768
orcl.__java_pool_size=4194304
orcl.__large_pool_size=4194304
orcl.__shared_pool_size=92274688
orcl.__streams_pool_size=0
*.audit_file_dest=‘/u01/oracle/admin/orcl/adump‘
*.background_dump_dest=‘/u01/oracle/admin/orcl/bdump‘
*.compatible=‘10.2.0.1.0‘
*.control_files=‘/u01/oracle/oradata/orcl/control02.ctl‘,‘/u01/oracle/oradata/orcl/control01.ctl‘ ----亮点在这里,原先是有01,02,03个控制文件,我给删了就可以让数据库启动的时候不去找第三个,丢了就丢了吧。
*.core_dump_dest=‘/u01/oracle/admin/orcl/cdump‘
*.db_block_size=8192
*.db_domain=‘‘
*.db_file_multiblock_read_count=16
*.db_name=‘orcl‘
*.db_recovery_file_dest=‘/u01/oracle/flash_recovery_area‘
*.db_recovery_file_dest_size=2147483648
*.dispatchers=‘(PROTOCOL=TCP) (SERVICE=orclXDB)‘
*.job_queue_processes=10
*.open_cursors=300
*.pga_aggregate_target=93323264
*.processes=150
*.remote_login_passwordfile=‘EXCLUSIVE‘
*.sga_target=279969792
*.undo_management=‘AUTO‘
*.undo_tablespace=‘UNDOTBS1‘
*.user_dump_dest=‘/u01/oracle/admin/orcl/udump‘

重新创建一下就好spfile了:

SQL> create spfile from pfile=‘/u01/pfile.ora‘;

File created.

SQL> startup;
ORACLE instance started.

Total System Global Area  281018368 bytes
Fixed Size                  2020192 bytes
Variable Size             100666528 bytes
Database Buffers          176160768 bytes
Redo Buffers                2170880 bytes
Database mounted.Database opened.
--看到没有,数据库只用2个控制文件也是可以启动的。
SQL> show parameter control

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time        integer     7
control_files                        string      /u01/oracle/oradata/orcl/contr
                                                 ol02.ctl, /u01/oracle/oradata/
                                                 orcl/control01.ctl

方法二:不是说3个控制文件都一模一样的嘛,那为何不拷贝后重命名不就可以了呢

过程:

[[email protected] orcl]$ cp control01.ctl control03.ctl
[[email protected] orcl]$ ls
control01.ctl  control03.ctl.bak  redo02.log    system01.dbf   users01.dbf
control02.ctl  example01.dbf      redo03.log    temp01.dbf
control03.ctl  redo01.log         sysaux01.dbf  undotbs01.dbf

启动一下:

SQL> show parameter control_file

NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time         integer     7
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

  还是一样可以。

时间: 2024-10-07 14:27:36

ORACLE控制文件一致性【weber出品】的相关文章

Oracle 控制文件(CONTROLFILE)

--============================= -- Oracle 控制文件(CONTROLFILE) --============================= 一.Oracle 控制文件 为二进制文件,初始化大小由CREATE DATABASE指定,可以使用RMAN备份 记录了当前数据库的结构信息,同时也包含数据文件及日志文件的信息以及相关的状态,归档信息等等 在参数文件中描述其位置,个数等等.通常采用分散放开,多路复用的原则.在mount阶段被读取,open阶段一直被使

Oracle控制文件与参数文件管理_超越OCP精通Oracle视频教程培训13

Oracle视频教程目标 Oracle视频教程,风哥本套oracle教程培训学习Oracle Parameter参数文件与Oracle控制文件controlfile的深入解析,如何修改参数文件,Oracle控制文件的作用,针对Resetlogs和NoResetlogs的分析,oracle控制文件的重建/镜像/备份/恢复等日常管理与维护. 适用人群 IT相关从业人员.Oracle数据库技术人员.想加工资的.想升职的都可以. 视频在线学习地址: http://edu.51cto.com/course

oracle控制文件

转载请注明出处  控制文件(Control File)是Oracle的物理文件之一,它记录了数据库的物理结构(数据文件.日志文件等的名称和位置),数据库转载和打开都需要控制文件, 还记录了日志序列号,检查点和日志历史信息,同步和恢复数据库都需要控制文件. 控制文件包含以下信息: 数据名称 数据文件名称和位置 重做日志名称和位置 表空间名称和位置 当前日志序列号 检查点信息 日志历史信息 RMAN信息 查询控制文件T-SQL: SQL> col name format a30 SQL> sele

oracle 控制文件的重建

目录 oracle 控制文件的重建 NORESETLOGS RESETLOGS oracle 控制文件的重建 不到最后时刻,如三个控制文件都已损坏,又没有控制文件的备份.还是不要重建控制文件,处理不好就会有数据丢失. NORESETLOGS Set #1. NORESETLOGS case -- -- The following commands will create a new control file and use it -- to open the database. -- Data

ORACLE复制数据库【weber出品】

一.概述 在公司中,我们会经常面临着一种情况.我们制定了对数据库的操作方案后,还不可以在真正的数据库上执行,需要在备用数据库进行测试,这个时候就需要备用数据上的数据和真正数据库的数据是一模一样的.我们这里说的数据库不是指RAID1这样的镜像备份.而是指克隆这个数据库然后将数据放到另一个数据库中而已.在备份数据库中我们完成对方案的执行确保万无一失后即可在真机上部署. 二.分类 目前用的比较多的复制数据库的方法有: 1.手工复制数据库 2.RMAN复制数据库 三.环境 VMware:8.0 Linu

Oracle 控制文件和日志文件

管理控制文件 在Oracle数据库中,控制文件是一个很小(大小一般在10MB范围内)的二进制文件,含有数据库的结构信息,包括数据文件和日志文件的信息.可以将控制文件理解为物理数据库的一个元数据存储库.控制文件在数据库创建时被自动创建,并在数据库发生物理变化时更新.控制文件被不断更新,并且在任何时候都要保证控制文件是可用的.只有Oracle进程才能够安全地更新控制文件的内容,所以,任何时候都不要试图手动编辑控制文件. 由于控制文件在数据库中的重要地位,所以保护控制文件的安全非常重要,为此Oracl

Oracle控制文件移动

Oracle移动控制文件 OS:Windows oracle:10g 移动控制文件即将当前的控制文件由当前位置迁移到另一个新位置. 六步完成控制文件移动: 1.获取控制文件名: SQL> select status,name from v$controlfile; 2.修改SPFILE中的控制文件名: SQL> alter system set control_files= 'D:\oracle\new\CONTROL01.CTL', 'D:\oracle\new\CONTROL02.CTL'

oracle 控制文件误删除手动恢复小测试

测试系统 OLinux 5.9 oracle版本 11.2.0.4 备份控制文件 1.备份到trace文件 SQL> alter database backup controlfile to trace; Database altered. 查看告警日志,确定备份控制文件trace的位置信息 alter database backup controlfile to trace Backup controlfile written to trace file /u01/app/oracle/dia

Oracle控制文件多路复用

一.控制文件多路复用 1.show parameter control --查看控制文件信息 show parameter spfile --查看是否有spfile create pfile from spfile; --生成pfile shutdown immediate --关库 2.修改pfile文件,添加多个路径 vi $ORACLE_HOME/dbs/initORCL.ora 将原有controlfile拷贝到新添加路径目录: cp -- 3.create spfile from pf