天萃荷净

使用oradebug修改数据库scn,使用oradebug修改数据库scn的案例。

这里也做了两个测试,发现该功能确实很巧妙,通过修改内存中的scn值,然后写入控制文件和数据文件,实现修改scn的方法,不过同样该方法的危害性极大,这里仅供测试使用,生产环境切不可乱使用,可能引起很严重后果

1.数据库版本信息

SQL> select * from v$version;

BANNER

----------------------------------------------------------------

Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Prod

PL/SQL Release 10.2.0.4.0 - Production

CORE 10.2.0.4.0 Production

TNS for Linux: Version 10.2.0.4.0 - Production

NLSRTL Version 10.2.0.4.0 - Production

SQL> select '惜分飞' oracleplus FROM DUAL;

XIFENF

------

惜分飞

在open库中修改scn

SQL> oradebug setmypid

Statement processed.

--查看当前scn

SQL> oradebug DUMPvar SGA kcsgscn_

kcslf kcsgscn_ [20009228, 20009248) = 00000000 0007A09F 00000019 00000000 00000000 00000000 00000000 20009034

SQL> select CHECKPOINT_CHANGE# a from v$datafile;

A

----------

499314

499314

499314

499314

SQL> select dbms_flashback.get_system_change_number a from dual;

A

----------

499877

SQL> select to_number('7A09F','xxxxxxxxx') from dual;

TO_NUMBER('7A09F','XXXXXXXXX')

------------------------------

499871

--修改内存中scn值(十进制)

SQL> oradebug poke 0x20009228 4 8

BEFORE: [20009228, 2000922C) = 00000000

AFTER: [20009228, 2000922C) = 00000008

SQL> oradebug DUMPvar SGA kcsgscn_

kcslf kcsgscn_ [20009228, 20009248) = 00000008 0007A0D8 00000052 00000000 00000000 00000000 00000000 20009034

SQL> col a for 999999999999999

SQL> select dbms_flashback.get_system_change_number a from dual;

A

------------

34360238301

SQL> select to_number('8','xx')*4294967296+to_number('0007A0D8','xxxxxxxx') a from dual;

A

----------------

34360238296

--做一个checkpoint为了内存中的scn值写入控制文件和数据文件

SQL> alter system checkpoint;

System altered.

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup

ORACLE instance started.

Total System Global Area 318767104 bytes

Fixed Size 1267236 bytes

Variable Size 96471516 bytes

Database Buffers 213909504 bytes

Redo Buffers 7118848 bytes

Database mounted.

Database opened.

SQL> col a for 999999999999999

SQL> select CHECKPOINT_CHANGE# a from v$datafile;

A

----------------

34360238496

34360238496

34360238496

34360238496

SQL> select CHECKPOINT_CHANGE# a from v$datafile_header;

A

----------------

34360238496

34360238496

34360238496

34360238496

2.在mount库中修改scn

SQL> startup mount

ORACLE instance started.

Total System Global Area 318767104 bytes

Fixed Size 1267236 bytes

Variable Size 96471516 bytes

Database Buffers 213909504 bytes

Redo Buffers 7118848 bytes

Database mounted.

SQL> oradebug setmypid

Statement processed.

--因为数据库是mount状态不能看到scn值

SQL> oradebug DUMPvar SGA kcsgscn_

kcslf kcsgscn_ [20009228, 20009248) = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 20009034

SQL> col a for 999999999999999

SQL> select CHECKPOINT_CHANGE# a from v$datafile_header;

A

----------------

34360240739

34360240739

34360240739

34360240739

--求出WRAP SCN值

SQL> select 34360240739/4294967296 from dual;

34360240739/4294967296

----------------------

8.00011697

--修改内存中scn值(十六进制)

SQL> oradebug poke 0x20009228 4 0x0000000a

BEFORE: [20009228, 2000922C) = 00000000

AFTER: [20009228, 2000922C) = 0000000A

SQL> oradebug DUMPvar SGA kcsgscn_

kcslf kcsgscn_ [20009228, 20009248) = 0000000A 00000000 00000000 00000000 00000000 00000000 00000000 20009034

SQL> alter database open;

Database altered.

SQL> select dbms_flashback.get_system_change_number a from dual

2 ;

A

----------------

42949673074

--注意:使用此种方法修改BASE SCN如果不指定,会从0开始计数

SQL> oradebug DUMPvar SGA kcsgscn_

kcslf kcsgscn_ [20009228, 20009248) = 0000000A 00000077 0000001C 00000000 00000000 00000000 00000000 20009034

SQL> select to_number('A','xx')*4294967296+to_number('00000077','xxxxxxxx') a from dual;

A

----------------

42949673079

SQL> alter system checkpoint;

System altered.

SQL> select CHECKPOINT_CHANGE# a from v$datafile_header;

A

----------------

42949673095

42949673095

42949673095

42949673095

SQL> select CHECKPOINT_CHANGE# a from v$datafile;

A

----------------

42949673095

42949673095

42949673095

42949673095

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup

ORACLE instance started.

Total System Global Area 318767104 bytes

Fixed Size 1267236 bytes

Variable Size 96471516 bytes

Database Buffers 213909504 bytes

Redo Buffers 7118848 bytes

Database mounted.

Database opened.

SQL> select CHECKPOINT_CHANGE# a from v$datafile_header;

A

----------------

42949673231

42949673231

42949673231

42949673231

在oradebug推进scn的过程中,需要注意不同平台,不同位数的ORACLE数据库可能推进方式有一定的区别,操作前最好在系统平台位数上进行测试,否则有可能导致恢复后果更加麻烦

