Pro Oracle Database 11g Administration 学习笔记之第五章(管理控制文件和联机日志文件)

本文详细介绍了如何管理Oracle数据库中的控制文件和联机日志,包括控制文件的基本信息、查看和添加控制文件的方法,以及在不同模式下数据库的操作。通过实例演示了如何在数据库处于关闭状态时添加控制文件,并解决数据库关闭失败的问题。

Oracle数据库包含三种必须的文件:datafiles(数据文件),control files(控制文件) 和 online redo logs(联机日志文件)。本章主要讲解怎样管理控制文件和联机日志文件。

1.管理控制文件

控制文件是一个很小的二进制文件,里面主要存储了以下一些信息:

       数据库的名字

       数据文件的名字和路径

      联机日志文件的名字和路径

      当前联机日志文件的序号(sequence number)

      检查点信息(Checkpoint infromation)

       RMAN备份文件的名字和路径

你可以从数据字典表V$CONTROLFILE_RECORD_SECTION查看更多的存储信息

SYS@bear> select distinct type from v$controlfile_record_section;

TYPE
----------------------------
FILENAME
TABLESPACE
RMAN CONFIGURATION
BACKUP CORRUPTION
PROXY COPY
FLASHBACK LOG
REMOVABLE RECOVERY FILES
DATAFILE
DELETED OBJECT
INSTANCE SPACE RESERVATION
RMAN STATUS
THREAD INSTANCE NAME MAPPING
GUARANTEED RESTORE POINT
ACM OPERATION
DATABASE
DATAFILE COPY
BACKUP DATAFILE
RECOVERY DESTINATION
DATAFILE HISTORY
COPY CORRUPTION
DATABASE INCARNATION
STANDBY DATABASE MATRIX
REDO LOG
TEMPORARY FILENAME
FOREIGN ARCHIVED LOG
CKPT PROGRESS
REDO THREAD
LOG HISTORY
OFFLINE RANGE
ARCHIVED LOG
BACKUP PIECE
MTTR
BACKUP SET
BACKUP REDOLOG
BACKUP SPFILE
RESTORE POINT
DATABASE BLOCK CORRUPTION

37 rows selected.


 

你可以通过V$DATABASE视图查看存储在控制文件中的数据库信息

SYS@bear> select name, open_mode, created, current_scn from v$database;

NAME      OPEN_MODE            CREATED   CURRENT_SCN
--------- -------------------- --------- -----------
BEAR      READ WRITE           18-DEC-09     5125816


每个oracle数据库都必须至少有一个控制文件。当你启动数据库到nomount模式,数据库实例(instance)会从参数CONTROL_FILES找到到控制文件的位置。

-- locations of control files are known to the instance
SQL> startup nomount;

在这个时候控制文件还不会被其他进程所读取,只有当你改变数据库到mount模式时,控制文件才会被读取。

-- control files opened
SQL> alter database mount;


如果其中有一个控制文件不可用的话,你就不能mount你的数据库。(在参数CONTROL_FILES中的控制文件列表)

当你mount 数据库成功后,数据实例会知道数据文件和联机日志文件的位置,但是还不会打开它们。只有当你改变数据库到open模式时,它们才会被打开。

-- datafiles and online redo logs opened
SQL> alter database open;

 

当你创建数据库的时候就会创建相应的控制文件,一般至少创建两个控制文件(to avoid a single point of failure)。如果有条件的话,你最好创建多个控制文件(分别创建到不同的磁盘或存储设备上)。 Oracle会将信息同时写入到所有的控制文件中(CONTROL_FILES参数里面所罗列的控制文件),如果其中有一个不能写的话,会报以下的错误

ORA-00210: cannot open the specified control file

出现这种控制文件不能写的情况,你应该关闭数据库,查找原因所在。解决这种问题往往需要查看哪个控制文件不可写,不可写的原因是什么,比如磁盘坏了,或者将不可用的控制文件从CONTROL_FILES参数中去掉。(将会在后面讲到)。

 

查看控制文件中的内容

虽然控制文件是一个二进制文件,但是我们可以把它的内容转化到一个跟踪文件中,然后我们可以通过那个跟踪文件来查看控制文件中的内容了。

SYS@bear> oradebug setmypid
Statement processed.
SYS@bear> oradebug unlimit
Statement processed.
SYS@bear> alter session set events 'immediate trace name controlf level 9';

Session altered.

SYS@bear> oradebug tracefile_name
/u01/app/oracle/diag/rdbms/bear2/bear/trace/bear_ora_2490.trc


得到trace文件的位置后,你就可以查看里面关于控制文件的内容,比如

[oracle@bear]$ more /u01/app/oracle/diag/rdbms/bear2/bear/trace/bear_ora_2490.trc
以下是截取的一部分内容:
*** 2011-10-23 11:25:10.509
DUMP OF CONTROL FILES, Seq # 732159762 = 0x2ba3df12
 V10 STYLE FILE HEADER:
        Compatibility Vsn = 186646528=0xb200000
        Db ID=3565595614=0xd486abde, Db Name='BEAR'
        Activation ID=0=0x0
        Control Seq=732159762=0x2ba3df12, File size=612=0x264
        File Number=0, Blksiz=16384, File Type=1 CONTROL
 
 
 
 
***************************************************************************
DATABASE ENTRY
***************************************************************************
 (size = 316, compat size = 316, section max = 1, section in-use = 1,
  last-recid= 0, old-recno = 0, last-recno = 0)
 (extent = 1, blkno = 1, numrecs = 1)
 12/18/2009 21:27:58
 DB Name "BEAR"
 Database flags = 0x50464001 0x00001240
 Controlfile Creation Timestamp  12/18/2009 21:27:59
 Incmplt recovery scn: 0x0000.00000000
 Resetlogs scn: 0x0000.002bccfb Resetlogs Timestamp  12/11/2010 13:47:12
 Prior resetlogs scn: 0x0000.002b2edb Prior resetlogs Timestamp  12/11/2010 13:15:14
 Redo Version: compatible=0xb200000
 #Data files = 13, #Online files = 13
 Database checkpoint: Thread=1 scn: 0x0000.004e17d1
 Threads: #Enabled=1, #Open=1, Head=1, Tail=1
 
查看控制文件的名字和位置

通过查看参数CONTROL_FILES (数据库至少处于nomount模式)

SYS@bear> show parameter control_files

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_files                        string      /u01/app/oracle/oradata/bear/c
                                                 ontrol01.ctl, /u01/app/oracle/
                                                 flash_recovery_area/bear/contr
                                                 ol02.ctl, /u01/app/oracle/orad
                                                 ata/bear/control03.ctl


可以看到value里面为控制文件的列表,我的数据库有三个控制文件,分别是

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

/u01/app/oracle/ flash_recovery_area/bear/contr ol02.ctl

/u01/app/oracle/oradata/bear/control03.ctl

 

通过查看V$CONTROLFILE视图 (数据库至少处于mount模式)

SYS@bear> select name from v$controlfile;

NAME
----------------------------------------------------------------------------------------------------
/u01/app/oracle/oradata/bear/control01.ctl
/u01/app/oracle/flash_recovery_area/bear/control02.ctl
/u01/app/oracle/oradata/bear/control03.ctl


如果由于某种原因你不能start数据库到nomount模式,但是你又想知道控制文件的名字和位置时,你可以查看参数文件。

如果你用的是spfile参数文件,尽管它是二进制文件,但是你仍然可以通过 strings  打开它。

最保险的办法是复制一份参数文件,然后在通过 strings  去查看。

$ cp $ORACLE_HOME/dbs/spfilebear.ora $ORACLE_HOME/dbs/spfilebear.copy
$ strings $ORACLE_HOME/dbs/spfilebear.copy
其中control_files的内容:

