当前位置: 首页 > news >正文

Oracle 控制文件详解

1、控制文件存储的数据信息
1)数据库名称和数据库唯一标识符(DBID)
2)创建数据库的时间戳
3)有关数据文件、联机重做日志文件、归档重做日志文件的信息
4)表空间信息
5)检查点信息
6)日志序列号信息
 控制文件包含数据文件、联机重做日志文件等信息。
 控制文件也会跟踪数据库的结构变化。
 控制文件包含未打开数据库时必须可访问的元数据。

2、控制文件在什么时候用
mount时、open时、备份恢复过程中都会用到控制文件

3、至少有一个控制文件、建议有多个控制文件
多个控制文件的好处:多路复用,避免单点故障

4、控制文件位置


SYS@orcl(CDB$ROOT)> conn / as sysdba
Connected.SYS@orcl(CDB$ROOT)> select name from v$controlfile;NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/ORCL/control01.ctl
/u01/app/oracle/fast_recovery_area/ORCL/control02.ctlSYS@orcl(CDB$ROOT)> show parameter control_filesNAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------------------------------------------------------------------
control_files                        string      /u01/app/oracle/oradata/ORCL/control01.ctl, /u01/app/oracle/fast_recovery_area/ORCL/control02.ctl

5、控制文件的增加、删除、重定位、重命名

5.1 增加控制文件

SYS@orcl(CDB$ROOT)> alter system set control_files='/u01/app/oracle/oradata/ORCL/control01.ctl','/u01/app/oracle/fast_recovery_area/ORCL/control02.ctl','/u01/app/oracle/oradata/ORCL/control03.ctl' scope=spfile;System altered.SYS@orcl(CDB$ROOT)> show parameter control_filesNAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------------------------------------------------------------------
control_files                        string      /u01/app/oracle/oradata/ORCL/control01.ctl, /u01/app/oracle/fast_recovery_area/ORCL/control02.ctlSYS@orcl(CDB$ROOT)> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.SYS@orcl(CDB$ROOT)> host cp /u01/app/oracle/oradata/ORCL/control01.ctl /u01/app/oracle/oradata/ORCL/control03.ctlSYS@orcl(CDB$ROOT)> startup
ORACLE instance started.Total System Global Area 1526723568 bytes
Fixed Size                  9135088 bytes
Variable Size             939524096 bytes
Database Buffers          570425344 bytes
Redo Buffers                7639040 bytes
Database mounted.
Database opened.SYS@orcl(CDB$ROOT)> show parameter control_filesNAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_files                        string      /u01/app/oracle/oradata/ORCL/control01.ctl, /u01/app/oracle/fast_recovery_area/ORCL/control02.ctl, /u01/app/oracle/oradata/ORCL/control03.ctl

注意shutdown 后要复制生成参数中新增的控制文件,否则启动数据库会失败:

SYS@orcl(CDB$ROOT)> startup
ORACLE instance started.Total System Global Area 1526723568 bytes
Fixed Size                  9135088 bytes
Variable Size             973078528 bytes
Database Buffers          536870912 bytes
Redo Buffers                7639040 bytes
ORA-00205: error in identifying control file, check alert log for more info

原因:找不到/u01/app/oracle/fast_recovery_area/ORCL/control03.ctl
查看alert日志会看到类似如下信息:

Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_mz00_102709.trc:
ORA-00202: control file: '/u01/app/oracle/oradata/ORCL/control01.ctl,/u01/app/oracle/fast_recovery_area/ORCL/control02.ctl,/u01/app/oracle/fast_recovery_area/ORCL/control03.ctl'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory

5.2 删除控制文件
恢复成最初的两个控制文件

SYS@orcl(CDB$ROOT)> alter system set control_files='/u01/app/oracle/oradata/ORCL/control01.ctl','/u01/app/oracle/fast_recovery_area/ORCL/control02.ctl' scope=spfile;System altered.SYS@orcl(CDB$ROOT)> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.SYS@orcl(CDB$ROOT)> startup
ORACLE instance started.Total System Global Area 1526723568 bytes
Fixed Size                  9135088 bytes
Variable Size             939524096 bytes
Database Buffers          570425344 bytes
Redo Buffers                7639040 bytes
Database mounted.
Database opened.SYS@orcl(CDB$ROOT)> show parameter control_filesNAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------------------------------------------------------------------
control_files                        string      /u01/app/oracle/oradata/ORCL/control01.ctl, /u01/app/oracle/fast_recovery_area/ORCL/control02.ctl

