综述

众所周知,当在两个数据库之间建立 dblink连 接时,SCN 将被同步,以维持分布式事务读取一致性。 这将导致在较低 SCN 的数据库的 SCN 跳变。

在分布式事务中很难找到 SCN 跳变的来源。从 12.2 开始,视图DBA_EXTERNAL_SCN_ACTIVITY 以及 DBA_DB_LINK_SOURCES 和 DBA_DB_LINKS 使我们能够跟踪这些跳转。视图DBA_DB_LINK_SOURCES 也为 12.2 版本的新增视图。

Oracle 官网文档原文:

Finding out External SCN jump using DBA_EXTERNAL_SCN_ACTIVITY in 12.2 (Doc ID 2171090.1)

让我们看看下面的例子,如何在 dblink 连接中涉及的两个数据库中捕获这些跳转。

我们将使用以下示例视图,基于 DBA_EXTERNAL_SCN_ACTIVITY,DBA_DB_LINK_SOURCES,DBA_DB_LINKS 三个视图收集信息。

创建示例视图 SQL 文本:

create or replace view check_ext_scn as

(SELECT RESULT, OPERATION_TIMESTAMP, EXTERNAL_SCN, SCN_ADJUSTMENT,

HOST_NAME, DB_NAME, SESSION_ID, SESSION_SERIAL#

FROM DBA_EXTERNAL_SCN_ACTIVITY a, DBA_DB_LINK_SOURCES s

WHERE a.INBOUND_DB_LINK_SOURCE_ID = s.SOURCE_ID)

UNION

(SELECT RESULT, OPERATION_TIMESTAMP, EXTERNAL_SCN, SCN_ADJUSTMENT,

dbms_tns.resolve_tnsname(HOST) HOST_NAME, NULL DB_NAME, SESSION_ID, SESSION_SERIAL#

FROM DBA_EXTERNAL_SCN_ACTIVITY a, DBA_DB_LINKS o, DBA_DB_LINK_SOURCES s

WHERE a.OUTBOUND_DB_LINK_NAME = s.SOURCE_ID

AND OUTBOUND_DB_LINK_OWNER = o.OWNER)

UNION

(SELECT RESULT, OPERATION_TIMESTAMP, EXTERNAL_SCN, SCN_ADJUSTMENT,

s.MACHINE HOST_NAME, NULL DB_NAME, SESSION_ID, SESSION_SERIAL#

FROM DBA_EXTERNAL_SCN_ACTIVITY a, V$SESSION s

WHERE a.SESSION_ID = s.SID AND a.SESSION_SERIAL#=s.SERIAL#

AND INBOUND_DB_LINK_SOURCE_ID IS NULL

AND OUTBOUND_DB_LINK_NAME IS NULL

AND OUTBOUND_DB_LINK_OWNER IS NULL);

上面输出中每列的描述如下:

  • RESULT:SCN 推进是否接受或拒绝

  • OPERATION_TIMESTAMP:推进发生的时间

  • EXTERNAL_SCN:当前 SCN 跳变到的新 SCN 值

  • SCN_ADJUSTMENT:SCN 的增量有多大

  • HOST_NAME:dblink 源于哪个主机

  • DB_NAME:dblink 源自哪个数据库

  • SESSION_ID:此条目的本地实例的会话 ID

  • SESSION_SERIAL#:此条目的本地实例的序列号

创建监测SQL脚本

创建一个脚本名为 check_ext_scn.sql 内容如下:

select * from check_ext_scn;

使用Dblink前查看SCN 号与推进

检查两个数据库中的 SCN:

Database 1:

SQL> select current_scn from v$database;

CURRENT_SCN

-----------

12693736

SQL> set pages 100 lines 200

col result for a15

col OPERATION_TIMESTAMP for a35

col HOST_NAME for a15

col DB_NAME for a15

SQL> @check_ext_scn

no rows selected

Database 2:

SQL> select current_scn from v$database;

CURRENT_SCN

-----------

1574865

##数据库2的 SCN 是否远远小于数据库1。

SQL>@check_ext_scn

no rows selected

使用Dblink后查看SCN号与推进记录

