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/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/38542/viewspace-900611/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值