1、数据文件:
一个数据文件只能属于一个数据库,一个数据文件只能属于一个表空间,一个表空间包括一个活多个数据文件。
2、控制文件:
管理数据库状态。
使用DBCA缺省创建3个控制文件拷贝。
控制文件记录的内容:
数据库名称,数据库物理布局(数据文件位置,联机日志文件、备份文件、数据库当前SCN等)。
MOUNT时,读取其内容。
检查点checkpoint会触发DBWR进程和CKPT进程的写操作,CKPT进程更新控制文件信息。
3、日志文件:
按照时间顺序记录数据库变化。
日志文件记录的是redo records,redo records是由改变向量组成change vectors,每个redo record代表一个数据块发生的变化。一个事物可能会涉及多个数据块改变,所以会包含多个redo record。
每一个redo record会记录:
事物开始时间。
事物名称
对象名称
数据更新的前状态(前镜像 before image)
数据更新的后状态(后镜像after image)
Commit标记(事物是否提交,commit, rollback)
Redo record保存在SGA的redo log buffer中,然后触发写操作写入redo log file里。
触发1:commit(commit的时候不会直接写DB,而是写到日志文件,一弹写日志文件成功,就会返回commit complete)
触发2:redo log达到1MB
触发3:redo log buffer使用量超过总量1/3
触发4:每3秒钟
触发5:DBWn写磁盘
4、联机日志组
Oracle要求至少要有2个联机日志组,每个联机日志组里至少有2个成员。
假设有group1和group2,每个联机日志组里面有两个成员redo01.log,redo02.log
LGWR不断向一个组group1中写入日志,而且必须确保向redo01.log和redo02.log同时写入日志且成功。
当写满的时候切换(Log Switch),然后写入group2,再循环。
当文件损坏。如
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: '/xxx/xxx/redo01.log'
通常查询
SQL> select group#,sequence#,archived,status from v$log;
得到是否联机的信息
如果是非联机日志,直接clear就可以修复:
SQL>alter database clear log file group 1;
SQL>alter database clear unarchived logfile group 1;(没有归档的情况下)
SQL>alter database open;
如果当前联机日志损坏有两种情况:
一、是数据库是正常关闭,日志文件中没有未决的事务需要实例恢复,当前日志组的损坏就可以直接用
SQL>alter database clear unarchived logfile group 1
进行重建
二、利用不完全恢复或强制恢复
SQL>recover database until cancel;
Auto
……
SQL>recover database until cancel;
然后
SQL>alter database open resetlogs;
(1、这种办法恢复的数据库是一致的不完全恢复,会丢失当前联机日志中的事务数据
2、这种方法适合于归档数据库并且有可用的数据库全备份。
3、恢复成功之后,记得再做一次数据库的全备份。
4、建议联机日志文件一定要实现镜相在不同的磁盘上,避免这种情况的发生,因为任何数据的丢失对于生产来说都是不容许的。)
5、归档日志
在一组联机日志文件被写满后,触发日志切换的同时也触发ARCn进程的工作。
ARCn把刚刚写满的联机日志拷贝到归档目录,这就是归档日志。
Dataguard、Stream都必须在归档模式下才能运行。
在数据库恢复的时候,前滚是利用日志完成的,回滚是利用UNDO表空间的信息。
6、日志线程
一个数据库实例使用的联机日志就叫做一个日志线程(redo thread)。实例:数据库为1:1就是单实例
7、参数文件
PFILE和SPFILE都是参数文件,PFILE是文本文件,SPFILE是二进制文件。
NOMOUNT阶段,读入参数文件。
寻找顺序:
$ORACLE_HOME/dbs/spfile<$ORACLE_SID>.ora、spfile.ora、init<$ORACLE_SID>.ora
参数中以下必须和实际情况一样,不能随便更改:
UNDO_MANAGEMENT
UNDO_TABLESPACE
DB_BLOCK_SIZE
DB_NAME
INSTANCE_NAME
Oracle用户有权限在以下目录创建文件,有:
AUDIO_FILE_DEST
BACKGROUND_DUMP_DEST
CORE_DUMP_DEST
USER_DUMP_DEST
LOG_ARCHIVE_DEST_1
SQL>startup pfile=’xxx’;
SQL>create spfile from pfile=’’;
SQL>create pfile from spfile;
更改参数使用:
SQL>alter system set parameter=value [scope=spfile|memory|both];
8、Alter文件
Alter日志文件在BACKGROUP_DUMP_DEST目录下,文件名:alert_dbname.log
记录数据库运行中的重大事件,包括启动、关闭、日志切换、添加数据文件。
启动时,还会记录参数值,可以根据它生成参数文件。
可以使用
$GREP ORA- alert_orcl.log
来分析数据库发生的异常
9、Trace文件
有3类跟踪文件,
CORE_DUMP_DEST(内核跟踪文件):由数据库内核生成
BACKGROUND_DUMP_DEST(后台进程跟踪文件):由DBWR、LGWR等后台进程产生。通常在进程运行发生异常时才会产生,此时不仅生成Trace文件,还会生成alter文件。
USER_DUMP_DEST(用户跟踪文件):由用户主动触发,如跟踪EVENT、审计数据库。
10、Change Tracking 文件
记录变化的块。默认为关闭。
SQL>alter database enable block change tracking;(打开)
SQL>alter database disable block change tracking;(关闭)
文件会存在DB_CREATE_FILE_DEST文件夹中。
可以使用
SQL>alter database enable block change tracking using file ‘/oradata/BCT/chg.dbf’;
来指定文件位置。
11、Flashback Log
Flashback database是不完全恢复的一个代替手段。
12、OMF
Oracle Managed Files,Oracle 9i后支持的新特性。
需要配置以下参数:
DB_CREATE_FILE_DEST:缺省目录,创建数据文件、临时表空间文件时,默认创建在其中,如果DB_CREATE_ONLINE_LOG_DEST_n参数,联机日志和控制文件也会创建在这里。
DB_CREATE_ONLINE_LOG_DEST_n(1~5):最多定义5个缺省目录,联机日志、控制文件会被默认创建在其中。定义了多个就实现多路复用功能。
DB_RECOVER_FILE_DEST:定义一个缺省目录。RMAN备份时默认保存在其中。如果没有定义DB_CREATE_ONLINE_LOG_DEST_n,则联机日志和控制文件也会创建在其中。
OMF会使用OFA(Optimal Flexible Architectur)原则来自动给文件命名。
在OFA原则下,命名规则是:
/o1_mf_%t_%u.dbf(//)
destination_localtion:由*_CREATE_FILE_DEST参数定义的路径,db_unique_name使用的是DB_UNIQUE_NAME,如果没有定义这个参数值则使用DB_NAME
datafile:数据文件是datafile,联机日志是onlinelog,归档日志是archivelog/
%t:数据文件是表空间名称,联机日志是日志组号,归档日志是归档日志序列号。
%u:8个字符的串,OMF通过这个串保证文件名唯一
配置示例:
SQL>alter system set DB_RECOVERY_FILE_DEST_SIZE=10g;
SQL>alter system set DB_RECOVERY_FILE_DEST='/recovery';
SQL>alter system set
LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST';
查看OMF设置情况:
SQL>SELECT NAME FROM V$DATAFILE;