(測試1)oracle insert into 后 未commit前會寫數據文件么?


 以前認為  commit 后才會寫數據到數據文件。

 下面做個試驗

 

 創建表空間,和用戶

create tablespace  zxq datafile 'd:\zxq.dbf'  size 1m autoextend on next 1m;
create user zxq identified by zxq  default tablespace zxq

創建表
create table zxq.zxq from scott.emp ;

修改字段長度。

alter table zxq.zxq modify empno number(10)

 

開始執行500萬件的insert
begin  
  for i   in 1..5000000 loop
     insert  into zxq.zxq (empno) values (i) ;
    end loop ;
    end ;

看到了吧,現在文件 63 M了,

insert 執行完畢后,的狀態。

 

數據文件變成 64M了,不是初始的1M

說明沒有提交commit 卻寫數據到數據文件了,

因為數據緩沖區 buffer cache 要把容量有限,DBWR進程回去把變更的數據寫到數據文件。

當然此時也寫redo 日志了。只是改數據信息沒有正式生效。

如果此時其它用戶來檢索數據,根據事務隔離性,也不會是檢索到。

如果此時數據庫crash 的話,這些寫到datafile 里面的數據會被回滾。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM