`
itspace
  • 浏览: 982709 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ORACLE smon_scn_time研究

阅读更多
首先看一下这张表格smon_scn_time在9i和10g的结构变化
9i:
引用
SQL> desc smon_scn_time
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
THREAD                                             NUMBER
TIME_MP                                            NUMBER
TIME_DP                                            DATE
SCN_WRP                                            NUMBER
SCN_BAS                                            NUMBER


10g:
引用
SQL> desc smon_scn_time
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
THREAD                                             NUMBER
TIME_MP                                            NUMBER
TIME_DP                                            DATE
SCN_WRP                                            NUMBER
SCN_BAS                                            NUMBER
NUM_MAPPINGS                                       NUMBER
TIM_SCN_MAP                                        RAW(1200)
SCN                                                NUMBER
ORIG_THREAD                                        NUMBER


一般情况下,Oracle 9i和Oracle 10g对此表更新频率维持在5分钟左右,但Oracle 10g增加了TIM_SCN_MAP字段,通过这个字段可以scn和time的转换精确到6秒钟,而9i只能精确到5分钟左右。下面分别以9i做测试:
1、
引用
13:38:19 SQL> SELECT LOCALTIMESTAMP FROM   dual;

LOCALTIMESTAMP
---------------------------------------------------------------------------
09-JUL-09 01.38.20.890171 PM

Elapsed: 00:00:00.00
13:38:20 SQL> select dbms_flashback.get_system_change_Number  scn from dual;

                SCN
-------------------
      9744666467101

Elapsed: 00:00:00.00
13:38:20 SQL> insert into t select * from t where rownum<10;

9 rows created.

Elapsed: 00:00:00.00
13:38:20 SQL> commit;

Commit complete.

Elapsed: 00:00:00.00
13:38:20 SQL> SELECT count(*) FROM   t AS OF TIMESTAMP TO_TIMESTAMP('09-JUL-09 01.38.20.890171 PM');

  COUNT(*)
----------
    259047

Elapsed: 00:00:00.42
13:38:36 SQL> SELECT count(*) FROM   t AS OF scn 9744666467101;

  COUNT(*)
----------
    260181

Elapsed: 00:00:00.35


可以看到通过2种闪回机制,用scn闪回可以看到精确的数据,用TIMESTAMP 只能模糊匹配。
在研究一下TIMESTAMP 匹配了哪个scn

引用
13:43:14 SQL> SELECT TIME_DP, SCN_WRP, SCN_BAS from SMON_SCN_TIME where TIME_DP < = to_date('2009-07-09 13:38:19','yyyy-mm-dd hh24:mi:ss' ) ORDER BY TIME_DP  desc ;

TIME_DP                SCN_WRP    SCN_BAS
------------------- ---------- ----------
2009-07-09 13:33:20       2268 3680638917


scn的算法是
SCN_WRP*4294967296+SCN_BAS=9744664906096
可以看到
引用
13:44:06 SQL> SELECT count(*) FROM   t AS OF scn 9744666466245;

  COUNT(*)
----------
    259047

和timestamp保持一致了。
1、10g增加了函数scn_to_timestamp,可以看到精确度相差6秒
引用
SQL> select scn_to_timestamp(9744666543478) from dual;

SCN_TO_TIMESTAMP(9744666543478)
---------------------------------------------------------------------------
09-JUL-09 03.33.47.000000000 PM

SQL> select scn_to_timestamp(9744666543477) from dual;

SCN_TO_TIMESTAMP(9744666543477)
---------------------------------------------------------------------------
09-JUL-09 03.33.41.000000000 PM


开启10046跟踪事件跟踪一下,发现没有用到smon_scn_time
引用
*** 2009-07-09 15:45:34.627
*** SERVICE NAME:(SYS$USERS) 2009-07-09 15:45:34.627
*** SESSION ID:(132.250) 2009-07-09 15:45:34.627
WAIT #3: nam='SQL*Net message to client' ela= 2 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1217896029909494
WAIT #3: nam='SQL*Net message from client' ela= 3616167 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1217896033525929
=====================
PARSING IN CURSOR #1 len=48 dep=0 uid=0 oct=3 lid=0 tim=1217896033527758 hv=2148814857 ad='3912114c'
select scn_to_timestamp(9744666543477) from dual
END OF STMT
PARSE #1:c=2000,e=1728,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,tim=1217896033527753
BINDS #1:
EXEC #1:c=0,e=48,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,tim=1217896033527918
WAIT #1: nam='SQL*Net message to client' ela= 2 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1217896033527950
FETCH #1:c=0,e=77,p=0,cr=0,cu=0,mis=0,r=1,dep=0,og=1,tim=1217896033528057
WAIT #1: nam='SQL*Net message from client' ela= 126 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1217896033528238
FETCH #1:c=0,e=1,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=0,tim=1217896033528268
WAIT #1: nam='SQL*Net message to client' ela= 1 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1217896033528293

delete smon_scn_time表格内容
引用
SQL> alter system set events '12500 trace name context forever, level 10';

System altered.

SQL> delete from smon_scn_time;

1808 rows deleted.

SQL> commit;

Commit complete.

SQL> alter system set events '12500 trace name context off';

System altered.


再次查找
引用
SQL> select scn_to_timestamp(9744666543478) from dual;

SCN_TO_TIMESTAMP(9744666543478)
---------------------------------------------------------------------------
09-JUL-09 03.33.47.000000000 PM

可以看到还是有结果,因为可能将结果保存在pga中,开启另外一个会话就查不到了
引用
SQL> select scn_to_timestamp(9744666543478) from dual;
select scn_to_timestamp(9744666543478) from dual
       *
ERROR at line 1:
ORA-08181: specified number is not a valid system change number
ORA-06512: at "SYS.SCN_TO_TIMESTAMP", line 1

从另外一个角度证明了函数scn_to_timestamp是从smon_scn_time取到值的

从客户的一份statspack可以看出Oracle对smon_scn_time表格的操作
引用
Buffer Gets    Executions  Gets per Exec  %Total CPU-Time(s) Elapsd-Time (s) Hash Value
---------------    ------------ ---------- -----  ------  --------- -----------  

delete from smon_scn_time where thread=0 and scn =  (select min(
scn) from smon_scn_time where thread=0)

0
0
分享到:
评论

相关推荐

    升级数据库smon_scn_time

    本文主要介绍的是针对一个运行在AIX 5.3系统上的Oracle 10.1.0.2数据库进行升级的过程,特别是针对`smon_scn_time`相关的问题及解决方法。升级的目标版本为Oracle 10.2.0.4。 #### 升级前准备 1. **环境确认**:...

    BLOG_Oracle_lhr_Oracle SCN的一点研究.pdf

    在数据库中,通过某些系统表如SMON_SCN_TIME可以查询SCN对应的时间信息,这在分析数据库状态和历史事件时非常有用。 SMON_SCN_TIME系统表记录了SCN到时间戳的转换信息。SMON(System Monitor)进程负责后台进程的...

    ora-600 13013处理方案

    SQL&gt; CREATE INDEX "SYS"."SMON_SCN_TO_TIME_AUX_IDX" ON CLUSTER "SYS"."SMON_SCN_TO_TI PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE (INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS...

    oracle中关于flashback闪回的介绍

    - **表映射**:Oracle在SYS模式下维护了一个名为`SMON_SCN_TIME`的表,用于存储系统时间标记与SCN之间的对应关系。 - **最大记录数**:该表最多可以存储1440条记录,每5分钟同步一次数据,因此最多可以支持最近5天的...

    smon与pmon的区别

    SMON还做了许多其他事情,例如,在DBA_TAB_MONITORING视图中的监控统计数据的洗刷,在SMON_SCN_TIME表中的时间戳定位信息的洗刷,等等。SMON在期间能消耗很多CPU,这应该被认为是正常的。SMON周期性的苏醒(或被其他...

    地震前兆Oracle数据库UNDO表空间持续增长修复.pdf

    锁定SMON的并行恢复(FAST_START_PARALLEL_ROLLBACK)无效,因为表SYS.smon_scn_time被锁住。此表用于记录SCN(System Change Number)到系统时间的映射,与UNDO表空间增长的时间一致。使用systemstate dump工具观察...

    oracle9i_优化设计与系统调整

    8. **后台进程与资源管理**:了解SMON、PMON、DBWR、LGWR等关键后台进程的工作方式,以及如何通过资源调度器(ResourceManager)限制用户和进程的资源使用,防止资源争抢。 9. **数据库连接管理**:优化连接池(如...

    Oracle_Concepts_中文版.pdf

    Oracle数据库通过多个后台进程协同工作来实现其功能,例如系统监控进程(SMON)、进程监控进程(PMON)等。 ### 应用程序开发 Oracle支持多种编程语言进行应用程序开发,包括SQL、PL/SQL、Java等。这些语言可以...

    oracle 11G 月巡检手册

    - `ora_smon_CKDB`:监控实例状态并执行实例恢复。 - `ora_pmon_CKDB`:监控客户端连接进程。 - `ora_arc0_CKDB`:负责归档操作。 - `ora_ckpt_CKDB`:执行检查点操作。 - `ora_reco_CKDB`:负责恢复操作。 ##### ...

    Oracle_IO_性能调优手册

    - 当数据文件上的 SCN 变化时,控制文件上的 SCN 也会更新,以便于数据恢复。 - **Redo Log**: - 非直接写情况下,所有事务中的写操作会产生 Redo Log。 - Redo Log 不直接写入 Redo Log 文件,而是先写入 Log ...

    Oracle_DBA_企业管理手册

    - **控制文件**:记录数据库的物理结构,包括数据文件名、SCN(系统更改号)等。 - **重做日志文件**:用于记录事务执行过程中的变更,支持故障恢复。 - **其他关键文件** - **参数文件**:定义了实例运行时所需...

    Oracle_9i_DBA指南

    - **SMON (System Monitor):** 负责清理失败的进程和实例恢复。 - **DBWR (Database Writer):** 负责将缓冲区缓存中的脏块写入数据文件。 - **LGWR (Log Writer):** 负责将重做日志缓冲区中的记录写入在线重做日志...

    oracle_FOR_AIX维护手册.docx

    《Oracle for AIX 维护手册》是一份详尽阐述在AIX操作系统上维护Oracle 9i数据库系统的专业文档。该手册旨在为xxx系统国家处理中心和城市处理中心的运维人员提供具体的指导,帮助他们在Oracle数据库系统投入生产后...

    ORACLE_维护手册

    63 oracle@xz15saledb (SMON) xz15saledb ACTIVE 73 oracle@xz15saledb (RECO) xz15saledb ACTIVE 81 oracle@xz15saledb (CJQ0) xz15saledb ACTIVE 93 oracle@xz15saledb (ARC0) xz15saledb A ``` 通过上述...

    ORACLE中查找定位表最后DML操作的时间小结

    然而,使用`SCN_TO_TIMESTAMP`可能会遇到`ORA-08181`错误,因为SCN与时间戳的转换依赖于`SMON_SCN_TIME`基表中的采样记录。由于SMON进程会定期清理旧的SCN记录,对于较早的SCN,转换可能会失败。 第二种方法是利用`...

    oracle培训XX0829.ppt

    其次,`ora_smon_ora10g`、`ora_pmon_ora10g`等进程是Oracle数据库的后台进程,它们负责数据库的管理和维护。例如,`ora_smon_ora10g`(System Monitor)负责实例的启动和恢复,`ora_pmon_ora10g`(Process Monitor...

    Oracle_Undo与Redo的通俗

    如果在数据库运行过程中出现故障,那么当启动Oracle Server时,后台进程SMON会自动执行例程恢复。执行例程恢复时,Oracle会重做所有未应用的记录。然后打开数据库,回退未提交事务。 倒叙查询 倒叙查询用于取得某...

    Oracle巡检手册.docx

    * 检查Oracle服务进程:检查Oracle服务进程,确保至少包含以下进程:ora_dbw0_ORCL、ora_lgwr_ORCL、ora_smon_ORCL、ora_pmon_ORCL、ora_arc0_ORCL、ora_ckpt_ORCL、ora_reco_ORCL。 * 检查Oracle监听状态:检查...

Global site tag (gtag.js) - Google Analytics