代码之家  ›  专栏  ›  技术社区  ›  Johan

如何检查MongoDB中是否有足够的oplog历史记录用于更改流开始位置?

  •  0
  • Johan  · 技术社区  · 5 年前

    在MongoDB中使用变更流时,从版本4.2开始,您必须能够提供 startAtOperationTime 指示更改流应该从哪个位置开始的标记。然而,文件提到:

    如果时间戳是过去的,oplog必须有足够的历史来定位与令牌或时间戳相关联的操作。

    从mongodb4.0开始,可以指定startAtOperationTime以在特定时间点打开光标。如果指定的起始点是过去的,则它必须在oplog的时间范围内。

    有没有办法弄清楚oplog是否有足够的历史可以从头开始 BsonTimestamp startAtOperationTime 或者 BsonValue 与a一起使用 startAt 手术?

    不幸的是,我似乎没有得到一个例外使用 开始运行时间 用一个 B时间戳 BsonTimestamp(0) 它似乎只是从oplog中的第一个可用实体开始(至少在使用mongodbjava驱动程序时是这样)。

    0 回复  |  直到 5 年前
        1
  •  1
  •   Joe    5 年前

    如果您的用户帐户对oplog.rs公司在本地数据库中,可以直接查询oplog。

    从shell获取第一个oplog条目的epoch时间戳:

    db.getSiblingDB("local").oplog.rs.findOne().ts.getTime()
    
        2
  •  0
  •   D. SM    5 年前

    您可以尝试从那时创建一个变更流。如果收到错误,说明oplog不够长。