[20170515]数据库启动的一个疑问.txt

[20170515]数据库启动的一个疑问.txt

--//别人问的问题我自己以前也没有注意,做一个记录.

1.环境:
SYS@book> startup   mount
ORACLE instance started.
Total System Global Area  634732544 bytes
Fixed Size                  2255792 bytes
Variable Size             197133392 bytes
Database Buffers          427819008 bytes
Redo Buffers                7524352 bytes
Database mounted.

SYS@book> @ &r/10046on 12
Session altered.

SYS@book> alter database open ;
Database altered.

SYS@book> @ &r/10046off
Session altered.

2.问题:
$ grep -i "^update" /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_34905.trc
update /*+ rule */ undo$ set name=:2,file#=:3,block#=:4,status$=:5,user#=:6,undosqn=:7,xactsqn=:8,scnbas=:9,scnwrp=:10,inst#=:11,ts#=:12,spare1=:13 where us#=:1
update /*+ rule */ undo$ set name=:2,file#=:3,block#=:4,status$=:5,user#=:6,undosqn=:7,xactsqn=:8,scnbas=:9,scnwrp=:10,inst#=:11,ts#=:12,spare1=:13 where us#=:1
update /*+ rule */ undo$ set name=:2,file#=:3,block#=:4,status$=:5,user#=:6,undosqn=:7,xactsqn=:8,scnbas=:9,scnwrp=:10,inst#=:11,ts#=:12,spare1=:13 where us#=:1

--//仅仅看到3行update.

$ tkprof /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_34905.trc
output = aa
TKPROF: Release 11.2.0.4.0 - Development on Mon May 15 11:15:30 2017
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

--//检查aa.prf文件:
********************************************************************************
SQL ID: 8vyjutx6hg3wh Plan Hash: 3078630091
update /*+ rule */ undo$ set name=:2,file#=:3,block#=:4,status$=:5,user#=:6,
  undosqn=:7,xactsqn=:8,scnbas=:9,scnwrp=:10,inst#=:11,ts#=:12,spare1=:13
where
us#=:1

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse       20      0.00       0.00          0          0          0           0
Execute     20      0.00       0.00          1         20         42          20
Fetch        0      0.00       0.00          0          0          0           0
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total       40      0.00       0.00          1         20         42          20

Misses in library cache during parse: 1
Misses in library cache during execute: 1
Optimizer mode: RULE
Parsing user id: SYS   (recursive depth: 1)
Number of plan statistics captured: 3

Rows (1st) Rows (avg) Rows (max)  Row Source Operation
---------- ---------- ----------  ---------------------------------------------------
         0          0          0  UPDATE  UNDO$ (cr=1 pr=0 pw=0 time=111 us)
         1          1          1   INDEX UNIQUE SCAN I_UNDO1 (cr=1 pr=0 pw=0 time=3 us)(object id 34)

Elapsed times include waiting on following events:
  Event waited on                             Times   Max. Wait  Total Waited
  ----------------------------------------   Waited  ----------  ------------
  db file sequential read                         1        0.00          0.00
********************************************************************************

--//很明显执行20次.而不是前面显示的3次.

3.分析:
=====================
PARSING IN CURSOR #140657324151688 len=160 dep=1 uid=0 oct=6 lid=0 tim=1494818056965769 hv=1292341136 ad='7da43060' sqlid='8vyjutx6hg3wh'
update /*+ rule */ undo$ set name=:2,file#=:3,block#=:4,status$=:5,user#=:6,undosqn=:7,xactsqn=:8,scnbas=:9,scnwrp=:10,inst#=:11,ts#=:12,spare1=:13 where us#=:1
END OF STMT
PARSE #140657324151688:c=1000,e=1711,p=3,cr=39,cu=0,mis=1,r=0,dep=1,og=3,plh=0,tim=1494818056965769
BINDS #140657324151688:
...
  value=1
WAIT #140657324151688: nam='db file sequential read' ela= 7 file#=1 block#=135 blocks=1 obj#=0 tim=1494818056966806
EXEC #140657324151688:c=1000,e=1085,p=1,cr=1,cu=3,mis=1,r=1,dep=1,og=3,plh=3078630091,tim=1494818056966917
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
STAT #140657324151688 id=1 cnt=0 pid=0 pos=1 obj=0 op='UPDATE  UNDO$ (cr=1 pr=1 pw=0 time=241 us)'
STAT #140657324151688 id=2 cnt=1 pid=1 pos=1 obj=34 op='INDEX UNIQUE SCAN I_UNDO1 (cr=1 pr=0 pw=0 time=4 us)'
CLOSE #140657324151688:c=0,e=3,dep=1,type=0,tim=1494818056966968
WAIT #140657327122216: nam='db file sequential read' ela= 7 file#=3 block#=128 blocks=1 obj#=0 tim=1494818056967067

