巧用shell生成資料庫檢查指令碼
在生產環境中需要部署大量的資料變更。對於新增的表,需要注意許可權和同義詞等。但是手動去檢查這些變更是否生效就很麻煩。而且也不易維護,比如寫好了一個指令碼,可能在過一段時間,有一些緊急變更,需要把這些變更加進來,可能就忘了更新檢查指令碼。
考慮到檢查的效能,不想查詢資料,只需要保證能夠正常訪問表即可。所以寫了如下的sql。目標就是透過shell來生成這樣的sql指令碼。
比如對於表TEST,檢查是否可以訪問,如果可以訪問,就顯示錶TEST is accessible...
SELECT decode (count(*),0,rpad(' TEST' ,30,' ')),'is accessible...' comm FROM TEST WHERE ROWNUM<1;
可以採用如下的shell來生成對應的sql指令碼。其中需要考慮單引號在awk中的使用。需要轉義為 " '\'' "才可以。然後透過sqlplus來直接呼叫即可。
grep -i "CREATE TABLE" *.*|grep -v "|sort|uniq|awk"|sort|uniq|awk -F"CREATE TABLE" '{print $2}'|uniq|awk '{print "SELECT decode(count(*) ,0 ,rpad('\'' "$1" '\'',30,'\'' '\'')) tab_name,'\'' is accessible... '\'' comm FROM "$1" WHERE ROWNUM<1;"}' >sanity_check.sql
sqlplus -s $1 << EOF
set pages 0
@sanity_check.sql
!rm sanity_check.sql
EOF
來看看效果。
> ksh sanity_check.sh n1/n1
TEST9_EXT_BILL_STATEMENT is accessible...
TEST9_EXT_CHARGE_INFO is accessible...
TEST9_ROOT_CHILD_CL_ACTION is accessible...
TEST9_ROOT_CHILD_NTWK_ACT is accessible...
TEST9_TMP_BAN_AUTO_FIXPATH is accessible...
TEST99_MNP_AGR_PARAM is accessible...
TEST99_MNP_AGR_SERVICES is accessible...
TEST99_MNP_SUB_INFO is accessible...
TEST9_ADDRESS_DATA is accessible...
TEST9_ADDRESS_HIS is accessible...
TEST9_ADDRESS_NAME_LINK is accessible...
TEST9_ADR_NM_LINK_HIS is accessible...
TEST9_TEST9_RULE_BASE is accessible...
TEST9_NAME_DATA is accessible...
TEST9_NAME_HIS is accessible...
TEST9_PREPAID_RES_HIS is accessible...
TEST9_PREPAID_RESOURCE is accessible...
TEST9_PREPAID_SUB_HIS is accessible...
考慮到檢查的效能,不想查詢資料,只需要保證能夠正常訪問表即可。所以寫了如下的sql。目標就是透過shell來生成這樣的sql指令碼。
比如對於表TEST,檢查是否可以訪問,如果可以訪問,就顯示錶TEST is accessible...
SELECT decode (count(*),0,rpad(' TEST' ,30,' ')),'is accessible...' comm FROM TEST WHERE ROWNUM<1;
可以採用如下的shell來生成對應的sql指令碼。其中需要考慮單引號在awk中的使用。需要轉義為 " '\'' "才可以。然後透過sqlplus來直接呼叫即可。
grep -i "CREATE TABLE" *.*|grep -v "|sort|uniq|awk"|sort|uniq|awk -F"CREATE TABLE" '{print $2}'|uniq|awk '{print "SELECT decode(count(*) ,0 ,rpad('\'' "$1" '\'',30,'\'' '\'')) tab_name,'\'' is accessible... '\'' comm FROM "$1" WHERE ROWNUM<1;"}' >sanity_check.sql
sqlplus -s $1 << EOF
set pages 0
@sanity_check.sql
!rm sanity_check.sql
EOF
來看看效果。
> ksh sanity_check.sh n1/n1
TEST9_EXT_BILL_STATEMENT is accessible...
TEST9_EXT_CHARGE_INFO is accessible...
TEST9_ROOT_CHILD_CL_ACTION is accessible...
TEST9_ROOT_CHILD_NTWK_ACT is accessible...
TEST9_TMP_BAN_AUTO_FIXPATH is accessible...
TEST99_MNP_AGR_PARAM is accessible...
TEST99_MNP_AGR_SERVICES is accessible...
TEST99_MNP_SUB_INFO is accessible...
TEST9_ADDRESS_DATA is accessible...
TEST9_ADDRESS_HIS is accessible...
TEST9_ADDRESS_NAME_LINK is accessible...
TEST9_ADR_NM_LINK_HIS is accessible...
TEST9_TEST9_RULE_BASE is accessible...
TEST9_NAME_DATA is accessible...
TEST9_NAME_HIS is accessible...
TEST9_PREPAID_RES_HIS is accessible...
TEST9_PREPAID_RESOURCE is accessible...
TEST9_PREPAID_SUB_HIS is accessible...
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30633755/viewspace-2127758/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 巧用shell指令碼生成快捷指令碼指令碼
- 巧用shell指令碼分析資料庫使用者指令碼資料庫
- 透過shell指令碼生成查詢表資料的sql指令碼SQL
- 通過shell指令碼生成查詢表資料的sql指令碼SQL
- 資料庫的常規檢查指令碼資料庫指令碼
- 資料庫的檢查步驟指令碼資料庫指令碼
- oracle 資料庫效能健康檢查指令碼Oracle資料庫指令碼
- (轉)oracle 資料庫效能健康檢查指令碼Oracle資料庫指令碼
- 資料庫健康檢查 sqlplus 指令碼資料庫SQL指令碼
- 使用shell指令碼檢視資料庫負載情況指令碼資料庫負載
- [Shell] Shell 生成 HTML指令碼HTML指令碼
- 一個簡單資料庫健康檢查指令碼資料庫指令碼
- oracle 資料庫效能健康檢查指令碼[轉帖]Oracle資料庫指令碼
- [20170515]檢查資料庫scn指令碼.txt資料庫指令碼
- oracle 資料庫中壞塊概念和檢查指令碼Oracle資料庫指令碼
- 使用shell指令碼檢測資料庫連線訪問情況指令碼資料庫
- mssql生成資料庫字典指令碼-MarkDownSQL資料庫指令碼
- MySQL資料庫備份的shell指令碼MySql資料庫指令碼
- 建立管理MySQL資料庫的shell指令碼MySql資料庫指令碼
- 通過shell指令碼檢視資料庫表空間使用情況指令碼資料庫
- 透過shell指令碼檢視資料庫表空間使用情況指令碼資料庫
- check_postgres指令碼集檢查資料庫健康情況指令碼資料庫
- 巧用shell指令碼統計磁碟使用情況指令碼
- 使用shell批量生成資料整合式遷移的指令碼指令碼
- 使用shell指令碼檢視資料庫負載情況(第二篇)指令碼資料庫負載
- 通過shell指令碼批量操作mysql資料庫指令碼MySql資料庫
- Liunx備份mysql資料庫的shell指令碼MySql資料庫指令碼
- 簡單資料庫及表建立shell指令碼資料庫指令碼
- 監控Oracle資料庫的常用shell指令碼Oracle資料庫指令碼
- SHELL指令碼檢查Oracle DG備庫是否已經應用歸檔指令碼Oracle
- 通過shell指令碼生成資料統計資訊的報表指令碼
- 透過shell指令碼生成資料統計資訊的報表指令碼
- 巧用Oracle Discoverer中的資料字典檢查joinOracle
- 檢查資料庫資料欄位命名規範和合法性的指令碼資料庫指令碼
- 資料庫環境中的shell指令碼應用資料庫指令碼
- [轉]監控Oracle資料庫的常用shell指令碼Oracle資料庫指令碼
- 監控Oracle資料庫的常用shell指令碼(轉)Oracle資料庫指令碼
- 一個命令,生成資料庫物件的指令碼資料庫物件指令碼