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

?综述?

众所周知。当在两个数据库之间建立 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 [email protected];

?

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 [email protected];

?

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

https://mmbiz.qpic.cn/mmbiz_png/bURPjgFpGMQ35ahLYCkz5QZqk8hpnBeeZ2ibiaCwjic1YofKc87ic9CPxvZnW8nhsvlYiadXKrseicMflYGoiapQUQh1w/640?

wx_fmt=png" alt="640?wx_fmt=png" />

##注意,即使在 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 跳变的数据库上使用此视图。

最近活动

__biz=MjM5MDAxOTk2MQ==&mid=2650278167&idx=2&sn=bc2e174a669e9e8a38cf671d01388362&chksm=be47910189301817f744cc2686e4182c362ca11a4eeb9e993cbc9a8a1410140cb3b5650d450f&scene=21#wechat_redirect" rel="nofollow" style="color:rgb(87,107,149);">

wx_fmt=jpeg" alt="640?wx_fmt=jpeg" />

ACOUG?China?Tour?2018

4月13日上海站

扫描二维码

马上报名參加

资源下载

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

‘2017DTC’,2017?DTC?大会?PPT

‘DBALIFE’。“DBA?的一天”海报

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

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

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

‘2017OOW’,Oracle?OpenWorld?资料

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

https://mmbiz.qpic.cn/mmbiz_png/bURPjgFpGMRpeRqLyWpnQEYZT7xEpxFFVGAictAdfmu3Hv6qZibFaMJlq3UT0YnMxkAgAhqDNwamr5410mAyXxjQ/640?

wx_fmt=png" alt="640?wx_fmt=png" />

原文地址:https://www.cnblogs.com/tlnshuju/p/9898412.html

时间: 2024-10-12 21:16:20

承上 DBlink 与 SCN | 新增视图找出外部 SCN 跳变的相关文章

在一个整型数组中有一个元素的出现次数超过了数组长度的一半,试设计一个 在时间上尽可能高效的算法,找出这个元素。

题目:在一个整型数组中有一个元素的出现次数超过了数组长度的一半,试设计一个 在时间上尽可能高效的算法,找出这个元素.要求:(1)给出算法的基本设计思想.(2)根据设计思想,采用C或C++或Java语言描述算法,关键之处给出注释.(3)说明你所设计算法的时间复杂度和空间复杂度. (1)基本的设计思想: 一个数字出现的次数超过了长度的一半, 那么我们可以这样认为这个数字出现的个数一定大于其他全部数字出现的个数之和.算法的步骤如下: ①设数组为data[],数组长度为n,i=1.置currentAxi

LINUX小白重装上百次后, 最终找出一个成功方案 CentOS LAMP +wordpress+phpmyadmin 共0.84G

折腾了几天,终于找到很节省资源的安装wordpress方案. 成功搭建网站 http://www.gudianxiaoshuo.com     and   http://www.gudianbook.com 同时向大家推荐下wordpress建站利器 书画小说软件4.0版  我的网站 就是用这个软件搭建的  222本书 15000余篇文章 共用8个半钟头左右. 好了,转回正题,入手了一台LINUX VPS  进去一看 黑乎乎的DOS  立马傻眼.  更可恨的是没有提供相关资料,只能去自己找.自己

找出当前模块中所有的类名

比如在Django admin 注册models时,会用到. 对于APP里自带的models,可以使用这种方式注册. from django.contrib import admin # Register your models here. from django.apps import apps from django.contrib.admin.sites import AlreadyRegistered app_models = apps.get_app_config("crm"

【转】一个数组中有三个数字a、b、c只出现一次,其他数字都出现了两次。请找出三个只出现一次的数字。

转自:http://zhedahht.blog.163.com/ 题目:一个数组中有三个数字a.b.c只出现一次,其他数字都出现了两次.请找出三个只出现一次的数字. 分析:在博客http://zhedahht.blog.163.com/blog/static/2541117420071128950682/中我们讨论了如何在一个数组中找出两个只出现一次的数字.在这道题中,如果我们能够找出一个只出现一次的数字,剩下两个只出现一次的数字就很容易找出来了. 如果我们把数组中所有数字都异或起来,那最终的结

在LIUNX服务器上找出web项目中占用cpu资源最多的线程的排查方法

在这里对linux下.sun(oracle) JDK的线程资源占用问题的查找步骤做一个小结:linux环境下,当发现java进程占用CPU资源很高,且又要想更进一步查出哪一个java线程占用了CPU资源时,按照以下步骤进行查找: 第一步:登陆到web服务所在的liunx服务器,利用top命令获取java的cpu使用率 第二步: 如上图所示,java的进程id为'3260',接下来用top命令单独对这个进程中的所有线程作监视:top -p 3260 -H 第三步: 如上图所示,linux下,所有的

点击textField没有响应与在屏幕上未看到创建的视图问题(UI)

一.点击textField没有响应 (1)textField上面还有视图(如下) UITextField *tf = [[UITextField alloc] initWithFrame:CGRectMake(50, 100, 220, 40)]; tf.backgroundColor = [UIColor yellowColor]; tf.borderStyle = UITextBorderStyleRoundedRect; [self.window addSubview:tf]; [tf r

c语言题目:找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点

1 //题目:找出一个二维数组的"鞍点",即该位置上的元素在该行上最大,在该列上最小.也可能没有鞍点. 2 // 3 #include "stdio.h" 4 #include <stdlib.h> 5 int main() 6 { 7 int i,j,k,hang=1,lie=1; 8 printf("输入行"); 9 scanf("%d",&hang); 10 printf("输入列"

一个文本文件,找出前10个经常出现的词,但这次文件比较长,说是上亿行或十亿行,总之无法一次读入内存

Top K 算法详解应用场景: 搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节.        假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个.一个查询串的重复度越高,说明查询它的用户越多,也就是越热门.),请你统计最热门的10个查询串,要求使用的内存不能超过1G. 必备知识:什么是哈希表?        哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进

通过操作系统上的PID找出相应的SQL语句

linux平台下,我们一般通过TOP命令,查看性能消耗最大的进程,如果看到是oracle进行,那么就需要通过进程号,查询该进程当前执行的SQL语句,网上百度有很多SQL,我一般通过下面的方式进行查找: 通过操作系统上的PID找出相应的SQL语句的SID: SELECT s.sid, p.spid FROM v$session s, v$process p WHERE s.paddr = p.addr AND < p.spid = <os pid> 然后通过SID找出相应的SQL语句的具体