--//如果你这样查看:
$ grep "plh=3078630091" /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_34905.trc | grep EXEC|wc
     20      40    2082

--//很明显这个session_cached_cursors有关.
SYS@book> show parameter session_cached_cursors
NAME                                 TYPE     VALUE
------------------------------------ -------- ------
session_cached_cursors               integer  50

SYS@book> alter system set session_cached_cursors=0 scope=spfile ;
System altered.

--//重复测试:

$ grep "^update" /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_35075.trc
update /*+ rule */ undo$ set name=:2,file#=:3,block#=:4,status$=:5,user#=:6,undosqn=:7,xactsqn=:8,scnbas=:9,scnwrp=:10,inst#=:11,ts#=:12,spare1=:13 where us#=:1
update /*+ rule */ undo$ set name=:2,file#=:3,block#=:4,status$=:5,user#=:6,undosqn=:7,xactsqn=:8,scnbas=:9,scnwrp=:10,inst#=:11,ts#=:12,spare1=:13 where us#=:1
update /*+ rule */ undo$ set name=:2,file#=:3,block#=:4,status$=:5,user#=:6,undosqn=:7,xactsqn=:8,scnbas=:9,scnwrp=:10,inst#=:11,ts#=:12,spare1=:13 where us#=:1
update /*+ rule */ undo$ set name=:2,file#=:3,block#=:4,status$=:5,user#=:6,undosqn=:7,xactsqn=:8,scnbas=:9,scnwrp=:10,inst#=:11,ts#=:12,spare1=:13 where us#=:1
update /*+ rule */ undo$ set name=:2,file#=:3,block#=:4,status$=:5,user#=:6,undosqn=:7,xactsqn=:8,scnbas=:9,scnwrp=:10,inst#=:11,ts#=:12,spare1=:13 where us#=:1
update /*+ rule */ undo$ set name=:2,file#=:3,block#=:4,status$=:5,user#=:6,undosqn=:7,xactsqn=:8,scnbas=:9,scnwrp=:10,inst#=:11,ts#=:12,spare1=:13 where us#=:1
update /*+ rule */ undo$ set name=:2,file#=:3,block#=:4,status$=:5,user#=:6,undosqn=:7,xactsqn=:8,scnbas=:9,scnwrp=:10,inst#=:11,ts#=:12,spare1=:13 where us#=:1
update /*+ rule */ undo$ set name=:2,file#=:3,block#=:4,status$=:5,user#=:6,undosqn=:7,xactsqn=:8,scnbas=:9,scnwrp=:10,inst#=:11,ts#=:12,spare1=:13 where us#=:1
update /*+ rule */ undo$ set name=:2,file#=:3,block#=:4,status$=:5,user#=:6,undosqn=:7,xactsqn=:8,scnbas=:9,scnwrp=:10,inst#=:11,ts#=:12,spare1=:13 where us#=:1
update /*+ rule */ undo$ set name=:2,file#=:3,block#=:4,status$=:5,user#=:6,undosqn=:7,xactsqn=:8,scnbas=:9,scnwrp=:10,inst#=:11,ts#=:12,spare1=:13 where us#=:1
update /*+ rule */ undo$ set name=:2,file#=:3,block#=:4,status$=:5,user#=:6,undosqn=:7,xactsqn=:8,scnbas=:9,scnwrp=:10,inst#=:11,ts#=:12,spare1=:13 where us#=:1
update /*+ rule */ undo$ set name=:2,file#=:3,block#=:4,status$=:5,user#=:6,undosqn=:7,xactsqn=:8,scnbas=:9,scnwrp=:10,inst#=:11,ts#=:12,spare1=:13 where us#=:1
update /*+ rule */ undo$ set name=:2,file#=:3,block#=:4,status$=:5,user#=:6,undosqn=:7,xactsqn=:8,scnbas=:9,scnwrp=:10,inst#=:11,ts#=:12,spare1=:13 where us#=:1
update /*+ rule */ undo$ set name=:2,file#=:3,block#=:4,status$=:5,user#=:6,undosqn=:7,xactsqn=:8,scnbas=:9,scnwrp=:10,inst#=:11,ts#=:12,spare1=:13 where us#=:1
update /*+ rule */ undo$ set name=:2,file#=:3,block#=:4,status$=:5,user#=:6,undosqn=:7,xactsqn=:8,scnbas=:9,scnwrp=:10,inst#=:11,ts#=:12,spare1=:13 where us#=:1
update /*+ rule */ undo$ set name=:2,file#=:3,block#=:4,status$=:5,user#=:6,undosqn=:7,xactsqn=:8,scnbas=:9,scnwrp=:10,inst#=:11,ts#=:12,spare1=:13 where us#=:1
update /*+ rule */ undo$ set name=:2,file#=:3,block#=:4,status$=:5,user#=:6,undosqn=:7,xactsqn=:8,scnbas=:9,scnwrp=:10,inst#=:11,ts#=:12,spare1=:13 where us#=:1
update /*+ rule */ undo$ set name=:2,file#=:3,block#=:4,status$=:5,user#=:6,undosqn=:7,xactsqn=:8,scnbas=:9,scnwrp=:10,inst#=:11,ts#=:12,spare1=:13 where us#=:1
update /*+ rule */ undo$ set name=:2,file#=:3,block#=:4,status$=:5,user#=:6,undosqn=:7,xactsqn=:8,scnbas=:9,scnwrp=:10,inst#=:11,ts#=:12,spare1=:13 where us#=:1
update /*+ rule */ undo$ set name=:2,file#=:3,block#=:4,status$=:5,user#=:6,undosqn=:7,xactsqn=:8,scnbas=:9,scnwrp=:10,inst#=:11,ts#=:12,spare1=:13 where us#=:1

