Oracle GoldenGate同步服務歸檔空間維護

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

查看歸檔日誌序列vim

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)緩存

查看閃回恢復區參數bash

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的使用狀況oracle

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%的閃存空間dom

方案一:刪除過時歸檔日誌,增大閃回恢復區空間大小

如有須要先行將歸檔日誌備份再刪除工具

1、刪除歸檔日誌文件

找到歸檔日誌存放目錄:/data/oracle/flash_recovery_area/ORCL/archivelogurl

刪除不須要的歸檔日誌文件spa

直接刪除歸檔日誌後,必須用RMAN維護控制文件rest

2、使用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         指無需確認

3、增大閃回恢復區空間大小

SQL> alter system set db_recovery_file_dest_size=8G;

查看閃回恢復區參數

SQL> show parameter db_recovery_file_dest;

4、從新檢查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

5、添加定時任務,清理歸檔日誌存儲空間

一、新建腳本文件存放文件夾

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

二、編輯腳本內容

[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 {} \;

三、設置腳本文件權限

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

四、添加計劃任務(系統調度任務和用戶調度任務添加其一)

系統任務調度:系統週期性所要執行的工做,好比寫緩存數據到硬盤、日誌清理等。在/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

五、查看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

六、查看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

 七、重啓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

 

方案二:修改歸檔目錄位置

1、建立新的歸檔文件存放目錄

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

2、設置目錄擁有者和權限

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

3、禁止往閃回恢復區放歸檔日誌

SQL> alter system set db_recovery_file_dest='';

4、設置歸檔日誌存放目錄

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

5、查看歸檔日誌序列

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
相關文章
相關標籤/搜索