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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- alter table nologging /*+APPEND PARALLEL(n)*/APPParallel
- jQuery的append和appendTojQueryAPP
- go中陣列,切片和append的玄學Go陣列APP
- jquery中append、prepend, before和after方法的區別jQueryAPP
- nologging、force logging、supplemental log的理解
- python append()PythonAPP
- URLSearchParams append()APP
- Python3中列表方法append()和extend()的區別PythonAPP
- Nologging對恢復的影響(二)
- Nologging對恢復的影響(一)
- URLSearchParams append() 方法APP
- 挽救DG中主庫的nologging操作的塊
- 列表中的append,extend,+=,+的區別APP
- 【DATAGUARD】Oracle Dataguard nologging 塊修復Oracle
- [golang]slice的坑:從append到共享GolangAPP
- [Bash] Append the content at the beginning of the fileAPP
- 【廖雪峰python入門筆記】list新增元素_append()和insert()Python筆記APP
- SAP ABAP Append structure 介紹APPStruct
- ORA-01578和ORA-26040--NOLOGGING操作引起的壞塊-錯誤解釋和解決方案
- 日誌記錄模式(LOGGING 、FORCE LOGGING 、NOLOGGING)模式
- jquery中append()方法與after()方法的區別jQueryAPP
- 一次rman恢復引起的nologging問題模擬
- 修復由於主庫NOLOGGING操作引起的備庫ORA-01578和ORA-26040錯誤
- Oracle 修復由於主庫NOLOGGING引起的備庫ORA-01578和ORA-26040錯誤Oracle
- 通過append hint來插入資料,演示它和普通插入資料的效能比較。APP
- Oracle standby的ORA-01578 ORA-01110 ORA-26040 坑爹的NOLOGGINGOracle
- Python之列表的append()方法最容易踩的坑及解決PythonAPP
- 類和物件案例物件
- ForkJoin框架的RecursiveTask和ForkJoinPool的使用案例框架
- v-html 及vue-append外掛HTMLVueAPP
- 【Python有坑系列】numpy.append中有坑PythonAPP
- 問下append後地址不一樣了APP
- pandas中如何使用合併append函式?APP函式
- ORACLE打補丁的方法和案例Oracle
- Spring進階案例之註解和IoC案例Spring
- 編寫函式:遞迴求逆序 (Append Code) ★函式遞迴APP
- 問題解決:AttributeError: ‘NoneType‘ object has no attribute ‘append‘ErrorNoneObjectAPP
- [提問交流]關於Jquery Append鉤子的問題,大神求助!jQueryAPP
- Goroutine 和 Channel 的的使用和一些坑以及案例分析Go