您的位置:首页 > 其它

看书笔记---管理控制文件和重做日志文件

2013-05-17 11:19 281 查看
11.1管理控制文件

11.1.1控制文件管理策略

1.复合控制文件

为了提高数据库的可靠性,至少为数据库建立两个控制文件,并却分别保存在不同的硬盘中,

这是非常必要的管理策略。

2.选择存储位置

3.备份控制文件

11.1.2创建复合控制文件

oracle支持最多同时使用8个控制文件

步骤:

(1)关闭数据库

(2)在操作系统中,将已有的控制文件复制多份,修改名称后包寻到不同的位置上。

(3)修改初始化参数文件中的control_files参数,使它执行新的控制文件。

(4)重新启动数据库

11.1.3创建新的控制文件

1.创建新的控制文件的情形

2.create controlfile语句的用法

3.创建新控制文件的步骤

(1)列出数据库中所有的数据文件和重做日志文件的名称和路径。

控制文件已经丢失,这时数据库已经无法打开,因此DBA也无法通过数据字典来获取数据文件和

重做日志文件的信息。这时唯一的办法就是查看警告文件中的内容。比较幸运的是,如果DBA已经将

控制文件备份在跟踪文件中,则能够很容易地获得数据库中最新的数据文件和重做日志文件列表。

(2)如果数据库仍然处于运行状态,将它关闭

(3)在操作系统级别备份所有的数据文件和联机重做日志文件。

(4)启动实例,但是不加载数据库(start nomount)

(5)利用步骤1得到的文件列表,执行create controlfile命令创建一个新的控制文件。

如果数据库的某个联机重做日志文件同控制文件一起丢失,或者在创建控制文件时改变了数据库的名称,

必须在create controlfile语句中使用resetlogs子句,重置数据库联机重做日志文件的内容。

如果使用了resetlogs子句,必须用步骤8对数据库进行恢复。

如果没有出现上述的两种情况,则建议使用noresetlogs字句,即保留联机重做日志文件中的内容。

(6)在操作系统级别对新建的控制文件进行备份

(7)修改初始化参数文件中的control_files参数,使它指向新建的控制文件。

如果在控制文件中修改了数据库名称,还需要修改db_name参数值为新的数据库名称。

(8)如果需要,对数据库进行恢复;否则直接进入步骤9

(9)使用下面的方法重新打开数据库

如果不需要对数据库进行恢复,或者已经对数据库进行了完全恢复,可以用正常方式打开数据库。

alter database open;

如果在创建控制文件时使用了resetlogs参数,则必须指定以resetlogs方式打开数据库。

alter database open resetlogs;

4.解决控制文件与数据字典的冲突

在新建的控制文件中指定了所有数据文件与重做日志文件的列表,而在数据库的数据字典中,

也记录有数据库原来的数据文件和重做日志文件的信息。如果两个地方的设置不完全一致,

oracle将把冲突的地方记录在警告文件中。

11.1.4备份控制文件

1.将控制文件备份为二进制文件

alter database backup controlfile to 'I:\oracle\backup\control.bkp';

2.将控制文件备份为文本文件

alter database backup controlfile to trace;

将控制文件备份到位于oracle_base\admin\sid\udump目录下的跟踪文件中。

11.1.5删除控制文件

(1)关闭数据库

(2)编辑control_files初始化参数,使其中不再包含要删除的控制文件的名称。

(3)在操作系统中删除控制文件。

(4)重新启动数据库

11.1.6查询控制文件的信息

V$controlfile 包含所有控制文件的名称和状态信息

v$controlfile_record_section 包含控制文件中各个记录文档段的信息

v$parameter 可以用来获取初始化参数control_files的值

1.查询控制文件的基本信息。

select name from v$controlfile;

2.查询控制文件中记录文档段的信息

11.2管理重做日志

11.2.1 重做日志管理策略

1.使用复合重做日志文件

2.确定重做日志文件的大小

