2013年4月27日 星期六

10:33

 、控制文件的功能和特点

1) 【定义数据库当前物理状态】

2) 【维护数据的一致性】  如果控制文件中的检查点与数据文件中的一致,则说明数据一致,可以启动到open状态

3) 【很小的二进制文件】

4)【控制文件包括静态部分、动态部分  当使用rman备份数据库的时候, 控制文件会记录catalog信息, 动态部分会增大 】

查看数据一致性的方法:

SQL> select file#,checkpoint_change# from v$datafile;【从控制文件读取】   以控制文件为主

FILE# CHECKPOINT_CHANGE#

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

1             172373

2             172373

3             172373

4             172373

SQL> select file#,checkpoint_change# from v$datafile_header;【从数据文件读取】

FILE# CHECKPOINT_CHANGE#

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

1             172373

2             172373

3             172373

4             172373

3)二进制文件

4)在mount阶段被读取

5)记录备份恢复信息

----------查看database控制文件位置:

SQL> show parameter control;

NAME                                 TYPE        VALUE

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

control_file_record_keep_time        integer     7

control_files                        string      /u01/app/oracle/oradata/test/control01.ctl

SQL> select name from v$controlfile;

NAME

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

/u01/app/oracle/oradata/test/control01.ctl

SYS@ prod>select * from v$rollname;      查看undo 段

USN NAME

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

0 SYSTEM

1 _SYSSMU1$

2 _SYSSMU2$

3 _SYSSMU3$

4 _SYSSMU4$

5 _SYSSMU5$

6 _SYSSMU6$

7 _SYSSMU7$

8 _SYSSMU8$

9 _SYSSMU9$

10 _SYSSMU10$

2、控制文件的内容

SQL> alter database backup controlfile to trace;【将控制文件备份成trace文件】

建议:只要对数据库的物理结构进行修改,都应该进行控制文件的备份或者转储

V$DATABASE               查看数据库信息

V$LOGFILE,V$LOG      查看日志信息

V$DATAFILE

V$CONTROLFILE         查看控制文件

SQL> show parameter dump

user_dump_dest                       string      /u01/app/oracle/admin/orcl/udump

重建控制文件

SQL> CREATE CONTROLFILE REUSE DATABASE "orcl" NORESETLOGS  ARCHIVELOG

    MAXLOGFILES 16

    MAXLOGMEMBERS 3

    MAXDATAFILES 100

    MAXINSTANCES 1

    MAXLOGHISTORY 292

LOGFILE

  GROUP 1 (

    '/disk2/orcl/oradata/redo01a.log',

    '/disk1/orcl/oradata/redo01b.log'

  ) SIZE 10M,

  GROUP 2 (

    '/disk2/orcl/oradata/redo02a.log',

    '/disk1/orcl/oradata/redo02b.log'

  ) SIZE 10M

-- STANDBY LOGFILE

DATAFILE

  '/u01/app/oracle/oradata/orcl/system01.dbf',

  '/u01/app/oracle/oradata/orcl/sysaux01.dbf',

  '/u01/app/oracle/oradata/orcl/user01.dbf',

  '/u01/app/oracle/oradata/orcl/undo01.dbf',

CHARACTER SET ZHS16GBK;

------------利用ORACLE EVENT 转储 控制文件

SQL> alter session set events 'immediate trace name controlf level 12';

 3、控制文件多元化(复制多个控制文件并存放到不同的磁盘 注意 控制文件3个足够不宜太多 如果太多的话oracle 实时同步控制文件 需要做物理i/o 消耗系统性能

spfile:查看控制文件信息并修改control_file参数,将新增的控制文件路径写上;关闭实例,复制控制文件到相应路径;重新启动实例。

pfile:关闭实例,修改参数文件init;拷贝控制文件;重新启动实例。

修改spfile文件,增加控制文件

 1)查看控制文件信息和spfile 信息

SQL> select name from v$controlfile;

NAME

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

/u01/app/oracle/oradata/orcl/control01.ctl

SQL> show parameter control

NAME                                 TYPE        VALUE

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

control_file_record_keep_time        integer     7

control_files                        string      /u01/app/oracle/oradata/orcl/control01.ctl

SQL> show parameter spfile;

NAME                                 TYPE        VALUE

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

spfile                               string      /u01/app/oracle/product/10.2.0/db_1/dbs/spfileorcl.ora

