前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >通过shell分析表依赖的层级关系(r3笔记第97天)

通过shell分析表依赖的层级关系(r3笔记第97天)

作者头像
jeanron100
发布2018-03-15 13:53:32
8060
发布2018-03-15 13:53:32
举报
文章被收录于专栏:杨建荣的学习笔记

在平时的工作环境中,总会有一些表会存在依赖关系,比如我们有三张表customer,用户表subscriber,账户表account 其中客户可以有多个用户或者账户,subscriber表和account表中就存在外键customer_id指向了customer表。 这种情况下表的依赖关系就如下所示: customer subscriber account 如果表中的层级关系更为复杂,如果能够得到一个很清晰的依赖关系表。在做一些重要的操作时就能运筹帷幄。避免很多不必要的麻烦。 使用shell脚本分析表依赖的层级关系脚本如下:

代码语言:javascript
复制
sqlplus -s $DB_CONN_STR@$SH_DB_SID <<EOF
set pages 1000
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,'<--'||level,level)||'-' level_code ,  lpad('-',level*3-1,'--')||'||'||t.child_table_name||'('||level||')' table_node  from table_depency_rel t
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下的表依赖关系。

代码语言:javascript
复制
ksh  showdepency.sh

LEVEL TABLE_NODE
-----  --------------------------------------------------
<--1-  --||AQ$_INTERNET_AGENTS(1)
2-     -----||AQ$_INTERNET_AGENT_PRIVS(2)
<--1- --||DEF$_DESTINATION(1)
2-     -----||DEF$_CALLDEST(2)
2-    -----||REPCAT$_REPSCHEMA(2)
<--1-  --||MVIEW$_ADV_LOG(1)
2-    -----||MVIEW$_ADV_AJG(2)
3-     --------||MVIEW$_ADV_FJG(3)
4-     -----------||MVIEW$_ADV_GC(4)
......

可以很清晰的看到显示的层级关系,有1,2,3,4 其中1是根节点,2,3,4是依赖表,4依赖3,3依赖2,依此类推。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2014-12-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档