8、控制文件、日志文件


一、控制文件
    控制文件是一个很小的二进制文件,记录关于数据库结构的基本信息,在家中数据库时,oracle实例将读取控制文件的内容。控制文件丢失或者损坏,数据库将无法加载并且很难恢复。
控制文件主要包括如下内容:
1、数据库名database name和标识SID
2、数据库创建时间戳。
3、表空间名
4、数据文件、重做日志文件的名称和位置
5、当前重做日志文件序列号
6、检查点信息
7、undo segment的起始和结束
8、重做日志归档信息
9、备份信息

永久参数:
maxinstances:用于指定同时访问数据库的最大例程数(一个数据库可以被多个实例装载和打开)。
maxdatafiles:用于指定oracle数据库的最大数据文件数量。
maxlogfiles:用于指定oracle数据库的最大日志组数量。
maxlogmembers:用于指定每个日志组的最大日志成员数量。
maxloghistory:用于指定控制文件可记载的日志历史的最大数量。
使用RMAN备份时,RMAN会将备份信息记载道控制文件中。

1.1复合控制文件
    因为控制文件的重要性,我们需要对控制文件进行复合,其实就是保存多个控制文件(可分别存放不同的硬盘上)。当其中一个文件(硬盘)丢失或者损坏时。只要修改控制文件初始化参数control_files,去掉损坏的控制文件,然后重启即可。

control_files的修改(实例使用spfile启动)
alter system set control_files='全路径+名称',
...
'全路径+名称',
'全路径+名称'
scope=spfile;

关闭数据库,将原来的控制文件复制成多份(按照control_files设置的内容),放到不同位置。
shutdown immediate
复制文件...
然后重启。
startup

select name from v$controlfile;--查看所有的控制文件。

对于pfile文件启动的,他的control_files参数是这pfile文件中修改的,打开pfile文件编辑:
control_files=("路径+名称",
"路径+名称",
"路径+名称")
ok了。其余过程与spfile一致。
注意文件名称和拓展名的大小写。


1.2创建控制文件
创建控制文件需要处于启动不加载数据库的状态。
startup nomount

create controlfile
reuse database "orcl"
logfile
group 1 'd:\app\jangle\oradata\orcl\REDO01.LOG',
group 2 ...REDO02.LOG',
group 3 ...REDO03.LOG
datafile
'd:\app\jangle\oradata\orcl\SYSTEM01.DBF',
...
maxlogfiles 50
maxlogmembers 3
maxinstances 6
maxdatafiles 200
noresetlogs
noarchivelog;

由此控制文件已经创建。
noresetlogs:用于指定使用原来的重做日志。如果不希望使用重做日志则指定reserlogs。(感觉有点反过来,待验证。)
logfile:指定数据库原有的重做日志的组号、大小及日志组成员。
datafile:指定数据库原有的数据文件(数据文件与表空间对应。)

创建好之后修改初始化参数control_files
alter system set control_files=
...
scope=spfile;

alter database open;--然后打开数据库。

1.3备份与恢复控制文件
alter database backup controlfile to 'd:\backupfile\control_16-04-14.bkp';--这种备份方式备份为二进制文件。
alter database backup controlfile to trace;--备份问文本文件,可用于创建控制文件的sql.
P268

二、重做日志文件(Redo Log File)
    oracle中,事务对数据库所做的修改将以重做记录的形式保存在重做日志缓存中,当事务提交时,由LGWR进程将缓存中与该事务相关的重做记录全部写入重做日志文件,此时该事务被认为成功提交。
    oracle数据库至少需要2个重做日志文件,当第一个重做日志文件写满后LGWR开始写入下一个重做日志文件;当所有日志文件都写满后再回头写第一个,如此循环。
select * from v$log;--查看重做日志组信息。
select * from v$logfile;--查看日志文件的信息。

alter database add logfile group 4 ('d:\...redo04.log','e:\...redo04.log') size 10m;--新增重做日志组,指定为第4组,该组包含2个复合的日志文件(编号要按循序编)
alter database add logfile member 'e:\...' to group 1;--向其中的日志组添加成员。
alter database drop logfile member 'e:\...'; --删除日志组中的成员。
alter database drop logfile group 4;--删除重做日志组。
alter database clear logfile group 3;--清空3号重做日志组。

出于安全考虑,规划重做日志时,应将同一个日志组的不同日志成员尽可能地分布到不同磁盘上,以防止磁盘损坏而导致的所有日志成员丢失。那么增加磁盘后,我们需要将日志成员进行移动:
1、shutdown immediate
2、在操作系统层移动日志成员至新磁盘(新位置)
3、startup mount;
4、alter database rename file
'd:\...',
'd:\...'
to
'e:\...',
'e:\...';                     --该命令仅仅是修改了数据库中的记录,实体文件并未移动,所以第2部的操作系统层的移动是必须的。
5、alter database open;
6、备份控制文件(这个是每次对于数据库做改动都应该执行的。)


三、管理归档日志
    对于重做日志,它是循环写入的,也就是说,当一次循环结束,它的第一个日志会被覆盖写入新的内容,之前的重做日志则无法查看。归档的概念就是,将每次的重做日志都保留下来,使得可以查看到整个完整的修改过程。这对于数据恢复来说是非常有利的。
noarchivelog非归档模式:
1、当检查点完成后,LGWR按序覆盖重做日志文件。
2、如果数据库备份之后的重做日志内容被覆盖了,那么出现数据文件损坏时只能恢复到过去的完全备份点(数据库备份+备份时到现今重做日志文件 = 现今的数据库内容)注:重做日志是一系列修改向量。

archivelog归档模式:
1、如果发生磁盘介质损坏,则可以使用数据库备份+归档重做日志恢复已经提交的事务,保证不会发生任何数据丢失。
2、利用归档日志文件,可以实现使用数据库打开状态下创建的备份文件来进行数据库恢复。
3、如果为当前数据库建立一个备份数据库,通过持续地为备份数据库应用归档重做日志,可以保证源数据库与备份数据库的一致性。

3.1归档/非归档模式的切换
select log_mode from v$database;--查看当前的归档模式。
shutdown immediate;
startup mount  --在装载不打开数据库的状态下进行修改。
alter database archivelog;--切换数据库到归档模式。
alter database open;--打开数据库
archive log list; 查看是否已经处于归档模式
alter system set log_archive_max_processes=5;--设置ARCn进程的数量,默认为2。
通过设置log_archive_dest_n参数设置归档目标(1<=n<=10),默认位置为use_db_recovery_file_dest,该目录即数据库的flash_recovery_area闪回目录。通过设置log_archive_dest_1可以修改默认目录。
alter system set log_archive_dest_1='location=d:\...';--设置本地系统目录
alter system set log_archive)dest_2='service=DBY1' --DBY1是一个远程备用数据库服务器名

select * from v$archive_dest --查看所有归档目标信息。
P278 配置归档文件格式,配置归档文件位置等详细配置内容。

你可能感兴趣的:(oracle,数据库,控制文件,日志文件)