2)修改control_files 参数

SQL> alter system set control_files=  '/u01/app/oracle/oradata/orcl/control01.ctl','/disk1/orcl/oradata/control02.ctl' scope=spfile;

System altered.

3)关闭instance ,拷贝controlfile

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

[oracle@oracle ~]$ cp /u01/app/oracle/oradata/orcl/control01.ctl     /disk1/orcl/oradata/control02.ctl

4)startup 启动实例

SQL>   startup

SQL> select name from v$controlfile;

NAME

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

/u01/app/oracle/oradata/orcl/control01.ctl

/disk1/orcl/oradata/control02.ctl

修改pfile文件增加控制文件:

1)关闭实例,修改init 文件

SQL> startup pfile=$ORACLE_HOME/dbs/initorcl.ora

ORACLE instance started.

Total System Global Area  176160768 bytes

Fixed Size                  1218364 bytes

Variable Size              88082628 bytes

Database Buffers           83886080 bytes

Redo Buffers                2973696 bytes

Database mounted.

Database opened.

SQL> show parameter spfile;

NAME                                 TYPE        VALUE

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

spfile                               string

SQL> select name from v$controlfile;

NAME

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

/u01/app/oracle/oradata/orcl/control01.ctl

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

[oracle@oracle ~]$ cd $ORACLE_HOME/dbs

[oracle@oracle dbs]$ vi initorcl.ora

修改如下

control_files = /disk1/orcl/oradata/control01.ctl,/disk1/orcl/oradata/control02.ctl,/disk2/orcl/oradata/control03.ctl

2)拷贝controlfile

[oracle@oracle dbs]$ cp $ORACLE_BASE/oradata/orcl/control01.ctl     /disk1/orcl/oradata/control02.ctl

[oracle@oracle dbs]$ cp $ORACLE_BASE/oradata/orcl/control01.ctl     /disk2/orcl/oradata/control03.ctl

3)startup

SQL> startup pfile=$ORACLE_HOME/dbs/initorcl.ora;

ORACLE instance started.

Total System Global Area  176160768 bytes

Fixed Size                  1218364 bytes

Variable Size              88082628 bytes

Database Buffers           83886080 bytes

Redo Buffers                2973696 bytes

Database mounted.

Database opened.

SQL> show parameter spfile

NAME                                 TYPE        VALUE

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

spfile                               string

SQL> select name from v$controlfile;

NAME

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

/u01/app/oracle/oradata/orcl/control01.ctl

/disk1/orcl/oradata/control02.ctl

/disk2/orcl/oradata/control03.ctl

SQL> create spfile from pfile;

File created.

4、控制文件查看:v$controlfile show parameter controlfile v$parameter

5、控制文件备份

 

1)trace :用于控制文件重建 (生成的trace 文件在udump)

          SQL> alter database backup controlfile to trace;

Database altered.           

   

    2)binary 文件 :控制文件的备份

          SQL> alter database backup controlfile to '/disk1/orcl/oradata/control.bak';

Database altered.

6、控制文件恢复

 

单个文件丢失:

[oracle@oracle dbs]$ rm /disk2/orcl/oradata/control03.ctl

[oracle@oracle dbs]$ sqlplus '/as sysdba'

SQL*Plus: Release 10.2.0.1.0 - Production on Mon Aug 1 06:14:54 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup

ORACLE instance started.

Total System Global Area  176160768 bytes

Fixed Size                  1218364 bytes

Variable Size              88082628 bytes

Database Buffers           83886080 bytes

Redo Buffers                2973696 bytes

ORA-00205: error in identifying control file, check alert log for more info

通过告警日志获得信息:

ALTER DATABASE   MOUNT

Mon Aug  1 06:14:57 2011

ORA-00202: control file: '/disk2/orcl/oradata/control03.ctl'

ORA-27037: unable to obtain file status

Linux Error: 2: No such file or directory

Additional information: 3

 

SQL> shutdown

ORA-01507: database not mounted

ORACLE instance shut down.

SQL> !

[oracle@oracle dbs]$ cp /disk1/orcl/oradata/control02.ctl        /disk2/orcl/oradata/control03.ctl

[oracle@oracle dbs]$ sqlplus '/as sysdba'

SQL*Plus: Release 10.2.0.1.0 - Production on Mon Aug 1 06:15:36 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to an idle instance.

06:15:37 SQL> startup

