Oracle Database物理文件之控制文件

一 控制文件简介

控制文件是一个很小的二进制文件(最多能增长到64MB左右),用于记录数据库的物理结构。一个控制文件只属于一个数据库。创建数据库时,创建控制文件。当数据库的物理结构改变的时候,Oracle会更新控制文件。用户不能编辑控制文件,控制文件的修改由Oracle完成。

数据库的启动和正常运行都离不开控制文件。启动数据库时,Oracle从初始化参数文件中获得控制文件的名字及位置,打开控制文件,然后从控制文件中读取数据文件和联机日志文件的信息,最后打开数据库。数据库运行时,Oracle会修改控制文件,所以,一旦控制文件损坏,数据库将不能正常运行。

控制文件的主要内容包括:

数据库名称(Database Name)

创建数据库的时间戳

数据文件的名字及位置

联机日志文件的名字及位置

表空间信息

日志历史记录(Log History)

归档日志的信息

备份信息

当前的日志序列号(Log Sequence Number)

检查点信息(Checkpoint)

 

控制文件的大小由下面的几个参数决定:

MAXLOGFILES

MAXLOGMEMBERS

MAXLOGHISTORY

MAXDATAFILES

MAXINSTANCES

当增加、重命名、删除一个数据文件或者一个联机日志文件时,Oracle服务器进程(Server Process)会立即更新控制文件以反映数据库结构的这种变化。所以,Oracle总是告诫我们,在数据库的结构发生变化后,要备份控制文件。日志写进程LGWR负责把当前日志序列号记录到控制文件中。校验点进程CKPT负责把校验点的信息记录到控制文件中。归档进程负责把归档日志的信息记录到控制文件中。

初始化参数CONTROL_FILES的值记录控制文件的位置。通常,DBA应该镜像控制文件,把每个控制文件分布到不同的物理磁盘,发生灾难时,即使其中一个控制文件损坏,数据不会丢失,也不会使整个数据库陷于瘫痪。

 

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

1.通过系统参数查看控制文件的相关信息

SQL> show parameter control_f
NAME                                             TYPE               VALUE
------------------------------------             --------------     -----------------------------------------------------------
control_file_record_keep_time                    integer            7
control_files                                    string             /u01/app/oracle/oradata/orcl/c ontrol01.ctl,
                                                                    /u01/app/oracle/ flash_recovery_area/orcl/control02.ctl

                                                 

参数control_file_record_keep_time表示控制文件里可重复使用的记录所能保存的最小天数。如果新增加一条记录 到控制文件可以重复使用的部分,这时最老的记录尚没有超出最小保留天数,那么记录将控制文件的这一部分将扩展。如果将该参数设置为0,那么控制文件可以重复使用的部分将永远不会扩展。注意,这个参数只应用于控制文件中可循环利用的部分,如归档日志文件,各种备份记录。不应用于诸如数据文件,表空间,重做线程等,这些内容只有当其从对应的表空间中删除后才能重用。

参数control_files记录了当点数据库中控制文件的名字及文件路径信息。

2.通过动态视图查看控制文件的相关信息

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

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

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

sys@orcl > SELECT * FROM v$controlfile;

sys@orcl>SELECT * FROMv$controlfile_record_section;

sys@orcl>SELECT name, type, value FROMv$parameter WHERE name LIKE 'control_f%';

3.通过操作系统命令查看控制文件的具体内容

[oracle@db ~]$ strings$ORACLE_BASE/oradata/orcl/control01.ctl | more

4.查看控制文件当前的版本号

sys@orcl>SELECT controlfile_sequence#FROM v$database;

 

三 控制文件的管理

一个数据库可以包含多个控制文件,它们的文件内容是一致的。如果多个数据文件不一致,则数据库启动时会报错。控制文件应该通过硬件实现多路复用。控制文件的个数和位置可通过spfile或pfile进行修改。

1.通过spfile尽心修改的步骤如下:

(1)修改spfile中的参数control_files,alter systemset control_files=’file_path/control01.ctl’, ’file_path/control02.ctl’scope=spfile

(2)一致性关闭数据库

(3)使用操作系统命名增加或删除数据文件(cp/mv/rm)