--------------------------------------ORACLE-DBA----------------------------------------

最权威、专业的Oracle案例资源汇总之【学习笔记】Oracle oradebug 使用oradebug修改数据库SCN方法案例

oracle数据库修改写入状态,【学习笔记】Oracle oradebug 使用oradebug修改数据库SCN方法案例...相关推荐

  1. oracle protocol=beq 不可用,学习笔记:Oracle数据库坏块 深入研究obj$坏块导致exp/expdp不能执行原因...

    天萃荷净 深入研究Oracle坏块obj$导致exp/expdp不能执行导出的原因 上篇(案例:Oracle出现obj$坏块exp/expdp导出不能导出的解决办法ORA-01578 ORA-0111 ...

  2. oracle in查询 一直等待,学习笔记:Oracle awr 分析解决inactive transaction branch等待事件...

    天萃荷净 通过Oracle AWR报告分析inactive transaction branch等待事件的原因 分析一份awr,发现不太熟悉的等待事件"inactive transactio ...

  3. oracle scn 重置,学习笔记:Oracle SCN详解 SCN与Oracle数据库恢复的关系

    天萃荷净 分享一篇关于Oracle SCN的详解,介绍SCN与Oracle数据库恢复的关系和SCN在数据库中的作用 一.为什么需要System checkpoint SCN号与Datafile Che ...

  4. oracle数据库开多线程,学习笔记:Oracle表数据导入 DBA常用单线程插入 多线程插入 sql loader三种表数据导入案例...

    天萃荷净 oracle之数据导入,汇总开发DBA在向表中导入大量数据的案例,如:单线程向数据库中插入数据,多线程向数据表中插入数据,使用sql loader数据表中导入数据案例 1.Oracle数据库 ...

  5. oracle修改asm参数文件,学习笔记:Oracle RAC参数文件管理 修改创建asm中的spfile文件...

    天萃荷净 Oracle rac创建修改asm中的spfile文件内容 create spfile to asm --查看sid SQL> show parameter instance_name ...

  6. 怎么恢复oracle的包,【学习笔记】使用dbms_backup_restore包恢复数据库

    天萃荷净 使用dbms_backup_restore包恢复数据库 Oracle提供了一个包:DBMS_BACKUP_RESTORE包是由dbmsbkrs.sql 和 prvtbkrs.plb 这两个脚 ...

  7. oracle强制拉库跳过recovery,学习笔记:Oracle坏块 数据库recover恢复时遇到坏块的解决思路案例...

    天萃荷净 recover遇到坏块处理本质探讨,记录一次在Oracle数据库recover恢复过程中,遇到数据库坏块无法恢复的解决思路案例 如果在还原出来的数据文件中有坏块,而归档日志和联机日志是正常的 ...

  8. oracle数据变化记录,学习笔记:Oracle伪列函数ora_rowscn 记录表中行数据的修改时间...

    天萃荷净 Oracle数据库开发时使用伪列函数ora_rowscn查询出数据库表中行数据的修改时间 一.默认情况下 –创建t_orascn测试表 SQL> create table t_oras ...

  9. 数据导不进oracle数据库,学习笔记:Oracle逻辑导出/导入 数据逻辑导出时跳过指定表不进行导出...

    天萃荷净 Oracle数据库逻辑exp导出时,跳过指定某些表,对其表中数据不进行导出 有一个需求,某个用户有很多张表,但是只能使用exp导出,而且想跳过其中某几张表,其他对象包括依赖关系都需要.针对这 ...

最新文章

  1. Ubuntu 14.04 64位上安装Valgrind 3.13.0 操作步骤
  2. intellij存放插件的路径(转载)
  3. SQLServer常用的配置函数笔记
  4. 【渝粤教育】国家开放大学2018年秋季 0716-22T工程建设法规 参考试题
  5. IDEA的基本使用:让你的IDEA有飞一般的感觉 | CSDN 博文精选
  6. 获取验证码 60秒后重新获取
  7. mysql中regexp用法_MySQL中REGEXP正则表达式使用大全
  8. 【干货】移动APP测试用例设计实践经验分享
  9. python爬虫学习(4) —— 手刃「URP教务系统」
  10. html表格的斜线怎么弄,word表格斜线怎么弄?
  11. 大数据智能推荐系统原理介绍
  12. 安卓模拟器打开开发者选项
  13. Java通过openOffice实现word,excel,ppt转成pdf实现在线预览
  14. 计算机程序设计c++ 8-6:数组指针相关应用
  15. 近期活动盘点:大数据自杀风险感知讲座、智能制造讲座、数据法学研讨会、海外学者短期讲学(12.7-12.20)
  16. webpack打包流程
  17. powershell比较操作
  18. 珞珈一号数据预处理完整流程及一些总结
  19. 46岁程序员被互联网公司辞退,说出真实原因,网友:太现实了
  20. HybridCLR 使用流程记录(一)

热门文章

  1. java时间计算,获取某月第一天和最后一天
  2. perl6之'Hello World'
  3. 云计算之路:数据库迁移方案
  4. java微信公众号开发token验证失败的问题及解决办法
  5. 在Java中有类似.NET的NotImplementedException吗?
  6. 什么是C ++ 11中的lambda表达式?
  7. 如何撤消Git中的最新本地提交?
  8. PHP 7.0新增特性详解
  9. 大数据落地决胜的关键——百分点BASIC模型
  10. web实现QQ第三方登录 开放平台-web实现QQ第三方登录