一、控制文件(Control File):保存有关数据库的结构信息! 控制文件是一个小型的二进制文件,可以记录数据库的物理结构。包括: 一般Oracle数据库创建时都会创建至少两个或两个以上的控制文件。 二、控制文件的标准 select value from v$parameter where name = 'control_files' ; -- 控制文件 ② 关闭数据库(immediate、abort) ==========================控制文件的相关操作============================== 一、create controlfile错误 |
联机重做日志概念 —— 又叫做日志文件
一、联机重做日志
1、重做线程
每个数据库实例的联机重做日志组都是一个联机重做的实例线程。
不管有没有多路复用,一般每个Oracle都只有一个重做线程,当然RAC中每个实例都包含一个重做线程。
2、联机重做日志内容
重做条目记录了可以对数据库重新构造的所有修改数据,包括回滚段。
重做记录在SGA重做日志缓存区中缓冲,并由LGWR进程写入某个联机重做日志文件。
事务被提交时,必定需要用LGWR将日志全部从SGA缓存中写入联机重做日志文件,然后才被告知提交完成。
LGWR还会为每个事务分配一个识别重做记录的系统修改号(SCN)。
当重做日志缓存填满时LGWR也会将重做条目写入到重做日志文件,这些是可以回滚的。
3、联机重做日志写入方式
数据库的联机重做日志组务必要有两个或两个以上,这样可以保持其中一个一直用于写入,另一个用于归档。
LGWR采用循环写入的方式,即写满一个换下一个。或归档模式则写满了之后归档,否则则直接覆盖。
4、活动与非活动
当前正在写入的联机重做日志文件成为“当前的”联机重做日志文件。
实例恢复时所需的联机重做日志文件称为“活动的”联机重做日志文件。
实例恢复不用的联机重做日志文件称为“非活动的”联机重做日志文件。
已经进行存档的联机重做日志文件不能重新使用或重写,知道ARCn存储了这个文件内容。
5、日志切换 & 日志顺序号
一般默认在一个文件写满时切换到写一个文件,但是也可以规定时间进行切换,这样就不用理会是否写满。
也可以手动进行强制切换。
每次日志切换都会分配一个新的日志顺序号,归档时也将顺序号进行保存。
每个联机或存档的重做日志文件都通过它的日志顺序号进行唯一标识。
二、规划联机重做日志
1、多路复用(Group)
多路复用是避免损坏联机重做日志文件。
多路复用时LGWR将同一重做日志信息同时写入多个同样的联机重做日志文件。
建议必须要使用多路复用(至少两个组)。
注:当某个成员不可用,则标记为INVALID,并向LGWR跟踪文件和数据报警文件中写入错误信息。不同问题会不同反映。
* 一个操作成功一个操作失败时:按正常过程进行,忽略不可用成员
* 日志切换时需要存档而不能访问下一个组时:暂时中断操作,直到归档完成
* 介质失败,切换时不能访问下一组:关闭数据库,并返回错误信息
* LGWR写入时不能访问文件:关闭数据库,并返回错误信息
注:不同的组中不一定需要相同个数的成员。只含有1个组的多路复用是非法的。
2、日志成员存放在不同磁盘
设置多路复用时,将日志组成员放置到不同的磁盘上。这样当某磁盘失败时,可以跳过这个成员继续工作。
另外将成员放置到不同磁盘上可以消除LGWR和ARCn在后台进程对联机重做日志成员的争夺。
注:数据文件和联机重做日志文件也应该放在不同磁盘上,以减少写数据块和写记录之间出现的竞争。
3、联机重做日志成员的大小
规定联机重做日志的大小,以便将填满的组存档到脱机存档介质(磁带或磁盘)的某个单元中。
例如磁盘上有一个填满的联机重做日志组,且磁盘还有49%的未使用存储空间,此时最好降低联机重做日志文件的大小。
多路复用时,同一个组中的多有成员比用拥有同样的大小!
不同组的成员大小不同,但是这样没有什么好处,而且会对检验点的设置带来不便。
4、联机重做日志文件的数量
联机日志文件数量的确定最好的方法是测试不同的配置的效果。
最佳配置:在不妨碍LGWR向重做日志写入信息的前提下,使用尽可能少的组(至少2个组)。
仔细检查LGWR跟踪文件和数据库报警文件的内容,如果消息表明:因为检验点还没有完成或者组还没有存档的缘故,LGWR不得不频繁得等待组,那么就需要添加组来解决问题。
注:MAXLOGFILES-最大组数;MAXLOGMEMBERS-最大成员数;要修改这两个参数需要重建数据库或控制文件,所以创建数据库时要慎重。
5、控制存档延迟
在数据库中使用联机重做日志归档,然后将归档日志放到备用数据库,通过查询日志来进行和数据库中同样的操作。这两个操作之间存在一个时间间隔,就叫做存档延迟。可以通过ARCHIVE_LAG_TARGET初始化参数来严格限定延迟的时间长度。
设置了ARCHIVE_LAG_TARGET之后,Oracle将定期检查实例当前的联机重做日志,在发生一下情况时切换日志:
* n秒钟前创建了当前日志,并估计当前日志存档时间为m秒,而n+m值超过ARCHIVE_LAG_TARGET的值
* 当前日志包含重做记录
ARCHIVE_LAG_TARGET = 1800 单位是秒,默认为0,表示禁止该功能
在选择数值时考虑一下因素:
* 切换日志所消耗的系统开销
* 作为日志完整条件的结果,通常日志切换发生的频率
* 备用数据库可以人寿多少重做损失
注:当数据库本身就经常切换时,设置这个值没有什么意义,而且当设置值很低时,对性能会产生负面影响。
==================================对日志文件的操作===============================
一、创建联机重做日志
1、创建联机重做日志组
alter database add logfile
('/export/home/oracle/oradata/april/log1.log','/export/home/oracle/oradata/april/log2.log') size 500k;
alter database add group 10
('/export/home/oracle/oradata/april/log1.log','/export/home/oracle/oradata/april/log2.log') size 500k;
注:组号必须在1和MAXLOGFILES之间,且不要跳跃使用,否则会耗费数据库控制文件中的空间。
2、创建联机重做日志成员
alter database add logfile member '/export/home/oracle/oradata/april/log2.log' to group 2;
alter database add logfile member '/export/home/oracle/oradata/april/log2.log'
to ('/export/home/oracle/oradata/april/log2.log','/export/home/oracle/oradata/april/log2.log')
注:指定组中所有成员也可以表示这个组。新建的日志成员状态为INVALID,首次使用时变成活动状态。
二、重定位 & 重命名
① 关闭数据库:shutdown immediate
② 在操作系统中移动或重命名联机重做日志文件
③ 启动并装载数据库:startup mount
④ 使用rename语句
alter database rename file
'/export/home/oracle/oradata/april/log1c.log','/export/home/oracle/oradata/april/log2c.log'
to '/export/home/oracle/oradata/april/log1a.log','/export/home/oracle/oradata/april/log2a.log'
三、取消联机重做日志组成员
1、取消日志组
要注意:
① 至少需要保留两组联机重做日志文件
② 日志组状态为“非活动”时才可以取消,如果是“活动”的,则需要进行强制切换
③ 要确保日志组已经存档,可以查看V$LOG视图查看是否存档
alter database drop logfile group 3;
在执行DROP之后要在操作系统中删除磁盘文件
2、取消联机重做日志成员
要注意:
① 可以取消原先对称的组中的成员,使其暂时不对称,但最好立即调整这种状况
② 实例需要至少两个有效联机重做日志文件,且不能取消最后一个有效成员,使用V$LOGFILE查看状态
③ 和取消组一样,需要成员为非活动状态,否则需要进行一次强制切换
④ 确保要取消的成员已经经过存档
alter database drop logfile member '/export/home/oracle/oradata/april/log1.log';
四、强制切换日志
alter system swith logfile;
五、校验重做日志文件中的块
设置DB_BLOCK_CHECKSUM初始化参数为TRUE,则对所有写到磁盘上的Oracle数据块进行校验,包括重做数日志块。
DB_BLOCK_CHECKSUM参数的默认值是FLASE
<具体原理未知>
注:允许校验会对系统产生额外的开销,并且降低数据库性能。需要监视数据库性能以判断校验的代价是否过重。
六、清除联机重做日志文件
在联机重做日志损坏时,可以使用CLEAR命令来初始化联机重做日志文件
但是要注意以下情况不能使用:
* 仅有两个日志组
* 受到损坏的重做日志文件属于当前组
alter database clear logfile group 3;
alter database clear unarchived logfile group 3;
注:清除了恢复备份所需的日志文件,则不能再进行恢复,Oracle将在警报文件中写入一条消息来描述不能恢复的备份。
注:若清除的日志可以将脱机表空间变成联机状态,则需要在语句中加上UNRECOVERABLE DATAFILE子句。
因为清除该日志后再也不能把脱机表空间变成联机状态,所以不得不撤销表空间或执行未完成的恢复过程。
七、查看联机重做日志信息
V$LOG:显示来自于控制文件的重做日志文件信息
V$LOGFILE:标识重做日志文件组及其成员的状态
V$LOG_HISTORY:包含日志历史信息
数据文件
一、DataFile管理准则
1、初始参数DB_FILES
DB_FILES指出了数据文件信息保留的SGA空间数量,所以也指出了可以为该实例创建的数据文件的最大编号。
注:更改DB_FILES值需要重启实例后才可生效。
DB_FILES太小,则在关闭数据库前无法添加超过限制数量的数据文件,太大则消耗内存。
2、添加DataFile到表空间
添加DataFile到表空间需要遵循一下的条件:
* 操作系统对一个进程能够同时打开的文件数加以限制
* 操作系统对数据文件的数量和大小加以限制
* Oracle对实例打开的数据库文件最大数量有限制(与操作系统有关)
* 不能超过DB_FILES所指定的数据文件数量
* CREATE DATABASE/CONTROLFILE 中 MAXDATAFILES子句的影响
3、考虑性能的影响
4、确定数据文件的大小
SYSTEM表空间的数据文件至少需要150M来包括数据字典和回滚段。
如果安装了Oracle的其他产品,则可能还需要额外的空间。
5、适当放置数据文件
数据文件全部放在一个磁盘驱动器可能会引起竞争,有条件可以分开存放。
6、与重做日志文件分开存储
数据文件与重做日志文件存放在一个磁盘容易造成全部数据丢失,尽量分开存放。或保存多个重做日志文件。
二、创建和添加DataFile
create tablespace --创建表空间及其数据文件
create temporary tablespace --创建临时表空间及其临时文件
alter tablespace ... add datafile --添加一个数据文件
alter tablespace ... add tempfile --添加一个临时文件
create database --创建数据库和关联的数据文件
alter database ... create datafile --创建一个新的空的数据文件代替原来的
注:推荐指定文件全名,否则按系统默认会比较混乱。
三、改变DataFile大小
1、启用/禁用数据文件的自动盘区
自动盘区指DataFile可以在额定的范围内自动增长,这样可以减少表空间用完时立即干预的必要,也可以确保应用程序不会因为分配盘区而失败或暂停。
查询数据文件是否为自动盘区,可以查询DBA_DATA_FILES视图的AUTOEXTENSIBLE字段。
要将数据文件设置成自动盘区,可以在以下语句中加入 AUTOEXTEND ON 子句:
CREATE DATABASE ...
CREATE TABLESPACE ...
ALTER TABLESPACE ...
添加的举例:
ALTER TABLESPACE users
ADD DATAFILE '/export/home/oracle/oradata/april/users03.dbf' SIZE 10M
AUTOEXTEND ON
NEXT 512K
MAXSIZE 250M;
禁用的例子:
ALTER DATABASE DATAFILE '/export/home/oracle/oradata/april/users03.dbf'
AUTOEXTEND OFF;
2、手动调整DataFile
使用以下语句来手动改变DataFile的大小:
ALTER DATABASE DATAFILE '/export/home/oracle/oradata/april/stuff01.dbf'
RESIZE 100M;
四、修改数据文件可用性
要使DataFile脱机或联机,有两种方法:
① alter database 语句修改单独的DataFile
② alter tablespace 语句修改所有的DataFile
1、在ARCHIVRLOG模式下的更改DataFile状态
alter database datafile '/export/home/oracle/oradata/april/stuff01.dbf' online;
alter database datafile '/export/home/oracle/oradata/april/stuff01.dbf' offline;
注:只有在archivelog 模式下才可使用alter database来更改DataFile
2、在NOARCHIVELOG模式下使DataFile脱机
由于在NOARCHIVELOG模式下,数据文件脱机后会造成数据的遗失,所以只能使用ALTER DATABASE语句下带有DATAFILE和OFFLINE DROP子句的选项将该DataFile直接取消,例如该DataFile只包含临时段数据,并没有备份时
alter database datafile '/export/home/oracle/oradata/april/users3.dbf' offline drop;
3、修改TableSpace中所有DataFile或TempFile的可用性
ALTER TABLESPACE ... DATAFILE {ONLINE|OFFLINE}
ALTER TABLESPACE ... TEMPFILE {ONLINE|OFFLINE}
注:修改某TableSpace中的所有数据文件,但是TableSpace本身的状态不改变。
总结:
① ALTER TABLESPACE可以在数据库装载状态时发布,无需打开
② 涉及到系统表空间、撤销表空间、默认临时表空间时,必须是未打开的数据库
③ ALTER DATABASE DATAFILE 语句中必须填入文件全名
=================================DataFile 第二部分=================================
一、DataFile的重命名和重定位
1、单个TableSpace的DataFile重命名及重定位
重命名步骤:
① 使包含该DataFile的非SYSTEM TableSpace脱机
ALTER TABLESPACE users OFFLINE NOEMAL;
② 利用操作系统重命名DataFile
③ 使用ALTER TABLESPACE RENAME DATAFILE语句改文件名
ALTER TABLESPACE users
RENAME DATAFILE '/export/home/oracle/oradata/april/user1.dbf','/export/home/oracle/oradata/april/user2.dbf'
TO '/export/home/oracle/oradata/april/users01.dbf','/export/home/oracle/oradata/april/users02.dbf';
④ 备份数据库
注:重定位的操作基本上与重命名相同,即在改变名称的基础上也通过操作系统改变了位置。
2、多个TableSpace中的DataFile重命名和重定位
① 确保数据库被装载,但是关闭(必须关闭,与单TableSpace不同)
② 利用操作系统重命名及重定位DataFile
③ 使用ALTER DATABASE命令
ALTER DATABASE
RENAME FILE '/export/home/oracle/oradata/april/sort01.dbf','/export/home/oracle/oradata/april/user3.dbf'
TO '/export/home/oracle/oradata/april/temp01.dbf','/export/home/oracle/oradata/april/users03.dbf';
④ 备份数据库
二、验证DataFile中的数据块
如果需要配置Oracle来校验数据块,则需要将DB_BLOCK_CHECHSUM参数项设置为TRUE
注:DB_BLOCK_CHECHSUM的默认值是FALSE,但可以动态改变。
工作过程: 当启用块校验时,Oracle为每个写到磁盘的块计算校验和,包括临时块。DBWn为每个块计算校验和后,将其存储在块的头部,下一次Oracle读一个数据块时,使用它来校验和检测块中的讹误,若有错误则返回ORA-01578,并将错误信息写入跟踪文件
三、查看数据文件信息
DBA_DATA_FILES:每个数据文件的说明信息,包括所属表空间和文件标识
DBA_EXTENTS:组成数据库中所有段的盘区,包括盘区的数据文件标识
DBA_FREE_SPACE:表空间中的空闲盘区,包含该盘区的数据文件标识
V$DATAFILE:来自控制文件的数据文件信息
V$DATAFILE_HEADER:包括来自数据文件头部的信息
SELECT NAME, FILE#, STATUS, CHECKPOINT_CHANGE# "CHECKPOINT"
FROM V$DATAFILE;
NAME:数据文件全名
FILE#:文件号
STATUS:SYSTEM表空间的DataFile直接标SYSTEM,其他则标ONLINE|OFFLINE(RECOVER)
CHECKPOINT_CHANGE#:最近的检测点写入的最终SCN