一、Oracle 控制文件
为二进制文件,初始化大小由CREATE DATABASE指定,可以使用RMAN备份
记录了当前数据库的结构信息,同时也包含数据文件及日志文件的信息以及相关的状态,归档信息等等
在参数文件中描述其位置,个数等等。通常采用分散放开,多路复用的原则。在mount阶段被读取,open阶段一直被使用
维护数据库一致性(数据库启动时会比较控制文件与联机日志文件中的ckpt,即起始scn号,如相等则正常启动,否则需要介质恢复)
一个控制文件只能属于一个数据库
控制文件的任意修改将写入到初始化参数中指定的所有控制文件中,读取时则仅读取第一个控制文件
控制文件只能连接一个数据库,控制文件的大小一般不要超过MB,最多为个,最少一个,互为镜像
控制文件中包含的内容
数据库的名字、ID、创建的时间戳
表空间的名字
联机日志文件、数据文件的位置、个数、名字
联机日志的Sequence号码
检查点的信息
撤销段的开始或结束
归档信息
备份信息
二、查看控制文件的相关信息
1.使用相关视图来查看
V$CONTROLFILE --列出实例中所有控制文件的名字及状态信息
V$PARAMETER --列出所有参数的位置及状态信息
V$CONTROLFILE_RECORD_SECTION --列出控制文件中记录的部分信息
SHOW PARAMETER CONTROL_FILES --列出控制文件的名字、状态、位置等
SQL> select * from v$controlfile;
STATUS NAME IS_ BLOCK_SIZE FILE_SIZE_BLKS
------- -------------------------------------------------- --- ---------- --------------
/u01/app/oracle/oradata/orcl/control01.ctl NO 16384 430
/u01/app/oracle/oradata/orcl/control02.ctl NO 16384 430
/u01/app/oracle/oradata/orcl/control03.ctl NO 16384 430
SQL> select name,type,value from v$parameter where name like '%control%';
NAME TYPE VALUE
------------------------------ ---------- ------------------------------------------------------------
control_files 2 /u01/app/oracle/oradata/orcl/control01.ctl, /u01/app/oracle/
oradata/orcl/control02.ctl, /u01/app/oracle/oradata/orcl/con
trol03.ctl
control_file_record_keep_time 3 7
SQL> select * from v$controlfile_record_section;
TYPE RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX LAST_INDEX LAST_RECID
---------------------------- ----------- ------------- ------------ ----------- ---------- ----------
DATABASE 316 1 1 0 0 0
CKPT PROGRESS 8180 11 0 0 0 0
REDO THREAD 256 8 1 0 0 0
REDO LOG 72 16 9 0 0 20
SQL> show parameter control_files;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_files string /u01/app/oracle/oradata/orcl/c
ontrol01.ctl, /u01/app/oracle/
oradata/orcl/control02.ctl, /u
01/app/oracle/oradata/orcl/con
trol03.ctl
SQL> select controlfile_sequence# from v$database;
CONTROLFILE_SEQUENCE#
---------------------
985
ORA-25153: 临时表空间为空
今天做flashback table实验时出现了报错,下面谈谈处理过程:
ORA-25153: 临时表空间为空
1.做闪回表的第一步要对表t启用row movement
SQL> alter table t enable row movement;
表已更改。
2.查询当前的scn
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
3.往表里插入一个数据,并commit
SQL> insert into t values(123456,100);
已创建 1 行。
SQL> commit;
提交完成。
4.执行闪回表操作,此时报了个ORA-25153
SQL> flashback table t to scn 592774;
flashback table t to scn 592774
第 1 行出现错误:
ORA-00604: 递归 SQL 级别 1 出现错误
ORA-25153: 临时表空间为空
思路:
我数据的版本是10.2.0.1,之前做过控制文件恢复,导致临时表空间为空,|这是10g的一个bug,在11g里已经没有这个问题(以上两句不知是否正确)|。
1.首先查看dba_tablespaces,表空间都online
SQL> select tablespace_name,status from dba_tablespaces;
TABLESPACE_NAME
------------------------------ ---------
SYSTEM
UNDOTBS1
SYSAUX
TEMP
USERS
2.查看dba_temp_files
SQL> select tablespace_name,file_name from dba_temp_files;
未选定行
SQL> alter database
alter database
*
第 1 行出现错误:
ORA-12907: 表空间 TEMP 已经是默认的临时表空间
问题就出在这里了,临时数据文件丢了。现在来加一个
方法一、增大临时文件大小:
SQL> alter database tempfile ‘/u01/app/oracle/oradata/orcl/temp01.dbf’ resize100m;
Database altered.
方法二、将临时数据文件设为自动扩展:
SQL> alter database tempfile ‘/u01/app/oracle/oradata/orcl/temp01.dbf’ autoextend on next 5m maxsize unlimited;
SQL> alter tablespace temp add tempfile 'D:\oracle\product\10.2.0\oradata\test\TEMP01.DBF'size
表空间已更改。
SQL> select tablespace_name,file_name from dba_temp_files;
TABLESPACE_NAME
------------------------------
FILE_NAME
--------------------------------------------------------------------------------
TEMP
D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\TEMP01.DBF
现在再执行闪回表:
SQL> flashback table t to scn 592774;
闪回完成。
SQL> select * from t;
---------- ----------
成功了