推陈出新:12C 推进 SCN 新方法实践

在数据库异常恢复中,经常需要修改数据库的 SCN 值,在 12C 之前,我们常用的方法有如下几个:

  1. oradebug poke 直接修改内存中的值;
  2. event 10015 来增加 scn 的值;
  3. _minimum_giga_scn 来增加 scn 的值;
  4. gdb/dbx 来直接修改内存中的值;
  5. 修改控制文件来修改 scn 的值;
  6. 修改数据文件头来修改 scn 的值;
  7. adjust_scn 来增加scn。

在这几种方法中,2、3和4方法在2012年中,Oracle 已经通过补丁更新,导致方法失效,就只有1,4,5,6方法。在这几种方法中,我们常常使用方法1来修改 scn 的值,但是此方法在 12C 中,Oracle 也已经屏蔽,还可以继续使用4,5,6 的方法来实现修改 SCN。在12.2 中,Oracle 多了一个新的 EVENT 21307096 也可以实现增加 SCN 的值。

下面在自己的测试环境模拟一下 EVENT 21307096,请勿在生产环境中操作;如果需要在生产环境中操作,提前做好备份。其它的方法,请 GOOGLE 都可以找到方法。

1EVENT 21307096 描述

下面描述来至 Oracle 官方文档

The SCN delta in million units is with the range of values from 1 to 4095 which increases the scn by: lowest_scn + event level * 1000000 Example: if the lowest datafile checkpoint scn in the database is 990396 and the highest is 992660 then SCN delta is 1; given by (992660 - 990396) / 1000000 event="21307096 trace name context forever, level 1 Here are some tests in 12.1.0.2 using each level for alter database open resetlogs: level 1 Elapsed: 00:01:02.35 level 2 Elapsed: 00:02:16.23 level 6 Elapsed: 00:06:08.05 In general: based on a 16k per second scn rate (16K/sec) , the open resetlogs time would be at least (event level * 1000000 / 16000) seconds. Then level 1 would be at least 62+ seconds and level 4095 would be 71+ hours !.

2测试修改 SCN 的值

2.1 查看当前 SCN 的值

这里查询当前 SCN 的值,主要用于与后面修改后的值做对比。

SQL> startup ORACLE instance started. Total System Global Area 1157627904 bytes Fixed Size 8619936 bytes Variable Size 436209760 bytes Database Buffers 704643072 bytes Redo Buffers 8155136 bytes Database mounted. Database opened. SQL> SQL> SQL> select current_scn from v$database; CURRENT_SCN ----------- 4422688

2.2 修改参数文件

通过 PFILE 文件来增加 EVENT。

SQL> !cat /tmp/1234.ora event="21307096 trace name context forever, level 3"

2.3 修改后数据库 SCN 的值

数据库使用的 shutdown immedaite 关闭的,

SQL> startup mount pfile='/tmp/1234.ora'; ORACLE instance started. Total System Global Area 1157627904 bytes Fixed Size 8619936 bytes Variable Size 436209760 bytes Database Buffers 704643072 bytes Redo Buffers 8155136 bytes Database mounted. SQL> recover database using backup controlfile until cancel; ORA-00279: change 4422836 generated at 03/18/2017 07:58:31 needed for thread 1 ORA-00289: suggestion : /oracle/app/oracle/product/12.2.0/dbhome_1/dbs/arch1_1_938937035.dbf ORA-00280: change 4422836 for thread 1 is in sequence #1 Specify log: {<RET>=suggested | filename | AUTO | CANCEL} cancel Media recovery cancelled. SQL> alter database open resetlogs; Database altered. SQL> select current_scn from v$database; CURRENT_SCN ----------- 7423640 看到 SCN 的值增加了 300W。

2.4 查看 alert 日志内容

查看 ALERT 日志,可以发现数据库在 OPEN 过程中,消耗了几分钟的时间。此时间可以通过 EVENT 描述中的计算公式来计算。

