返回顶部
首页 > 资讯 > 数据库 >分析Oracle Nologging
  • 497
分享到

分析Oracle Nologging

2024-04-02 19:04:59 497人浏览 独家记忆
摘要

这篇文章主要介绍“分析oracle Nologging”,在日常操作中,相信很多人在分析Oracle Nologging问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”分析Or

这篇文章主要介绍“分析oracle Nologging”,在日常操作中,相信很多人在分析Oracle Nologging问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”分析Oracle Nologging”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Nologging:

在对大表插入数据的时候,经常会用到nologging选项。Nologging并不是不产生redo,

Nologging+append 只是不会对数据产生redo(但依然有其他的redo,例如数据字典变化产生的redo)。

同理 logging+append下undo也是大大地减少,减少的是数据的undo,是数据本身的undo,就如同redo的减少也一样,是数据本身的redo。

这和数据库是否产生redo和undo是不同的概念,比如空间分配的redo和undo,这就不是数据本身的变化。

Nologging 主要影响: 

sql loader 直接路径加载

直接路径的insert(append hint)

create table as select

alter table move  

创建和重建索引

在非归档模式下, 对于nologging 和 logging模式,使用 append,都不会对数据生成redo。 

在归档模式下,只有将表置于nologging 模式,并且使用append 才不会对数据生成redo. 

通过v$mystat视图来显示出当前会话产生的redo来进行显示效果:

select a.name,b.value from v$statname a,v$mystat b where a.statistiC# = b.statistic# and a.name='redo size';

测试

测试前一定要确定是否开始force_logging功能:

如果开启force_logging功能,那么nologging是不生效的。

SYS@prod>select force_logging from v$database;

FOR

---

NO

如果结果是YES,那么进行关闭

Alter database no force logging;

归档模式下的测试:

SYS@prod>arcHive log list;

Database log mode        Archive Mode

Automatic archival        Enabled

Archive destination        /u01/app/oracle/arch/pridb

Oldest online log sequence     230

Next log sequence to archive   232

Current log sequence        232

Create table 测试:

查看当前会话产生的redo值:

SYS@prod>select a.name,b.value from v$statname a,v$mystat b where a.statistic# = b.statistic# and a.name='redo size';

NAME              VALUE

---------------------------------------------------------------- ----------

redo size          0

Nologging测试:

SYS@prod>create table test nologging as select * from dba_objects;

Table created.

SYS@prod>select a.name,b.value from v$statname a,v$mystat b where a.statistic# = b.statistic# and a.name='redo size';

NAME              VALUE

---------------------------------------------------------------- ----------

redo size             54928

产生redo大小为54928。

SYS@prod>drop table test;     

Table dropped.

Logging测试:

SYS@prod>select a.name,b.value from v$statname a,v$mystat b where a.statistic# = b.statistic# and a.name='redo size';

NAME              VALUE

---------------------------------------------------------------- ----------

redo size          0

SYS@prod>create table test logging as select * from dba_objects;

Table created.

SYS@prod>select a.name,b.value from v$statname a,v$mystat b where a.statistic# = b.statistic# and a.name='redo size';

NAME              VALUE

---------------------------------------------------------------- ----------

redo size          10262796

产生redo数量为10262796.

结论:用nologging 创建表,不会对数据生成redo,仅对数据字典生成redo. 

DML测试:

Insert update delete

Delete:

表logging:

SYS@prod>delete from test;

86978 rows deleted.

SYS@prod>select a.name,b.value from v$statname a,v$mystat b where a.statistic# = b.statistic# and a.name='redo size';

NAME              VALUE

---------------------------------------------------------------- ----------

redo size          32996412

表nologging:

SYS@prod>delete from test;

86978 rows deleted.

SYS@prod>select a.name,b.value from v$statname a,v$mystat b where a.statistic# = b.statistic# and a.name='redo size';

NAME              VALUE

---------------------------------------------------------------- ----------

redo size          32991352

Insert 与 update测试就省略了,与delete效果一样。

结论:

对于 INSERT/UPDATE/DELETE的DML 操作, nologging 和 logging 模式没有什么区别。

使用直接路径append对insert测试:

表logging 使用 append插入:

SYS@prod>create table test logging as select * from dba_objects;

Table created.

为了测试效果明显,重新启动一个会话。

SYS@prod>select a.name,b.value from v$statname a,v$mystat b where a.statistic# = b.statistic# and a.name='redo size';

NAME              VALUE

---------------------------------------------------------------- ----------

redo size          0

SYS@prod>insert into test select * from test;

86980 rows created.

SYS@prod>select a.name,b.value from v$statname a,v$mystat b where a.statistic# = b.statistic# and a.name='redo size';

NAME              VALUE

---------------------------------------------------------------- ----------

redo size          10239296

表nologging使用append插入:

SYS@prod>create table test nologging as select * from dba_objects;

Table created.

为了测试效果明显,重新启动一个会话。

SYS@prod>insert into test select * from test;

86980 rows created.

SYS@prod>select a.name,b.value from v$statname a,v$mystat b where a.statistic# = b.statistic# and a.name='redo size';

NAME              VALUE

---------------------------------------------------------------- ----------

redo size             13884

结论:

对于logging 模式, 使用append hint 在生成redo 上没有什么变化

对于nologging模式,使用append hint 对数据没有生成redo,仅对数据字典生成了redo.

Alter table move测试:

表Logging模式下进行移动:

SYS@prod>create table test logging as select * from dba_objects;

Table created.

重启一个会话

SYS@prod>select a.name,b.value from v$statname a,v$mystat b where a.statistic# = b.statistic# and a.name='redo size';

NAME              VALUE

---------------------------------------------------------------- ----------

redo size          0

SYS@prod>alter table test move tablespace example

SYS@prod>select a.name,b.value from v$statname a,v$mystat b where a.statistic# = b.statistic# and a.name='redo size';

NAME              VALUE

---------------------------------------------------------------- ----------

redo size          10330784

表nologging模式下进行移动:

SYS@prod>create table test nologging as select * from dba_objects;

Table created.

重启一个会话

SYS@prod>select a.name,b.value from v$statname a,v$mystat b where a.statistic# = b.statistic# and a.name='redo size';

NAME              VALUE

---------------------------------------------------------------- ----------

redo size          0

SYS@prod>alter table test move tablespace example;

Table altered.

SYS@prod>select a.name,b.value from v$statname a,v$mystat b where a.statistic# = b.statistic# and a.name='redo size';

NAME              VALUE

---------------------------------------------------------------- ----------

redo size             71712

结论:表在nologging模式下进行移动,不会记录数据redo,仅会记录数据字典变化的redo。

非归档模式下的测试:

SYS@prod>archive log list;

Database log mode        No Archive Mode

Automatic archival        Disabled

Archive destination        /u01/app/oracle/arch/pridb

Oldest online log sequence     250

Current log sequence        252

1.create table测试

Logging建表:

SYS@prod>select a.name,b.value from v$statname a,v$mystat b where a.statistic# = b.statistic# and a.name='redo size';

NAME              VALUE

---------------------------------------------------------------- ----------

redo size          0

SYS@prod>create table test logging as select * from dba_objects;

Table created.

SYS@prod>select a.name,b.value from v$statname a,v$mystat b where a.statistic# = b.statistic# and a.name='redo size';

NAME              VALUE

---------------------------------------------------------------- ----------

redo size             54476

Nologging建表:

SYS@prod>select a.name,b.value from v$statname a,v$mystat b where a.statistic# = b.statistic# and a.name='redo size';

NAME              VALUE

---------------------------------------------------------------- ----------

redo size          0

SYS@prod>create table test nologging as select * from dba_objects;

Table created.

SYS@prod>select a.name,b.value from v$statname a,v$mystat b where a.statistic# = b.statistic# and a.name='redo size';

NAME              VALUE

---------------------------------------------------------------- ----------

redo size             53700

结论:在非归档模式下,nologging和logging方式建表差距不大。

2.DML测试:(仅测试insert)

Insert:

表Nologging

SYS@prod>select a.name,b.value from v$statname a,v$mystat b where a.statistic# = b.statistic# and a.name='redo size';

NAME              VALUE

---------------------------------------------------------------- ----------

redo size          0

SYS@prod>insert into test select * from test;

86980 rows created.

SYS@prod>select a.name,b.value from v$statname a,v$mystat b where a.statistic# = b.statistic# and a.name='redo size';

NAME              VALUE

---------------------------------------------------------------- ----------

redo size          10153240

表Logging:

SYS@prod>select a.name,b.value from v$statname a,v$mystat b where a.statistic# = b.statistic# and a.name='redo size';

NAME              VALUE

---------------------------------------------------------------- ----------

redo size          0

SYS@prod>insert into test select * from test;

86980 rows created.

SYS@prod>select a.name,b.value from v$statname a,v$mystat b where a.statistic# = b.statistic# and a.name='redo size';

NAME              VALUE

---------------------------------------------------------------- ----------

redo size          10162700

结论:

对于 INSERT/UPDATE/DELETE的DML 操作, nologging 和 logging 模式没有什么区别

3.Insert+Append测试:

Logging:

SYS@prod>create table test logging as select * from dba_objects;

Table created.

重启一个会话

SYS@prod>select a.name,b.value from v$statname a,v$mystat b where a.statistic# = b.statistic# and a.name='redo size';

NAME              VALUE

---------------------------------------------------------------- ----------

redo size          0

SYS@prod>insert into test select * from test;

86980 rows created.

SYS@prod>select a.name,b.value from v$statname a,v$mystat b where a.statistic# = b.statistic# and a.name='redo size';

NAME              VALUE

---------------------------------------------------------------- ----------

redo size             13752

Nologging:

SYS@prod>create table test nologging as select * from dba_objects;

Table created.

重启一个会话:

SYS@prod>select a.name,b.value from v$statname a,v$mystat b where a.statistic# = b.statistic# and a.name='redo size';

NAME              VALUE

---------------------------------------------------------------- ----------

redo size          0

SYS@prod>insert into test select * from test;

86980 rows created.

SYS@prod>select a.name,b.value from v$statname a,v$mystat b where a.statistic# = b.statistic# and a.name='redo size';

NAME              VALUE

---------------------------------------------------------------- ----------

redo size             13884

总结: 对于非归档模式,对于nologging 和 logging模式,使用 append,都不会对数据生成redo。 

对于归档模式,只有nologging+Append,才不会对数据生成redo,仅对数据字典生成redo

两种模式下的测试结论:

归档模式下:

用nologging 创建表,不会对数据生成redo,仅对数据字典生成redo. 

insert/update/delete 的DML 操作,在logging和nologging上没有区别

对于logging 模式, 使用append hint 在生成redo 上没有什么变化

对于nologging模式,使用append hint 对数据没有生成redo,仅对数据字典生成了redo。

非归档模式:

在非归档模式下,create table 在nologging 和 logging 模式差别不大。

对于 INSERT/UPDATE/DELETE的DML 操作, nologging 和 logging 上没有区别。

对于nologging 和 logging模式,使用 append,都不会对数据生成redo。

到此,关于“分析Oracle Nologging”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

您可能感兴趣的文档:

--结束END--

本文标题: 分析Oracle Nologging

