Oracle 数据库物理结构


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;


你可能感兴趣的:(oracle,物理结构,文件用途)