ORACLE instance started.

Total System Global Area  176160768 bytes

Fixed Size                  1218364 bytes

Variable Size              88082628 bytes

Database Buffers           83886080 bytes

Redo Buffers                2973696 bytes

Database mounted.

Database opened.

SQL> select name from v$controlfile;

NAME

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

/u01/app/oracle/oradata/orcl/control01.ctl

/disk1/orcl/oradata/control02.ctl

/disk2/orcl/oradata/control03.ctl

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

案例  

    

所有的文件丢失:

先改变数据库的物理文件,然后备份到trace和二进制文件,然后又对数据进行修改,然后删除所有的控制文件

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> !

[oracle@oracle dbs]$ rm /u01/app/oracle/oradata/orcl/control01.ctl

[oracle@oracle dbs]$ rm /disk1/orcl/oradata/control02.ctl

[oracle@oracle dbs]$ rm /disk2/orcl/oradata/control03.ctl

[oracle@oracle dbs]$ sqlplus '/as sysdba'

SQL*Plus: Release 10.2.0.1.0 - Production on Mon Aug 1 06:17:51 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup;

ORACLE instance started.

Total System Global Area  176160768 bytes

Fixed Size                  1218364 bytes

Variable Size              88082628 bytes

Database Buffers           83886080 bytes

Redo Buffers                2973696 bytes

ORA-00205: error in identifying control file, check alert log for more info

告警日志:

ALTER DATABASE   MOUNT

Mon Aug  1 06:17:54 2011

ORA-00202: control file: '/u01/app/oracle/oradata/orcl/control01.ctl'

ORA-27037: unable to obtain file status

Linux Error: 2: No such file or directory

Additional information: 3

Mon Aug  1 06:17:54 2011

 利用trace 文件重建

 nomount 状态   一定要正常关库 .

SQL>CREATE CONTROLFILE REUSE DATABASE "orclgps" RESETLOGS  NOARCHIVELOG

MAXLOGFILES 16

MAXLOGMEMBERS 2

MAXDATAFILES 30

MAXINSTANCES 1

MAXLOGHISTORY 292

LOGFILE

GROUP 1 '/u01/app/oracle/oradata/orcl/redo01a.log'  SIZE 10M,

GROUP 2 '/u01/app/oracle/oradata/orcl/redo02a.log'  SIZE 10M

-- STANDBY LOGFILE

DATAFILE

'/u01/app/oracle/oradata/orcl/system01.dbf',

'/u01/app/oracle/oradata/orcl/rtbs01.dbf',

'/u01/app/oracle/oradata/orcl/sysaux01.dbf',

'/u01/app/oracle/oradata/orcl/user01.dbf',

'/u01/app/oracle/oradata/orcl/example01.dbf',

'/u01/app/oracle/oradata/orcl/indx01.dbf',

'/u01/app/oracle/oradata/orcl/OLTP01.DBF'

CHARACTER SET ZHS16GBK

Control file created.

NORESETLOGS   不会重置日志文件可以做完全恢复

Set   如果修改数据库名字修要添加 SET  DATABASE ‘DATABASENAME’   RESETLOGS    注意修改初始化参数文件 db_name 

SQL> alter database open resetlogs;

Database altered.

非正常关库,重建控制文件

SQL> insert into scott.test values (10);

1 row created.

SQL> insert into scott.test values (11);

1 row created.

SQL> commit;

Commit complete.

SQL> alter system switch logfile;       产生增量检查点

                                                                             

System altered.

SQL> shutdown abort  ;         database 异常关闭

ORACLE instance shut down.

[oracle@work dbs]$ rm /disk1/oradata/test/control02.ctl

[oracle@work dbs]$ rm /disk2/oradata/test/control03.ctl

[oracle@work dbs]$ rm /u01/app/oracle/oradata/test/control01.ctl

[oracle@work dbs]$ !sql

sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Sat Aug 27 00:44:11 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup

ORACLE instance started.

Total System Global Area  176160768 bytes

Fixed Size                  1218364 bytes

Variable Size              88082628 bytes

Database Buffers           83886080 bytes

Redo Buffers                2973696 bytes

ORA-00205: error in identifying control file, check alert log for more info

SQL> @/home/oracle/control.sql       ;

SQL> CREATE CONTROLFILE REUSE DATABASE "TEST" NORESETLOGS  NOARCHIVELOG

