没有commit的情况下(已解锁),导入的数据放哪儿去呢?

解决方案 »

  1.   

    buffer cache里,disk里,logbuffer里,redo log里。
      

  2.   


    commit 之后会执行的操作
    The database buffer cache is where database blocks are stored temporarily. This is a
    structure in the SGA of Oracle. As blocks are read, they are stored in this cache ‐ hopefully to allow us to not have to physically re‐read them later. The buffer cache is first andforemost a performance‐tuning device, it exists solely to make the very slow process of physical I/O appear to be much faster then it is. When we modify a block by updating a row on it, these modifications are done in memory, to the blocks in the buffer cache.
    Enough information to redo this modification is stored in the redo log buffer, another SGA data structure. When you COMMIT your modifications, making them permanent, Oracle does not go to all of the blocks you modified in the SGA and write them to disk. Rather, itjust writes the contents of the redo log buffer out to the online redo logs. As long as that modified block is in the buffer cache and is not on disk, we need the contents of that online redo log in the event the database fails. If at the instant after we committed, the power was turned off, the database buffer cache would be wiped out.
    If this happens, the only record of our change is in that redo log file. Upon restart of the database, Oracle will actually replay our transaction, modifying the block again in the same way we did, and committing it for us. So, as long as that modified block is cached and not written to disk, we cannot reuse that redo log file.对数据库commit 操作之后,
    logwr会立即执行,把logbuffer内容 顺序的写入logdata,
    但是dbwr对磁盘的回写不是顺序的,而是散开的(因为磁盘相关内容会散的很开),
    commit 不要求DBWR立即执行,但是要求lgwr成功执行才成功,这样数据库的读写效率就高了很多。
    What Does a COMMIT Do?
    one of the steps of COMMIT‐time processing is to revisit our blocks if they are still in the
    SGA, if they are accessible (no one else is modifying them), and then clean them outThis
    activity is known as a commit clean out.
    commit 将发生什么?一个很重要的步骤,就是 重新访问仍然在 SGA中的  块,如果他们可以被
    访问,表示没有别的程序在访问他们,则清空他们。这个动作就叫做 commit clean out.