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

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个控制文件。

(未完待续。。。。)



 

 

 

 


 

      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值