MAXLOGFILES 16

MAXLOGMEMBERS 4

MAXDATAFILES 100

MAXINSTANCES 1

MAXLOGHISTORY 20

LOGFILE

GROUP 1 '/u01/app/oracle/oradata/test/redo01a.log'  SIZE 10M,

GROUP 2 '/u01/app/oracle/oradata/test/redo02a.log'  SIZE 10M,

GROUP 3 '/u01/app/oracle/oradata/test/redo03a.log'  SIZE 10M

-- STANDBY LOGFILE

DATAFILE

'/u01/app/oracle/oradata/test/system01.dbf',

'/u01/app/oracle/oradata/test/rtbs01.dbf',

'/u01/app/oracle/oradata/test/sysaux01.dbf',

'/u01/app/oracle/oradata/test/users01.dbf'

CHARACTER SET ZHS16GBK

;

Control file created.

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#

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

325588

SQL> select checkpoint_change# from v$datafile;

CHECKPOINT_CHANGE#

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

325588

325588

325588

325588

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#

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

325588

325588

325588

325588

SQL> alter database open;

alter database open

*

ERROR at line 1:

ORA-01113: file 1 needs media recovery

ORA-01110: data file 1: '/u01/app/oracle/oradata/test/system01.dbf'

SQL> archive log list;

Database log mode              No Archive Mode

Automatic archival             Disabled

Archive destination            /u01/app/oracle/product/10.2.0/db_1/dbs/arch

Oldest online log sequence     57

Current log sequence           59

SQL> recover database until cancel;  或者

SQL> recover database until cancel using backup controlfile;

ORA-00279: change 325588 generated at 08/27/2011 00:43:36 needed for thread 1

ORA-00289: suggestion : /u01/app/oracle/product/10.2.0/db_1/dbs/arch1_59_759630389.dbf

ORA-00280: change 325588 for thread 1 is in sequence #59

00:45:43 Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

cancel

ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below

ORA-01194: file 1 needs more recovery to be consistent

ORA-01110: data file 1: '/u01/app/oracle/oradata/test/system01.dbf'

ORA-01112: media recovery not started

--------通过当前redo 日志进行database recover

SQL> select * from v$log;

GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIM

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

1          1         58   10485760          1 NO  INACTIVE                325585 27-AUG-11

3          1         57   10485760          1 NO  INACTIVE                325583 27-AUG-11

2          1         59   10485760          1 NO  CURRENT                 325588 27-AUG-11

SQL> select group# ,member from v$logfile;

GROUP# MEMBER

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

2 /u01/app/oracle/oradata/test/redo02a.log

1 /u01/app/oracle/oradata/test/redo01a.log

3 /u01/app/oracle/oradata/test/redo03a.log

SQL> recover database until cancel;

ORA-00279: change 325588 generated at 08/27/2011 00:43:36 needed for thread 1

ORA-00289: suggestion : /u01/app/oracle/product/10.2.0/db_1/dbs/arch1_59_759630389.dbf

ORA-00280: change 325588 for thread 1 is in sequence #59

00:46:23 Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

/u01/app/oracle/oradata/test/redo02a.log

Log applied.

Media recovery complete.

SQL> alter database open resetlogs;

Database altered.

SQL> select * from scott.test;

ID

----------

1

2

3

4

5

6

7

9

10

11

10 rows selected.

TRACE文件、BAK文件、dump文件的区别

1、trace文件里面是控制文件的重建脚本,当数据库的物理结构发生变化时就要trace一下,否则会丢失,恢复时要使用最新的。

2、bak文件是controlfile的副本,里面包含检查点等所有的信息,用他备份会出现数据不一致的情况,数据库不能打开到open状态。

3、dump文件是用来查看controlfile里面的内容的,不能用来恢复控制文件。

