欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-02-20 19:03:36
ora-00257: archiver error. connect internal only, until freed 查看归档日志序列 sql> a...

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同步服务归档空间维护,希望对大家有所帮助