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_areadb_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 0REDO LOG 0 0 0ARCHIVED LOG 99.98 0 23BACKUP PIECE 0 0 0IMAGE COPY 0 0 0FLASHBACK LOG 0 0 0FOREIGN ARCHIVED LOG 0 0 0
可以看到ARCHIVE LOG日志已占用99.98%的閃存空間
方案一:刪除過期歸檔日志,增大閃回恢復區空間大小
若有需要先行將歸檔日志備份再刪除
一、刪除歸檔日志文件
找到歸檔日志存放目錄:/data/oracle/flash_recovery_area/ORCL/archivelog
刪除不需要的歸檔日志文件
直接刪除歸檔日志后,必須用RMAN維護控制文件
二、使用RMAN維護控制文件
[oracle@dbsrc ~]$ rman target sys/passRMAN> 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 0REDO LOG 0 0 0ARCHIVED LOG 4.5 0 3BACKUP PIECE 0 0 0IMAGE COPY 0 0 0FLASHBACK LOG 0 0 0FOREIGN 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/crontabSHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=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/rootFrom [email protected] Tue Aug 7 05:00:01 2018Return-Path: <[email protected]>X-Original-To: rootDelivered-To: [email protected]: by dbsrc.localdomain (Postfix, from userid 0) id 9662C2827; Tue, 7 Aug 2018 05:00:01 +0800 (CST)From: "(Cron Daemon)" <[email protected]>To: [email protected]: Cron <root@dbsrc> root /backup/oracledata/oracle_archivelog_clean.shContent-Type: text/plain; charset=UTF-8Auto-Submitted: auto-generatedPrecedence: bulkX-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: <[email protected]>Date: Tue, 7 Aug 2018 05:00:01 +0800 (CST)/bin/sh: root: command not found
查看用戶計劃
[root@dbsrc ~]# crontab -l0 5 * * * /backup/oracledata/oracle_archivelog_clean.sh
5、查看cron服務是否在設定時間調用
[root@dbsrc ~]# cat /var/log/cronAug 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 0anacronAug 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/rootFrom [email protected] Tue Aug 7 05:00:01 2018Return-Path: <[email protected]>X-Original-To: rootDelivered-To: [email protected]: by dbsrc.localdomain (Postfix, from userid 0) id 9662C2827; Tue, 7 Aug 2018 05:00:01 +0800 (CST)From: "(Cron Daemon)" <[email protected]>To: [email protected]: Cron <root@dbsrc> /backup/oracledata/oracle_archivelog_clean.shContent-Type: text/plain; charset=UTF-8Auto-Submitted: auto-generatedPrecedence: bulkX-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: <[email protected]>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 EnabledArchive destination /data/oracle/archive_logOldest online log sequence 174Next log sequence to archive 176Current log sequence 176
總結
以上所述是小編給大家介紹的Oracle GoldenGate同步服務歸檔空間維護,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!