Oracle11g温习-第六章:控制文件的更多相关文章

  1. Gradle 1.12 翻译——第十六章. 使用文件

    有关其它已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或訪问:http://gradledoc.qiniudn.com ...

  2. 《Linux命令行与shell脚本编程大全》第十六章 控制脚本

    一些控制脚本的方式:向脚本发送信号.修改脚本优先级,在脚本运行时切换到运行模式 16.1 处理信号 linux利用信号与运行在系统中的进程进行通信. 也可以通过对脚本进行编程,使其在收到特定信号时执行 ...

  3. Oracle11g温习-第七章:redo日志

      2013年4月27日 星期六 10:33 1.redo (重做) log 的功能:        用于数据恢复   2.redo log 特征: [特征]: 1)   记录数据块的变化(DML.D ...

  4. Oracle11g温习-第五章:数据字典

    1.数据字典(Data dictionary)的功能 1)   central of oracle   database               每个oracle数据库的核心 2)   descr ...

  5. Oracle11g温习-第四章:手工建库

     1.create database plan 1.库类型:   OLTP :  在线事务处理系统   OLAP : 在线应用处理系统   DSS :    数据决策系统 2.数据库名字及字符集 3. ...

  6. Oracle11g温习-第三章:instance实例管理

    2013年4月27日 星期六 10:30 1.instance 功能:   用于管理和访问database. 2.init parameter files :管理实例相关启动参数.位置:$ORACLE ...

  7. 【阅读笔记】《C程序员 从校园到职场》第六章 常用文件操作函数 (Part 1)

    参考链接:https://blog.csdn.net/zhouzhaoxiong1227/article/details/24926023 让你提前认识软件开发(18):C语言中常用的文件操作函数总结 ...

  8. Oracle11g温习-第十一章:管理undo

    2013年4月27日 星期六 10:40 1.undo tablespace 功能 undo tablespace 功能:用来存放从datafiles 读出的数据块旧的镜像 [             ...

  9. 第六章 Linux文件与目录管理

    http://www.92csz.com/study/linux/6.htm 绝对路径:路径的写法一定由根目录”/”写起 相对路径:路径的写法不是由根目录”/”写起 mkdir 创建一个目录.mkdi ...

随机推荐

  1. Qt 学习之路 2(55):数据库操作

    Qt 提供了 QtSql 模块来提供平台独立的基于 SQL 的数据库操作.这里我们所说的“平台独立”,既包括操作系统平台,又包括各个数据库平台.另外,我们强调了“基于 SQL”,因为 NoSQL 数据 ...

  2. MySQL Crash Course #14# Chapter 22. Using Views

    索引 视图是啥 为什么需要视图 使用视图的规则 如何使用视图 视图应用实例 别用视图更新数据! 视图是啥 理解视图的最佳方式就是看下面这个例子. SELECT cust_name, cust_cont ...

  3. MySQL备份与恢复-innobackupex

    :上一片myloder搞崩溃,为什么百度的博文都是抄袭一模一样的,哎烦! 这一片文章我们来介绍物理备份工具xtracebackup! 首先是安装可以percona官网下载安装,下载rpm包直接yum安 ...

  4. 添加用户到 sudo

    sudo 简介: 在 Linux 中系统管理员可以通过 sudo 实用程序让用户或组能够作为另一个用户运行命令.换句话说,可以分派命令特权,而不需要另一个用户的密码.root 用户通过在 /etc/s ...

  5. JAVA I/O(六)多路复用IO

    在前边介绍Socket和ServerSocket连接交互的过程中,读写都是阻塞的.套接字写数据时,数据先写入操作系统的缓存中,形成TCP或UDP的负载,作为套接字传输到目标端,当缓存大小不足时,线程会 ...

  6. AS语法

    SELECT COUNT(*) AS NumberOfOrders FROM Orders 含义:将选出的数据作为一列显示,列名为NumberOfOrders

  7. 分页器的js实现代码 bootstrap Paginator.js

    参考: http://www.jb51.net/article/76093.htm 如前所述, 不要什么都想到 jquery的 脚本js, 应该首先推荐的是 css 和 元素本身的事件 函数 如: o ...

  8. SPOJ Hacking(字典树 + 搜索)题解

    思路1:字典树存每个串,然后dfs遍历是否存在.这里有个技巧,如果每次都重新初始化字典树为-1,那么会超时,所以我先初始化为-1,然后设一个Case,每个test时Case都++,那么只要开一个数组判 ...

  9. BZOJ4419: [Shoi2013]发微博 暴力

    Description 刚开通的SH微博共有n个用户(1..n标号),在短短一个月的时间内,用户们活动频繁,共有m条按时间顺序的记录: ! x   表示用户x发了一条微博: + x y 表示用户x和用 ...

  10. 高精度N的阶乘-N!

    题目:输入一个正整数N(0<N<=30),求N! 代码: #include<stdlib.h> #include<cstdio> #include<strin ...