尝试两个数据库之间的 Dblink 连接以同步 SCN

Database 1:

从数据库1到2启动 Dblink 连接DUAL:

SQL> select * from dual@testlnk;

D

-

X

SQL> select current_scn from v$database;

CURRENT_SCN

-----------

12693943

SQL>@check_ext_scn

no rows selected

## 注意数据库1中没有发现记录。

Database 2:

SQL> select current_scn from v$database;

CURRENT_SCN

-----------

12693956

##注意数据库2中的 SCN 现在与数据库1同步。

SQL>@check_ext_scn

## 从上面的输出,我们可以看到数据库1已导致数据库2中的 SCN 推进,推进量为11118928 个SCN。当前隐含参数_EXTERNAL_SCN_LOGGING_THRESHOLD_SECONDS 的值设置为600,因此只会记录大于9830400(600 * 16k)的跳变。

现在,由于两个数据库的 SCN 几乎接近,让我们尝试一个 Dblink 连接,看看如果跳变小于9830400个SCN,是否记录 SCN 跳变。


Database 1: 

SQL> select current_scn from v$database;

CURRENT_SCN

-----------

12694325

SQL> select * from dual@testlnk;

D

-

X

SQL>@check_ext_scn

no rows selected

Database 2:

SQL> select current_scn from v$database;

CURRENT_SCN

-----------

12694325

##Dblink连接后SCN号发生推进。

SQL>@check_ext_scn

##注意,即使在 SCN 跳变之后,也没有额外的记录,因为它的跳变量小于9830400。

※§6 小结

A. 本质上,DBA_EXTERNAL_SCN_ACTIVITY 捕获 SCN 跳变将非常有用,有助于我们查找有问题的数据库时缩小范围。视图 DBA_EXTERNAL_SCN_ACTIVITY 不会捕获所有 SCN 跳变。 它只在下面的情况下捕获 SCN 跳变。

1) SCN 跳变请求使得本地 headroom 小于 threshold 而被拒绝(由 _external_scn_rejection_threshold_hours 控制)

2) SCN 跳变请求因为 SCN 的 DELTA 增量过高而被拒绝(由 _external_scn_rejection_delta_threshold_minutes 控制)

3) SCN 跳变被接受但带有警告(由 _external_scn_logging_threshold_seconds 控制)

B. 如果 SCN 推进是由此数据库发起的,则此视图不会提供信息。 我们需要在遇到 SCN 跳变的数据库上使用此视图。

近期活动

ACOUG China Tour 2018

4月13日上海站

扫描二维码

立即报名参加

资源下载

关注公众号:数据和云(OraNews)回复关键字获取

‘2017DTC’,2017 DTC 大会 PPT

‘DBALIFE’,“DBA 的一天”海报

‘DBA04’,DBA 手记4 经典篇章电子书

‘RACV1’, RAC 系列课程视频及 PPT

‘122ARCH’,Oracle 12.2 体系结构图

‘2017OOW’,Oracle OpenWorld 资料

‘PRELECTION’,大讲堂讲师课程资料