(4)使用spfile启动数据库

(5)查看数据库是否正常启动

 

2.通过pfile进行修改的补助如下:

(1)通过操作系统命令(如vi)修改pfile中的参数*.control_files=’file_path/control01.ctl’,’file_path/control02.ctl’

(2)一致性关闭数据库

(3)使用操作系统命名增加或删除数据文件(cp/mv/rm)

(4)使用pfile启动数据库

(5)查看数据库是否正常启动

 

四 控制文件的备份

控制文件可以通过热备份或者RMAN备份的方式进行备份。

1.热备份

alter database backup controlfile to ‘<file>’;                          --热备控制文件

alter database backup controlfile to trace as ‘<file>’;          --备份控制文件的建立脚本

例如:

-- 备份控制文件到文件系统,用于归档模式下的控制文件恢复
sys@orcl>alter database backup controlfile to '$ORACLE_BASE/backup/control.bak.ctl';
-- 备份控制文件的创建语句到文件系统
sys@orcl>alter database backup controlfile to trace as '$ORACLE_BASE/backup/control.sql';

2.RMAN备份控制文件

backup current controlfile;                                             --备份当前的控制文件

backup database include current controlfile;            --备份当前数据库及控制文件

configure controlfile autobackup on;                           --设置自动备份控制文件

例如:

-- 启动RMAN
[oracle@db ~]$ rman
Recovery Manager: Release 11.2.0.1.0 - Production on Sun Feb 23 09:41:52 2014
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
-- 连接到目标数据库
RMAN> connect target /;
connected to target database: ORCL (DBID=1364371964)
-- 备份控制文件
RMAN> backup current controlfile;
Starting backup at 23-FEB-14
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=21 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current control file in backup set
channel ORA_DISK_1: starting piece 1 at 23-FEB-14
channel ORA_DISK_1: finished piece 1 at 23-FEB-14
piece handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/2014_02_23/o1_mf_ncnnf_TAG20140223T094340_9jlnlfnn_.bkp tag=TAG20140223T094340 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 23-FEB-14
-- 备份数据库及控制文件,数据库需要处于archivelog模式下
RMAN> backup database include current controlfile;
Starting backup at 23-FEB-14
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=142 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00001 name=/u01/app/oracle/oradata/orcl/system01.dbf
input datafile file number=00002 name=/u01/app/oracle/oradata/orcl/sysaux01.dbf
input datafile file number=00003 name=/u01/app/oracle/oradata/orcl/undotbs01.dbf
input datafile file number=00005 name=/u01/app/oracle/oradata/orcl/example01.dbf
input datafile file number=00004 name=/u01/app/oracle/oradata/orcl/users01.dbf
channel ORA_DISK_1: starting piece 1 at 23-FEB-14
channel ORA_DISK_1: finished piece 1 at 23-FEB-14
piece handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/2014_02_23/o1_mf_nnndf_TAG20140223T095613_9jlo9y7y_.bkp tag=TAG20140223T095613 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:01:45
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current control file in backup set
including current SPFILE in backup set
channel ORA_DISK_1: starting piece 1 at 23-FEB-14
channel ORA_DISK_1: finished piece 1 at 23-FEB-14
piece handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/2014_02_23/o1_mf_ncsnf_TAG20140223T095613_9jlof8l7_.bkp tag=TAG20140223T095613 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 23-FEB-14
-- 查看当前的RMAN 参数设定
RMAN> show all;
RMAN configuration parameters for database with db_unique_name ORCL are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1;
CONFIGURE BACKUP OPTIMIZATION OFF;
CONFIGURE DEFAULT DEVICE TYPE TO DISK;
CONFIGURE CONTROLFILE AUTOBACKUP OFF;  -- 默认自动备份控制文件为关闭状态
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F';
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET;
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1;
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1;
CONFIGURE MAXSETSIZE TO UNLIMITED;
CONFIGURE ENCRYPTION FOR DATABASE OFF;
CONFIGURE ENCRYPTION ALGORITHM 'AES128';
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE;
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE;
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/11.20.1/db_1/dbs/snapcf_orcl.f';
-- 设置开启RMAN自动备份控制文件
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
old RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP OFF;
new RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP ON;
new RMAN configuration parameters are successfully stored

