精华内容
下载资源
问答
  • 数据库归档

    2020-05-09 11:38:05
    类似于日志之类的数据表,只会用到最新一段时间的数据,随着时间累积,会影响到该表的性能与容量瓶颈,但是又不舍得删除这里历史数据,这时候,可以以备份的形式将这些历史数据归档起来。也即是备份到另一张表或是...

    类似于日志之类的数据表,只会用到最新一段时间的数据,随着时间累积,会影响到该表的性能与容量瓶颈,但是又不舍得删除这里历史数据,这时候,可以以备份的形式将这些历史数据归档起来。也即是备份到另一张表或是导出存到磁盘等。
    归档方式:

    1. 采用sql语句
      首先创建一张新表与旧表一模一样,如:
      create table log_bak like log;
      
      接着需要归档的数据导入新表并删除旧表中的数据,如:
      insert into log_bak select * from log where created_at < NOW() - INTERVAL 90 DAY;
      delete from log  where created_at < NOW() - INTERVAL 90 DAY;
      
      具体怎么执行上述命令,可以通过存储过程的方式,也可以写个crontab任务,也可以在项目中写定时任务,等等,不一而足。
      需要注意的是,在插入数据到备份表的时候,可能会因为数据量过大而导致执行失败,这时候就需要控制单次执行的数据量,如果是报“The total number of locks exceeds the lock table size.”,则需要将innodb_buffer_pool_size值进行调优,等等。
    2. 使用第三方工具,如:pt-archiver
    展开全文
  • 什么是数据库归档

    2020-12-14 22:35:09
    一种新兴的技术——数据库归档也许能够帮您的忙。  数据库归档技术是一种保持在线数据库规模大体不变却有能够为用户应用提供稳定的数据库性能的方法。其工作原理是,将数据库中不经常使用的数据迁移至近线设备,将...
  • 数据库归档模式

    2019-09-27 22:22:04
    背景:新话单功能上线后,生产环境之前未配置定时任务产生话单,导致数据库有2000多万条的记录等待生成话单,定时任务配置正确后,由于环境开启了数据库归档模式,而生成话单的过程又在不断的update和delete行为轨迹...

    背景:新话单功能上线后,生产环境之前未配置定时任务产生话单,导致数据库有2000多万条的记录等待生成话单,定时任务配置正确后,由于环境开启了数据库归档模式,而生成话单的过程又在不断的update和delete行为轨迹表中的数据,导致产生大量的归档日志,必须实时监控磁盘空间。

    Oracle数据库的归档模式一般在开发、测试环境默认是不设置的的,主要是为了节省磁盘空间,在生产环境上,设置日志模式并自动归档主要是为了保证系统安全,恢复数据。

    (一)Oracle数据库进行日志的自动归档需要满足两个条件:

    1.是数据库日志模式的设置(可为Archive Mode 和No Archive Mode)

    2.是自动归档模式设置(Automatic archival,可为Enabled 和Disabled)

    (二)查看Oracle数据现行的日志模式和归档模式的设置

    使用 archive log list 命令查看

    1.运行在日志自动归档模式的查看结果

    Database log mode  Archive Mode
    Automatic archival    Enabled
    Archive destination  /backup/archivelog
    Oldest online log sequence 2131
    Next log sequence to archive 2133
    Current log sequence 2133

    2.未启动数据库日志自动归档模式的查看结果

    Database log mode   No Archive Mode
    Automatic archival     Disabled
    Archive destination   /u01/app/oracle/product/8.1.7/dbs/arch
    Oldest online log sequence 194
    Current log sequence 196

    (三)数据库日志模式的设置

    创建数据库时,可以在CREATE DATABASE 语句中指定数据库的日志模式,默认缺省是NOARCHIVELOG 模式,如果在创建数据库时指明是Archive Mode的话,会增加约20%的创建时间,而在以后启动INSTANCE 时再设置的话,一般只用去几秒的时间。

    日志模式设置切换(Archive Mode 和No Archive Mode 之间的切换)的步骤和操作如下:

    1.关闭数据库实例

    SQL> shutdown immediate;

    2.备份数据库

    该备份跟以后产生的日志一起用于将来的灾难恢复(很重要,如要改为归档日志模式,没有这个数据库备份,仅有日志文件是无法从该时间点恢复的)

    3.启动数据库实例到mount 状态,但不要打开。

    SQL> startup mount;

    4.切换数据库日志模式。

    SQL> alter database archivelog;(设置数据库为归档日志模式)
    SQL> alter database noarchivelog;(设置数据库为非归档日志模式)

    5.打开数据库。

    SQL> alter database open;

    6.确认数据库现在处于归档日志模式。

    SQL> archive log list;

    7.将这个时间点的redo logs 归档

    SQL> archive log all;

    8.确认新产生的日志文件已在相应的归档目录下面。

    (四)数据库自动归档模式的设置

    在该模式下,数据库启动一个arch 进程,专门负责将redo logs 写到系统归档设备的相应目录下。在数据库的参数文件中设置参数(一般是在$ORACLE_HOME/dbs/init*.ora 文件中):

    LOG_ARCHIVE_START= LOG_ARCHIVE_DEST= LOG_ARCHIVE_FORMAT=

    LOG_ARCHIVE_START: 如要求自动归档的话,则设为TRUE,如要求为非自动归档的话,则设为FALSE

    LOG_ARCHIVE_DEST: 该参数设定了archive logs 归档存放的路径。

    LOG_ARCHIVE_FORMAT: 该参数设定了archive logs 的命名格式。例如,如将格式设为: arch%s.arc log 文件将为: arch1.arc, arch2.arc, arch3.arc

    这几个参数设置只有在数据库实例启动前设置才能生效,如果在数据库运行中进行设置,要使其生效,必须重起数据库。 如果数据库正在运行中,不能即刻重起,要设置其为自动归档模式,则做如下操作:

    SQL> ALTER SYSTEM ARCHIVE LOG START;

    如要设置其为非自动归档模式(取消自动归档),则:

    SQL> ALTER SYSTEM ARCHIVE LOG STOP;

    但如果数据库重起后,给语句修改的结果就失效了,自动归档的设置还是按照系统参数文件中的LOG_ARCHIVE_START 的值来设置。

    (五)几种设置情况:

    1. Database log mode Archive Mode,Automatic archival Enabled 这是在大部分生产环境中的ORACLE 数据库日志及归档模式设置,这种情况下,做好数据库的定期备份(有热备和冷备)和归档日志备份,可有效的将数据库恢复到有归档日志的全部时间点。
    2. Database log mode Archive Mode,Automatic archival Disabled 这种情况下,数据库不能自动归档,需要进行手工归档。如果所有在线日志都写满了,又没有的及时进行手工归档的话,由于LGWR 没有可用的在线日志可写,数据库将会挂在这儿,只有进行手工归档后,有可用的在线日志后才能继续。在生产环境中应该避免这种情况。 手工归档操作如下:
    SQL> ALTER SYSTEM ARCHIVE LOG ALL;

    数据库将会把在线日志进行归档处理

    1. Database log mode NO Archive Mode,Automatic archival Enabled 有些情况下,数据库管理员只在数据库参数文件中设置了LOG_ARCHIVE_START=TRUE,然后在数据库起来后查看到ARCH 归档进程已经起来了,可是尽管ORACLE 已经作了几次日志切换,但还是没有归档日志,这时的设置就是这种情况,如果数据库不是处在ARVHIVELOG 模式,redolog 还是不会被归档。
    2. Database log mode NO Archive Mode,Automatic archival Disabled 这种设置是刚安装的oracle 数据库的缺省设置,开发环境也大部分如此。即没有进行归档。

    归档日志清理(如果采用RMNA备份后则不用手工删除)

    归档日志都可以清理,不会导致数据库有问题,但一般清历史的,保留近1个小时的。 一、先手工删除归档日志文件 二、用RMAN删除数据库记录的归档列表信息

    1. 进入本数据库的rman,在命令行模式输入"rman target /",进入rman,查看提示,确认连接的是否是本库?
    oracle ~# reman /target
    1. 查看归档日志文件的状态:
    RMAN> list archivelog all;
    1. 删除操作系统中的日志文件(到操作系统级进行手工删除,也可以是第一步;
    2. 将归档日志信息进行更新;
    RMAN> crosscheck archivelog all;
    RMAN> delete expired archivelog all; (确认时键入"yes")
    RMAN> exit

     

    转载于:https://www.cnblogs.com/zihanxing/p/6852698.html

    展开全文
  • 数据库归档策略

    千次阅读 2018-10-18 21:54:47
    下面给出数据库归档策略及示例代码。 现有条件: 1.现有两个数据库:db-A 以及 db-B; 2.两个库中有字段相同的表:tba(表中只有字段订单id–rx_id(long型) 有索引); 3.归档库的tba中还有17年整年的归档数据。 4...

    数据库迁移策略

    为备战双11,需要将数据库中的相关表(历史订单)进行归档,以便腾出更多的空间迎接订单的暴增。作者经过尝试,得出自认为最优的解决方案。下面给出数据库归档策略及示例代码。
    现有条件:
    1.现有两个数据库:db-A 以及 db-B;
    2.两个库中有字段相同的表:tba(表中只有字段订单id–rx_id(long型) 有索引);
    3.归档库的tba中还有17年整年的归档数据。
    4.由于单量隐藏性,rx_id 并不是按照下单时间依次递增的,但是大致趋势是递增的。即:保证今天的最大单号比昨天的最大单号的值大。
    5.需要迁移的单量大约300w条。

    我们注意到,
    1.数据量庞大,在查询的sql中最好是能够利用索引。
    2.数据库可利用的索引只有1个。

    解决思路:
    1.首先,作者通过拿到当归档库表中最大的订单号:rx_id_start。
    2.其次,拿到结束时间当天最大的订单号:rx_id_end。
    3.通过两个单号,分页查询两个订单号范围内的订单。
    4.按分页的数量分批插入归档表。
    5.做一个定时job 定时执行。

    好处:
    1.最大化并且巧妙的利用了索引,加大了检索速度。
    2.可做成定时job每天,执行一次,归档的工作可持续。

    完整代码:

    private static String archive4RxInfoJob = "archive4RxInfoJob";
     /**
         * 缓存结束时间的最大rxId
         */
    public static Map<String, Long> currentMaxRxIdMap = new ConcurrentHashMap<>();
    //封装的线程池
    private ThreadPoolService threadPoolService;
    private static int pageSize = 100;
    
    //可定时执行job
    public JsfResult<Boolean> archive4RxInfoJob() {
            final Long start = System.currentTimeMillis();
            JsfResult<Boolean> result = new JsfResult<>();
            //开始ump监控
            CallerInfo umpCall = umpUtil.start("medicine-b2c-man.method.DataArchiveExportServiceImpl.archive4RxInfoOneTime");
            try {
                final Date endTm = getEndDay();
                //异步执行
                this.threadPoolService.asynExecuteTask(new Runnable() {
                    @Override
                    public void run() {
                        int i = 0;
                        while (true) {
                            if (i == 10) {
                                break;
                            }
                            //依次拿到归档表中最大的rx_id
                            Long rxId = dataArchiveDao.getRxInfoByRxIdAndEndTmPage();
                            //拿到生产库表中截止时间的rx_id,本地缓存记录一下
                            Long maxRxIdEndTm = currentMaxRxIdMap.get(archive4RxInfoJob + endTm.getTime());
                            if (maxRxIdEndTm == null) {
                                maxRxIdEndTm = rxReadDao.getMaxRxIdEndDay(endTm);
                                currentMaxRxIdMap.put(archive4RxInfoJob + endTm.getTime(), maxRxIdEndTm);
                            }
                            //查询1000条数据
                            logger.info("archive4RxInfoJob->start->rxId:{},date:{}", rxId, DateUtil.formatDate(endTm, "yyyy-MM-dd HH:mm:ss"));
                            List<RxInfo> resList = rxReadDao.getRxInfoByRxIdPage(rxId, pageSize / 10, maxRxIdEndTm);
                            if (resList == null || resList.size() == 0) {
                                logger.info("archive4RxInfoJob->resList size is 0");
                                return;
                            }
                            //批量插入
                            dataArchiveDao.batchAddRxInfoArchive(resList );
                            logger.info("archive4RxInfoJob->after->rxId:{},date:{},last:{}", rxId, DateUtil.formatDate(endTm, "yyyy-MM-dd HH:mm:ss"), System.currentTimeMillis() - start);
                            i++;
                        }
                    }
                });
    
                result.setMsg(DataArchiveErrorCode.SUCCESS.getDescription());
                result.setCode(DataArchiveErrorCode.SUCCESS.getCode());
                return result;
            } catch (Exception e) {
                result.setCode(BusinessErrorCode.UNKNOWN_ERROR.getCode());
                result.setMsg(BusinessErrorCode.UNKNOWN_ERROR.getDescription());
                return result;
            } 
        }
        private static Date getEndDay() throws Exception {
            //时间范围确定,只导半年之前的数据
            long current = System.currentTimeMillis();//当前时间毫秒数
            long zero = current / (1000 * 3600 * 24) * (1000 * 3600 * 24) - TimeZone.getDefault().getRawOffset();//今天零点零分零秒的毫秒数
            Date endTm = DateUtil.addDays(DateUtil.parseDate(new Timestamp(zero).toString(), "yyyy-MM-dd HH:mm:ss.S"), -180);
            return endTm;
        }
    
    展开全文
  • 数据库归档模式详解

    2014-04-01 18:20:33
    数据库归档模式详解 很详细的介绍,又需要的可以看看
  • 很实用的操作手册,对于oracle不是很熟的人也可以进行oracle数据库归档日志挖掘
  • 达梦数据库归档日志清理

    达梦数据库归档日志清理

    磁盘空间有限的情况下,需要清理或转移归档日志,以满足存储要求,或当归档磁盘过满而导致归档无法正常写入,致使数据库无法提供正常使用。

    1、限制归档空间

    在设置归档路径时,限制单个日志的大小以及归档目录的大小,当日至存储到达上限(此处为10g)时,会自动清除最早日志。

    sql>alter database mount;

    sql>alter database add archivelog 'type=local,dest=D:\dmdbms\data\DAMENG\arch,file_size=100,space_limit=1024';

    sql>alter database open;

    或者修改dmarch.ini

    [ARCHIVE_LOCAL1]
        ARCH_TYPE            = LOCAL        
        ARCH_DEST            = D:\dmdbms\data\DAMENG\arch        
        ARCH_FILE_SIZE       = 100        
        ARCH_SPACE_LIMIT     = 1024    

    2、修改归档路径

    当归档磁盘被占用,满了,或者需要更大的新的存储空间,可以修改归档路径,修改归档空间限制。

    修改归档空间限制

    alter database mount;

    alter database noarchivelog;

    alter database modify archivelog 'type=local,dest=D:\dmdbms\data\DAMENG\arch,file_size=100,space_limit=2048';

    alter database archivelog;

    alter database open;

    select * from v$dm_arch_ini;

    修改归档路径

    alter database mount;

    alter database noarchivelog;

    ALTER DATABASE ADD ARCHIVELOG 'TYPE=LOCAL,DEST=C:\dmdbms\arch,FILE_SIZE=1024,SPACE_LIMIT=4096';

    alter database delete archivelog 'type=local,dest=D:\dmdbms\data\DAMENG\arch,file_size=100,space_limit=2048';

    alter database archivelog;

    alter database open;
    select * from v$dm_arch_ini;

    3、利用系统函数删除指定归档

    SF_ARCHIVELOG_DELETE_BEFORE_TIME----删除指定时间之前的归档文件,该函数返回删除的归档日志文件个数。

    如下命令为删除系统当前时间7天前的归档日志文件:
    SQL>select sf_archivelog_delete_before_time(sysdate - 7);

    SF_ARCHIVELOG_DELETE_BEFORE_LSN----删除指定LSN之前的归档文件,该函数返回删除的归档日志文件个数。归档日志的有效LSN范围可以通过V$ARCH_FILE查看。

    select * from v$arch_file;

    如下命令为删除LSN号为44455之前的归档日志信息。
    SQL>select sf_archivelog_delete_before_lsn(44455);
    如下为执行结果,删除文件个数为2。

    4、备份归档时删除
    归档日志支持联机备份(热备)和脱机备份(冷备),两者都提供备份后删除归档的功能,在备份时指定delete input参数即可备份后删除归档,联机归档备份命令参考如下:
    SQL>backup archivelog all delete input;
    执行完成后,查询V$ARCH_FILE视图无数据,同时操作系统下归档日志文件也被删除。
    或图形化备份归档

     

    5、手动删除归档日志
    在操作系统下手工删除归档目录下的归档文件,归档日志文件删除后不影响DM数据库的正常运行。

     

     

    但无论采用哪种办法删除归档日志,都建议在删除前备份归档日志文件或备份数据库,以便数据库故障时能利用备份和归档日志恢复到最新状态。
     

     

     

    展开全文
  • 到数据归档,很多人的第一个概念就是,不就是无用的数据,换个地方放吗,直接拷贝,删除不就得了,有那么麻烦。我见到过的,听到过的数据库归档的方法有以下几种1 数据通过人工的手段来进行清理,...
  • oracle 数据库归档日志

    千次阅读 2018-09-11 09:23:04
    数据库归档日志 在系统创建归档路径mkdir /u01/arch  修改数据库归档日志的路径参数alter system set log_archive_dest_1='location=/u01/arch' scope=spfile; show parameter arch可查看归档日志文件  修改...
  • 关于数据库归档

    2016-10-13 00:12:00
    关于数据库归档 --查看数据库是否归档模式SQL> select name,log_mode from v$database;NAME LOG_MODE--------- ------------ENMO NOARCHIVELOGSQL> archive log list;Database log mode No Archive ...
  • PVSS-Oracle-数据库归档的组态步骤
  • WINCC OA AND PVSS Oracle 数据库归档的组态步骤说明文档
  • 刚安装的数据库归档模式是默认关闭的: SELECT NAME,ARCH_MODE FROM V$DATABASE; 要变更数据库的归档模式,首先以sysdba用户登陆数据库 [dmdba@localhost tool]$ ./disql disql V8 SQL> conn sysdba 密码: 一、...
  • OARCLE数据库OARCLE数据库归档模式的切换归档模式的切换OARCLE数据库归档OARCLE数据库归档模式的切换模式的切换
  • 整理关于oracle数据库归档模式,修改归档文件的大小、数据库连接数等 开启数据库归档模式: Sqlplus登录,然后 SQL> archive log list;--查看归档模式 SQL> alter system set log_archive_start=true ...
  • 数据库 归档日志 管理方案数据库 归档日志 管理方案
  • 主要介绍了解决Oracle数据库归档日志占满磁盘空间问题,文中给大家提到了常用命令及实现代码,需要的朋友可以参考下
  • 改变数据库归档模式

    2017-10-09 21:16:00
    1.查看归档日志模式(两种方法)  a. archive log list  b. select log_mode from v$database; 2.关闭数据库实例 shutdown immediate ...4.改变数据库归档模式 alter database archivelog; 5...
  • 本文介绍如何启动或关闭数据库归档模式 Oracle 数据库可以运行在2种模式下:归档模式( archivelog )和非归档模式( noarchivelog ) 归档与非归档的区别请参考ORACLE相关文档。 数据库循环使用LOG文件,若数据库处于非...
  • 设置数据库归档模式

    2017-11-15 16:41:00
    设置数据库归档模式: SQL> startup mount ORACLE instance started. Total System Global Area236000356 bytes Fixed Size 451684 bytes Variable Size 20132...
  • 1)修改数据库为 MOUNT 状态。 SQL>ALTER DATABASE MOUNT; 2)配置本地归档。 eg : ALTER DATABASE ADD ARCHIVELOG ‘DEST = /home/dmdba/dmdbms/data/lixora/DAMENG/arch, TYPE = local,FILE_SIZE = 1024, SPACE_...
  • 达梦数据库归档日志 数据库 - 项目 项目1 项目2 项目3 计划任务 完成任务 创建一个表格 一个简单的表格是这么创建的: 项目 Value 电脑 $1600 手机 $12 导管 $1 设定内容居中、居左、居右 使用...
  • 问题现象 元旦在家,突然收到数据库服务器磁盘空间告警的短信,短短半小时磁盘空间增长20多G,...2)查看数据库归档日志,发现日志以每分钟1G的速度在增长 3)首先删掉部分归档日志保证业务恢复正常 4)查询归档日志大小,
  • 数据库归档空间耗尽,数据库归档空间设置不足或短时间内有大批量数据更新操作,会造成此问题。 3、解决方式: 运行如下命令清理归档空间: rman target / --进入rman delete archivelog until time '...
  • 更变数据库归档模式

    2008-03-13 20:28:11
    更变数据库归档日志模式
  • 昨天Oracle数据库无法打开,报错ora-09925:Unable to create audit trail file,经查,报错原因为数据库归档存储已满,无法创建新的归档日志导致数据库无法打开。[oracle@tips ~]$ sqlplus / as sysdbaSQL*Plus: ...
  • 设置数据库归档时间间隔

    千次阅读 2018-05-17 21:49:39
    设置数据库归档时间间隔,比如30分钟归档一次。参考文档 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,515
精华内容 4,606
关键字:

数据库归档