_disable_logging对于非归档数据库的影响

非归档模式下_disable_logging参数影响
本文探讨了在非归档模式下,_disable_logging参数设置为true或false时,对数据库操作的影响。通过实际测试,在创建大量数据的过程中,数据库能够正常进行日志切换,未出现异常。

1.    _disable_logging对于非归档数据库的影响

首先确定数据库当前是非归档模式:

lunar@TSMISC01> archive log list

Database log mode              No Archive Mode

Automatic archival             Enabled

Archive destination            /oracle/oradata/TSMISC01/archive

Oldest online log sequence     0  之前被删除或者被初始化过

Current log sequence           158

lunar@TSMISC01>

 

 

查看online redo log 的相关信息:

lunar@TSMISC01> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIM

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

         1          1          0    2097152          2 YES UNUSED                       0

         2          1        158  104857600          2 NO  CURRENT               49355946 12-APR-06

         3          1        157  104857600          1 NO  INACTIVE              49355943 12-APR-06

 

Elapsed: 00:00:00.00

lunar@TSMISC01> select * from v$logfile;

    GROUP# STATUS  TYPE    MEMBER

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

         1         ONLINE  /oracle/oradata/TSMISC01/redo11.log

         2         ONLINE  /oracle/oradata/TSMISC01/redo02.log

         3         ONLINE  /oracle/oradata/TSMISC01/redo03.log

         2         ONLINE  /oracle/oradata/TSMISC01/redo02_2.log

         1         ONLINE  /oracle/oradata/TSMISC01/redo12.log

 

Elapsed: 00:00:00.00

lunar@TSMISC01>

从这些信息我们看到group 1 是新建的组因此其sequence#0,status unused。还可以看到,group 2是当前数据库正在使用的online redo logfile

 

现在,检查数据库中_disable_logging参数的设置:

lunar@TSMISC01> @get_param

Enter value for par: disable_logging

old  14:   x.ksppinm like '%_&par%'

new  14:   x.ksppinm like '%_disable_logging%'

 

NAME                                VALUE                     ISDEFAULT ISMOD      ISADJ

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

_disable_logging                    FALSE                     FALSE     FALSE      FALSE

Elapsed: 00:00:00.00

lunar@TSMISC01>

可见,目前_disable_loggingfalse

 

我们可以使用alter system 命令修改这个参数,并且可以使用scope=memory(仅在当前的系统中生效)或者scope=both(在当前的系统和spfile中都做相应的设置)来指定,让这个参数立刻生效:

lunar@TSMISC01> alter system set "_disable_logging"=true scope=memory;

System altered.

Elapsed: 00:00:00.02

lunar@TSMISC01> show parameter disable_logging

NAME                                 TYPE        VALUE

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

_disable_logging                     boolean     TRUE

lunar@TSMISC01>

 

现在我们来作个测试表,创建一个大表,并向其中插入10000000 条记录,然后看看系统是否发生了日志切换,还是会发生其他什么异常情况:

lunar@TSMISC01> @big_table 10000000

Table dropped.

Elapsed: 00:00:01.33

Table created.

Elapsed: 00:00:00.13

Table altered.

Elapsed: 00:00:00.02

old   3:     l_rows number := &1;

new   3:     l_rows number := 10000000;

old   9:         where rownum <= &1;

new   9:         where rownum <= 10000000;

PL/SQL procedure successfully completed.

Elapsed: 00:01:29.89

Table altered.

Elapsed: 00:01:33.17

PL/SQL procedure successfully completed.

Elapsed: 00:03:12.77

  COUNT(*)

----------

  10000000

Elapsed: 00:00:02.05

lunar@TSMISC01>

 

    现在看看日志文件的情况:

lunar@TSMISC01> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIM

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

         1          1        162    2097152          2 NO  INACTIVE              49413664 12-APR-06

         2          1        161  104857600          2 NO  INACTIVE              49374533 12-APR-06

         3          1        163  104857600          1 NO  CURRENT               49414128 12-APR-06

Elapsed: 00:00:00.19

lunar@TSMISC01> select * from v$logfile;

    GROUP# STATUS  TYPE    MEMBER

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

         1         ONLINE  /oracle/oradata/TSMISC01/redo11.log

         2         ONLINE  /oracle/oradata/TSMISC01/redo02.log

         3         ONLINE  /oracle/oradata/TSMISC01/redo03.log

         2         ONLINE  /oracle/oradata/TSMISC01/redo02_2.log

         1         ONLINE  /oracle/oradata/TSMISC01/redo12.log

Elapsed: 00:00:00.04

lunar@TSMISC01>      

我们看到日志已经发生了切换,数据库可以继续操作,创建大表前数据库的“当前日志是group 2,在创建了一些大表后,当前日志已经是group 3了,且alert.log中没有任何报错信息,也没有什么异常的信息因此,我们可以有下面的结论:在非归档模式的数据库下,不论_disable_loggingfalse还是true,数据库都可以继续操作,而不受该参数的影响。

在 Django 项目中,将日志信息存储到数据库中是一种常见的做法,可以用于集中管理和分析日志数据。以下是实现该功能的配置方法和步骤: ### 1. 创建日志模型 首先需要在数据库中创建一个用于存储日志信息的模型。例如,可以创建一个 `LogEntry` 模型来保存日志记录: ```python from django.db import models class LogEntry(models.Model): timestamp = models.DateTimeField(auto_now_add=True) level = models.CharField(max_length=10) message = models.TextField() logger = models.CharField(max_length=100) traceback = models.TextField(blank=True, null=True) def __str__(self): return f"{self.timestamp} - {self.level} - {self.message}" ``` 运行迁移命令以创建数据库表: ```bash python manage.py makemigrations python manage.py migrate ``` ### 2. 自定义日志处理器 接下来,需要创建一个自定义的日志处理器,用于将日志信息写入数据库。可以在项目中创建一个 `handlers.py` 文件,并在其中定义 `DatabaseLogHandler` 类: ```python import logging from .models import LogEntry class DatabaseLogHandler(logging.Handler): def emit(self, record): try: log_entry = LogEntry( level=record.levelname, message=record.getMessage(), logger=record.name, traceback=record.exc_info ) log_entry.save() except Exception: self.handleError(record) ``` ### 3. 配置 logging 在 `settings.py` 中配置 `LOGGING` 字典,使用自定义的 `DatabaseLogHandler`。可以结合 Django 的日志配置机制,将日志信息发送到数据库: ```python LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'database': { 'level': 'DEBUG', 'class': 'your_app.handlers.DatabaseLogHandler', }, }, 'loggers': { 'django': { 'handlers': ['database'], 'level': 'DEBUG', 'propagate': True, }, 'your_app': { 'handlers': ['database'], 'level': 'DEBUG', 'propagate': True, }, }, } ``` ### 4. 验证配置 在项目运行过程中,可以通过访问数据库中的 `LogEntry` 表来查看日志信息。确保日志内容包括时间戳、日志级别、消息、记录器名称以及可能的异常追踪信息。 ### 注意事项 - **性能影响**:将日志写入数据库可能会对性能产生一定影响,尤其是在高并发场景下。建议根据实际需求调整日志级别和存储策略。 - **日志清理**:由于数据库存储的日志会不断增长,建议定期清理或归档旧的日志记录。 - **安全性**:确保日志表的访问权限受到严格控制,防止敏感信息泄露。 通过以上步骤,可以成功将 Django 项目的日志信息存储到数据库中,便于后续分析和管理。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值