問題描述:本來還在愉快的工作中,突然同時通知客戶主資料庫無法登陸了,心中莫名的一緊,趕緊登陸資料庫查看,發現只有sys賬號可以正常登錄,其他賬號登錄均提示ORA00257錯誤。趕緊百度一下,看大致的意思為歸檔日誌寫滿了、閃回日誌寫滿了。根據網上提供的方法進行查看:select * from v$re... ...
問題描述:本來還在愉快的工作中,突然同時通知客戶主資料庫無法登陸了,心中莫名的一緊,趕緊登陸資料庫查看,發現只有sys賬號可以正常登錄,其他賬號登錄均提示ORA00257錯誤。
趕緊百度一下,看大致的意思為歸檔日誌寫滿了、閃回日誌寫滿了。根據網上提供的方法進行查看:
select * from v$recovery_file_dest; select sum(percent_space_used)*3/100 from v$flash_recovery_area_usage; select * from v$flash_recovery_area_usage; select * from v$version;
發現根本沒有信息返回,應該是未開啟閃回日誌,正好想起前一階段資料庫才開啟了歸檔日誌,因此懷疑是歸檔日誌寫滿的問題。歸檔日誌信息可以在v$archived_log表中查詢到。
解決方法:
因為時間比較緊急,沒空給我進行慢慢的排查解決了(主要是我太菜),直接求助公司大神吧。具體解決步驟如下:
1、遠程登錄資料庫任意節點(現場為rac集群),切換到oracle賬號通過lsnrctl status命令查看監聽到的服務。
在執行lsnrctl status命令時候,如果提示命令未找到,很可能是環境變數的問題,通過source ~/.bash_profile命令使之生效即可。
2、到grid用戶下,分別執行以下命令,進入asmcmd命令行。
su – grid
export ORACLE_SID=+ASM1
asmcmd
這裡需要註意一下,su – grid 而不是su grid之前執行的時候就想當然的弄錯了,結果執行命令的時候一直報錯。
其簡單區別如下:
su - grid 要給grid 重新配置環境變數
su grid 使用切換到grid 用戶之前的那個用戶的環境變數。
執行lsdg命令查看磁碟組使用情況:
可以查看磁碟組總量,以及可使用量(我這裡是刪除部分日誌後的截圖),查看其可用空間是否滿足。
3、如果需要刪除歸檔日誌,需要定位到歸檔日誌目錄,查看歸檔日誌情況。
cd +DATADG/orcl/archivelog
ls
4、根據自己需要,刪除執行的歸檔日誌即可。例如,刪除2020年2月份的歸檔日誌可以使用rm -rf 2020_02*命令。
優化建議:
對於出現這種情況,歸根結底是磁碟無法放下過多的歸檔日誌,可以考慮:
1、掛接單獨的磁碟組存儲歸檔日誌,並同步進行備份(推薦)。
2、對當前磁碟組進行擴容。
3、定期進行人工檢查,刪除部分歸檔日誌以保證磁碟空間保持有剩餘狀態,或者設置自動刪除較早的歸檔日誌。
後續補充:通過下麵語句可以查看磁碟歸檔日誌的大小占用情況。
SELECT TRUNC(FIRST_TIME) "日期", TRUNC(SUM(BLOCKS*BLOCK_SIZE)/1024/1024/1024,2) "大小(GB/DAY)" FROM V$ARCHIVED_LOG GROUP BY TRUNC(FIRST_TIME) ORDER BY 1 DESC