同一个重做日志组的成员日志文件必须具有相同的大小,

不同重做日志组中的成员日志文件可以具体不同的大小。但是并没有好处。

3.确定重做日志文件的数目

避免LGWR进程出现等待状态。

在创建数据库时,利用MAXLOGFILES参数来指定数据库中重做日志组的最大数目,

利用MAXLOGMEMBERS参数来指定每个重做日志组中所能拥有的最大成员数目,

如果要修改这两个参数,则必须要重新建立数据库或者重新建立控制文件。

11.2.2创建重做日志组

alter database add logfile

('I:\ORACLE\ORADATA\ORADB01\redo0301.rdo','

'I:\ORACLE\ORADATA\ORADB01\redo0302.rdo') size 100m;

新增的重做日志具有两个成员,每个成员日志的大小是100M。

在命名重做日志文件时,最好使用类似redommnn的规则.

没有使用group字句时,一般在当前组号之后递增.

也可以显示地利用group字句来指定新建的重做日志组的组号。

alter database add logfile group 3

('I:\ORACLE\ORADATA\ORADB01\redo0301.rdo',

'I:\ORACLE\ORADATA\ORADB01\redo0302.rdo') size 100m;

使用group字句指定新建的重做日志组的组号时,需要注意以下两点:

1.不能大于MAXLOGFILES参数指定的值

2.对重做日志组进行编号时,中间不能有间断,这样会浪费控制文件中文档的存储空间。

11.2.3创建成员日志文件

alter database add logfile member

'I:\ORACLE\ORADATA\ORADB01\redo0303.log' to group 3;

在创建成员日志文件时,不能使用size参数来指定重做日志文件的大小。

因为新建的必须和其他的成员一样的大小。

11.2.4 改变重做日志文件名称和位置

修改重做日志文件的名称或位置大体可以分为两个步骤:

首先在操作系统中重命名或移动重做日志文件,然后在数据库中修改重做日志文件的信息。

具体步骤:

(1)关闭数据库

(2)在操作系统中重新命名重做日志文件,或者将重做日志文件复制到新的位置上。

比如:如果需要将重做日志文件redo0302.log和redo0303.log移动到新的硬盘中,应先将复制到

新的硬盘中,然后再删除原来位置上的文件。

(3)重新启动实例,加载数据库但不打开(start mount)

(4)修改

alter database rename file

'I:\oracle\oradata\oradb01\redo0302.log',

'I:\oracle\oradata\oradb01\redo0303.log' to

'J:\oracle\logs\redo0302.log',

'K:\oracle\logs\redo0303.log';

(5)打开数据库(alter database open)

(6)备份控制文件

11.2.5 删除重做日志组

在删除重做日志组之前,首先考虑:

(1)无论组中有多少个成员,一个数据库至少需要使用两个重做日志组。

(2)只能删除处于inactive状态的重做日志组。如果要删除current状态的日志组,必须执行

一次手工日制切换,将它切换到inactive状态。

提示:当前正在被LGWR进程写入的重做日志组称为处于‘当前状态(current)’

当前正在用语实例恢复的重做日制组称为‘活动状态(active)’;

当前没有用于实例恢复的重做日志组称为‘未活动状态(inactive)’。

(3)如果数据库处于归档模式下,在删除重做日志组之前,必须确定她已经被归档。可以查询:

select group#,archived,status from v$log;

alter database drop logfile group 3;

在执行上述语句后,只是在数据字典和控制文件中将重做日志组的记录信息删除,

并不会删除操作系统中的相应文件。因此,在确认删除操作成功后,DBA要手工将相应的

操作系统文件删除。

11.2.6删除成员日志文件

在删除成员日志之前,要考虑:

(1)每个重做日制组中至少要包含一个可用的成员。那些处于invalid或stale状态的成员日志文件对于

oracle来说都是不可用的。可以通过查询v$logfile来获得各个成员日志文件的状态。

提示:

注意区别重做日志组的状态和成员日志文件的状态,active,current或inactive都是重做日志组的状态。

而valid,invalid或stale都是指成员日志文件的状态。

如果oracle无法使用某个成员日志文件,将把它标记为invalid状态;

如果oracle认为某个成员日志文件产生了错误,把它标记为stale状态;

只有标记valid状态的重做日制文件,对于oracle来说才是可用的。

(2)只能删除状态为inative的重做日志组中的成员日志文件。如果要删除的成员日志文件所属的重做日志组

正处于current状态,必须执行一次手工切换。

(3)如果数据库处于归档模式下,在删除成员日志文件前,必须确定它所属的重做日志组已经被归档。

alter database drop logfile member

'I:\oracle\oradata\oradb01\redo0302.log';

执行后,要手工删除相应的操作系统文件.

11.2.7 手工日制切换

alter system switch logfile;

提示:每进行一次日志切换后,oracle都会在数据库警告文件中进行记录。

11.2.8 清空重做日志组

11.2.10 查询重做日志文件信息

V$LOG

V$LOGFILE

V$LOG_HISTORY

11.3 管理数据库归档模式

11.3.1设置初始归档模式

一般在创建数据库时都会指定noarchivelog字句,以便在初始情况下将数据库暂时设置为非归档模式,

这样可以避免对在创建数据库过程中生成的重做日志记录进行归档。

当数据库开始工作后,可以再将它切换到归档模式中。

11.3.2 改变数据库归档模式

步骤:

(1)关闭数据库

警告:在修改数据库的归档模式前,建议将数据库进行一次完全备份。

(2)在初始化参数文件中,设置与归档相关的初始化参数。

(3)重新启动实例并加载数据库但不打开数据(startup mount)

(4)

alter database archivelog;

alter database open;

11.3.3 启动自动归档功能

如果数据库处于归档模式下, 可以使用oracle提供的自动归档功能。在自动归档方式下,oracle将启动

后台进程ARCn,由它来自动对已经写满的重做日志组进行归档操作。在自动归档方式下,

DBA仍然可以执行手工归档操作。

1.在实例启动时启用自动归档功能

需要在初始化参数文件中将log_archive_start参数设置为true.

设为true后,oracle在实例启动时将读取初始化参数的设置,并启动ARCn后台进程。

2.在启动实例后启用自动归档功能

如果在实例启动时没有起用自动归档功能,不必关闭实例再对初始化参数进行修改。

可以用alter system archive log start;

但初始化参数log_archive_start仍然为false,下次启动时实例时仍然不会自动启动归档功能。

可以设置初始化参数log_archive_max_processes指定实例所能拥有的最大归档进程数目.

log_archive_max_processes是动态参数,可以这样修改

alter system set log_archive_max_processes=3;

默认值为1。

11.3.4 禁用自动归档功能

在归档数据库模式下,如果禁用了自动归档功能,但与没有及时进行手工归档,LGWR进程无法写入

下一个已经写满的可用重做日志组,这时数据库将被挂起,直到完成对重做日志组的归档操作为止。

1.在实例启动时禁用自动归档功能

设置初始化参数log_archive_start为false.

2.在实例运行后禁用自动归档功能

alter system archive log stop;

11.3.5 执行手工归档操作

如果数据库处于归档模式下,无论是否起用自动归档功能,DBA都可以执行手工归档操作。

(1)如果自动归档被禁用,则DBA必须定时对重做日制组进行手工归档,否则数据库将挂起。

(2)如果启用了自动归档功能,DBA可以通过手工归档操作处于inactive状态的重做日志组进行重新归档,

通常是将它归档到其他的归档目标中。

alter system archive log all;这个语句可以对所有未归档的重做日志组进行归档。

11.3.6 设置归档目标

1.使用初始化参数log_archive_dest_n设置归档目标

可以最多为数据库指定10个归档目录,利用log_archive_dest_n参数所指定的归档目标可以是本地系统

