欢迎投稿

今日深度:

【oracle11g,9】控制文件,oracle11g控制

【oracle11g,9】控制文件,oracle11g控制


一.控制文件作用:
   1.记录了数据库的物理状态。    2.维护数据库的一致性。控制文件中记录了数据库系统scn号、数据文件scn号与数据文件头里的开始scn号,如果这三个scn号一致说明数据库可以启动。如果不一致就要恢复。    3.在参数文件中定义控制文件的位置和个数。 控制文件最少1个,最多8个,多个文件是镜像的关系。 定义控制文件 *.control_files='/opt/oracle/oradata/orcl/control01.ctl','/opt/oracle/oradata/orcl/control02.ctl','/opt/oracle/oradata/orcl/control03.ctl'    4.控制文件是二进制文件 一般不超过100m。    5.数据库从mount阶段开始使用控制文件    6.控制文件只能连接一个数据库。    7.丢失了要恢复
二.控制文件包含以下内容:
数据库名字和标识符(DB ID) 数据库创建的时间戳 表空间的名字 数据文件和联机重做日志文件的位置和名字 当前联机重做日志文件的sequence号码 检查点信息 回滚段的开始和结束 联机重做日志的归档信息 备份信息 
 
三.转储控制文件:
由于控制文件是个二进制文件,无法直接打开查阅,但 是通过上一章介绍的如下命令可以将控制文件内容转储出来便于查看:  alter session set events 'immediate trace name controlf level 12';   以下是来自Oracle Database 11g的转储测试:  SQL> alter session set events 'immediate trace name controlf level 12';   Session altered.  #备份控制文件到trace文件中 SQL> alter database backup controlfile to trace;
Database altered.
SQL> select value from v$diag_info where name='Default Trace File'; VALUE -------------------------------------------------------------------------------- /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_4929.trc   
注意:从11g 开始,可以通过v$diag_info 获得当前会话转储文件的名称

四.控制文件检查数据库的一致性: 
1.控制文件中记录了数据库系统scn号、数据文件scn号与数据文件头列里的开始scn号,如果这三个scn号一致说明数据库可以启动。如果不一致就要恢复。 #系统scn号 SQL> select checkpoint_change# from v$database;
CHECKPOINT_CHANGE# ------------------             469717 #文件scn号 SQL> select checkpoint_change# from v$datafile;
CHECKPOINT_CHANGE# ------------------             469717             469717             469717             469717
开始scn号 SQL> select checkpoint_change# from v$datafile_header;
CHECKPOINT_CHANGE# ------------------             469717             469717             469717             469717

2.scn号与时间的转换: #全局检查点 SQL> alter system checkpoint;
System altered. #创建一个函数 SQL> create or replace  function scn_to_timestamp(query_scn in NUMBER) return TIMESTAMP IS EXTERNAL NAME "ktfexscntot" WITH CONTEXT  PARAMETERS (context ,query_scn OCINUMBER,RETURN) LIBRARY DBMS_TRAN_LIB; /  2    3    4    5    6    7    8    9  
Function created. #系统scn SQL> select checkpoint_change# from v$database;
CHECKPOINT_CHANGE# ------------------             473363 #scn转成时间 SQL> select scn_to_timestamp(473363) from dual;
SCN_TO_TIMESTAMP(473363) --------------------------------------------------------------------------- 16-JUN-14 06.16.14.000000000 AM
#时间转成scn SQL> select timestamp_to_scn('16-JUN-14 06.16.14.000000000 AM') from dual;
TIMESTAMP_TO_SCN('16-JUN-1406.16.14.000000000AM') -------------------------------------------------                                            473362

五.控制文件多元化 (增减控制文件数据量)
1.规划原则: 多例复用,定义多个控制文件,分别放在不同的磁盘上。
2.管理控制文件的个数和位置:   spfile 或pfile 都可以实现对控制文件的个数和位置的管理   spfile步骤:      修改spfile参数control_file      一致性关闭数据库      增加或者减少控制文件      使用spfile启动数据库      验证结果。

 例:修改控制文件个数
--减少控制文件 SQL> alter system set control_files='/opt/oracle/oradata/orcl/control01.ctl' scope=spfile;  
System altered. 或者
     --增加控制文件:      SQL> alter system set control_files='/opt/oracle/oradata/orcl/control01.ctl',                 '/opt/oracle/oradata/orcl/control02.ctl',                 '/opt/oracle/oradata/orcl/control03.ctl'   scope=spfile;
     System altered.        
