以前認為 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 里面的數據會被回滾。