通過shell指令碼新增備庫日誌
今天下午的時候,準備順手寫一個簡單的指令碼,但是發現很多事情較真起來真是寸步難行。在寫指令碼的過程中碰到了太多的問題,很多時候感覺像要實現的功能更通用,就得做更多的檢查,更多的校驗也就意味著有更多的預先條件,這些條件裡面有些是規範和建議,有些是按照已有的配置情況,儘管如此,自己感覺還是缺少了太多的檢查。
先來說說今天嘗試的簡單指令碼,就是給主庫新增standby logfile,這個需求聽起來非常簡單,都甚至在我的半自動化指令碼中隱去了,但是把這個需求要落到紙面上來,簡直了。
首先這個需求會涉及到下面的幾個資料字典。
V$LOGFILE裡是最全的資訊,可能有online logfile或者standby logfile,V$LOG裡面是線上日誌的資訊,V$STANDBY_LOG裡面是備庫日誌的資訊。
要新增備庫日誌,有很多的場景,比如已有了備庫日誌,那樣的話是在已有的基礎上新增,如果沒有則需要按照建議的樹目來新增,而新增的備庫日誌組成員是1個還是2個,這個不同的系統可能會差別很大,可以在v$logfile裡面檢視。
而如果日誌組參差不齊,同一個資料庫有的日誌組有1個成員,有的有2個成員,這種情況如果判斷,難度又得加大,而這個部分我是直接跳過了,因為這個得按照規範來,而不是指令碼來滿足這種特殊的場景。所以就如同我在開始所說的那樣,很多預備條件是規範和建議,有些需要參考已有的配置情況。
當然在實現的過程中,因為有一些判斷條件,所以自己就嘗試使用PL/SQL來實現,同時又需要包裝在shell裡面,感覺難度不是大了一點。在實現的時候最終還是發現理論上不可行,
因為需要新增多個日誌組,而且要根據日誌組成員的情況來動態生成SQL,這種二次動態的情況轉換過來也就是不滿足正規化,每一列都是不可分割的原子資料項,所以最後呼叫的時候有些問題,轉而使用了shell的方式,當然過程中也碰到了很多問題。
首先是得到日誌檔案的下標,當前最大的日誌組號和需要新增的日誌組數
然後嘗試了下面的來呼叫shell和PL/SQL
這樣會丟擲錯誤。
ERROR at line 1:
ORA-01422: exact fetch returns more than requested number of rows
ORA-06512: at line 6
一種改進的思路就是下面的方式,分而治之,使用函式來迴圈迭代。
這種方式就會生成遞增的日誌建立語句,當然思路完成了,還得細化。
先來說說今天嘗試的簡單指令碼,就是給主庫新增standby logfile,這個需求聽起來非常簡單,都甚至在我的半自動化指令碼中隱去了,但是把這個需求要落到紙面上來,簡直了。
首先這個需求會涉及到下面的幾個資料字典。
V$LOGFILE裡是最全的資訊,可能有online logfile或者standby logfile,V$LOG裡面是線上日誌的資訊,V$STANDBY_LOG裡面是備庫日誌的資訊。
要新增備庫日誌,有很多的場景,比如已有了備庫日誌,那樣的話是在已有的基礎上新增,如果沒有則需要按照建議的樹目來新增,而新增的備庫日誌組成員是1個還是2個,這個不同的系統可能會差別很大,可以在v$logfile裡面檢視。
而如果日誌組參差不齊,同一個資料庫有的日誌組有1個成員,有的有2個成員,這種情況如果判斷,難度又得加大,而這個部分我是直接跳過了,因為這個得按照規範來,而不是指令碼來滿足這種特殊的場景。所以就如同我在開始所說的那樣,很多預備條件是規範和建議,有些需要參考已有的配置情況。
當然在實現的過程中,因為有一些判斷條件,所以自己就嘗試使用PL/SQL來實現,同時又需要包裝在shell裡面,感覺難度不是大了一點。在實現的時候最終還是發現理論上不可行,
因為需要新增多個日誌組,而且要根據日誌組成員的情況來動態生成SQL,這種二次動態的情況轉換過來也就是不滿足正規化,每一列都是不可分割的原子資料項,所以最後呼叫的時候有些問題,轉而使用了shell的方式,當然過程中也碰到了很多問題。
首先是得到日誌檔案的下標,當前最大的日誌組號和需要新增的日誌組數
然後嘗試了下面的來呼叫shell和PL/SQL
這樣會丟擲錯誤。
ERROR at line 1:
ORA-01422: exact fetch returns more than requested number of rows
ORA-06512: at line 6
一種改進的思路就是下面的方式,分而治之,使用函式來迴圈迭代。
這種方式就會生成遞增的日誌建立語句,當然思路完成了,還得細化。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-2123641/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 通過shell指令碼監控日誌切換頻率指令碼
- 通過shell指令碼 批量新增使用者指令碼
- 【shell】日誌切割指令碼指令碼
- 通過shell指令碼批量操作mysql資料庫指令碼MySql資料庫
- 通過shell指令碼分析足彩指令碼
- 透過shell指令碼監控日誌切換頻率指令碼
- shell指令碼:自動記憶體監控及日誌備份指令碼記憶體
- 通過shell定製ash指令碼指令碼
- [ Shell ] 通過 Shell 指令碼匯出 CDL 網表指令碼
- 通過shell指令碼得到資料庫的基本資訊(一)指令碼資料庫
- 通過shell指令碼防止埠掃描指令碼
- 通過shell指令碼檢視鎖資訊指令碼
- 通過shell指令碼監控oracle session指令碼OracleSession
- RMAN備份歸檔日誌指令碼指令碼
- 案例:通過shell指令碼實現mysql資料備份與清理指令碼MySql
- [ Shell ] 通過 Shell 指令碼匯出 GDSII/OASIS 檔案指令碼
- 通過shell得到資料庫中許可權的指令碼資料庫指令碼
- 使用shell指令碼對Nginx日誌進行切分指令碼Nginx
- 【shell 指令碼】刪除/var/log 下的日誌指令碼
- 通過shell指令碼來統計段大小指令碼
- 通過shell指令碼檢視procedure的資訊指令碼
- 通過shell指令碼檢視package的資訊指令碼Package
- Oracle之備份和清理監聽日誌、告警日誌指令碼Oracle指令碼
- MySQL資料庫備份的shell指令碼MySql資料庫指令碼
- 通過shell指令碼檢測MySQL服務資訊指令碼MySql
- 如何通過簡單的shell指令碼操作MongoDB指令碼MongoDB
- 通過shell指令碼快速定位active session問題指令碼Session
- 通過shell指令碼得到資料字典的資訊指令碼
- 通過shell指令碼同時監控多個資料庫負載指令碼資料庫負載
- 通過shell指令碼檢視資料庫表空間使用情況指令碼資料庫
- dg刪除備庫已經應用的歸檔日誌指令碼指令碼
- Linux/Unix shell 指令碼清除歸檔日誌檔案Linux指令碼
- Liunx備份mysql資料庫的shell指令碼MySql資料庫指令碼
- Xcode新增Shell指令碼打包靜態庫和動態庫XCode指令碼
- SQL Server 清除資料庫日誌指令碼SQLServer資料庫指令碼
- 通過shell指令碼監控sql執行頻率指令碼SQL
- 通過shell指令碼定位效能sql和生成報告指令碼SQL
- Rman備份的shell指令碼指令碼