五 控制文件的缺失恢复

1.丢失多个控制文件中的一个或多个

缺失多个控制文件中的一个或多个,数据库启动时会报ORA-00205错误,导致数据库无法启动,如下:

idle>startup
ORACLE instance started.
Total System Global Area 1050411008 bytes
Fixed Size                  1341168 bytes
Variable Size             641730832 bytes
Database Buffers          402653184 bytes
Redo Buffers                4685824 bytes
ORA-00205: error in identifying control file, check alert log for more info
-- 查看警告日志的位置,一般在数据库参数background_dump_dest指定的目录下
idle>show parameter dump
NAME                                               TYPE           VALUE
------------------------------------               -----------    ------------------------------
background_core_dump                               string         partial
background_dump_dest                               string         /u01/app/oracle/diag/rdbms/orcl/orcl/trace
core_dump_dest                                     string         /u01/app/oracle/diag/rdbms/orc l/orcl/cdump
max_dump_file_size                                 string         unlimited
shadow_core_dump                                   string         partial
user_dump_dest                                     string         /u01/app/oracle/diag/rdbms/orc l/orcl/trace
-- 查看警告日志中的错误信息,找不到控制文件
[oracle@db trace]$ tail -f alert_orcl.log
Sun Feb 23 10:08:13 2014
ALTER DATABASE   MOUNT
ORA-00210: cannot open the specified control file
ORA-00202: control file: '/u01/app/oracle/flash_recovery_area/orcl/control02.ctl'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
ORA-205 signalled during: ALTER DATABASE   MOUNT...
Sun Feb 23 10:08:14 2014
Checker run found 1 new persistent data failures

出现这种情况时,有两种简单的修复办法:

(1)拷贝存在的控制文件到丢失的控制文件,例如

-- 拷贝当前存在的控制文件到丢失的控制文件
idle>host cp /u01/app/oracle/oradata/orcl/control01.ctl /u01/app/oracle/flash_recovery_area/orcl/control02.ctl
-- 挂载数据库
idle>alter database mount;
Database altered.
-- 启动数据库
idle>alter database open;
Database altered.

(2)修改spfile中的参数control_files的值,去除丢失的参数文件的路径,例如:

idle>alter system set control_files = '/u01/app/oracle/oradata/orcl/control01.ctl' scope = spfile;
idle>startup force
ORACLE instance started.
Total System Global Area 1050411008 bytes
Fixed Size                  1341168 bytes
Variable Size             641730832 bytes
Database Buffers          402653184 bytes
Redo Buffers                4685824 bytes
Database mounted.
Database opened.

2.控制文件的版本号不同

当数据中存在多个版本不同的控制文件时,数据库会报ORA-00214错误,可以通过用版本号高的控制文件覆盖版本号低的控制文件使问题得到解决,例如:

idle>startup
ORACLE instance started.
Total System Global Area 1050411008 bytes
Fixed Size                  1341168 bytes
Variable Size             641730832 bytes
Database Buffers          402653184 bytes
Redo Buffers                4685824 bytes
ORA-00214: control file '/u01/app/oracle/oradata/orcl/control01.ctl' version 1173 inconsistent with
file '/u01/app/oracle/flash_recovery_area/orcl/control02.ctl' version 1169
-- 用版本高的控制文件覆盖版本低的控制文件
idle>ho cp /u01/app/oracle/oradata/orcl/control01.ctl /u01/app/oracle/flash_recovery_area/orcl/control02.ctl
idle>alter database mount;
Database altered.
idle>alter database open;
Database altered.


3.丢失全部控制文件

(1)重建控制文件恢复数据文件

重建控制文件需要搞清楚如下问题:控制文件的参数设定,日志文件的大小和位置,数据文件的位置,数据库的字符编码集。搞清楚这些问题之后,可以通过重建控制文件语句创建控制文件。例如:

-- 缺失控制文件,启动数据库报ORA-00205错误,数据库处于nomount阶段
idle>startup
ORACLE instance started.

