OGG-00685 begin time <time> prior to oldest log in log history

今天早生产库的某个逻辑备库部署ogg同步几张表,报上述错误

去mos查询,得如下解决办法

APPLIES TO:

Oracle GoldenGate - Version 11.1.1.0.0 and later
Information in this document applies to any platform.

SYMPTOMS

OGG-00685  begin time <time> prior to oldest log in log history. 
Last SQL executed 
<SELECT MAX(sequence#)   FROM (select sequence#     FROM v$log_history     
WHERE first_time < TO_DATE(:begin_time,'YYYY-MM-DD HH24:MI:SS') AND     
RESETLOGS_CHANGE# LIKE :resetlogs_change_number AND   >.

CHANGES

A startup condition only.

CAUSE

This is a startup bug error where certain initial log positions are not resolved at initialization. 
This should happen only if the first log switching didn't occur after the db was created and before extract was started

It is bug ( 11839680).

SOLUTION

It is resolved by performing a database log switch.

Other causes and solutions:
If some of the nodes in RAC are not active, OGG will hit this error when trying to find the redo logs for those inactive nodes. 
The solution in this case is to exclude those inactive nodes from GG, e.g. THREADOPTIONS PROCESSTHREADS SELECT 1 

在extract 抽取文件中添加THREADOPTIONS PROCESSTHREADS SELECT 1 这一行参数以后,问题 解决



<think>嗯,我现在得仔细看看这个问题,关于如何在双向链表中删除节点p。题目给了四个选项,我需要逐一分析哪个是正确的操作步骤。 首先,我得回忆一下双向链表的结构。每个节点应该有一个prior指针指向前一个节点,还有一个next指针指向后一个节点。比如,假设有一个节点p,那么p->prior就是它的前驱节点,p->next是它的后继节点。当要删除p时,需要调整前驱和后继节点的指针,让它们绕过p,直接连接起来,这样p就被从链表中移除了。 现在,问题是要从四个选项中选正确的。让我一个一个来看。 选项A:p->prior = p->prior->prior; p->prior->next = p; 这好像有问题。首先,第一步修改p的prior指针,让p的前驱变成前前驱节点。然后,新的前驱节点的next指向p。但这样做的话,原来的前驱节点的next可能还没被处理,导致链表断裂。比如,原来的前驱节点(也就是p->prior原本指向的那个节点)的next应该指向p的后继节点才对,但这里并没有处理。所以选项A可能不正确,因为它没有正确地将前驱和后继连接起来,而是修改了p本身的指针,可能导致链表断裂。 选项B:p->next->prior = p; p->next = p->next->next; 这第一步是将p的后继节点的prior指向p自己?这不对啊,因为要删除p的话,应该是让后继节点的prior指向p的前驱节点才对。比如,假设当前p的后继是q,即p->next = q。那么q->prior应该改为指向p的前驱节点,而不是p自己。所以选项B的第一步是错误的,这会导致q的prior仍然指向p,而不是前驱节点。所以选项B也不正确。 选项C:p->prior->next = p->next; p->next->prior = p->prior; 这里第一步是将前驱节点的next指向p的后继节点,这样前驱节点就直接跳过了p,连到了p的下一个节点。第二步是将后继节点的prior指向p的前驱节点,同样跳过了p。这样,p就被完全从链表中移除了,前后节点正确连接,所以这一步应该是正确的。因此选项C可能是正确答案。 选项D:p->next = p->prior->prior; p->prior = p->next->next; 这看起来有点混乱。第一步将p的next指针指向前前驱节点,这可能会导致链表结构混乱,比如让当前节点的next指向更前面的节点,而第二步修改p的prior指针,可能指向了不确定的位置。这显然没有正确连接前后节点,反而破坏了结构,所以选项D不正确。 再仔细检查选项C。例如,假设有节点A <-> p <-> B。删除p的话,应该让A的next指向B,B的prior指向A。所以,正确的操作是A->next = B,B->prior = A。这里的A就是p->prior,B就是p->next。所以,选项C中的p->prior->next = p->next(即A->next = B),和p->next->prior = p->prior(即B->prior = A),确实正确。这样处理后,p就从链表中移除了,A和B正确连接,而p的prior和next指针可能还存在,但已经不在链表中了。因此选项C是正确的。 其他选项中,A和B都只处理了一部分,或者错误地修改了指针,导致链表断裂或循环错误。而D则是完全错误的指针操作。所以正确的选项应该是C。</think>要正确从双向链表中删除节点 $p$,需调整其前驱和后继节点的指针,使其绕过 $p$。以下是对选项的分析: 1. **选项 A** ```c p->prior = p->prior->prior; p->prior->next = p; ``` - 错误:修改了 $p$ 的 `prior` 指针,导致原前驱节点的 `next` 仍指向 $p$,链表未正确断开。 2. **选项 B** ```c p->next->prior = p; p->next = p->next->next; ``` - 错误:第一步将后继节点的 `prior` 仍指向 $p$,未连接前驱和后继节点。 3. **选项 C** ```c p->prior->next = p->next; p->next->prior = p->prior; ``` - **正确**: 1. 前驱节点的 `next` 指向 $p$ 的后继节点,跳过 $p$。 2. 后继节点的 `prior` 指向 $p$ 的前驱节点,完成双向连接。 - 例如: - 原链表:$A \leftrightarrow p \leftrightarrow B$ - 删除后:$A \leftrightarrow B$ 4. **选项 D** ```c p->next = p->prior->prior; p->prior = p->next->next; ``` - 错误:直接修改 $p$ 的指针,导致链表断裂。 **结论**:正确选项为 **C**。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值