其實nologging與表模式,插入模式,數據庫運行模式(archived/unarchived)都有很大的關係:
總結如下:
注意append是一種hint;
一般我們可以這樣來使用
insert /*+append+/ into mytable values(1,'alan');
數據庫在歸檔模式下
當表模式爲logging狀態時,無論是append模式還是no append模式,redo都會生成。
當表模式爲nologging狀態時,只有append模式,不會生成redo.
數據庫在非歸檔模式下
無論是在logging還是nologing的模式下,append的模式都不會生成redo,而no append模式下都會生成redo。
如果我想看一張表是否是logging狀態,可以這樣
select table_name,logging from dba_tables where table_name='tablename';
修改表的logging狀態:alter table table_name nologging
那麼在Oracle內部還存在一個內部參數:_disable_logging 默認是false
通過更改爲true可以讓Oracle在修改表中的記錄的時候完全不記錄redo,這個參數要甚用。平時,我們只作爲性能測試用。
force logging(強制日誌)模式:
通過命令:
alter database force logging來使得Oracle無論什麼操作都進行redo的寫入。
通過select force_logging from v$database可以看到當前數據庫強制日誌模式的狀態。
另:分區表數據刪除方法
如果有全局索引:
alter table table_name truncate partition NO_分區號 UPDATE GLOBAL INDEXES;
局索引或者無索引:
alter table table_name truncate partition NO_分區號 ;
分區表、分區索引和全局索引:
在一個表的數據超過過2000萬條或佔用2G空間時,建議建立分區表。
create table ta(c1 int,c2 varchar2(16),c3 varchar2(64),c4 int constraint pk_ta primary key (c1)) partition by range(c1)(partition p1 values less than (10000000),partition p2 values less than (20000000),partition p3 values less than (30000000),partition p4 values less than (maxvalue));
分區索引和全局索引:
分區索引就是在所有每個區上單獨創建索引,它能自動維護,在drop或truncate某個分區時不影響該索引的其他分區索引的使用,也就是索引不會失效,維護起來比較方便,但是在查詢性能稍微有點影響。
create index idx_ta_c2 on ta(c2) local (partition p1,partition p2,partition p3,partition p4); 或者 create index idx_ta_c2 on ta(c2) local ;
另外在create unique index idx_ta_c2 on ta(c2) local ;系統會報ORA-14039錯誤,這是因爲ta表的分區列是c1,oracle不支持在分區表上創建PK主鍵時主鍵列不包含分區列,創建另外的約束(unique)也不可以。
全局索引就是在全表上創建索引,它可以創建自己的分區,可以和分區表的分區不一樣,也就是它是獨立的索引。在drop或truncate某個分區時需要創建索引alter index idx_xx rebuild,也可以alter table table_name drop partition partition_name update global indexes;實現,但是要花很長時間在重建索引上。可以通過查詢user_indexes、user_part_indexes和user_ind_partitions視圖來查看索引是否有效。
create index idx_ta_c3 on ta(c3);
或者把全局索引分成多個區(注意和分區表的分區不一樣):
create index idx_ta_c4 on ta(c4) global partition by range(c4)(partition ip1 values less than(10000),partition ip2 values less than(20000),partition ip3 values less than(maxvalue));
注意索引上的引導列要和range後列一致,否則會有ORA-14038錯誤。
oracle會對主鍵自動創建全局索引
如果想在主鍵的列上創建分區索引,除非主鍵包括分區鍵,還有就是主鍵建在兩個或以上列上。
在頻繁刪除表的分區且數據更新比較頻繁時爲了維護方便避免使用全局索引。
alter system archive log STOP;----需要重啓?
alter system archive log start;----需要重啓?
select * from v$logfile;
select * from v$log_history;
select dbid,name,created,log_mode from v$database;