Total System Global Area 1050411008 bytes
Fixed Size                  1341168 bytes
Variable Size             641730832 bytes
Database Buffers          402653184 bytes
Redo Buffers                4685824 bytes
ORA-00205: error in identifying control file, check alert log for more info
-- 查询控制文件的位置
idle>show parameter control_files
NAME                          TYPE         VALUE
--------------------------    -----------  -----------------------------------------------------------------------------------------------------------
control_files                 string       /u01/app/oracle/oradata/orcl/control01.ctl, 
                                           /u01/app/oracle/flash_recovery_area/orcl/control02.ctl
-- 验证控制文件是否存在
idle>ho ls /u01/app/oracle/oradata/orcl/control01.ctl
ls: 无法访问/u01/app/oracle/oradata/orcl/control01.ctl: 没有那个文件或目录
idle>ho ls /u01/app/oracle/flash_recovery_area/orcl/control02.ctl
ls: 无法访问/u01/app/oracle/flash_recovery_area/orcl/control02.ctl: 没有那个文件或目录
-- 文件不存在,创建控制文件
idle>CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  NOARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/u01/app/oracle/oradata/orcl/redo01.log'  SIZE 50M BLOCKSIZE 512,
  GROUP 2 '/u01/app/oracle/oradata/orcl/redo02.log'  SIZE 50M BLOCKSIZE 512,
  GROUP 3 '/u01/app/oracle/oradata/orcl/redo03.log'  SIZE 50M BLOCKSIZE 512
DATAFILE
  '/u01/app/oracle/oradata/orcl/system01.dbf',
  '/u01/app/oracle/oradata/orcl/sysaux01.dbf',
  '/u01/app/oracle/oradata/orcl/undotbs01.dbf',
  '/u01/app/oracle/oradata/orcl/users01.dbf',
  '/u01/app/oracle/oradata/orcl/example01.dbf'
CHARACTER SET AL32UTF8;
Control file created.
-- 创建数据文件后,数据库自动进入到mount阶段,此时启动数据库会报错
idle>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/orcl/system01.dbf'
-- 先恢复数据库
idle>RECOVER DATABASE;
Media recovery complete.
-- 然后将数据库调整到open阶段
idle>ALTER DATABASE OPEN;
Database altered.
-- 为临时表空间添加数据文件
sys@orcl>ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/temp01.dbf'
           SIZE 30408704  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;

(2)利用备份的控制文件恢复

如果数据库有备份的控制文件,控制文件丢失前数据库处于归档模式下,且在线重做日志文件可用,则可通过以下方式恢复数据库:

-- 拷贝备份的控制文件到丢失的控制文件的位置并重命名
idle>host cp /u01/app/oracle/backup/control.bak.ctl/u01/app/oracle/oradata/orcl/control01.ctl
idle>host cp /u01/app/oracle/backup/control.bak.ctl/u01/app/oracle/flash_recovery_area/orcl/control02.ctl
-- 挂载数据库
idle>alter database mount;
Database altered.
-- 打开数据库
idle>alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for databaseopen
idle>ALTER DATABASE OPEN NORESETLOGS;
ALTER DATABASE OPEN NORESETLOGS
*
ERROR at line 1:
ORA-01610: recovery using the BACKUP CONTROLFILE option must be done
-- 使用备份的控制文件恢复数据库
idle>RECOVER DATABASE USING BACKUPCONTROLFILE
ORA-00279: change 1073537 generated at 02/24/2014 21:19:19 neededfor thread 1
ORA-00289: suggestion :
/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2014_02_24/o1_mf_1_10_%u_.arc
ORA-00280: change 1073537 for thread 1 is in sequence #10
-- 手动输入redo日志的文字,依次试验每个日志组
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/u01/app/oracle/oradata/orcl/redo01.log
Log applied.
-- 数据库恢复完成
Media recovery complete.
-- 打开数据库,重置联机重做日志
idle>ALTER DATABASE OPEN RESETLOGS;
Database altered.

(3)利用隐藏参数打开数据库

如果有备份的控制文件,但是在线重做日志文件丢失,则可利用隐藏参数_allow_resetlogs_corruption取消一致性验证打开数据库,此时可能会丢失数据。