5.3 重命名控制文件
将/u01/app/oracle/oradata/ORCL/control01.ctl 改成/u01/app/oracle/oradata/ORCL/control04.ctl

SYS@orcl(CDB$ROOT)> alter system set control_files='/u01/app/oracle/oradata/ORCL/control04.ctl','/u01/app/oracle/fast_recovery_area/ORCL/control02.ctl' scope=spfile;SYS@orcl(CDB$ROOT)> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS@orcl(CDB$ROOT)> host cp /u01/app/oracle/oradata/ORCL/control01.ctl /u01/app/oracle/oradata/ORCL/control04.ctlSYS@orcl(CDB$ROOT)> startup
ORACLE instance started.Total System Global Area 1526723568 bytes
Fixed Size                  9135088 bytes
Variable Size             939524096 bytes
Database Buffers          570425344 bytes
Redo Buffers                7639040 bytes
Database mounted.
Database opened.
SYS@orcl(CDB$ROOT)> show parameter control_filesNAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------------------------------------------------------------------
control_files                        string      /u01/app/oracle/oradata/ORCL/control04.ctl, /u01/app/oracle/fast_recovery_area/ORCL/control02.ctl

5.4 重定位控制文件
修改 /u01/app/oracle/oradata/ORCL/control04.ctl 路径,为 /u01/app/oracle/oradata/control04.ctl

SYS@orcl(CDB$ROOT)> alter system set control_files='/u01/app/oracle/oradata/control04.ctl','/u01/app/oracle/fast_recovery_area/ORCL/control02.ctl' scope=spfile;System altered.SYS@orcl(CDB$ROOT)> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.SYS@orcl(CDB$ROOT)> host cp /u01/app/oracle/oradata/ORCL/control04.ctl /u01/app/oracle/oradata/control04.ctlSYS@orcl(CDB$ROOT)> startup
ORACLE instance started.Total System Global Area 1526723568 bytes
Fixed Size                  9135088 bytes
Variable Size             939524096 bytes
Database Buffers          570425344 bytes
Redo Buffers                7639040 bytes
Database mounted.
Database opened.SYS@orcl(CDB$ROOT)> show parameter control_filesNAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------------------------------------------------------------------
control_files                        string      /u01/app/oracle/oradata/control04.ctl, /u01/app/oracle/fast_recovery_area/ORCL/control02.ctl

除了上述方法,还有如下方法可以修改control_files的配置。

查看得知当前是使用的spfile文件:

SYS@orcl(CDB$ROOT)> show parameter spfileNAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      /u01/app/oracle/product/19.3.0/db_1/dbs/spfileorcl.ora

生成pfile文件:

SYS@orcl(CDB$ROOT)> create pfile from spfile;File created.

查看当前使用的控制文件:

SYS@orcl(CDB$ROOT)> select name from v$controlfile;NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/control04.ctl
/u01/app/oracle/fast_recovery_area/ORCL/control02.ctl

关闭数据库:

SYS@orcl(CDB$ROOT)> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

在$ORACLE_HOME/dbs 下可看到生成的pfile文件initorcl.ora

# su - oracle
Last login: Mon Mar 25 20:48:45 CST 2024 on pts/7
$ cd $ORACLE_HOME
$ cd dbs
$ ll
total 40
-rw-rw----. 1 oracle oinstall 1544 Mar 16 01:22 hc_oradb.dat
-rw-rw----. 1 oracle oinstall 1544 Mar 25 21:32 hc_orcl.dat
-rw-r--r--. 1 oracle oinstall 3079 May 14  2015 init.ora
-rw-r--r--. 1 oracle oinstall 1087 Mar 25 21:30 initorcl.ora
-rw-r-----. 1 oracle oinstall   24 Mar 16 01:07 lkORADB
-rw-r-----. 1 oracle oinstall   24 Mar 14 20:11 lkORCL
-rw-r-----. 1 oracle oinstall 2048 Mar 16 01:10 orapworadb
-rw-r-----. 1 oracle oinstall 2048 Mar 14 20:13 orapworcl
-rw-r-----. 1 oracle oinstall 3584 Mar 16 06:03 spfileoradb.ora
-rw-r-----. 1 oracle oinstall 3584 Mar 25 21:25 spfileorcl.ora

这里的spfile文件可以删除:

$ rm spfileorcl.ora

修改pfile文件initorcl.ora :

$ vi initorcl.ora

在这里插入图片描述
将红框部分修改为:

*.control_files='/u01/app/oracle/oradata/ORCL/control01.ctl','/u01/app/oracle/fast_recovery_area/ORCL/control02.ctl'

备份控制文件:

$ cp /u01/app/oracle/fast_recovery_area/ORCL/control02.ctl /u01/app/oracle/oradata/ORCL/control01.ctl

生成新的spfile文件:

SYS@orcl(CDB$ROOT)>  create spfile from pfile;File created.

重启数据库后查看使用的控制文件:

SYS@orcl(CDB$ROOT)> startup
ORACLE instance started.Total System Global Area 1526723568 bytes
Fixed Size                  9135088 bytes
Variable Size             939524096 bytes
Database Buffers          570425344 bytes
Redo Buffers                7639040 bytes
Database mounted.
Database opened.
SYS@orcl(CDB$ROOT)> select name from v$controlfile;NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/ORCL/control01.ctl
/u01/app/oracle/fast_recovery_area/ORCL/control02.ctl

6、控制文件的备份
6.1 备份二进制文件

SYS@orcl(CDB$ROOT)> alter database backup controlfile to '/home/oracle/control_bak.ctl';Database altered.

6.2 备份文本文件

SYS@orcl(CDB$ROOT)> alter database backup controlfile to trace as '/home/oracle/control_text.ctl' ;Database altered.

备份控制文件 备份控制文件是非常重要的,在对数据库的物理结构进行改变后,也需要重新对控制文件进行备份,这些操作包括:
 增加、删除、重命名数据文件;
 增加、删除表空间
 增加、删除日志组或日志文件

7、创建控制文件
建议在归档模式创建控制文档,以避免日志文件被覆盖。(也可在非归档模式)

7.1 打开数据库归档

1)查看数据库归档情况
SYS@orcl(CDB$ROOT)> archive log list
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     7
Current log sequence           92)关闭数据库
SYS@orcl(CDB$ROOT)> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.3)启动数据库到 mount
SYS@orcl(CDB$ROOT)> startup mount
ORACLE instance started.Total System Global Area 1526723568 bytes
Fixed Size                  9135088 bytes
Variable Size             939524096 bytes
Database Buffers          570425344 bytes
Redo Buffers                7639040 bytes
Database mounted.4)打开归档
SYS@orcl(CDB$ROOT)> alter database archivelog;Database altered.5)打开数据库
SYS@orcl(CDB$ROOT)> alter database open;Database altered.6)查看数据库归档情况
SYS@orcl(CDB$ROOT)> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     7
Next log sequence to archive   9
Current log sequence           9

7.2 删除所有的控制文件 ,模拟控制文件丢失

1)查看数据库控制文件
SYS@orcl(CDB$ROOT)> select name from v$controlfile;NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/ORCL/control01.ctl
/u01/app/oracle/fast_recovery_area/ORCL/control02.ctlSYS@orcl(CDB$ROOT)> host rm /u01/app/oracle/oradata/ORCL/control01.ctlSYS@orcl(CDB$ROOT)> host rm /u01/app/oracle/fast_recovery_area/ORCL/control02.ctlSYS@orcl(CDB$ROOT)> shutdown abort
ORACLE instance shut down.

7.3 将数据库启动到 NOMOUNT

SYS@orcl(CDB$ROOT)> startup nomount
ORACLE instance started.Total System Global Area 1526723568 bytes
Fixed Size                  9135088 bytes
Variable Size             939524096 bytes
Database Buffers          570425344 bytes
Redo Buffers                7639040 bytes

7.4 执行创建控制文件的语句
创建控制文件的语句从6.2中做的控制文件备份control_text.ctl中copy,选择NORESETLOGS语句。

STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  NOARCHIVELOGMAXLOGFILES 16MAXLOGMEMBERS 3MAXDATAFILES 1024MAXINSTANCES 8MAXLOGHISTORY 292
LOGFILEGROUP 1 '/u01/app/oracle/oradata/ORCL/redo01.log'  SIZE 200M BLOCKSIZE 512,GROUP 2 '/u01/app/oracle/oradata/ORCL/redo02.log'  SIZE 200M BLOCKSIZE 512,GROUP 3 '/u01/app/oracle/oradata/ORCL/redo03.log'  SIZE 200M BLOCKSIZE 512
-- STANDBY LOGFILE
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/pdbseed/system01.dbf','/u01/app/oracle/oradata/ORCL/pdbseed/sysaux01.dbf','/u01/app/oracle/oradata/ORCL/users01.dbf','/u01/app/oracle/oradata/ORCL/pdbseed/undotbs01.dbf','/u01/app/oracle/oradata/ORCL/pdb/system01.dbf','/u01/app/oracle/oradata/ORCL/pdb/sysaux01.dbf','/u01/app/oracle/oradata/ORCL/pdb/undotbs01.dbf','/u01/app/oracle/oradata/ORCL/pdb/users01.dbf'
CHARACTER SET AL32UTF8
;

