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

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;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值