*.control_files='/u01/app/oracle/oradata/bear/control01.ctl','/u01/app/oracle/flash_recovery_area/bear/control02.ctl','/u01/app/oracle/oradata/bear/control03.ctl'

 

添加控制文件

添加控制文件最基本的做法就是通过已有的控制文件复制一份新的控制文件,然后将新的控制文件位置添加到CONTROL_FILES参数中,(复制控制文件的时候数据库需要处于关闭状态。)

       1. 修改CONTROL_FILES参数,添加新的控制文件位置

       2. 关闭数据库

       3. 利用OS命令,比如 cp 复制已有的控制文件到新的位置

       4. 重新开启数据库

以上的步骤还要取决于你使用是spfile还是init.ora file的参数文件。

我们接下来就以spfile的场景为例来演示一下添加控制文件的过程。

 

1. 如果你的数据库是打开的,你可以通过以下命令来查看你是否用的是spfile

SYS@bear> show parameter spfile

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      /u01/app/oracle/product/11.2.0
                                                 /db_1/dbs/spfilebear.ora

以上表面用的是spfile

2.  查看当前CONTROL_FILES

SYS@bear> show parameter control_files

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_files                        string      /u01/app/oracle/oradata/bear/c
                                                 ontrol01.ctl, /u01/app/oracle/
                                                 flash_recovery_area/bear/contr
                                                 ol02.ctl, /u01/app/oracle/orad
                                                 ata/bear/control03.ctl


3. 添加新的控制文件位置到CONTROL_FILES

SYS@bear> alter system set control_files='/u01/app/oracle/oradata/bear/control01.ctl','/u01/app/oracle/flash_recovery_area/bear/control02.ctl','/u01/app/oracle/oradata/bear/control03.ctl', '/u01/app/oracle/oradata/bear/control04.ctl' scope=spfile;

System altered.

添加了一个/u01/app/oracle/oradata/bear/control04.ctl

 

4. 关闭数据库

SYS@bear> shutdown immediate

结果发现关闭不了数据库,一直等待。出现这种情况首先查看一下警告文件(Alert File)

[oracle@bear]$ pwd
/u01/app/oracle/diag/rdbms/bear2/bear/trace
[oracle@bear]$ tail -50 alert_bear.log

显示如下信息

ARCH: Archival stopped, error occurred. Will continue retrying
ORACLE Instance bear - Archival Error
ORA-16014: log 2 sequence# 238 not archived, no available destinations
ORA-00312: online log 2 thread 1: '/u01/app/oracle/oradata/bear/redo02.log'
Errors in file /u01/app/oracle/diag/rdbms/bear2/bear/trace/bear_arc1_2494.trc:
ORA-16014: log 2 sequence# 238 not archived, no available destinations
ORA-00312: online log 2 thread 1: '/u01/app/oracle/oradata/bear/redo02.log'
Sun Oct 23 12:25:53 2011
Beginning global checkpoint up to RBA [0xf3.185d5.10], SCN: 5129990
Completed checkpoint up to RBA [0xf3.185d5.10], SCN: 5129990
Sun Oct 23 12:26:00 2011
Shutting down instance (immediate)
Shutting down instance: further logons disabled
License high water mark = 11
Sun Oct 23 12:30:00 2011
Errors in file /u01/app/oracle/diag/rdbms/bear2/bear/trace/bear_arc0_2492.trc:
ORA-19815: WARNING: db_recovery_file_dest_size of 8589934592 bytes is 100.00% used, and has 0 remaining bytes available.
************************************************************************
You have following choices to free up space from recovery area:
1. Consider changing RMAN RETENTION POLICY. If you are using Data Guard,
   then consider changing RMAN ARCHIVELOG DELETION POLICY.
2. Back up files to tertiary device such as tape using RMAN
   BACKUP RECOVERY AREA command.
3. Add disk space and increase db_recovery_file_dest_size parameter to
   reflect the new space.