$ grep "^update" /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_35075.trc|wc
     20     180    3220
--//正好20行.

SYS@book> column name format a40
SYS@book> select US#,NAME from sys.undo$;
       US# NAME
---------- ----------------------------------------
         0 SYSTEM
         1 _SYSSMU1_3724004606$
         2 _SYSSMU2_2996391332$
         3 _SYSSMU3_1723003836$
         4 _SYSSMU4_1254879796$
         5 _SYSSMU5_898567397$
         6 _SYSSMU6_1263032392$
         7 _SYSSMU7_2070203016$
         8 _SYSSMU8_517538920$
         9 _SYSSMU9_1650507775$
        10 _SYSSMU10_1197734989$
        11 _SYSSMU11_894599432$
        12 _SYSSMU12_1573055333$
        13 _SYSSMU13_3860906822$
        14 _SYSSMU14_3319140121$
        15 _SYSSMU15_1436577151$
        16 _SYSSMU16_1689093467$
        17 _SYSSMU17_1049158485$
        18 _SYSSMU18_1557221903$
        19 _SYSSMU19_2284825117$
        20 _SYSSMU20_2312497597$
21 rows selected.

--//这个提示在分析跟踪文件时应该注意!!前几天看 [20170511]sed awk抽取段落技巧.txt,链接
http://blog.itpub.net/267265/viewspace-2138877/

$ cat extractsql.sh
#! /bin/bash
awk '/PARSING IN CURSOR/,/END OF STMT/' $1 | egrep -v '^PARSING|^END OF STMT'

--//这样抽取的脚本会漏掉一些语句,至少执行测试次数不对.

4.其他问题:
SYS@book> @ &r/sharepool/shp4  8vyjutx6hg3wh 0
old  18:  WHERE kglobt03 = '&1'  or kglhdpar='&1' or kglhdadr='&1' or KGLNAHSH= &2
new  18:  WHERE kglobt03 = '8vyjutx6hg3wh'  or kglhdpar='8vyjutx6hg3wh' or kglhdadr='8vyjutx6hg3wh' or KGLNAHSH= 0
TEXT           KGLHDADR         KGLHDPAR         C40                                        KGLHDIVC KGLOBHD0         KGLOBHD6           KGLOBHS0   KGLOBHS6   KGLOBT16   N0_6_16        N20   KGLNAHSH KGLOBT03        KGLOBT09
-------------- ---------------- ---------------- ---------------------------------------- ---------- ---------------- ---------------- ---------- ---------- ---------- --------- ---------- ---------- ------------- ----------
子游标句柄地址 000000007DA44448 000000007DA458C8 update /*+ rule */ undo$ set name=:2,fil          1 00               00                        0          0       3457      3457       3457 1292341136 8vyjutx6hg3wh          0
父游标句柄地址 000000007DA458C8 000000007DA458C8 update /*+ rule */ undo$ set name=:2,fil          1 000000007DA45810 00                     4848          0          0      4848       4848 1292341136 8vyjutx6hg3wh      65535

--//很奇怪这个启动完成,子光标就清除了,仅仅保留父游标信息,查询v$sql视图无法查询到结果,不知道oracle为什么这样设计.

SYS@book> select * from v$sql where sql_id='8vyjutx6hg3wh';
no rows selected

--//那位知道为什么???

时间: 2024-10-23 08:53:02

