直接路徑插入模式的一些討論
我這個帖子從資料庫執行模式,表模式和是否直接路徑插入三方面結合來討論下:
實驗準備
(1)建立計算當前session產生的redo size的檢視 :
create view redo_size as
select a.name,b.value
from v$statname a,v$mystat b
where a.statistic#=b.statistic# and a.name='redo size';
(2)建表結構:
sys@HX> create table t1 as select * from dba_objects where 1=2;
Table created.
1. 討論資料庫執行在歸檔模式的情況:
sys@HX> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 0
Next log sequence to archive 77
Current log sequence 77
(1)表模式是logging的情況
sys@HX> select table_name,logging from user_tables where table_name='T1';
TABLE_NAME |LOG
------------------------------|---
T1 |YES
1 row selected.
sys@HX> select * from redo_size;
NAME | VALUE
------------------------------|----------
redo size | 70768
sys@HX> insert into t1 select * from dba_objects;
15621 rows created.
sys@HX> select * from redo_size;
NAME | VALUE
------------------------------|----------
redo size | 1777308
1 row selected.
sys@HX> insert /*+ append */ into t1 select * from dba_objects;
15621 rows created.
sys@HX> select * from redo_size;
NAME | VALUE
------------------------------|----------
redo size | 3474632
1 row selected.
比較兩種插入方式的日誌量:
sys@HX> select 3474632-1777308 as redo_append,1777308-70768 as redo_normal from dual;
REDO_APPEND|REDO_NORMAL
-----------|-----------
1697324| 1706540
1 row selected.
基本一致,也就是說歸檔模式下,對於logging的表,即時使用了append插入方式也會產生redo
(2)表模式是nologging的情況
sys@HX> alter table t1 nologging;
Table altered.
sys@HX> select table_name,logging from user_tables where table_name='T1';
TABLE_NAME |LOG
------------------------------|---
T1 |NO
sys@HX> select * from redo_size;
NAME | VALUE
------------------------------|----------
redo size | 0
sys@HX> insert into t1 select * from dba_objects;
15621 rows created.
sys@HX> select * from redo_size;
NAME | VALUE
------------------------------|----------
redo size | 1707544
1 row selected.
sys@HX> insert /*+ append */ into t1 select * from dba_objects;
15621 rows created.
sys@HX> select * from redo_size;
NAME | VALUE
------------------------------|----------
redo size | 1710220
1 row selected.
sys@HX> select 1710220-1707544 as redo_append,1707544 as redo_normal from dual;
REDO_APPEND|REDO_NORMAL
-----------|-----------
2676| 1707544
1 row selected.
可以看到,歸檔模式下,對於nogging的表,普通方式插入資料還是會產生redo,使用了APPEND插入資料則不會產生redo:
2.討論非歸檔模式:
sys@HX> archive log list;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 0
Current log sequence 77
(1)表模式是logging的情況
sys@HX> alter table t1 logging;
Table altered.
sys@HX> select table_name,logging from user_tables where table_name='T1';
TABLE_NAME |LOG
------------------------------|---
T1 |YES
sys@HX> select * from redo_size;
NAME | VALUE
------------------------------|----------
redo size | 0
1 row selected.
sys@HX> insert into t1 select * from dba_objects;
15621 rows created.
sys@HX> select * from redo_size;
NAME | VALUE
------------------------------|----------
redo size | 1706524
1 row selected.
sys@HX> insert /*+ append */ into t1 select * from dba_objects;
15621 rows created.
sys@HX> select * from redo_size;
NAME | VALUE
------------------------------|----------
redo size | 1709244
1 row selected.
sys@HX> select 1709244-1706524 redo_append,1706524 redo_normal from dual;
REDO_APPEND|REDO_NORMAL
-----------|-----------
2720| 1706524
1 row selected.
在非歸檔模式,表模式是logging情況下,直接路徑插入方式不會產生redo
(2)表模式是nologging的情況
sys@HX> alter table t1 nologging;
Table altered.
sys@HX> select table_name,logging from user_tables where table_name='T1';
TABLE_NAME |LOG
------------------------------|---
T1 |NO
1 row selected.
sys@HX> select * from redo_size;
NAME | VALUE
------------------------------|----------
redo size | 0
1 row selected.
sys@HX> insert into t1 select * from dba_objects;
15621 rows created.
sys@HX> select * from redo_size;
NAME | VALUE
------------------------------|----------
redo size | 1707544
1 row selected.
sys@HX> insert /*+ append */ into t1 select * from dba_objects;
15621 rows created.
sys@HX> select * from redo_size;
NAME | VALUE
------------------------------|----------
redo size | 1710220
1 row selected.
sys@HX> select 1710220-1707544 redo_append,1707544 redo_normal from dual;
REDO_APPEND|REDO_NORMAL
-----------|-----------
2676| 1707544
1 row selected.
非歸檔模式下,表模式是nologging時,append方式插入不會有redo,普通插入方式還是會產生redo
可以用一個表格展示這個關係:
實驗準備
(1)建立計算當前session產生的redo size的檢視 :
create view redo_size as
select a.name,b.value
from v$statname a,v$mystat b
where a.statistic#=b.statistic# and a.name='redo size';
(2)建表結構:
sys@HX> create table t1 as select * from dba_objects where 1=2;
Table created.
1. 討論資料庫執行在歸檔模式的情況:
sys@HX> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 0
Next log sequence to archive 77
Current log sequence 77
(1)表模式是logging的情況
sys@HX> select table_name,logging from user_tables where table_name='T1';
TABLE_NAME |LOG
------------------------------|---
T1 |YES
1 row selected.
sys@HX> select * from redo_size;
NAME | VALUE
------------------------------|----------
redo size | 70768
sys@HX> insert into t1 select * from dba_objects;
15621 rows created.
sys@HX> select * from redo_size;
NAME | VALUE
------------------------------|----------
redo size | 1777308
1 row selected.
sys@HX> insert /*+ append */ into t1 select * from dba_objects;
15621 rows created.
sys@HX> select * from redo_size;
NAME | VALUE
------------------------------|----------
redo size | 3474632
1 row selected.
比較兩種插入方式的日誌量:
sys@HX> select 3474632-1777308 as redo_append,1777308-70768 as redo_normal from dual;
REDO_APPEND|REDO_NORMAL
-----------|-----------
1697324| 1706540
1 row selected.
基本一致,也就是說歸檔模式下,對於logging的表,即時使用了append插入方式也會產生redo
(2)表模式是nologging的情況
sys@HX> alter table t1 nologging;
Table altered.
sys@HX> select table_name,logging from user_tables where table_name='T1';
TABLE_NAME |LOG
------------------------------|---
T1 |NO
sys@HX> select * from redo_size;
NAME | VALUE
------------------------------|----------
redo size | 0
sys@HX> insert into t1 select * from dba_objects;
15621 rows created.
sys@HX> select * from redo_size;
NAME | VALUE
------------------------------|----------
redo size | 1707544
1 row selected.
sys@HX> insert /*+ append */ into t1 select * from dba_objects;
15621 rows created.
sys@HX> select * from redo_size;
NAME | VALUE
------------------------------|----------
redo size | 1710220
1 row selected.
sys@HX> select 1710220-1707544 as redo_append,1707544 as redo_normal from dual;
REDO_APPEND|REDO_NORMAL
-----------|-----------
2676| 1707544
1 row selected.
可以看到,歸檔模式下,對於nogging的表,普通方式插入資料還是會產生redo,使用了APPEND插入資料則不會產生redo:
2.討論非歸檔模式:
sys@HX> archive log list;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 0
Current log sequence 77
(1)表模式是logging的情況
sys@HX> alter table t1 logging;
Table altered.
sys@HX> select table_name,logging from user_tables where table_name='T1';
TABLE_NAME |LOG
------------------------------|---
T1 |YES
sys@HX> select * from redo_size;
NAME | VALUE
------------------------------|----------
redo size | 0
1 row selected.
sys@HX> insert into t1 select * from dba_objects;
15621 rows created.
sys@HX> select * from redo_size;
NAME | VALUE
------------------------------|----------
redo size | 1706524
1 row selected.
sys@HX> insert /*+ append */ into t1 select * from dba_objects;
15621 rows created.
sys@HX> select * from redo_size;
NAME | VALUE
------------------------------|----------
redo size | 1709244
1 row selected.
sys@HX> select 1709244-1706524 redo_append,1706524 redo_normal from dual;
REDO_APPEND|REDO_NORMAL
-----------|-----------
2720| 1706524
1 row selected.
在非歸檔模式,表模式是logging情況下,直接路徑插入方式不會產生redo
(2)表模式是nologging的情況
sys@HX> alter table t1 nologging;
Table altered.
sys@HX> select table_name,logging from user_tables where table_name='T1';
TABLE_NAME |LOG
------------------------------|---
T1 |NO
1 row selected.
sys@HX> select * from redo_size;
NAME | VALUE
------------------------------|----------
redo size | 0
1 row selected.
sys@HX> insert into t1 select * from dba_objects;
15621 rows created.
sys@HX> select * from redo_size;
NAME | VALUE
------------------------------|----------
redo size | 1707544
1 row selected.
sys@HX> insert /*+ append */ into t1 select * from dba_objects;
15621 rows created.
sys@HX> select * from redo_size;
NAME | VALUE
------------------------------|----------
redo size | 1710220
1 row selected.
sys@HX> select 1710220-1707544 redo_append,1707544 redo_normal from dual;
REDO_APPEND|REDO_NORMAL
-----------|-----------
2676| 1707544
1 row selected.
非歸檔模式下,表模式是nologging時,append方式插入不會有redo,普通插入方式還是會產生redo
可以用一個表格展示這個關係:
資料庫執行模式 |
表模式 |
插入模式 |
是否有redo生成 |
歸檔 |
logging |
No append |
有 |
append |
有 |
||
nologging |
No append |
有 |
|
append |
無 |
||
非歸檔 |
logging |
No append |
有 |
append |
無 |
||
nologging |
No append |
有 |
|
append |
無 |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28813259/viewspace-777428/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於直接路徑插入的工作原理
- insert /*+ append */直接路徑插入APP
- 直接路徑插入 -- insert /*+append*/ into [zt]APP
- oracle常規與直接路徑插入區別Oracle
- Oracle的學習路徑與方法討論Oracle
- 【Direct-Path】直接路徑載入提升插入效率及其自身限制
- Oracle直接路徑載入Oracle
- 我們現在沒有討論的但有必要討論的模式模式
- [技術討論]網路交流模式的變遷——概要稿模式
- 討論:大家來討論一些連線涉及到的引數
- 整理的一些SQL題,與討論SQL
- 索引對直接路徑載入的影響索引
- Ioc模式 Dependency Injection模式和AOP討論模式
- 有沒有一些大廠的高階架構技術討論討論架構
- javaweb中的一些路徑JavaWeb
- 近期討論過的一些MySQL問題MySql
- 關於一個建立型模式的討論:模式
- 關於ora_pz程式的一些討論
- 討論設計模式和00思想設計模式
- 關於神經網路的討論神經網路
- [20180316]共享服務模式和直接路徑讀.txt模式
- 圖論—尤拉回路/路徑圖論
- 設計模式討論之abstract factory篇設計模式
- SetUnhandledExceptionFilter 的討論ExceptionFilter
- 關於jive開發論壇的一些討論-winCVS安裝(整理)
- 關於PHP中的警告資訊和session的一些討論PHPSession
- GoF設計模式新手討論專用帖Go設計模式
- 設計模式討論之abstract factory篇 (轉)設計模式
- 直接插入排序排序
- 對於程式設計師職業生涯的一些討論程式設計師
- [技術討論]過度網路營銷的惡果——評福建鐵觀音的營銷模式模式
- [iOS Monkey 討論帖] 整套新的 fastmonkey 討論iOSAST
- [技術討論]關於低耦合開發的討論
- J2EE相關設計模式討論設計模式
- Word2013支援直接插入播放網路影片
- 直接插入排序法排序
- JSP的中文問題再問(一些理論上的探討)JS
- 有關oracle高可靠性的一些討論和想法(5)Oracle