Oracle 培训笔记 8.27 redo undo checkpoint

1、redo

--查看日志组
select * from v$log;
members: 日志组成员数
archived: 归档,写满的日志的备份
status:
 active:实例恢复需要
 inactive:实例恢复不需要
 current:当前正在用的
 unused:还没有使用到的
first_change#
 表示系统从哪个点开始日志记录在这个文件
 
scn:system change number
select current_scn from v$database;
select dbms_flashback.get_system_change_number from dual;

--查看日志
select * from v$logfile;

STATUS 列的常见值:
INVALID  表明该文件不可访问。
STALE  表明该文件内容不完全,例如正在添加一个日志文件成员。
DELETED  表明该文件已不再使用。

In general, the stale status of a redo log member should not be a cause
for great concern, unless you observe that this happens frequently or
systematically.  Keep in mind that a stale log is not necessarily an
invalid log, but more of an "in-doubt" one. Once the corresponding redo
group becomes the current one again, the stale status will go away by
itself.


--查看日志历史
select * from v$log_history;


日志操作

--删除日志组
select * from v$log;
alter database drop logfile group 1;

--增加日志组
alter database add logfile group 1
('E:\oracle\product\10.2.0\oradata\mydb\redo0101.log','E:\oracle\product\10.2.0\oradata\mydb\redo0102.log') size 20M;


--删除增加第2组
alter database drop logfile group 2;

alter database add logfile group 2
('E:\oracle\product\10.2.0\oradata\mydb\redo0201.log','E:\oracle\product\10.2.0\oradata\mydb\redo0202.log') size 2000M;

--删除增加第3组

手动切换日志
alter system switch logfile;

手动触发检查点
alter system checkpoint;

alter database drop logfile group 3;

alter database add logfile group 3
('E:\oracle\product\10.2.0\oradata\mydb\redo0301.log','E:\oracle\product\10.2.0\oradata\mydb\redo0302.log') size 20M;


--redo日志缓冲区刷新
1)日志内容满1M
2)日志内容满日志缓冲区1/3
3)每3秒
4)有提交

2、undo
SQL> show parameter undo

NAME                                 TYPE        VALUE
------------------------------------ ----------- ----------------------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      UNDOTBS1

alter system set undo_tablespace=xxx;
alter tablespace xxxx retention guarantee;

select * from v$undostat; 每10分钟

select max(undoblks)*900*8/600 from v$undostat;


3、logminer

数据库保护
dataguard
stream

参数设置
shutdown immediate
startup mount
alter database force logging;
alter database add supplemental log data;
alter system set utl_file_dir='d:\logmnr' scope=spfile;

alter database open;

--创建表
create table t01(id number);

--生成数据字典
begin
dbms_logmnr_d.build(dictionary_filename =>'dict.ora',dictionary_location =>'d:\logmnr');
end;

--增加要挖掘的日志
select * from v$log;
begin
--dbms_logmnr.remove_logfile(LogFileName => 'E:\oracle\product\10.2.0\oradata\mydb\redo0101.log');
dbms_logmnr.add_logfile(LogFileName => 'E:\oracle\product\10.2.0\oradata\mydb\redo0101.log');
end;

select * from v$logmnr_logs;

--挖掘日志
alter system switch logfile;
alter system switch logfile;

begin
dbms_logmnr.start_logmnr(DictFileName =>'d:\logmnr\dict.ora');
end;

--结束
begin
dbms_logmnr.end_logmnr;
end;

--查看
select * from v$logmnr_contents where table_name='T01'

--模拟数据变化
insert into t01 values(100);
commit;

4、checkpoint检查点

select checkpoint_change# from v$database; //781185
select checkpoint_change#,last_change# from v$datafile;
781185,
上两个视图信息来源于控制文件

select checkpoint_change# from v$datafile_header;
781185
上两个视图信息来源于数据文件

数据库启动
1)判断控制文件中数据文件检查点号与数据文件中记录的检查点号是否一致,
数据库认为数据文件是旧的,需要介质恢复
2)判断控制文件中数据文件检查点号与控制文件中记录的数据文件的最后改变号
是否一致,需要实例恢复

练习:
正常关闭数据库,启动到mount状态,看上述3个查询信息

异常关闭数据库,启动到mount状态,看上述3个查询信息



检查点分类
1)完全检查点
发生条件:关闭数据库(shutdown abort除外)
          alter system checkpoint;


2)部分检查点
部分数据文件发生检查点。

alter tablespace users offline;
alter tablespace users read only;
alter tablespace users begin backup;

3)增量检查点
select * from v$log;

--增加大日志
alter database add logfile group 1
('E:\oracle\product\10.2.0\oradata\mydb\redo01.log') size 1000M;
alter database add logfile group 2
('E:\oracle\product\10.2.0\oradata\mydb\redo02.log') size 1000M;
alter database add logfile group 3
('E:\oracle\product\10.2.0\oradata\mydb\redo03.log') size 1000M;

--创建大表,模拟大量操作
drop table t01 purge;
create table t01 tablespace users as select * from dba_objects;
insert into t01 select * from t01;
commit;

select * from v$log;
update t01 set object_name='kkkkkkkkkkkkkkkkkkkk';

--观察v$log
15:56:58 SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS
---------- ---------- ---------- ---------- ---------- --- ----------------
FIRST_CHANGE# FIRST_TIME
------------- --------------
         1          1         32 1048576000          1 NO  ACTIVE
       802578 27-8月 -11

         2          1         33 1048576000          1 NO  ACTIVE
       885334 27-8月 -11

         3          1         34 1048576000          1 NO  CURRENT
       982930 27-8月 -11

当出现2个active和1个current, 异常关闭数据库,观察启动需要时间
shutdown abort
set time on
startup


--设置增量检查点参数

SQL> show parameter fast_start

NAME                                 TYPE        VALUE
------------------------------------ ----------- --------
fast_start_mttr_target               integer     0

SQL> alter  system set fast_start_mttr_target=15;

--查询相关视图
select * from v$instance_recovery;
select * from v$mttr_target_advice;

--模拟大量操作,观察日志状态
当current变为active,观察停留时间
异常关闭数据库,观察启动需要时间
shutdown abort
set time on
startup

确认启动时间和参数fast_start_mttr_target值


检查点进程:ckpt
作用:通知dbwr写数据;更新控制文件和数据文件头。






你可能感兴趣的:(oracle,数据库,Integer,database,System,Dictionary)