本文链接: https://lsjlt.com/news/62906.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 分析Oracle Nologging
    这篇文章主要介绍“分析Oracle Nologging”,在日常操作中,相信很多人在分析Oracle Nologging问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”分析Or...
    99+
    2024-04-02
  • oracle中nologging的作用是什么
    在Oracle数据库中,使用nologging选项可以告诉数据库在执行特定操作时不要写入redo日志,从而提高性能。通常,如果一个表...
    99+
    2024-04-09
    oracle
  • oracle中nologging的使用方法是什么
    在Oracle数据库中,通过使用NOLOGGING选项可以在进行数据导入、数据加载等大批量操作时提高性能。当表或索引使用NOLOGG...
    99+
    2024-04-09
    oracle
  • ORACLE 10g append跟nologging插入对REDO的影响
    ORACLE 10g append跟nologging插入对REDO的影响   1.  append 属于direct insert,归档模式下append...
    99+
    2024-04-02
  • 使用Oracle Nologging+Append注意事项是什么
    本篇内容介绍了“使用Oracle Nologging+Append注意事项是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细...
    99+
    2024-04-02
  • Oracle standby的ORA-01578 ORA-01110 ORA-26040 坑爹的NOLOGGING
    异常: DB: Oracle 11.2.0.1 --版本够low的 五一假期时给用户DB做了switch over主备切换后,用了发现切换后新的主库DB中报错如下: Wed ...
    99+
    2024-04-02
  • oracle分析工具dbms_profiler分析代码
    执行前需要运行$ORACLE_HOME/rdbms/admin/proftab.sql 创建一些关键表. BEGIN DBMS_PROFILER.START_PROFILER('MY_A...
    99+
    2024-04-02
  • Oracle分析函数
        聚合函数可以在分析模式或非分析模式下来进行运算。非分析模式下的聚合函数将结果集削减为较少的数据行。然而,在分析模式下,聚合函数并不减少输出结果行数。并且,聚合函数能够在...
    99+
    2024-04-02
  • Oracle中如何以NoLogging Append方式减少批量insert的redo_size
    这篇文章将为大家详细讲解有关Oracle中如何以NoLogging Append方式减少批量insert的redo_size,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。...
    99+
    2024-04-02
  • Oracle表分区实例分析
    这篇文章主要介绍了Oracle表分区实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Oracle表分区实例分析文章都会有所收获,下面我们一起来看看吧。一、 表空间及分区表的概念表空间:是一个或多个数据文件...
    99+
    2023-06-30
  • Oracle分析函数Over()
    Over()分析函数   说明:聚合函数(如sum()、max()等)可以计算基于组的某种聚合值,但是聚合函数对于某个组只能返回一行记录。若想对于某组返回多行记录,则需要使用分析函数。 rank()/dense_rank over...
    99+
    2015-01-23
    Oracle分析函数Over()
  • ORACLE-AWR报告分析
    1、什么是AWR?AWR (Automatic Workload Repository) 是自动负载信息库的英文缩写,AWR报告是Oracle 10g以后版本提供的一种性能收集和分析工具,能提供一个时间段内...
    99+
    2024-04-02
  • Oracle的死锁分析
    这篇文章主要介绍“Oracle的死锁分析”,在日常操作中,相信很多人在Oracle的死锁分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Oracle的死锁分析”的疑惑有所帮...
    99+
    2024-04-02
  • oracle hint概述分析
    这篇文章给大家介绍oracle hint概述分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 oracle hint概述1.为什么引入HintHint是O...
    99+
    2024-04-02
  • 分析Oracle AWR报告
    这篇文章主要介绍“分析Oracle AWR报告”,在日常操作中,相信很多人在分析Oracle AWR报告问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”分析Oracle AWR...
    99+
    2024-04-02
  • 分析Oracle COMPATIBLE参数
    这篇文章主要介绍“分析Oracle COMPATIBLE参数”,在日常操作中,相信很多人在分析Oracle COMPATIBLE参数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2024-04-02
  • 分析Oracle RAC集群
    这篇文章主要讲解了“分析Oracle RAC集群”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“分析Oracle RAC集群”吧!一、什么是Oracle RA...
    99+
    2024-04-02
  • 分析Oracle中11g DataGuard
    这篇文章主要讲解了“分析Oracle中11g DataGuard”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“分析Oracle中11g DataGuard”...
    99+
    2024-04-02
  • ORACLE数据表分析
    一、性能数据的存储过程: 性能数据的收集包含这样几个存储过程: GATHER_INDEX_STATS:分析索引信息 GATHER_TABLE_STATS:分析表信息,当ca...
    99+
    2024-04-02
  • Oracle分析函数入门
    Oracle分析函数入门...
    99+
    2020-12-22
    Oracle分析函数入门
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作