共计 3239 个字符,预计需要花费 9 分钟才能阅读完成。
这篇文章将为大家详细讲解有关 Oracle 附加日志是怎样的,文章内容质量较高,因此丸趣 TV 小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
Oracle 附加日志
分类分为两个等级:数据库级和表级
数据库级附加日志
– 视图 v$database
? SUPPLEMENTAL_LOG_DATA_MIN:最小附加日志,开关
最小补充日志:是最基本的一种数据库级补充日志,而 LogMiner 正是依赖最小补充日志工作服务的 (即识别 行移动 行迁移)
启用最小补充日志命令:
ALTER DATABASE ADD Supplemental LOG DATA;
关闭最小补充日志命令:
ALTER DATABASE DROP Supplemental Log Data;
? SUPPLEMENTAL_LOG_DATA_PK:记录所有变化记录主键
在 update 命令的重做记录中添加被修改行的主键字段的旧值,无论是否被修改,都记录。如果表没有主键,则由长度最小的唯一索引字段代替,若连唯一索引也没有,则记录该行所有字段。
alterdatabaseaddsupplemental log data (Primarykey) columns;
? SUPPLEMENTAL_LOG_DATA_UI:记录所有变化记录唯一索引
唯一索引补充日志:唯一索引主要是为 复合索引(唯一)服务的。只有唯一索引的字段被 update 时,才会记录该字段被修改前的值
alter database add supplemental log data (unique) columns;
? supplemental_log_data_fk:
外键补充日志:同唯一索引补充日志一样,只有外键字段被 update 时,才会记录被修改前的旧值,即也是为复合外键服务的。
alter database add supplemental log data (foreign key) columns;
? SUPPLEMENTAL_LOG_DATA_ALL:记录所有变化记录全部列
全体字段补充日志:顾名思义就所有字段的值不论是否被修改都记录。会导致磁盘快速增长,LGWR 进程繁忙。不建议使用。
alter database add supplemental log data (all) columns;
- 建议只打开最小附加日志,并打开所需复制表的表级附加日志
? ALTER DATABASE add | drop SUPPLEMENTAL LOG DATA;
? 目的是产生最小日志增量,避免对生产主机产生较大影响
查询当前设置
SELECT supplemental_log_data_min min,
supplemental_log_data_pk pk,
supplemental_log_data_ui ui,
supplemental_log_data_fk fk,
supplemental_log_data_all allc
FROM v$database;
表级附加日志
– 通过 OGG 命令行中的 add trandata schema.table 命令添加
– 如果有主键则只加入主键;无主键添加唯一索引;两者皆无,则添加所有列
– 相当于数据库里面通过 Alter tableadd supplemental log group
(column,..) always;(可查询 dba_log_group_columns)
实验环境
1、源和目标都创建表:
源表:create table tb10(col1 int primary key, col2 int, col3 int);
目标:create table tb10(col1 int primary key, col2 int, col3 int);
2. 配置本地抽取进程
GGSCI (pc6 as ogg@hyyk) 27 add extract test tranlog begin now
GGSCI (pc6 as ogg@hyyk) 36 add exttrail ./dirdat/oo,extract test
GGSCI (pc6 as ogg@hyyk) 33 edit params test
extract test
setenv (NLS_LANG= AMERICAN_AMERICA.ZHS16GBK)
setenv (ORACLE_SID= hyyk)
userid ogg,password oracle
gettruncates
exttrail ./dirdat/oo
table sender.tb10;
GGSCI (pc6 as ogg@hyyk) 49 add trandata sender.tb10
增加表级附加日志
3. 配置投递进程
GGSCI (pc6 as ogg@hyyk) 39 add extract t_dump exttrailsource ./dirdat/oo
GGSCI (pc6 as ogg@hyyk) 41 add rmttrail /u01/app/oggd/dirdat/vv,extract t_dump
GGSCI (pc6 as ogg@hyyk) 42 edit params t_dump
extract t_dump
tranlogoptions excludeuser ogg
setenv (NLS_LANG= AMERICAN_AMERICA.ZHS16GBK)
setenv (ORACLE_SID= hyyk)
passthru
userid ogg,password oracle
rmthost 192.168.1.80,mgrport 7809
rmttrail /u01/app/oggd/dirdat/vv
table sender.tb10;
4. 在目标端配置复制进程
GGSCI (ogg-80 as ogg@ogg) 3 add replicat rep_t,exttrail ./dirdat/vv,checkpointtable ogg.checkpoint
GGSCI (ogg-80 as ogg@ogg) 5 edit params rep_t
replicat rep_t
–handlecollisions
assumetargetdefs
setenv (NLS_LANG= AMERICAN_AMERICA.ZHS16GBK)
setenv (ORACLE_SID= ogg)
userid ogg,password oracle
map sender.tb10,target receiver.tb10;
实验之前看一看在源表执行 insert update delete
数据分析:Insert
我们在源表插入数据
SENDER@hyyk insert into tb10 values(1,2,3);
SENDER@hyyk commit;
在目标端查询
我们在源端使用 dumplog 查看
Logdump 72 open ./dirdat/ww000000000
Current LogTrail is /u01/app/oggs/dirdat/ww000000000
Logdump 73 ghdr on
Logdump 74 detail on
Logdump 75 detail date
这里就验证了 trail 文件中只有后映像
数据分析:update
我们在目标端
SENDER@hyyk update tb10 set col2=4 where col1=1;
SENDER@hyyk commit;
目标段查询
使用 dumplog 查看
这里执行 update tb10 set col2=4 where col1=1;
Logdump 会有 col1 的记录呢
这里就是要说明 Oracle 日志缺省只记录变化的列和附加日志对应列,附加日志对应的就是主键的列,col1 就是逐渐列。
数据分析:delete
在目标执行
SENDER@hyyk delete tb10 where col1=1;
SENDER@hyyk commit;
SENDER@hyyk select * from tb10;
no rows selected
在目标段查询使用 dumplog 查看
这里要说明 delete 操作只保留前映像的
关于 Oracle 附加日志是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。