通過shell分析表依賴的層級關係
其中客戶可以有多個使用者或者賬戶,subscriber表和account表中就存在外來鍵customer_id指向了customer表。
這種情況下表的依賴關係就如下所示:
customer
subscriber
account
如果表中的層級關係更為複雜,如果能夠得到一個很清晰的依賴關係表。在做一些重要的操作時就能運籌帷幄。避免很多不必要的麻煩。
今天開發的人員私信給我,想讓我幫忙在測試環境執行一些指令碼,本來這種工作都是需要按照流程的,我們聊了下,他說現在手頭有10個左右的指令碼,都是些dml相關的操作,每個指令碼會對應修改一個表的資料,但是每次執行的時候都會報外來鍵不存在的錯誤,他想讓我來幫忙看看,是哪些表存在依賴關係,這個問題換我來,我也得知道指令碼的依賴關係,即涉及到的表的依賴關係,我說我來幫你分析這個關係,還是按照流程來執行你的指令碼吧,他半信半疑,我就執行了下面的指令碼,得到了一個依賴關係列表。
使用shell指令碼分析表依賴的層級關係指令碼如下:
sqlplus -s $DB_CONN_STR@$SH_DB_SID <
set echo off
set feedback off
create table table_depency_rel as
(
select
p.table_name parent_table_name ,
p.owner p_owner,
c.table_name child_table_name ,
c.owner c_owner
from user_constraints p, user_constraints c
where p.constraint_type IN ('P','U') AND
c.constraint_type = 'R' AND
p.constraint_name = c.r_constraint_name
group by p.table_name,p.owner, c.table_name, c.owner
)
;
--alter table table_depency_rel modify(p_owner null);
alter table table_depency_rel modify(parent_table_name null);
insert into table_depency_rel
(
select null,null,parent_table_name,p_owner from table_depency_rel
where parent_table_name not in (select child_table_name from table_depency_rel group by child_table_name)group by parent_table_name,p_owner
);
set echo on
set feedback on
col table_node format a50
col level_code format a5
select decode(level,1,'
connect by prior t.child_table_name =t.parent_table_name
start with t.child_table_name in(select child_table_name from table_depency_rel where parent_table_name is null group by child_table_name)
--order by parent_table_name desc;
set feedback off
set echo off
drop table table_depency_rel;
EOF
exit
自己在反覆模擬一些場景之後總結了如上的指令碼。
我們來通過如下的方式執行指令碼,檢視system下的表依賴關係。
ksh showdepency.sh
----- -------------------------------------------------- ......
2- -----||DE_CRI_ALLOWED_OPS(2)
2- -----||DE_CRI_ITEMS(2)
3- --------||DE_CRI_CONNECTIONS(3)
3- --------||DE_CRI_POOL(3)
4- -----------||DE_CONDITIONS(4)
5- --------------||DE_DP_COMPONENTS(5)
6- -----------------||DE_CONTRIBUTE_LIST(6)
6- -----------------||DE_EXTRA_DPC_FIELDS(6)
6- -----------------||DE_TIERS(6)
7- --------------------||DE_STEPS(7)
可以很清晰的看到顯示的層級關係,有1,2,3,4 其中1是根節點,2,3,4是依賴表,4依賴3,3依賴2,依此類推。執行指令碼的時候是從第1級開始,逐次類推。可以看到有些表的依賴都到第7級了,這些如果人工來一個一個稽核,確實是很頭疼的工作。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-1382362/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 透過shell分析表依賴的層級關係
- 分析資料庫的依賴關係(轉)資料庫
- Maven 依賴關係Maven
- 部門層級關係表
- 關聯關係與依賴關係的區別
- build task依賴關係UI
- gcc 標頭檔案依賴關係 分析工具GC
- 查詢依賴關係的objects 是否有被DDL過Object
- ORACLE包和過程依賴關係測試(轉)Oracle
- OSGI中的service依賴關係管理
- Spring框架模組依賴關係Spring框架
- mysql主外來鍵依賴關係MySql
- depmod解決模組依賴關係
- 【物件導向依賴關係概念總結】物件導向程式設計的五種依賴關係物件程式設計
- Android專案的依賴關係解析Android
- 【python】【安裝包依賴關係】Python
- 解決rpm包依賴關係
- Oracle 查詢鎖之間的依賴關係Oracle
- Elasticsearch依賴與Spring對應關係ElasticsearchSpring
- 使用 .NET Core 實現依賴關係注入
- 通過遞迴實現,單表父子關係資料 或者上下級關係資料的組合遞迴
- maven中scope依賴範圍與classpath的關係Maven
- .NET Core新增專案之間的依賴關係
- 使用yum 安裝依賴關係較多的包
- Gradle的Task(2)任務間的依賴關係Gradle
- 透過構建具有依賴關係的後端框架來學習 Nodejs後端框架NodeJS
- Maven中如何管理多模組專案的依賴關係Maven
- 如何管理前端專案中的複雜依賴關係前端
- Makefile 自動生成標頭檔案的依賴關係
- 物件導向程式設計程式碼詳解(依賴關係,關聯關係,組合關係)物件程式設計
- Android 通過 APT 解耦模組依賴AndroidAPT解耦
- spring cloud alibaba 元件版本關係 以及 畢業版本依賴關係SpringCloud元件
- 小程式無限層級路由方案(無框架依賴)路由框架
- 通過Gradle來下載依賴的jar包GradleJAR
- UML關係(泛化,實現,依賴,關聯(聚合,組合))
- 什麼是專案管理中的任務依賴關係專案管理
- Java中各程式碼層級的關係Java
- 通過shell指令碼分析足彩指令碼