ITPub博客

首页 > 数据库 > Oracle > LOGGING相关

LOGGING相关

原创 Oracle 作者:lusklusklusk 时间:2016-09-01 16:27:41 0 删除 编辑

Nologging只在很少情况下生效

V$DATABASE.FORCE_LOGGING
三种日志记录模式(LOGGING 、FORCE LOGGING 、NOLOGGING)

 

 

sqlplus /nolog后再connect用户名密码和sqlplus之后写用户名密码没有区别,因为后者是前两者相加的一个结果

 

 

V$DATABASE.FORCE_LOGGING= FORCE LOGGING与归档或非归档没有任何关系,即非归档的V$DATABASE.FORCE_LOGGIN也可以是FORCE LOGGING

 

V$DATABASE.FORCE_LOGGING= FORCE LOGGING时可以创建NOLOGGING的表空间

 

V$DATABASE.FORCE_LOGGING= FORCE LOGGING且表空间是FORCE_LOGGING时,仍可以创建NOLOGGING的表

 

 

当数据库使用FORCE LOGGING时,具有最高优先级别,其次是表空间级别的FORCE LOGGING。即是当一个对象指定NOLOGGING时,
而表空间或数据库级别的日志模式为FORCE LOGGING,则该选项不起作用,直到表空间或数据库级别的FORCE LOGGING解除。
当然更明细的就是一个对象建立时的元数据永远都在,因为是建立在system表空间,其中往对象表里插入的行是否会写日志,
实验表明只有数据库和表空间都是no force logging且create table tablename nologging as select * from tablenameX时不会写日志,
其他都会写日志,也就是说都可以恢复

 

 

create tablespace XX datafile '/xx/xx.dbf' size 5M;

如上创建表空间不加以区别的话则该表空间默认是LOGGING模式,NO FORCE_LOGGING模式,dba_tablespace.logging=logging,dba_tablespace.force_logging=no

 

create tablespace XX datafile '/xx/xx.dbf' size 5M force logging;

则dba_tablespace.logging=logging,dba_tablespace.force_logging=yes

 

create tablespace XX datafile '/xx/xx.dbf' size 5M nologging;

则dba_tablespace.logging=NOLOGGING,dba_tablespace.force_logging=NO

 

create table XX (column1 number);

如上建表默认随表空间的LOGGING状态,表空间是logging,则user_table.logging=YES,如果表空间时nologging,则user_table.logging=NO

 

create table XX (column1 number) nologging tablespace XX;

则不管表空间XX是logging还是nologging状态,表都是nologging状态;user_table.logging=NO

 

create table XX (column1 number) logging tablespace XX;

则不管表空间XX是logging还是nologging状态,表都是logging状态;user_table.logging=YES

 

 

 

 

 

实验经历

数据库是FORCE LOGGING,表空间是FORCE LOGGING,表是logging,看表恢复吗
数据库是FORCE LOGGING,表空间是FORCE LOGGING,表是nologging,看表恢复吗
数据库是FORCE LOGGING,表空间不是FORCE LOGGING是logging,表是logging,看表恢复吗
数据库是FORCE LOGGING,表空间不是FORCE LOGGING是logging,表是nologging,看表恢复吗
数据库是FORCE LOGGING,表空间不是FORCE LOGGING是nologging,表是logging,看表恢复吗
数据库是FORCE LOGGING,表空间不是FORCE LOGGING是nologging,表是nologging,看表恢复吗
以上几种情况下,先backup database,再建立上面的表,再删除表对应的表空间对应的数据文件后,restore database并recover database后发现表和表里的数据行都可以恢复。以下2种方式的表和表数据都正常恢复,说明只要数据库是FORCE LOGGING,则任何数据都肯定写入redo,数据都可以恢复
Create table table_name(column1 type)并insert into values并commit
Create table table_name as select * from table_name2










数据库不是FORCE LOGGING,表空间是FORCE LOGGING,表是logging,看表恢复吗
数据库不是FORCE LOGGING,表空间是FORCE LOGGING,表是nologging,看表恢复吗
数据库不是FORCE LOGGING,表空间不是FORCE LOGGING是logging,表是logging,看表恢复吗
数据库不是FORCE LOGGING,表空间不是FORCE LOGGING是logging,表是nologging,看表恢复吗
数据库不是FORCE LOGGING,表空间不是FORCE LOGGING是nologging,表是logging,看表恢复吗
数据库不是FORCE LOGGING,表空间不是FORCE LOGGING是nologging,表是nologging,看表恢复吗
以上几种情况下,先backup database,再建立上面的表,再删除表对应的表空间对应的数据文件后,restore database并recover database后发现表的元数据都可以恢复。
以下2种建表方式的表的元数据都可以恢复
但是只有表空间不是FORCE LOGGING(不管是logging还是nologging)且表是nologging时,create table as 的表里的数据行不能恢复,正常create table table_name(column1 type)的表里的数据行可以恢复
Create table table_name(column1 type)并insert into values并commit
Create table table_name as select * from table_name2



create table ww3 tablespace TE nologging as select object_id  from dba_objects where rownum<2;
TE是nologging,no force_logging
create table rr3 tablespace TEE nologging as select object_id  from dba_objects where rownum<2;
TEE是logging,no force_logging
create table ff3 tablespace TE22 nologging as select object_id  from dba_objects where rownum<2;
TE22是force_logging


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30126024/viewspace-2124361/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: OGG_linux搭建实验
请登录后发表评论 登录
全部评论
Welcome to Lukes DB HOME。 Oracle OCM、Mysql OCP, 10年DBA工作经验,博客仅记录自己的一个学习过程,不代表完全准确,如有需要,欢迎转载。

注册时间:2015-02-02

  • 博文量
    348
  • 访问量
    1174937