承上 DBlink 与 SCN | 新增视图找出外部 SCN 跳变相关推荐

  1. 平面上给定n条线段,找出一个点,使这个点到这n条线段的距离和最小。

    题目:平面上给定n条线段,找出一个点,使这个点到这n条线段的距离和最小. 源码如下: 1 #include <iostream> 2 #include <string.h> 3 ...

  2. C语言 输入一个5行5列的数组。1.求数组主对角线上元素的和。2.求出辅对角线上元素的积。3.找出主对角线上最大的值及其位置

    C语言 输入一个5行5列的数组.1.求数组主对角线上元素的和.2.求出辅对角线上元素的积.3.找出主对角线上最大的值及其位置 主对角线是什么: 在一个n阶方阵(或是n阶行列式)中,从左上角到右下角这一 ...

  3. 给定一个含n(n≥1)个整数的数组,请设计一个在时间上尽可能高效的算法,找出数组中未出现的最小正整数。

    笔者初涉<算法设计与分析>这门专业课,在做一些算法设计题的过程中遇到一些小感悟,特此记录和大家分享. 下面直接给出算法题目: 给定一个含n(n≥1)个整数的数组,请设计一个在时间上尽可能高 ...

  4. 【408计算机考研】|【2018统考真题-41】| 给定一个含 n(n≥1)个整数的数组,请设计一个在时间上尽可能高效的算法,找出数组中未出现的最小正整数

    目录 一.题目 二.解答 三.测试数据 一.题目   给定一个含 n(n≥1)个整数的数组,请设计一个在时间上尽可能高效的算 法,找出数组中未出现的最小正整数.例如,数组{-5, 3, 2, 3}中未 ...

  5. 云表格Pro功能上新:透视表视图+一键出图功能来啦!

    六月「伙伴云表格Pro」正式上线,但研发团队从未停止脚步.八月,全新功能来袭! 框选数据直接出图.透视分析一步到位,拓展在线表格全新可能性! 零门槛分析数据,「伙伴云表格Pro」再升级! (建议电脑安 ...

  6. 找出数组中被其他元素整除的元素_「每日一题」数组中重复的数字

    题目描述 在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次.请找出数组中任意一个重复的数字. Input ...

  7. [V8]找出可能影响性能的代码(模式)

    原文地址:Tracing Patterns that Might Hinder Performance 原文作者:Jakub Rożek 译文出自:掘金翻译计划 本文永久链接:github.com/x ...

  8. [高频面试题]64匹马,8个赛道,找出跑得最快的4匹马

    [高频面试题]64匹马,8个赛道,找出跑得最快的4匹马,至少比赛几场? 图片参考自网上,解题思路为本人原创,在此声明.评论区有很多小伙伴思路独特,想法很好,大家可以参考. update:2022年7月 ...

  9. 64匹马,8个赛道,找出跑得最快的4匹马

    64匹马,8个赛道,找出跑得最快的4匹马,至少比赛几场? 第一步 全部马分为8组,每组8匹,每组各跑一次,然后淘汰掉每组的后四名,如下图(需要比赛8场) 第二步 取每组第一名进行一次比赛,然后淘汰最后 ...

最新文章

  1. cocos2d-js开发环境的搭建
  2. BS-GX-016基于SSM实现教材管理系统
  3. python aes加密 cbc_Python实现AES的CBC模式加密和解密过程详解 和 chr() 函数 和 s[a:b:c] 和函数lambda...
  4. 博客开源系统(待续......)
  5. junit5和junit4_JUnit 5 –设置
  6. Github pull request 工作流总结
  7. 一步步编写操作系统 53 任务状态段TSS介绍
  8. iPhone Instruments工具使用_检测内存泄露(转)
  9. VMware Fusion下Centos联网
  10. iphone 利用UIImageView来制作幻灯片
  11. shell脚本使用getopts自定义传入参数选项
  12. 前端实战|React18项目启动——pc端极客园项目前置准备
  13. 计算机应用基础讨论,计算机应用基础讨论
  14. 命令行启动MySQL数据库
  15. FAT文件系统文件存储与删除原理分析
  16. kafka中zk的作用
  17. Android Bottom Sheet详解
  18. Linux下tftp服务器/客户端安装
  19. 开创属于中国人自己的教育未来
  20. xp系统关闭闲置服务器,教你win10系统空闲进程占用cpu怎么关闭

热门文章

  1. github 参与开源_开源桥吸引了独特的演讲者和参与者
  2. 太好了 | 这篇写的太好了!Spring Boot + Redis 实现接口幂等性
  3. canvas 五子棋游戏
  4. 客户端的js js脚本的引入 js的解析过程
  5. 修复IE下相对定位子元素溢出Bug
  6. linux集成安装步骤,TeamCity 持续集成在Linux的安装
  7. oracle获取 小时数,Oracle函数 通过秒数或分钟数获取时间段
  8. dbcc dbreindex server sql_SQL Server性能的提高,可通过DBCC DBREINDEX重建索引
  9. mysql变量赋值加冒号_C语言变量声明加冒号的用法(占位符)
  10. 可以分屏的软件_Mac上的分屏功能,让你办公更高效