4. Delete unnecessary files using RMAN DELETE command. If an operating
   system command was used to delete files, then use RMAN CROSSCHECK and
   DELETE EXPIRED commands.
************************************************************************

Errors in file /u01/app/oracle/diag/rdbms/bear2/bear/trace/bear_arc0_2492.trc:ORA-19815: WARNING: db_recovery_file_dest_size of 8589934592 bytes is 100.00% used, and has 0 remaining bytes available.
其中发现是db_recovery_file_dest_size 空间不足了,不能归档(archive)日志文件。 它还给我们列出了一下解决办法。

由于我的测试机磁盘容量有限,我决定采取第4点,删除不需要的备份文件。关于RMAN的详细知识会在以后的章节中讲到。

1. 进入RMAN

[oracle@bear]$ export ORACLE_SID=bear
[oracle@bear]$ rman target /

Recovery Manager: Release 11.2.0.1.0 - Production on Sun Oct 23 12:43:18 2011

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

connected to target database: BEAR (DBID=3565595614)

RMAN> 


2.检查所有备份集

RMAN> crosscheck backup;


3. 删除过期备份

RMAN> delete obsolete;

RMAN retention policy will be applied to the command
RMAN retention policy is set to recovery window of 3 days
using channel ORA_DISK_1
Deleting the following obsolete backups and copies:...................

 

4.删除无效备份

RMAN> delete expired backup;

 

5.退出RMAN

RMAN> quit

 

这样应该有多余的空间来归档日志文件了。我们再来试一试关闭数据库的命令。

SYS@bear> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

成功了。(当遇到问题时首先要看看alert log中的日志

接着做添加控制文件的步骤

5. 复制控制文件

[oracle@bear]$ cp /u01/app/oracle/oradata/bear/control01.ctl /u01/app/oracle/oradata/bear/control04.ctl

 

6. 启动数据库

SYS@bear> startup
ORACLE instance started.

Total System Global Area  619360256 bytes
Fixed Size                  1338280 bytes
Variable Size             486540376 bytes
Database Buffers          125829120 bytes
Redo Buffers                5652480 bytes
Database mounted.
Database opened.

 

7. 查看CONTROL_FILES,验证控制文件是否添加成功

SYS@bear> show parameter control_files;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_files                        string      /u01/app/oracle/oradata/bear/c
                                                 ontrol01.ctl, /u01/app/oracle/
                                                 flash_recovery_area/bear/contr
                                                 ol02.ctl, /u01/app/oracle/orad
                                                 ata/bear/control03.ctl, /u01/a
                                                 pp/oracle/oradata/bear/control
                                                 04.ctl
SYS@bear> alter system checkpoint;

System altered.

添加控制文件成功。此时我们有4个控制文件。

(未完待续。。。。)



 

 

 

 


 

      

前言 1 简介 课程目标1-2 建议日程表1-3 课程目标1-4 Oracle 产品服务1-5 Oracle Database 10g:“g”代表网格1-6 Oracle 数据库体系结构1-8 数据库结构1-9 Oracle 内存结构1-10 进程结构1-12 Oracle 实例管理1-13 服务器进程数据库缓冲区高速缓存1-14 物理数据库结构1-15 表空间数据文件1-17 SYSTEM SYSAUX 表空间1-18 段、区块1-19 逻辑物理数据库结构1-20 课程示例:HR 方案1-22 数据库体系结构:结构化组件概要1-23 小结1-24 2 安装Oracle 数据库软件 课程目标2-2 Oracle 数据库管理员的任务2-3 用于管理Oracle 数据库的工具2-4 安装:系统要求2-6 检查系统要求2-7 灵活体系结构(OFA) 2-8 使用灵活体系结构2-9 设置环境变量2-11 Oracle Universal Installer (OUI) 2-13 安装Oracle 软件2-14 数据库配置选项2-15 执行配置脚本2-16 完成安装2-17 高级安装选项2-18 安装选项:无提示模式2-19 小结2-20 练习概览:安装Oracle 软件2-21 目录 iii 3 创建Oracle 数据库 课程目标3-2 计划数据库3-3 数据库:示例3-4 Database Configuration Assistant (DBCA) 3-5 使用DBCA 创建数据库3-6 口令管理3-12 创建数据库设计模板3-13 使用DBCA 删除数据库3-14 小结3-16 练习概览:使用DBCA 3-17 4 管理Oracle 实例 课程目标4-2 管理框架4-3 启动停止Database Control 4-4 Oracle Enterprise Manager 4-5 访问Oracle Enterprise Manager 4-6 数据库主页4-7 使用SQL*Plus iSQL*Plus 访问数据库4-8 使用iSQL*Plus 4-9 为了以SYSDBA SYSOPER 身份进行访问而设置iSQL*Plus 4-10 使用SQL*Plus 4-12 从Shell 脚本调用SQL*Plus 4-13 从SQL*Plus 调用SQL 脚本4-14 初始化参数文件4-15 简化初始化参数4-16 查看修改初始化参数4-18 数据库启动关闭4-19 启动Oracle 数据库实例4-20 启动Oracle 数据库实例:NOMOUNT 4-21 启动Oracle 数据库实例:MOUNT 4-22 启动Oracle 数据库实例:OPEN 4-23 关闭Oracle 数据库实例4-24 关闭模式4-25 SHUTDOWN 选项4-26 使用SQL*Plus 启动关闭4-29 查看预警日志4-30 查看预警历史记录4-31 动态性能视图4-32 iv 动态性能视图:用法示例4-33 动态性能视图:注意事项4-34 小结4-35 练习概览:管理Oracle 实例4-36 5 管理数据库存储结构 课程目标5-2 存储结构5-3 如何存储表数据5-4 数据库块的结构5-5 表空间数据文件5-6 Oracle 管理文件(OMF) 5-7 表空间中的空间管理5-8 浏览存储结构5-9 创建新表空间5-10 本地管理表空间的存储5-12 预配置数据库中的表空间5-14 变更表空间5-16 表空间操作5-18 删除表空间5-20 查看表空间信息5-21 采集存储信息5-22 查看表空间内容5-23 扩大数据库5-24 什么是自动存储管理5-25 ASM:主要功能优点5-26 ASM:概念5-27 小结5-28 练习概览:管理数据库存储结构5-29 6 管理用户安全性 课程目标6-2 数据库用户帐户6-3 预定义帐户:SYS SYSTEM 6-5 创建用户6-6 验证用户6-7 管理员验证6-9 解除用户帐户的锁定并重置口令6-10 权限6-11 系统权限6-12 对象权限6-14 v 撤销具有ADMIN OPTION 的系统权限6-15 撤销具有GRANT OPTION 的对象权限6-16 角色的作用6-17 将权限分配给角色以及将角色分配给用户6-18 预定义角色6-19 创建角色6-20 保护角色6-21 将角色分配给用户6-22 概要文件用户6-23 实施口令安全功能6-25 创建口令概要文件6-27 提供的口令验证函数:VERIFY_FUNCTION 6-28 将限额分配给用户6-29 小结6-31 练习概览:管理用户6-32 7 管理方案对象 课程目标7-2 什么是方案7-3 访问方案对象7-5 命名数据库对象7-6 指定表中的数据类型7-8 创建修改表7-11 了解数据完整性7-13 定义约束条件7-15 违反约束条件7-16 约束条件状态7-17 约束条件检查7-19 使用SQL 创建约束条件:示例7-20 查看表中的列7-21 查看表的内容7-22 表操作7-23 删除表7-24 截断表7-25 索引7-26 索引类型7-27 B 树索引7-28 位图索引7-30 索引选项7-32 创建索引7-34 vi 什么是视图7-35 创建视图7-36 序列7-37 创建序列7-38
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值