首页 > 其他 > 详细

控制文件

时间:2020-12-08 14:01:15      阅读:38      评论:0      收藏:0      [点我收藏+]
  1. 控制文件的功能和特点
    1. 控制文件是二进制文件,不能对正在使用的控制文件进行编辑
    2. 如果数据库中控制文件的版本不同,数据库是不能正常启动的-------解决方法:用新版本覆盖旧版本
    3. 控制文件定义了数据库当前的物理状态
    4. 控制文件维护了数据的一致‘
    5. 控制文件在mount阶段被读取
    6. 记录了RMAN备份的元数据
  2. 相关命令
    1. 查看控制文件的位置
      1. SQL> show parameter control_files;
      2. SQL> select name from v$controlfile;
    2. 查看数据库实例状态
      1. SQL> select status from v$instance;
  3. 控制文件备份
    1. TRACE备份
      1. trace不是备份,严格意义上来说是根据现有的二进制控制文件生成出来的一份文本型文件,该文件中记录了创建控制文件的基本信息。
      2. SQL> alter database backup controlfile to trace; ---- 通过日志来查找写入了哪个trace文件
      3. SQL> alter database backup controfile to trace as ‘路径‘----手动指定trace文件的路径
      4. 通过trace出来的文件,主要作用是后期用来手动重建
    2. BINARY备份
      1. 对控制文件的热备份
      2. SQL> alter database backup controlfile to ‘路径‘;
      3. 二进制备份(手工CP、在线热备),主要用作还原
  4. 数据库如何开启归档模式(题外话)
    1. 干净一致的关闭数据库 ----- SQL> shutdown immediate;
    2. 将数据库启动到mount状态 ----- SQL> startup mount;
    3. 开启归档模式 ---- SQL> alter database archivelog;
    4. 开启数据 --- SQL> alter database open;
    5. 注: 开启归档后,默认归档路径的文件夹是不存在的----Archive destination /u01/app/oracle/product/12.2.0/db_1/dbs/arch
  5. 知识点
    1. SQL> alter system switch logfile; ----切换日志文件
    2. log_archive_dest_1(参数)-----影响 Archive destination
    3. SQL> show parameter log_archive_dest;
    4. 归档路径一共有31路,(如果是针对本地的,只能用1-10这10个路径)location
    5. 归档路径一共有31路,(如果是针对远程的,例如DG环境,必须存在本地路径)service,如果是针对远程的,最多可以使用2-31路,一共30个路径(也就是对应着DG环境一共最多可以有30个备库)
    6. SQL > alter system set log_archive_dest_1=‘location=/u01/app/oracle/arch‘; -----更改归档路径
    7. 全备份
      1. 备份路径---[oracle@hansen ~]$ mkdir /u01/app/oracle/backup
      2. RMAN备份--[oracle@hansen ~]$ rman target /
      3. 开始备份---RMAN> backup database format ‘/u01/app/oracle/backup/%U.full‘;
  6. 控制文件丢失
    1. 丢失其中一个------通过其他控制文件复制一份即可
    2. 全部丢失-----手工重建 ----风险:如果没有开启catalog目录库,默认使用的就是控制文件,如果手工重建,元数据丢失

 

 

控制文件实验

实验一 :

  1. 关闭数据库

  2. 将控制文件复制一份到/tmp/的路径下

  3. 启动数据库

  4. 对控制文件进行一次在线热备

  5. 关闭数据库

  6. 将控制文件全部移动到/u01/app/oracle/oradata/OCP12C/bak/路径下

  7. 将/tmp/路径下控制文件和在线热备的控制文件分别 复制一份到/u01/app/oracle/oradata/OCP12C/路径下

  8. 启动数据库(不能正常启动,因为两个控制文件的版本号不同)

  9. 解决方法:将在线热备的控制文件再复制一份覆盖从/tmp/路径下复制来的控制文件,此时可以将数据库启动到mount状态,但依然不能打开数据库,将/u01/app/oracle/oradata/OCP12C/bak/路径下的控制文件复制到u01/app/oracle/oradata/OCP12C/路径下,再次启动数据库成功

  10. 总结:数据库启动到第二阶段要加载控制文件时,发现控制文件版本号不同,所以报错,当使用在线热备的两份控制文件时,版本号一致,但数据库在第二次关闭时,数据文件头部也记录了控制文件的版本号信息,此信息与在线热备控制文件版本号信息不同,所以数据库只能启动到mount状态,不能正常open。在/u01/app/oracle/oradata/OCP12C/bak/路径下的控制文件版本号信息与数据文件头部记录的信息是一致的,最后成功启动数据库。

实验代码:

技术分享图片
 1 第一步:
 2 SQL> shutdown immediate
 3 Database closed.
 4 Database dismounted.
 5 ORACLE instance shut down.
 6 第二步:
 7 [oracle@oracle12c OCP12C]$ cp control0* /tmp
 8 第三步:
 9 SQL> startup
10 ORACLE instance started.
11 
12 Total System Global Area 1660944384 bytes
13 Fixed Size            8793448 bytes
14 Variable Size          939524760 bytes
15 Database Buffers      704643072 bytes
16 Redo Buffers            7983104 bytes
17 Database mounted.
18 Database opened.
19 SQL> select status from v$instance;
20 
21 STATUS
22 ------------------------
23 OPEN
24 第四步:
25 SQL> alter database backup controlfile to /tmp/contorl01.bak;
26 
27 Database altered.
28 第五步:
29 SQL> shutdown immediate
30 Database closed.
31 Database dismounted.
32 ORACLE instance shut down.
33 第六步:
34 [oracle@oracle12c OCP12C]$ mv control0* bak/
35 第七步:
36 [oracle@oracle12c OCP12C]$ cp /tmp/control01.ctl .
37 [oracle@oracle12c OCP12C]$ cp /tmp/contorl01.bak control02.ctl
38 第八步:
39 SQL> startup nomount
40 ORACLE instance started.
41 
42 Total System Global Area 1660944384 bytes
43 Fixed Size            8793448 bytes
44 Variable Size          939524760 bytes
45 Database Buffers      704643072 bytes
46 Redo Buffers            7983104 bytes
47 SQL> alter database mount
48   2  ;
49 alter database mount
50 *
51 ERROR at line 1:
52 ORA-00214: control file /u01/app/oracle/oradata/OCP12C/control02.ctl version
53 41363 inconsistent with file /u01/app/oracle/oradata/OCP12C/control01.ctl
54 version 41348
55 第九步:
56 [oracle@oracle12c OCP12C]$ cp control02.ctl control01.ctl
57 
58 SQL> alter database mount;
59 
60 Database altered.
61 
62 SQL> alter database open;
63 alter database open
64 *
65 ERROR at line 1:
66 ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
67 
68 
69 SQL> alter database open RESETLOGS;
70 alter database open RESETLOGS
71 *
72 ERROR at line 1:
73 ORA-01152: file 1 was not restored from a sufficiently old backup
74 ORA-01110: data file 1: /u01/app/oracle/oradata/OCP12C/system01.dbf
75 第十步:
76 [oracle@oracle12c OCP12C]$ cp bak/control0* .
77 
78 SQL> alter database open;
79 
80 Database altered.
81 
82 SQL> select status  from  v$instance;
83 
84 STATUS
85 ------------------------
86 OPEN
87 
88 SQL>
View Code

 

 

 

控制文件

原文:https://www.cnblogs.com/eniniemand/p/13648243.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!