博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ORACLE NOLOGGING研究
阅读量:6148 次
发布时间:2019-06-21

本文共 2448 字,大约阅读时间需要 8 分钟。

熟悉oracle的人都知道。通过设置oracle的nologging选项,能够使某些操作高速完毕,风险是数据库备份可能失效。能够使用nologging的操作有非常多,搜集资料整理例如以下:

1.索引的创建和ALTER(重建)。

2.表的批量INSERT(通过/*+append */提示使用“直接路径插入“。

或採用SQL*Loader直接路径载入)。表数据生成少量redo,可是全部索引改动会生成大量redo(虽然表不生成日志,但这个表上的索引却会生成redo。)。

3.Lob操作(对大对象的更新不必生成日志)。
4.通过create table as select创建表。
5.各种alter table操作,如move和split。

6. dml操作始终生成redo,对于lob字段例外(与lob字段的undo方式有关)

以下,我们来使用一下:

首先是归档模式下:

SQL> show userUSER is "YUE"SQL> @redo.sqlSTATISTIC# USERNAME                       NAME                      VALUE---------- ------------------------------ -------------------- ----------       178 YUE                            redo size                   684SQL> create table t2 as select * from t1;Table created.SQL> @redo.sqlSTATISTIC# USERNAME                       NAME                      VALUE---------- ------------------------------ -------------------- ----------       178 YUE                            redo size               8573344SQL> create table t3 nologging  as select * from t1;Table created.SQL> @redo.sqlSTATISTIC# USERNAME                       NAME                      VALUE---------- ------------------------------ -------------------- ----------       178 YUE                            redo size               8725596
再来看一下非归档模式下:

SQL> @redo.sqlSTATISTIC# USERNAME                       NAME                      VALUE---------- ------------------------------ -------------------- ----------       178 YUE                            redo size                  1392SQL> create table t4 as select * from t1;Table created.SQL> @redo.sqlSTATISTIC# USERNAME                       NAME                      VALUE---------- ------------------------------ -------------------- ----------       178 YUE                            redo size                191000SQL> create table t5 nologging as select * from t1;Table created.SQL> @redo.sqlSTATISTIC# USERNAME                       NAME                      VALUE---------- ------------------------------ -------------------- ----------       178 YUE                            redo size                297176
由此可见,在非归档模式下。对于上述操作。oracle无论nologging是否指定,都尽量不生成redo。

那么,上面全部的能够nologging的操作具有什么共性那?

本人,觉得。全部这些操作都是生成新的数据块或者直接覆盖老数据块的全部内容,比如 insert append操作,是在高水位线上直接插入数据。这也就解释了为什么insert append操作相应的index会生成redo,由于对index的改动即不是新建块也不是覆盖老块的全部内容。

DML操作在nologging模式下之所以生成日志。是由于dml操作的不一定是新块或者覆盖老块全部内容。

而对lob的dml能够不生成redo。是由于lob的dml操作始终是在新块上保存编辑后数据。

转载于:https://www.cnblogs.com/gavanwanggw/p/6889104.html

你可能感兴趣的文章
《图解HTTP》1~53Page Web网络基础 HTTP协议 HTTP报文内的HTTP信息
查看>>
unix环境高级编程-高级IO(2)
查看>>
树莓派是如何免疫 Meltdown 和 Spectre 漏洞的
查看>>
雅虎瓦片地图切片问题
查看>>
HTML 邮件链接,超链接发邮件
查看>>
HDU 5524:Subtrees
查看>>
手机端userAgent
查看>>
pip安装Mysql-python报错EnvironmentError: mysql_config not found
查看>>
http协议组成(请求状态码)
查看>>
怎样成为一个高手观后感
查看>>
[转]VC预处理指令与宏定义的妙用
查看>>
JQuery radio单选框应用
查看>>
MySql操作
查看>>
python 解析 XML文件
查看>>
MySQL 文件导入出错
查看>>
HDU2502 月之数(解法三)
查看>>
栈的压入、弹出序列 (剑指offer)
查看>>
java相关
查看>>
由一个异常开始思考springmvc参数解析
查看>>
layer弹出层不居中解决方案,layer提示不屏幕居中解决方法,layer弹窗不居中解决方案...
查看>>