中的目录,也可以是远程的数据库系统(通常是一个备用数据库):

(1)如果在设置log_archive_dest_n参数时使用location关键字,指定的归档目录是一个本地系统的目录

log_archive_dest_1='location=i:\backup\arc'

(2)如果在设置log_archive_dest_n参数时使用service关键字,指定的归档目录是一个远程数据库

log_archive_dest_2='service=standby1'

提示:standby1是一个远程备用数据库的服务名,备用数据库是当前数据库的一个精确拷贝,

通过同步机制来保证两个数据库的一致性。

使用log_archive_dest_n参数设置归档目标的操作步骤如下:

(1)关闭数据库

(2)在初始化参数文件中编辑log_archive_dest_n参数,指定一个或多个归档目标。

比如:

log_archive_dest_1='location=I:\backup\arc1'

log_archive_dest_2='location=I:\backup\arc2'

log_archive_dest_3='location=I:\backup\arc3'

(3)设置初始化参数log_archive_format,以指定归档文件的命名方式。

命名时使用%s在归档文件名称中包含日志顺序号,

使用%t在归档文件名称中包含归档线程号.

log_archive_format=arch%s.arc

假设数据库有3个重做日志组,他们的日志顺序号分别是100、101和102,

那么在3个本地归档目标一共生成9个归档日志文件。

I:\\backup\arc1\arch100.arc I:\\backup\arc2\arch100.arc I:\\backup\arc3\arch100.arc

I:\\backup\arc1\arch101.arc I:\\backup\arc2\arch101.arc I:\\backup\arc3\arch101.arc

I:\\backup\arc1\arch103.arc I:\\backup\arc2\arch103.arc I:\\backup\arc3\arch103.arc

提示:在设置了log_archive_dest_n参数后,不能再使用log_archive_dest和

log_archive_duplex_dest参数来设置归档目标

2.使用初始化参数log_archive_dest和log_archive_duplex_dest设置归档目标

步骤:

(1)关闭数据库

(2)在初始化参数文件中编辑log_archive_dest参数,以指定主归档目标,

编辑log_archive_duplex_dest参数的值,以指定次归档目标

log_archive_dest='I:\backup\arc'

log_archive_duplex_dest='J:\backup\arc'

(3)设置初始化参数log_archive_format,以指定归档文件的命名方式

log_archive_format_arch_%t_%s.arc

11.3.7指定归档目标的状态

每个归档目标可以具有如下三种类型的特性:

valid/invalid 指示被设置为归档目标的硬盘位置和服务名是否有效

enabled/disabled 指示归档目标对于oracle来说是否可用

active/inactive指示归档目标是否产生了错误

提示:要获得归档目标的状态信息,可以查询动态性能视图v$archive_dest.

可使用初始化参数log_archive_dest_state_n设置归档目标时可以指定归档目标的初始状态。

enable 可用/deferred 禁用

11.3.8 设置可选或强制归档目标

1.设置最小成功归档目标数

通过设置初始化参数log_archive_min_succeed_dest

2.设置强制归档和可选归档目标

使用log_archive_dest_n参数设置归档目标时,可设置mandatory或optional来指定强制或可选归档

log_archive_dest_1='location=i:\backup\arc' mandatory

log_archive_dest_2='service=standby1' optional

11.3.9 设置归档进程的跟踪级别

11.3.11 查询归档信息

使用数据字典视图和动态性能视图

使用archive log list命令

v$database 可以用于查询数据库是否处于归档模式

v$archived_log 包含从控制文件中获取的所有已归档日志的信息

v$archive_dest 包含所有归档目标的信息,比如归档目标的位置、状态等

v$archive_process

v$backup_redolog

v$log

1.查询需要进行归档的重做日志组

select group#,archived from v$log;

2.查询数据库的归档模式

select log_mode from v$database

3.查询归档目标的信息

select destination,binding,target,status from v$archive_dest;

4.查询归档进程的状态

select * from v$archive_processes;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: