• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Oracle GoldenGate同步服务归档空间维护【推荐】

    ORA-00257: archiver error. Connect internal only, until freed

    查看归档日志序列

    SQL> archive log list;
    
    Automatic archival    Enabled #自动归档
    Archive destination    USE_DB_RECOVERY_FILE_DEST #归档目录为指定的闪回恢复区
    Oldest online log sequence  174  #最旧的在线日志序列
    Next log sequence to archive  176  #下一个日志序列归档
    Current log sequence    176  #当前日志序列

    归档日志默认是保存在oracle系统的闪回恢复区(Flash recovery area)

    查看闪回恢复区参数

    SQL> show parameter db_recovery_file_dest;
    
    NAME          TYPE   VALUE
    -----------------------    --------- ----------------------------
    db_recovery_file_dest     string  /data/oracle/flash_recovery_area
    db_recovery_file_dest_size    big integer  3G

    检查flash recovery area的使用情况

    SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;
    
    FILE_TYPE   PERCENT_SPACE_USED  PERCENT_SPACE_RECLAIMABLE  NUMBER_OF_FILES
    ---------   ------------------  -------------------------  --------------
    CONTROL FILE   0       0       0
    REDO LOG    0       0       0
    ARCHIVED LOG   99.98      0       23
    BACKUP PIECE   0       0       0
    IMAGE COPY    0       0       0
    FLASHBACK LOG   0       0       0
    FOREIGN ARCHIVED LOG 0       0       0

     可以看到ARCHIVE LOG日志已占用99.98%的闪存空间

    方案一:删除过期归档日志,增大闪回恢复区空间大小

    若有需要先行将归档日志备份再删除

    一、删除归档日志文件

    找到归档日志存放目录:/data/oracle/flash_recovery_area/ORCL/archivelog

    删除不需要的归档日志文件

    直接删除归档日志后,必须用RMAN维护控制文件

    二、使用RMAN维护控制文件

    [oracle@dbsrc ~]$ rman target sys/pass
    RMAN> crosscheck backup;     #核对所有备份集
    RMAN> run{
    delete noprompt obsolete;
    crosscheck archivelog all;
    delete noprompt expired archivelog all;
    crosscheck backup;
    delete noprompt expired backup;
    }
    RMAN> exit;

    run{}中的命令被视为一个作业,一个失败整个命令停止执行

    delete obsolete;                    #删除超出保存策略的备份

    crosscheck archivelog all;          #检查无效的归档日志(失效的标记为expired)

    delete expired archivelog all;      #删除expired的归档日志

    delete expired backup;              #删除所有失效的备份集

     delete expired   删除的是那些本来RMAN以为存在但是实际上在磁盘或者磁带上已经被删除了的信息,删除的只是RMAN资料库中的记录;

    delete obsolete  删除旧于备份保留策略定义的备份数据同时也更新RMAN资料库以及控制文件。

    noprompt         指无需确认

    三、增大闪回恢复区空间大小

    SQL> alter system set db_recovery_file_dest_size=8G;

    查看闪回恢复区参数

    SQL> show parameter db_recovery_file_dest;

    四、重新检查flash recovery area的使用情况

    SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;
    
    FILE_TYPE   PERCENT_SPACE_USED  PERCENT_SPACE_RECLAIMABLE  NUMBER_OF_FILES
    ---------   ------------------  -------------------------  --------------
    CONTROL FILE    0       0       0
    REDO LOG     0       0       0
    ARCHIVED LOG    4.5      0       3
    BACKUP PIECE    0       0       0
    IMAGE COPY    0       0       0
    FLASHBACK LOG    0       0       0
    FOREIGN ARCHIVED LOG  0       0       0

    五、添加定时任务,清理归档日志存储空间

    1、新建脚本文件存放文件夹

    [root@dbsrc ~]# mkdir -p /backup/oracledata

    2、编辑脚本内容

    [root@dbsrc ~]# vim /backup/oracledata/oracle_archivelog_clean.sh
    
    #脚本内容 (/backup/oracledata/oracle_archivelog_clean.sh)删除三天前的所有归档文件
    find /data/oracle/flash_recovery_area/ORCL/archivelog/ -mtime +3 -name "201*" -exec rm -rf {} \;

    3、设置脚本文件权限

    [root@dbsrc ~]# chmod 777 /backup/oracledata/oracle_archivelog_clean.sh

    4、添加计划任务(系统调度任务和用户调度任务添加其一)

    系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下crontab文件,这个就是系统任务调度的配置文件。

    用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用crontab工具来定制自己的计划任务。所有用户定义的crontab文件都被保存在 /var/spool/cron目录中。其文件名与用户名一致。

    1)、系统任务调度

    编辑系统任务计划

    [root@dbsrc ~]# vim /etc/crontab
    
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    #SHELL 变量指定了系统要使用哪个shell,这里是bash
    #PATH 变量指定了系统执行命令的路径
    #MAILTO 变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户
    
    # For details see man 4 crontabs
    
    # Example of job definition:
    # .---------------- minute (0 - 59)
    # | .------------- hour (0 - 23)
    # | | .---------- day of month (1 - 31)
    # | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
    # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
    # | | | | |
    # * * * * * user-name command to be executed
    
    #(*):代表所有 (,):多个值间隔 (-):范围连接符
    #(/)指定时间间隔频率,例如(*/10)如果在minute字段,表示每十分钟执行一次
    # 以管理员身份每天凌晨05:00,执行相应目录下的脚本任务
    0 5 * * * root /backup/oracledata/oracle_archivelog_clean.sh

    2)、用户任务调度

    编辑用户任务计划

    [root@dbsrc ~]# crontab -e
    
    #以管理员身份每天凌晨05:00,执行相应目录下的脚本
    0 5 * * * /backup/oracledata/oracle_archivelog_clean.sh

    无需再添加执行用户,否则任务计划无法执行,将有以下报错

    [root@dbsrc ~]# cat /var/spool/mail/root
    
    From root@dbsrc.localdomain Tue Aug 7 05:00:01 2018
    Return-Path: root@dbsrc.localdomain>
    X-Original-To: root
    Delivered-To: root@dbsrc.localdomain
    Received: by dbsrc.localdomain (Postfix, from userid 0)
      id 9662C2827; Tue, 7 Aug 2018 05:00:01 +0800 (CST)
    From: "(Cron Daemon)" root@dbsrc.localdomain>
    To: root@dbsrc.localdomain
    Subject: Cron root@dbsrc> root /backup/oracledata/oracle_archivelog_clean.sh
    Content-Type: text/plain; charset=UTF-8
    Auto-Submitted: auto-generated
    Precedence: bulk
    X-Cron-Env: XDG_SESSION_ID=6910>
    X-Cron-Env: XDG_RUNTIME_DIR=/run/user/0>
    X-Cron-Env: LANG=en_US.UTF-8>
    X-Cron-Env: SHELL=/bin/sh>
    X-Cron-Env: HOME=/root>
    X-Cron-Env: PATH=/usr/bin:/bin>
    X-Cron-Env: LOGNAME=root>
    X-Cron-Env: USER=root>
    Message-Id: 20180806210001.9662C2827@dbsrc.localdomain>
    Date: Tue, 7 Aug 2018 05:00:01 +0800 (CST)
    
    /bin/sh: root: command not found

    查看用户计划

    [root@dbsrc ~]# crontab -l
    
    0 5 * * * /backup/oracledata/oracle_archivelog_clean.sh

    5、查看cron服务是否在设定时间调用

    [root@dbsrc ~]# cat /var/log/cron
    
    Aug 7 05:00:01 dbsrc CROND[12655]: (root) CMD (root /backup/oracledata/oracle_archivelog_clean.sh)
    Aug 7 05:01:01 dbsrc CROND[12795]: (root) CMD (run-parts /etc/cron.hourly)
    Aug 7 05:01:01 dbsrc run-parts(/etc/cron.hourly)[12795]: starting 0anacron
    Aug 7 05:01:01 dbsrc run-parts(/etc/cron.hourly)[12804]: finished 0anacron

    6、查看shell脚本是否报错(cat /var/spool/mail/用户名)

    [root@dbsrc ~]# cat /var/spool/mail/root
    From root@dbsrc.localdomain Tue Aug 7 05:00:01 2018
    Return-Path: root@dbsrc.localdomain>
    X-Original-To: root
    Delivered-To: root@dbsrc.localdomain
    Received: by dbsrc.localdomain (Postfix, from userid 0)
      id 9662C2827; Tue, 7 Aug 2018 05:00:01 +0800 (CST)
    From: "(Cron Daemon)" root@dbsrc.localdomain>
    To: root@dbsrc.localdomain
    Subject: Cron root@dbsrc> /backup/oracledata/oracle_archivelog_clean.sh
    Content-Type: text/plain; charset=UTF-8
    Auto-Submitted: auto-generated
    Precedence: bulk
    X-Cron-Env: XDG_SESSION_ID=6910>
    X-Cron-Env: XDG_RUNTIME_DIR=/run/user/0>
    X-Cron-Env: LANG=en_US.UTF-8>
    X-Cron-Env: SHELL=/bin/sh>
    X-Cron-Env: HOME=/root>
    X-Cron-Env: PATH=/usr/bin:/bin>
    X-Cron-Env: LOGNAME=root>
    X-Cron-Env: USER=root>
    Message-Id: 20180806210001.9662C2827@dbsrc.localdomain>
    Date: Tue, 7 Aug 2018 05:00:01 +0800 (CST)
    find: ‘/data/oracle/flash_recovery_area/ORCL/archivelog/2018_08_04': No such file or directory

     7、重启crond服务

    [root@dbsrc ~]# service crond restart

    或者

    [root@dbsrc ~]# /etc/init.d/crond restar

    注释

    service crond start //启动服务
    service crond stop //关闭服务
    service crond restart //重启服务
    service crond reload //重新载入配置
    service crond status //查看服务状态
    
    crontab [-u user] [ -e | -l | -r ]
    -e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
    -l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
    -r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
    -i:在删除用户的crontab文件时给确认提示。
    
    #提示You have new mail in /var/spool/mail/root解决
    [root@dbsrc ~]# echo "unset MAILCHECK">> /etc/profile;
    [root@dbsrc ~]# source /etc/profile 

    方案二:修改归档目录位置

    一、创建新的归档文件存放目录

    [root@dbsrc ~]# mkdir /data/oracle/archive_log

    二、设置目录拥有者和权限

    [root@dbsrc ~]# chown -R oracle:oinstall /data/oracle/archive_log
    [root@dbsrc ~]# chmod –R 775 /data/oracle/archive_log

    三、禁止往闪回恢复区放归档日志

    SQL> alter system set db_recovery_file_dest='';

    四、设置归档日志存放目录

    SQL> alter system set log_archive_dest='/data/oracle/archive_log';

    五、查看归档日志序列

    SQL> archive log list;
    Automatic archival    Enabled
    Archive destination    /data/oracle/archive_log
    Oldest online log sequence  174
    Next log sequence to archive  176
    Current log sequence    176

    总结

    以上所述是小编给大家介绍的Oracle GoldenGate同步服务归档空间维护,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

    您可能感兴趣的文章:
    • 基于django2.2连oracle11g解决版本冲突的问题
    • django连接oracle时setting 配置方法
    • Go语言连接Oracle数据库的方法
    上一篇:Oracle 12c 新特性之多线程数据库操作
    下一篇:解决Oracle数据库归档日志占满磁盘空间问题
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Oracle GoldenGate同步服务归档空间维护【推荐】 Oracle,GoldenGate,同步,服务,