我们的文章会在微信公众号IT民工的龙马人生博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢!

由于博客中有大量代码,通过页面浏览效果更佳。

_MINIMUM_GIGA_SCN方式推进SCN的值

Oracle 12C通过EVENT来手动增加SCN值

在 Oracle 数据库中,系统变更号(SCN, System Change Number)是保证数据库一致性和恢复的关键机制。出于测试、数据恢复或修复目的,一些高级用户可能会考虑通过 oradebug 工具手动修改 SCN。然而,这一操作属于极高风险操作,仅适用于某些特殊场景,并受限于具体版本与系统状态。

oradebug使用的语法如下:

SQL> oradebug setmypid
SQL> oradebug poke 0x地址 4 0x新SCN低位
SQL> oradebug poke 0x地址+4 4 0x新SCN高位

注:地址需根据 kcccfg 或其他内存结构动态定位,不同版本结构不同,风险极高。

使用oradebug的时候需要注意,有如下的一些限制与风险:

  • 版本限制:在 Oracle 11g 之后,Oracle 增加了对 SCN 修改和漂移的严格限制,包括引入了 SCN Headroom、SCN 保证机制等。手动修改 SCN 可能触发 ORA-600、ORA-1555、ORA-08181 等错误,甚至使数据库无法启动。
  • 不可逆性:SCN 一旦被提升无法下降,提升过快还可能导致其他数据库(如 Data Guard 备库)无法同步。
  • 非官方支持:Oracle 官方严禁在生产环境中使用 oradebug 修改 SCN,该行为不在支持范围内,可能影响支持合同。
  • 仅用于实验/恢复:修改 SCN 仅应在克隆环境或测试恢复场景中,由具有深厚底层知识的人员操作。

注意oradebug只适用9i到11g的版本,针对8i的版本没有测试过,12c以后的版本已经不再支持了。

oradebug 修改 SCN 是一个非常规、危险、仅供实验室使用的技术手段。除非对 Oracle 内部结构有深入了解,并在无生产影响的环境下操作,否则不建议尝试。Oracle 本身提供了诸如 RMAN 恢复、SCN 修复(如 DBMS_FLASHBACK)等更为安全、受支持的手段,应优先采用。

下面我们以Linux平台的为例,演示通过oradebug推进scn的值。

查询当前scn的值

kcslf kcsgscn_ [060012658, 060012688) = 002FD948 00000000 00000000 00000000 00000073 00000000 00000000 00000000 00000000 00000000 60012338 00000000
SQL> select to_number('002FD948','xxxxxxxxxxxxxxxxxxx') from dual; TO_NUMBER('002FD948','XXXXXXXXXXXXXXXXXXX')
-------------------------------------------
3135816 SQL> shutdown abort;

查询当前数据库能取的最大SCN的值

  2                                + TO_CHAR (SYSDATE, 'mm')
3 - 1)
4 * 31
5 + TO_CHAR (SYSDATE, 'dd')
6 - 1)
7 * 24
8 + TO_CHAR (SYSDATE, 'hh24'))
9 * 60
10 + TO_CHAR (SYSDATE, 'mi'))
11 * 60
12 + TO_CHAR (SYSDATE, 'ss'))
13 * TO_NUMBER ('ffff', 'XXXXXXXX')
14 / 4
15 scn
16 FROM DUAL; SCN
-----------------------
13750612468511

这里我们把scn的值更改成

将scn转换成base,wrap

Enter value for scn_number: 10750612468511
old 1: select to_char(&&scn_number-trunc(&&scn_number/4294967296)*4294967296,'xxxxxxxxxxxxxx') from dual
new 1: select to_char(10750612468511-trunc(10750612468511/4294967296)*4294967296,'xxxxxxxxxxxxxx') from dual TO_CHAR(1075061
---------------
126ff31f SQL> select to_char(trunc(&&scn_number/4294967296) ,'xxxxxxxxxxxxxxxx') wrap from dual;
old 1: select to_char(trunc(&&scn_number/4294967296) ,'xxxxxxxxxxxxxxxx') wrap from dual
new 1: select to_char(trunc(10750612468511/4294967296) ,'xxxxxxxxxxxxxxxx') wrap from dual WRAP
-----------------
9c7

推进scn的值

这里改的时候要记住,这里的地址也是16进程,在加4的时候要更改成10进制后再加

BEFORE: [060012658, 06001265C) = 00000000
AFTER: [060012658, 06001265C) = 126FF31F

计算wrap的值

  2                  'xxxxxxxxxxxxxxxxxxxxxx')
3 wrap_address
4 FROM DUAL;
Enter value for base_begin_address: 060012658
old 1: SELECT TO_CHAR ( (TO_NUMBER ('&base_begin_address', 'xxxxxxxxxxxx') + 4),
new 1: SELECT TO_CHAR ( (TO_NUMBER ('060012658', 'xxxxxxxxxxxx') + 4), WRAP_ADDRESS
-----------------------
6001265c SQL> oradebug poke 0x06001265c 4 0x000009c7
BEFORE: [06001265C, 060012660) = 00000000
AFTER: [06001265C, 060012660) = 000009C7

确实推进SCN是否成功

SQL> select checkpoint_change# from v$datafile;

    CHECKPOINT_CHANGE#
----------------------
10750612468512
10750612468512
10750612468512
10750612468512
10750612468512
10750612468512
10750612468512 7 rows selected.

这里看到SCN的值已经按照预期增加了。

------------------作者介绍-----------------------

姓名:黄廷忠

现就职:Oracle中国高级服务团队

曾就职:OceanBase、云和恩墨、东方龙马等

电话、微信、QQ:18081072613

个人博客: (http://www.htz.pw)

CSDN地址: (https://blog.csdn.net/wwwhtzpw)

博客园地址: (https://www.cnblogs.com/www-htz-pw)


特殊恢复:oradebug推进Linux平台SCN的值的更多相关文章

  1. Linux平台下使用rman进行oracle数据库迁移

        实验目的:将oracle数据库从一台机器迁移到另外的一台机器(同为linux平台),设置为不同的路径,不同的实例名 源端: ORACLE_BASE=/u01/app/oracle ORACLE ...

  2. 转:基于 linux 平台的 libpcap 源代码分析

    libpcap 是 unix/linux 平台下的网络数据包捕获函数包,大多数网络监控软件都以它为基础.Libpcap 可以在绝大多数类 unix 平台下工作,本文分析了 libpcap 在 linu ...

  3. 阿里云rds linux平台使用wget 工具下载备份与日志文件

    1. 获取备份下载地址 RDS 控制台  备份恢复  数据备份,选择需要下载的备份集,点击“下载”. 点击“复制内网地址” 或 “复制外网地址” 来获取备份的 内网 或 外网 下载地址. 日志备份的地 ...

  4. Linux平台用C++实现事件对象,同步线程

    前文在Win32平台上用C++实现了事件对象Event,对线程进行同步,以达到期望目的.这次在Linux平台上实现与之类似的事件对象.与其相关的一组API包括:pthread_mutex_init,p ...

  5. Linux平台 Oracle 19c RAC安装Part2:GI配置

    三.GI(Grid Infrastructure)安装 3.1 解压GI的安装包 3.2 安装配置Xmanager软件 3.3 共享存储LUN的赋权 3.4 使用Xmanager图形化界面配置GI 3 ...

  6. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 5.安装Database软件 5. ...

  7. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 1.实施前准备工作 1.1 服务器安装操 ...

  8. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part2:clusterware安装和升级

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part2:clusterware安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 3.安装Clus ...

  9. 在linux平台实现atosl

    ➠更多技术干货请戳:听云博客 序言 怎么在linux 平台下实现一个类似于mac 平台下的 atos 工具( iOS 符号化解析)? 分析问题 在github上找到了几年前的开源实现,[https:/ ...

  10. Linux平台oracle 11g单实例 + ASM存储 安装部署 快速参考

    操作环境:Citrix虚拟化环境中申请一个Linux6.4主机(模板)目标:创建单机11g + ASM存储 数据库 1. 主机准备 2. 创建ORACLE 用户和组成员 3. 创建以下目录并赋予对应权 ...

随机推荐

  1. Linux 离线升级 RSYNC

    前言:本文操作是在 CentOS-7 下执行的,不确定在其他 Linux 发布版是否能同样正常执行. 1.检查前置依赖组件 在安装 rsync 之前,需要确认已安装了相关依赖组件: gcc .open ...

  2. 【AI工具实战】一招解决英文视频困境,四步用AI搞定全中文字幕,你也可以!(文末附工具下载)

    "AI时代最大的红利,是让每个人都有机会成为那个"想到就能做到"的创造者." AI粉嫩特攻队,2025年4月5日. 故事源于一个我想看的国外视频.本想点开视频准 ...

  3. 收藏破10w的教程!用DeepSeek做可视化:5个案例搞定工作汇报/论文/自媒体,一键生成(保姆级喂饭,附全套模板)

    大家好,我是狂师. DeepSeek作为今年爆火的AI工具,已经被广泛用于各种办公或自媒体写作创作场景,比如可以用DeepSeek辅助帮我们生成各种代码,如Python.Java.SQL.JavaSc ...

  4. Lua中获取第二天凌晨的剩余时间

    在时间这个问题上,lua提供两大方法来供开发者使用,一个是os.time(),一个是os.date(),这两大方法可以满足日常开发的需求. 那么我们如何准确运用这两大方法呢. 在这一文章中我们先讲os ...

  5. Launchpool名词解释

    # 一.什么是Launchpool Launchpool是一种加密货币领域的创新机制,通常由交易所或DeFi平台提供,允许用户通过质押(staking)或锁定特定代币来获得新项目的代币奖励. ## L ...

  6. 掌握Tortoise-ORM高级异步查询技巧

    title: 掌握Tortoise-ORM高级异步查询技巧 date: 2025/04/22 12:05:33 updated: 2025/04/22 12:05:33 author: cmdrago ...

  7. 通过引用实现php无限极分类

    /** * 递归加引用实现无限极分类 * @param $items * @return array */ public function getTree2($items) {   $array = ...

  8. PHP实现文件上传下载实例详细讲解

    一.上传原理与配置 1.1 原理 将客户端文件上传到服务器端,再将服务器端的文件(临时文件)移动到指定目录即可. 1.2 客户端配置 所需:表单页面(选择上传文件): 具体而言:发送方式为POST,添 ...

  9. EFCore Study(四)——Select的应用及不走联表查外键字段的操作

    一.EFCore里Select的应用: 1)避免查询select *,可指定查询合适的字段 var comment = context.artitles.Select(c =>new { Id ...

  10. cloudflare xss绕过未修复