-- 设置隐藏参数,关闭一致性验证
idle>alter system set "_allow_resetlogs_corruption" = true scope = spfile;
System altered.
-- 打开数据库,重置联机重做日志
idle>ALTER DATABASE OPEN RESETLOGS;
Database altered.
-- 重置隐藏参数
idle>alter system reset "_allow_resetlogs_corruption";
System altered.


在IT领域,尤其是地理信息系统(GIS)中,坐标转换是一项关键技术。本文将深入探讨百度坐标系、火星坐标系和WGS84坐标系之间的相互转换,并介绍如何使用相关工具进行批量转换。 首先,我们需要了解这三种坐标系的基本概念。WGS84坐标系,即“World Geodetic System 1984”,是一种全球通用的地球坐标系统,广泛应用于GPS定位和地图服务。它以地球椭球模为基础,以地球质心为原点,是国际航空和航海的主要参考坐标系。百度坐标系(BD-09)是百度地图使用的坐标系。为了保护隐私和安全,百度对WGS84坐标进行了偏移处理,导致其WGS84坐标存在差异。火星坐标系(GCJ-02)是中国国家测绘局采用的坐标系,同样对WGS84坐标进行了加密处理,以防止未经授权的精确位置获取。 坐标转换的目的是确保不同坐标系下的地理位置据能够准确对应。在GIS应用中,通常通过特定的算法实现转换,如双线性内插法或四参转换法。一些“坐标转换小工具”可以批量转换百度坐标、火星坐标WGS84坐标。这些工具可能包含样本文件(如org_xy_格式参考.csv),用于提供原始坐标据,其中包含需要转换的经纬度信息。此外,工具通常会附带使用指南(如重要说明用前必读.txt和readme.txt),说明输入据格式、转换步骤及可能的精度问题等。x86和x64目录则可能包含适用于32位和64位操作系统的软件或库文件。 在使用这些工具时,用户需要注意以下几点:确保输入的坐标据准确无误,包括经纬度顺序和浮点精度;按照工具要求正确组织据,遵循读写规则;注意转换精度,不同的转换方法可能会产生微小误差;在批量转换时,检查每个坐标是否成功转换,避免个别错误据影响整体结果。 坐标转换是GIS领域的基础操作,对于地图服务、导航系统和地理据分析等至关重要。理解不同坐标系的特点和转换方法,有助于我们更好地处
智能网联汽车的安全员级考试涉及多个方面的专业知识,包括但不限于自动驾驶技术原理、车辆传感器融合、网络安全防护以及法律法规等内容。以下是针对该主题的一些核心知识点解析: ### 关于智能网联车安全员级考试的核心内容 #### 1. 自动驾驶分级标准 国际自动机工程师学会(SAE International)定义了六个级别的自动驾驶等级,从L0到L5[^1]。其中,L3及以上级别需要安全员具备更的应急处理能力。 #### 2. 车辆感知系统的组成功能 智能网联车通常配备多种传感器,如激光雷达、毫米波雷达、摄像头和超声波传感器等。这些设备协同工作以实现环境感知、障碍物检测等功能[^2]。 #### 3. 据通信网络安全 智能网联车依赖V2X(Vehicle-to-Everything)技术进行据交换,在此过程中需防范潜在的网络攻击风险,例如中间人攻击或恶意软件入侵[^3]。 #### 4. 法律法规要求 不同国家和地区对于无人驾驶测试及运营有着严格的规定,考生应熟悉当地交通法典中有关自动化驾驶部分的具体条款[^4]。 ```python # 示例代码:模拟简单决策逻辑 def decide_action(sensor_data): if sensor_data['obstacle'] and not sensor_data['emergency']: return 'slow_down' elif sensor_data['pedestrian_crossing']: return 'stop_and_yield' else: return 'continue_driving' example_input = {'obstacle': True, 'emergency': False, 'pedestrian_crossing': False} action = decide_action(example_input) print(f"Action to take: {action}") ``` 需要注意的是,“橙点同学”作为特定平台上的学习资源名称,并不提供官方认证的标准答案集;建议通过正规渠道获取教材并参加培训课程来准备此类资格认证考试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值