append和nologging的案例
一 非歸檔模式下
C:Documents and Settingsshiyihai>sqlplus /nolog
SQL*Plus: Release 9.2.0.6.0 - Production on 星期二 2月 27 11:42:43 2007
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
SQL> conn / as sysdba
已連線。
SQL>
當前session產生的redo
SQL> create or replace view v_session_redo_size
2 as
3 select value
4 from v$mystat, v$statname
5 where v$mystat.statistic# = v$statname.statistic#
6 and v$statname.name = 'redo size';
檢視已建立。
SQL>
SQL> archive log list
資料庫日誌模式 存檔模式
自動存檔 啟用
存檔終點 C:oracleoradataarchora9i
最早的概要日誌序列 257
下一個存檔日誌序列 259
當前日誌序列 259
(這裡執行alter database noarchivelog將拋"ORA-01126: 對於此操作,資料庫必須以 EXCLUSIVE 模式安裝且未開啟")
SQL> shutdown immediate;
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> startup mount
ORACLE 例程已經啟動。
Total System Global Area 135864308 bytes
Fixed Size 454644 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 1191936 bytes
資料庫裝載完畢。
SQL>
置資料庫為非歸檔模式:
SQL> alter database noarchivelog;
資料庫已更改。
SQL> alter database open;
資料庫已更改。
SQL>
SQL> create table temp_test_redo as
2 select * from all_objects where 1=2;
表已建立。
SQL> select * from v_session_redo_size;
VALUE
----------
144244
SQL>
SQL> insert into temp_test_redo
2 select * from all_objects;
已建立28772行。
SQL> select * from v_session_redo_size;
VALUE
----------
3342404
SQL>
SQL> insert /*+ append */ into temp_test_redo
2 select * from all_objects;
已建立28772行。
SQL> select * from v_session_redo_size;
VALUE
----------
3347556
SQL>
SQL> select 3342404-144244,3347556-3342404 from dual;
3342404-144244 3347556-3342404
-------------- ---------------
3198160 5152
SQL>
可以看到insert /*+ append */ into方式redo產生很少.
下面將表temp_test_redo置為nologging狀態.
SQL> alter table temp_test_redo nologging;
表已更改。
SQL> commit;
提交完成。
SQL> select * from v_session_redo_size;
VALUE
----------
3349828
SQL>
SQL> insert into temp_test_redo
2 select * from all_objects;
已建立28772行。
SQL> select * from v_session_redo_size;
VALUE
----------
6519692
SQL>
SQL> insert /*+ append */ into temp_test_redo
2 select * from all_objects;
已建立28772行。
SQL> select * from v_session_redo_size;
VALUE
----------
6524952
SQL>
非歸檔模式下表的nologging狀態對於redo影響不大
SQL> select 6519692-3349828,6524952-6519692 from dual;
6519692-3349828 6524952-6519692
--------------- ---------------
3169864 5260
SQL>
結論: 在非歸檔模式下透過insert /*+ append */ into方式批次載入資料可以大大減少redo產生,
但表的nologging狀態並不對redo產生太大的影響.
二 歸檔模式下
SQL> shutdown immediate;
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> startup mount;
ORACLE 例程已經啟動。
Total System Global Area 135864308 bytes
Fixed Size 454644 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 1191936 bytes
資料庫裝載完畢。
SQL> alter database archivelog;
資料庫已更改。
SQL> alter database open;
資料庫已更改。
SQL> alter table temp_test_redo logging;
表已更改。
SQL> select * from v_session_redo_size;
VALUE
----------
102552
SQL>
SQL> insert into temp_test_redo
2 select * from all_objects;
已建立28772行。
SQL> select * from v_session_redo_size;
VALUE
----------
3273740
SQL>
SQL> insert /*+ append */ into temp_test_redo
2 select * from all_objects;
已建立28772行。
SQL> select * from v_session_redo_size;
VALUE
----------
6509596
SQL>
可以看到在歸檔模式下,且表的logging屬性為true,insert /*+ append */ into這種方式也會紀錄大量redo
SQL> select 3273740-102552,6509596-3273740 from dual;
3273740-102552 6509596-3273740
-------------- ---------------
3171188 3235856
SQL>
將表置為nologging
SQL> alter table temp_test_redo nologging;
表已更改。
SQL> select * from v_session_redo_size;
VALUE
----------
6511868
SQL>
SQL> insert into temp_test_redo
2 select * from all_objects;
已建立28772行。
SQL> select * from v_session_redo_size;
VALUE
----------
9681984
SQL>
SQL> insert /*+ append */ into temp_test_redo
2 select * from all_objects;
已建立28772行。
SQL> select * from v_session_redo_size;
VALUE
----------
9687244
SQL>
可以發現在歸檔模式,要設定表的logging屬性為false,才能透過insert /*+ append */ into大大減少redo產生.
SQL> select 9681984-6511868,9687244-9681984 from dual;
9681984-6511868 9687244-9681984
--------------- ---------------
3170116 5260
SQL>
結論: 在歸檔模式下,要設定表的logging屬性為false,才能透過insert /*+ append */ into大大減少redo.
[@more@]來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/38542/viewspace-900611/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle nologging和appendOracleAPP
- nologging和insert /*+append*/APP
- 聊聊Append、nologging和Redo LogAPP
- Nologging and append testAPP
- nologging與append ztAPP
- alter table nologging /*+APPEND PARALLEL(n)*/APPParallel
- 轉eygle_append與nologgingAPP
- 歸檔模式下的 nologging和/*+ append */引數 效能測試模式APP
- 關於加快INSERT語句執行速度和 HINT /*+ append*/及nologging的使用APP
- 線上重定義分割槽表和NOLOGGING APPEND分割槽表對比APP
- 使用append+nologging引起恢復故障實驗APP
- Oracle NoLogging Append 方式減少批量insert的redo_sizeOracleAPP
- jQuery的append和appendTojQueryAPP
- nolog和append的使用APP
- nologgin和appendAPP
- NOLOGGING和FORCE LOGGING的理解
- go中陣列,切片和append的玄學Go陣列APP
- CTAS和insert append的一個測試APP
- Oracle logging 和nologging 的區別Oracle
- jquery中append、prepend, before和after方法的區別jQueryAPP
- URLSearchParams append()APP
- jQuery append()jQueryAPP
- golang appendGolangAPP
- Append HintAPP
- append2 給append 新增回撥方法APP
- Python3中列表方法append()和extend()的區別PythonAPP
- Oracle nologgingOracle
- python append()PythonAPP
- URLSearchParams append() 方法APP
- nologging mode 生效的場合
- Oracle DML NOLOGGINGOracle
- index與nologgingIndex
- Oracle’s NOLOGGINGOracle
- 列表中的append,extend,+=,+的區別APP
- append與 appendTo的區別APP
- 臨時表的APPEND方式插入APP
- Oracle資料庫中NOLOGGING和FORCE LOGGING的理解Oracle資料庫
- Parallel DML和append將在表上產生exclusive lockParallelAPP