--关闭数据库
     SQL> shutdown immediate
     --copy控制文件到添加目录 或者删除控制文件      [oracle@master disk3]$ cp /u01/app/oracle/oradata/prod/disk3/control01.ctl                                              /u01/app/oracle/oradata/prod/disk4/control01.ctl

     --启动数据库
SQL> startup  ORACLE instance started.
Total System Global Area  418484224 bytes Fixed Size                  1336932 bytes Variable Size             276826524 bytes Database Buffers          134217728 bytes Redo Buffers                6103040 bytes Database mounted. Database opened.




3. pfile步骤:      修改pfile参数     一致性关闭数据库     增加或者减少控制文件     使用pfile启动数据库     验证结果。
修改控制文件: *.control_files='/u01/app/oracle/oradata/prod/disk1/control01.ctl','/u01/app/oracle/oradata/prod/disk2/control01.ctl','/u01/app/oracle/oradata/prod/disk3/control01.ctl','/u01/app/oracle/oradata/prod/disk4/control01.ctl','/u01/app/oracle/oradata/prod/disk5/control01.ctl' 关闭数据库: SQL>shutdown immediate
copy文件: [oracle@master dbs]$cp /u01/app/oracle/oradata/prod/disk4/control01.ctl /u01/app/oracle/oradata/prod/disk5/control01.ctl 启动数据库: SQL> startup ORACLE instance started.
Total System Global Area  418484224 bytes Fixed Size                  1336932 bytes Variable Size             276826524 bytes Database Buffers          134217728 bytes Redo Buffers                6103040 bytes Database mounted. Database opened.
六.控制文件的恢复:(控制文件全丢了要重建控制文件)
1.有多个控制文件时,丢了其中一个控制文件的恢复.
解决:拷贝其他的控制文件到丢失的目录即可。
2.控制文件全部丢失, 但controlfile备份到trace文件中的情况: 执行过alter database backup controlfile to trace;
解决:启动nomount状态,重建控制文件: noresetlogs 例: ①.启动数据库:报错 SQL> startup ORACLE instance started.
Total System Global Area  418484224 bytes Fixed Size                  1336932 bytes Variable Size             276826524 bytes Database Buffers          134217728 bytes Redo Buffers                6103040 bytes ORA-00205: error in identifying control file, check alert log for more info ②.查看告警日志:报错 ALTER DATABASE   MOUNT ORA-00210: cannot open the specified control file ORA-00202: control file: '/u01/app/oracle/oradata/prod/disk3/control01.ctl' ORA-27037: unable to obtain file status Linux Error: 2: No such file or directory Additional information: 3 ORA-00210: cannot open the specified control file ORA-00202: control file: '/u01/app/oracle/oradata/prod/disk2/control01.ctl' ORA-27037: unable to obtain file status Linux Error: 2: No such file or directory Additional information: 3 ORA-00210: cannot open the specified control file ORA-00202: control file: '/u01/app/oracle/oradata/prod/disk1/control01.ctl' ORA-27037: unable to obtain file status Linux Error: 2: No such file or directory Additional information: 3 Mon Jun 16 15:16:04 2014 Checker run found 2 new persistent data failures ORA-205 signalled during: ALTER DATABASE   MOUNT... ③.找trace 文件中的一句话(在trace 文件的最后),进行重建控制文件。 注意:这里的PROD是db_name . CREATE CONTROLFILE REUSE DATABASE "PRODNORESETLOGS  NOARCHIVELOG     MAXLOGFILES 16     MAXLOGMEMBERS 2     MAXDATAFILES 30     MAXINSTANCES 1     MAXLOGHISTORY 292 LOGFILE   GROUP 1 (     '/u01/app/oracle/oradata/prod/disk1/redo01.log',     '/u01/app/oracle/oradata/prod/disk2/redo01.log'   ) SIZE 100M BLOCKSIZE 512,   GROUP 2 (     '/u01/app/oracle/oradata/prod/disk1/redo02.log',     '/u01/app/oracle/oradata/prod/disk2/redo02.log'   ) SIZE 100M BLOCKSIZE 512,   GROUP 3 (     '/u01/app/oracle/oradata/prod/disk1/redo03.log',     '/u01/app/oracle/oradata/prod/disk2/redo03.log'   ) SIZE 100M BLOCKSIZE 512 -- STANDBY LOGFILE DATAFILE   '/u01/app/oracle/oradata/prod/disk3/system01.dbf',   '/u01/app/oracle/oradata/prod/disk3/sysaux01.dbf',   '/u01/app/oracle/oradata/prod/disk3/undotbs01.dbf',   '/u01/app/oracle/oradata/prod/disk3/users01.dbf' CHARACTER SET AL32UTF8 ; 在nomount执行上面的重建控制文件语句。
③.启动数据库到open状态, SQL> alter database open;
Database altered. 查看表空间的信息 SQL> select tablespace_name ,contents from dba_tablespaces;
TABLESPACE_NAME                CONTENTS ------------------------------ --------- SYSTEM                         PERMANENT SYSAUX                         PERMANENT UNDOTBS                        UNDO TEMPTS1                        TEMPORARY USERS                          PERMANENT
确认下临时表空间的数据文件是否存在 SQL> select file#,name from v$tempfile;
     FILE# NAME ---------- --------------------------------------------------          1 /u01/app/oracle/oradata/prod/disk3/temp01.dbf


3.控制文件全部丢失,有控制文件的备份:(实验未成功) 解决: 启动到nomount 状态,copy旧的控制文件,控制文件相应的目录,       启动到mount,执行alter database backup controlfile to trace;        关闭数据库,删除旧的控制文件,        在trace中找到重建控制文件语句,重建控制文件,       启动数据库到open,检查临时表空间的数据文件是否存在(一般临时表空间不存在,重新创建一个临时表空间,设置为默认临时表空间)。




创建临时表空间 SQL> create temporary tablespace tempts2 tempfile '/u01/app/oracle/oradata/prod/disk5/temp01.dbf' size 50m;
Tablespace created. 设置为默认临时表空间 SQL> alter database default temporary tablespace tempts2;
Database altered. 查看 SQL> select file#,name from v$tempfile;
     FILE# NAME ---------- --------------------------------------------------          1 /u01/app/oracle/oradata/prod/disk5/temp01.dbf

4. 如果没有控制文件的备份和backup to trace,只要能找到建库语句,修改(日志文件,数据文件的路径要与数据库的一致)后执行就可。
5.恢复控制文件的各种情况
重建控制文件不一定需要用resetlogs开库。 先尝试 alter database open; 情况1:顺利开库
情况2:需要不完全恢复,恢复后正常开库 recover database; alter database open; 情况3:不完全恢复后,只能resetlogs开库 如果刚刚是shutdown abort的,使用recover database until cancel; 

如果需要做不完全恢复,系统会提示你用 using backup controlfile; SQL> recover database using backup controlfile; 执行上面的一句话后,要输入日志文件的。






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

控制文件除了包括数据文件、日志文件信息外,还包含一些与实例密切相关的参数,如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)关闭数据库并备份数据库
 

谁可以告诉我Oracle控制文件是什?

对Oracle数据库的control file来说它是一个非常小的(在兆字节范围内的)二进制文件,而它所含

有数据库结构的信息。大家可以把它理解为用于数据库的一个元数数据库储存库。它含有数据库的结构

——构成一个数据库的数据文件和重做日志文件。

它是在大家使用Oracle创建数据库得到创建的,并在发生物理变化时得到更新的,如:每当大家添加

或者重命名一个数据文件时(alter data file)。

control file被不断的更新,并且在任何时候都应该可供使用的。(注意:不要编辑control file的内容!)

只有Oracle进程才能更新它的内容!

control file的内容包括如下各项:

1.控制文件属于的数据库名称,一个控制文件中能属于一个数据库.

2.数据库创建的时间.

3.数据文件的名称,位置以及联机/脱机状态信息.

4.重做日志文件的名称和位置.

5.重做日志存档信息.

6.表空间名称

7.当前的日志序列号[log sequence number],它是一个在联机重做日志文件被切换时得到递增和记录的

唯一标识符.

8.最新的检查点信息.

9.撤销段的开始与结束.

10.Recovery Manager(恢复管理器,简称RMAN)的备份信息.Recovery Manager是数据库管理员用来

备份和恢复数据库的Oracle实用工具.
 

www.htsjk.Com true http://www.htsjk.com/shujukunews/3141.html NewsArticle 【oracle11g,9】控制文件,oracle11g控制 一.控制文件作用: 1.记录了数据库的物理状态。 2. 维护数据库的一致性 。控制文件中记录了数据库系统scn号、数据文件scn号与数据文件头里的开...
评论暂时关闭