直接粘贴在SQL>后,如下:

SYS@orcl(CDB$ROOT)> STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  NOARCHIVELOG
ORA-01081: cannot start already-running ORACLE - shut it down firstMAXLOGFILES 16MAXLOGMEMBERS 3MAXDATAFILES 1024MAXINSTANCES 8MAXLOGHISTORY 292
LOGFILEGROUP 1 '/u01/app/oracle/oradata/ORCL/redo01.log'  SIZE 200M BLOCKSIZE 512,GROUP 2 '/u01/app/oracle/oradata/ORCL/redo02.log'  SIZE 200M BLOCKSIZE 512,GROUP 3 '/u01/app/oracle/oradata/ORCL/redo03.log'  SIZE 200M BLOCKSIZE 512
-- STANDBY LOGFILE
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/pdbseed/system01.dbf','/u01/app/oracle/oradata/ORCL/pdbseed/sysaux01.dbf','/u01/app/oracle/oradata/ORCL/users01.dbf','/u01/app/oracle/oradata/ORCL/pdbseed/undotbs01.dbf','/u01/app/oracle/oradata/ORCL/pdb/system01.dbf','/u01/app/oracle/oradata/ORCL/pdb/sysaux01.dbf','/u01/app/oracle/oradata/ORCL/pdb/undotbs01.dbf','/u01/app/oracle/oradata/ORCL/pdb/users01.dbf'
CHARACTER SET AL32UTF825  ;Control file created.

7.5 启动数据库

1)查看数据库当前状态
SYS@orcl(CDB$ROOT)> select status from v$instance;STATUS
------------
MOUNTED2)启动数据库
SYS@orcl(CDB$ROOT)> 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'3)恢复数据库
SYS@orcl(CDB$ROOT)> recover database;
Media recovery complete.4)启动数据库
SYS@orcl(CDB$ROOT)> alter database open;Database altered.

7.6 查看控制文件

SYS@orcl(CDB$ROOT)> select name from v$controlfile;NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/ORCL/control01.ctl
/u01/app/oracle/fast_recovery_area/ORCL/control02.ctl$ ls /u01/app/oracle/oradata/ORCL/control01.ctl
/u01/app/oracle/oradata/ORCL/control01.ctl
$ ls /u01/app/oracle/fast_recovery_area/ORCL/control02.ctl
/u01/app/oracle/fast_recovery_area/ORCL/control02.ctl
http://www.lryc.cn/news/327795.html

相关文章:

  • 活体成像应用染料CY3.5-NHS星戈瑞
  • 【优选算法】专题1 -- 双指针 -- 复写0
  • GESP Python编程三级认证真题 2024年3月
  • 前端理论总结(css3)——link/import区别 // 伪类/伪元素
  • ntp服务器搭建
  • 对象的内存布局
  • docker centos7离线安装ElasticSearch单机版
  • 【计算机网络】IP 协议
  • 刷题DAY38 | LeetCode 509-斐波那契数 70-爬楼梯 746-使用最小花费爬楼梯
  • 蓝桥杯-卡片换位
  • Unity 布局控制器Content Size Fitter
  • Python的面向对象、封装、继承、多态相关的定义,用法,意义
  • Elasticsearch 向量搜索
  • 2024蓝桥杯每日一题(背包)
  • Redis桌面客户端
  • 让Unity的协程变得简单
  • 2.9 Python缩进规则(包含快捷键)
  • 任务记录.
  • andv vue 实现多张图片上传
  • 使用JMeter+Grafana+Influxdb搭建可视化性能测试监控平台
  • django模板下,vue的使用(前后端不分离)
  • python笔记(7)List(列表)
  • java 抠取红色印章(透明背景)
  • CSS及javascript
  • LeetCode 1997.访问完所有房间的第一天:动态规划(DP)——4行主要代码(不需要什么前缀和)
  • BootsJS上新!一个库解决大部分难题!
  • 智慧公厕,让数据和技术更好服务社会生活
  • Spark基于DPU Snappy压缩算法的异构加速方案
  • 如何使用python链表
  • ADB的主要操作命令及详解