[20170515]数据库启动的一个疑问.txt的相关文章

[20170407]关于增量检查点的一个疑问.txt

[20170407]关于增量检查点的一个疑问.txt --//oracle现在写脏块基本采用增量检查点,除非执行alter system checkpoint,或者shutdown immediate(normal)正常关闭数据库. --//别人的疑问,如果如果写增量检查点时,current log tail at RBA=Incremental checkpoint up to RBA时,如下情况 1.环境: SYS@book> @ &r/ver1 PORT_STRING         

[20160527]快速提交的一个疑问.txt

[20160527]快速提交的一个疑问.txt --这个是我前几天恢复update没有加where条件的恢复,记录不多,但是我发现一个"奇怪"的问题,或者讲我以前没有注意的问题, --我在itpub上问了,没人解答.链接http://www.itpub.net/thread-2060064-1-2.html Block header dump:  0x0180239c Object id on Block? Y seg/obj: 0x1da20  csc: 0x03.8fc12309 

一个使用TXT文本的JSP网站访问计数器(不用任何数据库)

js|访问|计数器|数据|数据库 //counter.java 读写文件的一个bean=========================== //网站读写txt格式计数器 package net.com.util;  import java.io.*;  public class Counter extends Object { private String currentRecord = null;//保存文本的变量 private BufferedReader file; //Buffere

[20160529]快速提交的一个疑问3.txt

[20160529]快速提交的一个疑问3.txt --链接 http://blog.itpub.net/267265/viewspace-2108017/ --在上一次链接里面提到在快速提交时,itl槽的_ktbitun._ktbitfsc记录是dml记录长度减少的长度. --如果清除后,会kdbh.kdbhavsp相加写回kdbh.kdbhavsp,以前一直对快速提交没有很好的理解,我一直以为会清除数据信息里面的lock,实 际上在下次ITL覆盖时清除,还是通过一个例子来说明: 1.环境: S

[20160528]快速提交的一个疑问2.txt

[20160528]快速提交的一个疑问2.txt --链接 http://blog.itpub.net/267265/viewspace-2108017/ --在上一次链接里面提到在快速提交时,itl槽的_ktbitun._ktbitfsc记录是dml记录长度减少的长度. --如果清除后,会kdbh.kdbhavsp相加写回kdbh.kdbhavsp,这样就很容易联想到另外的问题,如果修改记录长度增加呢? --会出现什么情况呢?还是通过例子来说明: 1.环境: SCOTT@test01p> @

[20171206]设置db_2k_cache_size的疑问.txt

[20171206]设置db_2k_cache_size的疑问.txt --//上午测试最小的数据文件,我想看看2k数据块能建议多小的数据文件,我的测试最小10K,但是遇到1个无法理解的问题. 1.环境: SYS@book> @ &r/ver1 PORT_STRING                    VERSION        BANNER ------------------------------ -------------- --------------------------

如何自动获取Oracle数据库启动时在Shared pool里面的对象(翻译)

oracle|对象|数据|数据库 主题:本文说明在数据库启动的时候,如何自动获取Shared Pool里最常用的过程和包等对象. 正文:  下面用实例来演示Startup之后和Shutdown之前,如何用Triger来完成自动管理的任务. 1.创建一个供Triger调用的Procedure a.创建一个用来保存Procedure和Package的名称的Table(list_tab)     SQL>create table sys.list_tab (owner varchar2(64),NAM

SQL数据库上面显示一个绿色向上的小箭头是怎么回事?也无法访问数据库了,有什么办法吗?

问题描述 SQL数据库上面显示一个绿色向上的小箭头是怎么回事?也无法访问数据库了,有什么办法吗? 解决方案 sql 有一个browser服务 这个是1434端口的 解决方案二: 你那里是sqlserver客户端吗 你看看sqlservernetmanager里的网络配置1433开了吗 解决方案三: 数据库服务是否启动,端口是否在侦听,防火墙是否拦截请求

你所不知道的SQL Server数据库启动过程,以及启动不起来的各种问题的分析及解决技巧

原文:你所不知道的SQL Server数据库启动过程,以及启动不起来的各种问题的分析及解决技巧 目前SQL Server数据库作为微软一款优秀的RDBMS,其本身启动的时候是很少出问题的,我们在平时用的时候,很少关注起启动过程,或者很少了解其底层运行过程,大部分的过程只关注其内部的表.存储过程.视图.函数等一系列应用方式,而当有一天它运行的正常的时候突然启动不起来了,这时候就束手无策了,能做的或许只能是重装.配置.还原等,但这一个过程其实是一个非常耗时的过程,尤其当我们面对是庞大的生产库的时候,