dml操作日志 oracle_oracle 查看dml日志 - CSDN
精华内容
参与话题
  • 可以通过flashback_transaction_qurey视图查询 eg: SQL> desc flashback_transaction_query Name ...
    可以通过flashback_transaction_qurey视图查询

    eg:

    SQL> desc flashback_transaction_query
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     XID                                                RAW(8)
     START_SCN                                          NUMBER
     START_TIMESTAMP                                    DATE
     COMMIT_SCN                                         NUMBER
     COMMIT_TIMESTAMP                                   DATE
     LOGON_USER                                         VARCHAR2(30)
     UNDO_CHANGE#                                       NUMBER
     OPERATION                                          VARCHAR2(32)
     TABLE_NAME                                         VARCHAR2(256)
     TABLE_OWNER                                        VARCHAR2(32)
     ROW_ID                                             VARCHAR2(19)
     UNDO_SQL                                           VARCHAR2(4000)

    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29802484/viewspace-1390745/,如需转载,请注明出处,否则将追究法律责任。

    转载于:http://blog.itpub.net/29802484/viewspace-1390745/

    展开全文
  • 一、插入数据 1.普通插入数据 insert into 表名 values(所有列的值都要对应写上); insert into 表名(列1,列2) values(值1,值2); 2.使用子查询语句插入数据  --使用子查询插入数据 ... ins...

    一、插入数据

    1.普通插入数据

        insert into 表名 values(所有列的值都要对应写上);
        insert into 表名(列1,列2) values(值1,值2);

    2.使用子查询语句插入数据 

        --使用子查询插入数据
        insert into 表名 查询语句;
    
        --将emp中10号部门的员工信息,插入到emp1中
        insert into emp1 select * from emp where deptno = 10;

    二、更新数据

        update 表名 set 列名 = 列的值  [where 条件];

    三、删除数据

    1.delete(逐条删除,支持事务操作,删除操作作为事务记录在日志中保存)

        delete from 表名  [where 条件];

    2.truncate(一次性全部删除,不支持事务,效率高,删除操作记录不会记入日志保存)

        truncate table 表名  [where 条件];

     

    展开全文
  • 对与DML操作oracle在内部按如下顺序执行: 1,相应事务分配回滚段(undo segment). 2,分配回滚段后,在回滚段头上创建事务表slot(transaction table slot). 3.创建事务表后会生出TXID(TransactionID),再将TXID分配...
    对与DML操作oracle在内部按如下顺序执行:
    1,相应事务分配回滚段(undo segment).
    2,分配回滚段后,在回滚段头上创建事务表slot(transaction table slot).
    3.创建事务表后会生出TXID(TransactionID),再将TXID分配给当前事务。这个值
      指向分给事务的回滚段头上存在的事务表的准确位置。
    4.事务对象的数据块载入到高速缓冲区,在块头的ITL(Intersted transaction list)上登记事务条目。
      如果itl上没有所需空间,就会发生等待enq:TX-allocate ITL entry。
    5.将需要修改的块的修改信息存储到PGA,存储的方式是change vector,之后进程将PGA中的change vector
      以redo record复制到重做缓冲区。
    6.将之前映像信息记录到撤销块,继而修改数据块,被修改的数据块变为脏状态。而且在高速缓冲区中创建
      以修改的数据块的CR块。
    7.执行commit后给事务分配SCN,提交信息存储在重做缓冲区。
    8.回滚段头的事务表中存储已成功提交的信息,结束包括TX锁在内的所有资源占有。
    9.重做缓冲区的内容记录在重做日志文件上。
    下面通过转储来探究一下这个过程:
    会话1
    SQL> update emp set sal=sal+100 where rownum=1;
    
     1 rows updated.
    获得已执行update行位置
    SQL> select rowid,dbms_rowid.rowid_relative_fno(rowid) as fno,
      2  dbms_rowid.rowid_block_number(rowid) as blkno
      3  from emp where rownum=1;
    
    ROWID                     FNO      BLKNO
    ------------------ ---------- ----------
    AAAQ+LAAEAAAAAfAAA          4         31
    
    file number是4,block number是31,dump 这个block。
    
    SQL> alter system dump datafile 4 block 31;
    
    System altered.
    SQL> l   
      1  SELECT    a.VALUE
      2         || b.symbol
      3         || c.instance_name
      4         || '_ora_'
      5         || d.spid
      6         || '.trc' trace_file
      7    FROM (SELECT VALUE
      8            FROM v$parameter
      9           WHERE NAME = 'user_dump_dest') a,
     10         (SELECT SUBSTR (VALUE, -6, 1) symbol
     11            FROM v$parameter
     12           WHERE NAME = 'user_dump_dest') b,
     13         (SELECT instance_name
     14            FROM v$instance) c,
     15         (SELECT spid
     16            FROM v$session s, v$process p, v$mystat m
     17*          WHERE s.paddr = p.addr AND s.SID = m.SID AND m.statistic# = 0) d
    SQL> /
    
    TRACE_FILE
    --------------------------------------------------------------------
    /opt/app/oracle/diag/rdbms/liqian/liqian/trace/liqian_ora_4118.trc

    摘取trace文件如下:
     25 Dump of buffer cache at level 4 for tsn=4, rdba=16777247
         26 BH (0x26bed24c) file#: 4 rdba: 0x0100001f (4/31) class: 1 ba: 0x26968000
         --文件号是4,第31个block,cloass1是data block。
         27   set: 3 bsz: 8192 bsi: 0 sflg: 0 pwc: 0 lid: 0x00000000,0x00000000
         28   dbwrid: 0 obj: 69515 objn: 69515 tsn: 4 afn: 4
         29   hash: [0x26bf168c,0x32083a04] lru: [0x26bed9fc,0x26bed1dc]
         30   obj-flags: object_ckpt_list
         31   ckptq: [0x277f3330,0x273eb950] fileq: [0x32111f24,0x32111f24] objq: [0x30635f50,0x30635f50]
         32   st: XCURRENT md: NULL tch: 1
         33   flags: buffer_dirty block_written_once redo_since_read
         34           gotten_in_current_mode
         35   LRBA: [0x9.1625.0] LSCN: [0x0.b825b] HSCN: [0x0.b828c] HSUB: [1]
         36   cr pin refcnt: 0 sh pin refcnt: 0
         37   buffer tsn: 4 rdba: 0x0100001f (4/31)
         38   scn: 0x0000.000b828c seq: 0x01 flg: 0x00 tail: 0x828c0601
         39   frmt: 0x02 chkval: 0x0000 type: 0x06=trans data
         95 Block header dump:  0x0100001f
         ----block头部信息
         96  Object id on Block? Y
         97  seg/obj: 0x10f8b  csc: 0x00.a5370  itc: 2  flg: E  typ: 1 - DATA
         98      brn: 0  bdba: 0x1000019 ver: 0x01 opc: 0
         99      inc: 0  exflg: 0
        100  
        101  Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
        102 0x01   0x0003.021.000002ac  0x00c00306.0192.23  ----    1  fsc 0x0000.00000000
        103 0x02   0x0008.01c.00000246  0x00c0072c.0163.1a  C---    0  scn 0x0000.000a5356
        ---ITL信息,事务id信息,第一行是我刚执行的未commit的事务标记,因为Flag上无任何标记信息,Lck
        为1,代表锁定的行数,也就是update的行数。
        105 data_block_dump,data header at 0x26968064
        106 ===============
        107 tsiz: 0x1f98
        108 hsiz: 0x2e
        109 pbl: 0x26968064
        110      76543210
        111 flag=--------
        112 ntab=1
        113 nrow=14
        114 frre=-1
        115 fsbo=0x2e
        116 fseo=0x1d14
        117 avsp=0x1d33
        118 tosp=0x1d33
        119 0xe:pti[0]      nrow=14 offs=0
        120 0x12:pri[0]     offs=0x1d14
        121 0x14:pri[1]     offs=0x1f47
        122 0x16:pri[2]     offs=0x1f1c
        123 0x18:pri[3]     offs=0x1ef3
        124 0x1a:pri[4]     offs=0x1ec6
        125 0x1c:pri[5]     offs=0x1e9d
        134 block_row_dump:
        ----block行信息
        135 tab 0, row 0, @0x1d14
        136 tl: 38 fb: --H-FL-- lb: 0x1  cc: 8
        -----lb是row上面的行lock byte信息,oracle用行级锁,lb是ox1为此事务的itl,当前行挂起的
        ITL编号。
        137 col  0: [ 3]  c2 4a 46
        138 col  1: [ 5]  53 4d 49 54 48
        139 col  2: [ 5]  43 4c 45 52 4b
        140 col  3: [ 3]  c2 50 03
        141 col  4: [ 7]  77 b4 0c 11 01 01 01
        142 col  5: [ 2]  c2 0a
        143 col  6: *NULL*
        144 col  7: [ 2]  c1 15
        145 tab 0, row 1, @0x1f47
        146 tl: 43 fb: --H-FL-- lb: 0x0  cc: 8
        147 col  0: [ 3]  c2 4b 64
        148 col  1: [ 5]  41 4c 4c 45 4e
        149 col  2: [ 8]  53 41 4c 45 53 4d 41 4e
        150 col  3: [ 3]  c2 4d 63
        151 col  4: [ 7]  77 b5 02 14 01 01 01
        152 col  5: [ 2]  c2 11
        153 col  6: [ 2]  c2 04
        154 col  7: [ 2]  c1 1f
        155 tab 0, row 2, @0x1f1c
        156 tl: 43 fb: --H-FL-- lb: 0x0  cc: 8
    上面信息中ITL信息中,已经执行修改的事务在ITL上以itl=0x01记录。xid=0x0003.021.000002ac
    转换成十进制。
    xid=0x0003.021.000002ac三部分转换成十进制分别是USN=3,SLOT=33,SQN=684.
    
    SQL> select*From v$mystat where rownum=1;
    
    
           SID STATISTIC#      VALUE
    ---------- ---------- ----------
           138          0          1
    SQL> select xidusn,xidslot,xidsqn from v$transaction
      2  where addr=(select taddr from v$session where sid=138);
    
    
        XIDUSN    XIDSLOT     XIDSQN
    ---------- ---------- ----------
             3         33        684
    转换后的信息和v$transaction里面的信息一致。XID=USN+SLOT+SQN
    下面看看undo block dump的相关信息:
    SQL> select xidusn,xidslot,xidsqn from v$transaction
      2  where addr=(select taddr from v$session where sid=138);
    
        XIDUSN    XIDSLOT     XIDSQN
    ---------- ---------- ----------
             3         33        684
    回滚段编号3,事务表上slot位置是33.
    SQL> select file_id,block_id from dba_rollback_segs where segment_id=3;
    
       FILE_ID   BLOCK_ID
    ---------- ----------
             3         41
    SQL> alter system dump datafile 3 block 41;
    
    System altered.
    Elapsed: 00:00:00.13
    
    SQL> SELECT    a.VALUE
      2         || b.symbol
      3         || c.instance_name
      4         || '_ora_'
      5         || d.spid
      6         || '.trc' trace_file
      7    FROM (SELECT VALUE
      8            FROM v$parameter
      9           WHERE NAME = 'user_dump_dest') a,
     10         (SELECT SUBSTR (VALUE, -6, 1) symbol
     11            FROM v$parameter
     12           WHERE NAME = 'user_dump_dest') b,
     13         (SELECT instance_name
     14            FROM v$instance) c,
     15         (SELECT spid
     16            FROM v$session s, v$process p, v$mystat m
     17           WHERE s.paddr = p.addr AND s.SID = m.SID AND m.statistic# = 0) d
     18  /
    
    TRACE_FILE
    --------------------------------------------------------------------------------
    /opt/app/oracle/diag/rdbms/liqian/liqian/trace/liqian_ora_4118.trc
    摘取trace文件:
    23 Start dump data blocks tsn: 4 file#:4 minblk 31 maxblk 31
    191   TRN TBL::
    事务表信息
    192  
    193   index  state cflags  wrap#    uel         scn            dba            parent-xid    nub     stmt_num    cmt
    194   ------------------------------------------------------------------------------------------------
    195 
    225 
    226    0x1f    9    0x00  0x02ae  0x0006  0x0000.000b80c6  0x00c00305  0x0000.000.00000000  0x00000001   0x00000000  131    226 2254760
    227    0x20    9    0x00  0x02ae  0x0018  0x0000.000b807d  0x00c00304  0x0000.000.00000000  0x00000001   0x00000000  131    227 2254760
    228    0x21   10    0x80  0x02ac  0x0003  0x0000.000b79b0  0x00c00306  0x0000.000.00000000  0x00000001   0x00000000  
    0x21转换成十进制是33,是上面执行事务的slot。
    展开全文
  • 一图搞定 看图说话 老师都这么说:

    一图搞定

    看图说话 老师都这么说:


    展开全文
  • 重做日志缓冲区

    千次阅读 2013-07-09 13:14:24
    oracle进行dml或者ddl操作的时候,在写数据高速缓冲区之前,先写入重做日志缓冲区。 oracle执行dml操作的时候,只有编译和执行,没有提取数据。 例如,在进行update操作的时候: (1)如果数据或者回滚的数据不...
  • Oracle事务的隐式提交

    千次阅读 2013-11-13 14:16:41
    又名自动提交,即无需显示执行commit语句,session中的操作被自动提交到数据库的过程。 隐式提交的方式 1、正常执行完ddl语句。包括create,alter,drop,truncate,rename。 2、正常执行完dcl语句。包括grant,...
  • ORACLE清理归档日志

    万次阅读 2017-02-04 20:18:26
    oracle归档日志满了后,将无法正常登入oracle,需要扩充空间或删除一部分归档日志。 一.首先删除归档日志物理文件,归档日志一般都是位于archive目录下。建议操作前先对数据库进行备份,删除时至少保留最近几天的...
  • Oracle redo log切换非常频繁

    千次阅读 2017-03-28 16:40:47
    检查数据库报告,发现log file sync 平均等待已经超过20ms,说明DML提交很慢,很可能磁盘比较慢。先查看IOStat by Function summary,确认一下数据库整体IO的情况。然后分析Segments by Physical Reads、Segments by...
  • 如何加速Oracle大批量数据处理

    万次阅读 2010-01-12 14:57:00
    如何加速Oracle大批量数据处理一、 提高DML操作的办法:简单说来:1、暂停索引,更新后恢复.避免在更新的过程中涉及到索引的重建.2、批量更新,每更新一些记录后及时进行提交动作.避免大量占用回滚段和或临时表...
  • 1、数据读写流程;2、数据读写流程深入
  • Oracle11g三种数据同步方式

    万次阅读 2017-12-15 14:21:57
    主要是利用ORACLE的归档日志,进行增量备份来实现的,不仅可以配置只复制某些表,还可以配置仅复制某些表上的ddl或dml。可以复制到表,用户,数据库级别。 高级复制: 主要是基于触发器的原理来触发数据同步的,...
  • 目前所接触的Oracle 的灾备以及同步手段主要有ADG,OGG,DSG,高级复制,流复制以及自主开发的基于logmnr的数据同步软件,各有优劣。各自评价如下: 1. ADG,最常用的同城,异地灾备解决方案,物理级备份,备机可写...
  • Sql语句中的DDL、DML、DCL的介绍

    万次阅读 2016-12-10 16:09:23
    一、DDL DDL is Data Definition Language statements. Some examples:数据定义语言,用于定义和管理 SQL 数据库中的所有对象的语言 1.CREATE - to create objects in the database 创建 ...
  • oracle归档日志增长过快处理方法

    千次阅读 2019-05-02 12:32:30
    oracle归档日志一般由dml语句产生,所以增加太快应该是dml太频繁 首先查询以下每天的归档产生的情况: SELECT TRUNC(FIRST_TIME) "TIME", SUM(BLOCK_SIZE * BLOCKS) 1024 oracle归档日志一般由dml语句产生,所以...
  • 触发器里面before和after的区别

    万次阅读 2017-10-09 22:56:58
    关键字before和after用于标识触发时间,顾名思义,before代表触发器里面的命令在DML修改数据之前执行,after代表触发器里面的命令在DML修改数据之后执行。  读者可以结合应用场景选择使用before或者after。  下面...
  • Oracle DML语句(insert,update,delete) 回滚开销估算一、Oracle DML SQL回滚逻辑简介 数据库事务由1个或多个DML(insert,update,delete) SQL组成,我们知道Oracle数据库在进行DML操作需要使用UND
  • oracle数据库使用plsql developer 如何显示的开启一个事务?就像mysql中的begin; start transaction;语句这样。书上说 Oracle 事务分为2中类型(显式和隐式方法) 显示方法,就是利用命令完成。 Oracle中的事务不...
  • ORA-14551: 无法在查询中执行 DML 操作

    万次阅读 2012-05-30 16:08:30
    最近在调试一个带DML操作的函数时,一直不成功,在PL/SQL中测试时没问题,通过SQL语句调用函数时就不行了,刚开始一直没找到原因,后来无意间把 函数中捕获异常的代码注释掉,终于通过SQL调试时,弹出了一个“ORA-...
  • ORACLE触发器(trigger)的使用

    万次阅读 多人点赞 2018-07-03 15:10:16
    1、触发器说明触发器是一种在事件发生时隐式地自动执行的PL/SQL块,不能接受参数,不能被显式调用2、触发器语法create [or replace] trigger trigger_name {before | after | instead of} trigger_event ...
  • oracle DML错误日志查看

    千次阅读 2016-07-01 16:57:43
    1、运用DBMS_ERRLOG.CREATE_ERROR_LOG来创建日志表。 例:EXCUTE DBMS_ERRLOG.CREATE_ERROR_LOG('TABLE_A','TABLE_A_LOG');  将TABLE_A的错误日志表创建为TABLE_A_LOG 2、在DML中声明LOG ERRORS语句。 例...
1 2 3 4 5 ... 20
收藏数 24,529
精华内容 9,811
热门标签
关键字:

dml操作日志 oracle