Completed: ALTER DATABASE MOUNT 2017-03-18T07:59:40.236101+08:00 ALTER DATABASE RECOVER database using backup controlfile until cancel 2017-03-18T07:59:40.236186+08:00 Media Recovery Start 2017-03-18T07:59:40.236823+08:00 Serial Media Recovery started ORA-279 signalled during: ALTER DATABASE RECOVER database using backup controlfile until cancel ... 2017-03-18T07:59:42.034160+08:00 ALTER DATABASE RECOVER CANCEL 2017-03-18T07:59:42.040794+08:00 Media Recovery Canceled Completed: ALTER DATABASE RECOVER CANCEL 2017-03-18T07:59:48.188727+08:00 alter database open resetlogs 2017-03-18T07:59:48.189864+08:00 RESETLOGS is being done without consistancy checks. This may result in a corrupted database. The database should be recreated. RESETLOGS after incomplete recovery UNTIL CHANGE 4422836 time Clearing online redo logfile 1 /oracle/app/oracle/oradata/htz/redo01.log Clearing online log 1 of thread 1 sequence number 1 Clearing online redo logfile 1 complete Resetting resetlogs activation ID 1993705771 (0x76d5892b) Online log /oracle/app/oracle/oradata/htz/redo01.log: Thread 1 Group 1 was previously cleared Online log /oracle/app/oracle/oradata/htz/redo02.log: Thread 1 Group 2 was previously cleared Online log /oracle/app/oracle/oradata/htz/redo03.log: Thread 1 Group 3 was previously cleared 2017-03-18T07:59:48.690166+08:00 Setting recovery target incarnation to 4 2017-03-18T07:59:48.693973+08:00 Ping without log force is disabled: instance mounted in exclusive mode. 会在这里 HANG 住,根据 LEVEL 的值不同,这个 HANG 的时候也不同。目前这里 LEVEL 值是多少,在这里消耗的时间就是多少。 2017-03-18T08:02:51.712840+08:00 Endian type of dictionary set to little 2017-03-18T08:02:51.716445+08:00 Assigning activation ID 1993737045 (0x76d60355) Thread 1 opened at log sequence 1 Current log# 1 seq# 1 mem# 0: /oracle/app/oracle/oradata/htz/redo01.log Successful open of redo thread 1 2017-03-18T08:02:51.734620+08:00 MTTR advisory is disabled because FAST_START_MTTR_TARGET is not set 2017-03-18T08:02:51.758900+08:00 TT00: Gap Manager starting (PID:9735) 2017-03-18T08:02:51.846445+08:00 Sleep 5 seconds and then try to clear SRLs in 2 time(s) 2017-03-18T08:02:51.887673+08:00 [9714] Successfully onlined Undo Tablespace 2. Undo initialization finished serial:0 start:5652874 end:5652906 diff:32 ms (0.0 seconds) Dictionary check beginning Dictionary check complete Verifying minimum file header compatibility for tablespace encryption.. Verifying file header compatibility for tablespace encryption completed for pdb 0 Database Characterset is AL32UTF8 No Resource Manager plan active replication_dependency_tracking turned off (no async multimaster replication found) Starting background process AQPC 2017-03-18T08:02:52.207519+08:00 AQPC started with pid=38, OS id=9743 LOGSTDBY: Validating controlfile with logical metadata LOGSTDBY: Validation complete Starting background process CJQ0 Completed: alter database open resetlogs 2017-03-18T08:02:52.618086+08:00 CJQ0 started with pid=42, OS id=9751 2017-03-18T08:02:54.893495+08:00 Shared IO Pool defaulting to 64MB. Trying to get it from Buffer Cache for process 9698. =========================================================== Dumping current patch information =========================================================== No patches have been applied ==========================================================

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2018-04-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏乐沙弥的世界

Oracle Net Services - Tracing and Logging at a Glance

    Oracle Net trace 用于跟踪或调试oracle连接故障,连接异常断开或者连接超时等情形,通过产生详细的跟踪信息来进行分析和诊断Oracle...

663
来自专栏芋道源码1024

分布式作业系统 Elastic-Job-Lite 源码分析 —— 作业事件追踪

另外,Elastic-Job-Cloud 作业事件追踪 和 Elastic-Job-Lite 基本类似,不单独开一篇文章,记录在该文章里。如果你对 Elasti...

843
来自专栏杨建荣的学习笔记

通过shell脚本得到数据库的基本信息(一)(r9笔记第89天)

今天写了个脚本,虽然实现的功能不多,但是个人感觉是一个好的开始,架子出来了,后面要补充的细节加进来就逐步完善了。 这个脚本的运行效果如下: OS Ver...

3614
来自专栏乐沙弥的世界

ORA-32004 的错误处理

启动数据库时,收到了ORA-32004 的错误,错误多是一些过时且在当前版本中不在使用的参数,如果碰到类似的错误,只需要将其

1142
来自专栏技术小讲堂

LINQ to SQL(2):生成对象模型

在LINQ to SQL中,可以使用自己的编程语言的对象模型映射到关系数据库,在上一节课,已经有一部分内容,简单的介绍了一下这种对象模型的结构,这一节,我们主要...

2844
来自专栏数据和云

回答了这四个问题,少踩12c 多租户的好多坑

在ACOUG的年终大会上,我分享了一个主题,列举了使用Oracle 12c多租户的过程中可能遇到的各种坑,当你使用一个新产品或者新特性时,如果你不了解,就可能是...

3406
来自专栏移动端周边技术扩展

iOS打开系统功能对应的URL

1813
来自专栏linux驱动个人学习

基于input子系统的sensor驱动调试(二)

继上一篇:https://cloud.tencent.com/developer/article/1054078 一、驱动流程解析: 1、模块加载: 1 st...

5907
来自专栏乐沙弥的世界

中小型数据库 RMAN CATALOG 备份恢复方案(一)

        对于数据库的稳定性,高可用,跨平台以及海量数据库的处理,Oracle 数据库通常是大型数据库和大企业的首选。尽管如此,仍然不乏很多中小企业想要品...

761
来自专栏蓝天

__lll_mutex_lock_wait的错误原因

运行下面的代码,即可重现上面的__lll_mutex_lock_wait()问题:

2394

扫码关注云+社区

领取腾讯云代金券